Коллеги, добрый день!
Выкладываю для общего пользования код пользовательского свойства типа "Привязка к компании". Соответственно его можно использовать в инфоблоках (списках) и в бизнес-процессах.
Есть одна маленькая проблемка, в списках в самом списке в табличке будет выводиться ID компании (собственно такая же проблема, если использовать штатное свойство "Привязка к ИБ в виде списка", так что можно считать, что компоненты списков просто не дописаны на предмет получения текстовых значений свойств), такая же ситуация в бизнес-процессах - в списках и в карточке бп будет выводиться ID.
Собственно вот код:
[CODE]
<?
AddEventHandler('main', 'OnUserTypeBuildList', array('CUserTypeCRMCompany', 'GetUserTypeDescription'));
AddEventHandler('iblock', 'OnIBlockPropertyBuildList', array('CIBlockPropertyCRMCompany', 'GetUserTypeDescription'));
class CICRMCompanyProperty
{
function GetEditForm($value, $strHTMLControlName)
{
global $USER;
CModule::IncludeModule("crm");
$rsItem=CCrmCompany::GetList(array("TITLE"=>"ASC"));
ob_start();
?>
<select name="<?echo htmlspecialchars($strHTMLControlName["VALUE"])?>" style="width: 100%; overflow: hidden">
<option value="">(выберите)</option>
<?while($arItem=$rsItem->Fetch()):?>
<option value="<?=$arItem["ID"]?>"<?if($arItem["ID"]==intval($value['VALUE'])):?> selected<?endif?>><?=$arItem["TITLE"]?></option>
<?endwhile?>
</select>
<input type="hidden" name="<?=$strHTMLControlName["DESCRIPTION"]?>" value="123">
<?
$return = ob_get_contents();
ob_end_clean();
return $return;
}
function GetAdminListViewHTML($value)
{
static $cache = array();
$value = intVal($value["VALUE"]);
if(!array_key_exists($value, $cache))
{
CModule::IncludeModule("crm");
$rsGroup=CCrmCompany::GetList(array(), array("ID"=>$value));
$arGroup=$rsGroup->Fetch();
$cache[$value] = $arGroup;
}
$arGroup = $cache[$value];
if($arGroup)
{
return '<a href="/crm/company/show/'.$arGroup["ID"].'/">'.$arGroup["TITLE"].'</a>';
//return "[".$arGroup["ID"]."] ".htmlspecialchars($arGroup["TITLE"]);
}
else
return " ";
}
}
class CUserTypeCRMCompany extends CICRMCompanyProperty
{
function GetUserTypeDescription()
{
return array(
"USER_TYPE_ID" => "crmcompany",
"CLASS_NAME" => "CUserTypeCRMCompany",
"DESCRIPTION" => "Привязка к компании CRM",
"BASE_TYPE" => "enum",
);
}
function GetDBColumnType()
{
global $DB;
switch(strtolower($DB->type))
{
case "mysql":
return "int(18)";
case "oracle":
return "number(18)";
case "mssql":
return "int";
}
}
// function PrepareSettings($arUserField)
// {
// return $arUserField['SETTINGS'];
// }
// function GetSettingsHTML($arUserField = false, $arHtmlControl, $bVarsFromForm)
// {
// return 'Settings!';
// }
function GetEditFormHTML($arUserField, $arHtmlControl)
{
return parent::GetEditForm(array('VALUE' => $arHtmlControl['VALUE']), array('VALUE' => $arHtmlControl['NAME']));
}
// function GetFilterHTML($arUserField, $arHtmlControl)
// {
// return 'Filter!';
// }
function GetFilterHTML($arUserField, $arHtmlControl)
{
return parent::GetEditForm(array('VALUE' => $arHtmlControl['VALUE']), array('VALUE' => $arHtmlControl['NAME']));
}
function GetAdminListViewHTML($arUserField, $arHtmlControl)
{
return parent::GetAdminListViewHTML($arHtmlControl);
}
// function GetAdminListEditHTML($arUserField, $arHtmlControl)
// {
// return 'AdminListEdit';
// }
function CheckFields($arUserField, $value)
{
return array();
}
function OnSearchIndex($arUserField)
{
return $arUserField["VALUE"];
}
function GetList($arUserField)
{
CModule::IncludeModule("crm");
return CCrmCompany::GetList(array("TITLE"=>"ASC"));
}
}
class CIBlockPropertyCRMCompany extends CICRMCompanyProperty
{
function GetUserTypeDescription()
{
return array(
"PROPERTY_TYPE" => "S",
"USER_TYPE" =>"crmcompany",
"DESCRIPTION" => "Привязка к компании CRM",
"GetPropertyFieldHtml"=> array("CIBlockPropertyCRMCompany","GetPropertyFieldHtml"),
"GetAdminListViewHTML"=> array("CIBlockPropertyCRMCompany","GetAdminListViewHTML"),
"GetPublicViewHTML" => array("CIBlockPropertyCRMCompany","GetPublicViewHTML"),
"GetPublicEditHTML" => array("CIBlockPropertyCRMCompany","GetPublicEditHTML"),
"GetPublicFilterHTML" => array("CIBlockPropertyCRMCompany","GetPublicFilterHTML"),
"ConvertToDB" => array("CIBlockPropertyCRMCompany","ConvertFromToDB"),
"ConvertFromDB" => array("CIBlockPropertyCRMCompany","ConvertFromToDB"),
);
}
function GetPropertyFieldHtml($arProperty, $value, $strHTMLControlName)
{
/*if(strpos($strHTMLControlName["VALUE"], "[VALUE]"))
$strHTMLControlName["VALUE"]=str_replace("[VALUE]", "", $strHTMLControlName["VALUE"]);*/
return parent::GetEditForm($value, $strHTMLControlName);
}
function GetAdminListViewHTML($arProperty, $value, $strHTMLControlName)
{
return parent::GetAdminListViewHTML($value);
}
function ConvertFromToDB($arProperty, $value)
{
CModule::IncludeModule("crm");
$value['VALUE'] = intval($value['VALUE']);
$rsGroup=CCrmCompany::GetList(array(), array("ID"=>$value['VALUE']));
$arGroup=$rsGroup->Fetch();
if (!$arGroup)
$value['VALUE'] = false;
return $value;
}
function GetPublicViewHTML($arProperty, $value, $strHTMLControlName)
{
if(!is_array($value["VALUE"]))
$value = CIBlockPropertyCRMCompany::ConvertFromToDB($arProperty, $value);
$rsGroup=CCrmCompany::GetList(array(), array("ID"=>$value['VALUE']));
$arGroup=$rsGroup->Fetch();
if($ar)
return '<a href="/crm/company/show/'.$arGroup["ID"].'/">'.$arGroup["TITLE"].'</a>';
else
return "";
}
function GetPublicEditHTML($arProperty, $value, $strHTMLControlName)
{
return parent::GetEditForm($value, $strHTMLControlName);
}
function GetPublicFilterHTML($arUserField, $arHtmlControl)
{
CModule::IncludeModule("crm");
$rsItem=CCrmCompany::GetList(array("TITLE"=>"ASC"));
ob_start();
?>
<select name="<?echo $arHtmlControl['VALUE']?>" style="width:100%">
<option value="">(выберите)</option>
<?while($arItem=$rsItem->Fetch()):?>
<option value="<?=$arItem["ID"]?>"<?if($arItem["ID"]==$_REQUEST[$arHtmlControl['VALUE']]):?> selected<?endif?>><?=$arItem["TITLE"]?></option>
<?endwhile?>
</select>
<?
$return = ob_get_contents();
ob_end_clean();
return $return;
}
}
?>
[/CODE]
Выкладываю для общего пользования код пользовательского свойства типа "Привязка к компании". Соответственно его можно использовать в инфоблоках (списках) и в бизнес-процессах.
Есть одна маленькая проблемка, в списках в самом списке в табличке будет выводиться ID компании (собственно такая же проблема, если использовать штатное свойство "Привязка к ИБ в виде списка", так что можно считать, что компоненты списков просто не дописаны на предмет получения текстовых значений свойств), такая же ситуация в бизнес-процессах - в списках и в карточке бп будет выводиться ID.
Собственно вот код:
[CODE]
<?
AddEventHandler('main', 'OnUserTypeBuildList', array('CUserTypeCRMCompany', 'GetUserTypeDescription'));
AddEventHandler('iblock', 'OnIBlockPropertyBuildList', array('CIBlockPropertyCRMCompany', 'GetUserTypeDescription'));
class CICRMCompanyProperty
{
function GetEditForm($value, $strHTMLControlName)
{
global $USER;
CModule::IncludeModule("crm");
$rsItem=CCrmCompany::GetList(array("TITLE"=>"ASC"));
ob_start();
?>
<select name="<?echo htmlspecialchars($strHTMLControlName["VALUE"])?>" style="width: 100%; overflow: hidden">
<option value="">(выберите)</option>
<?while($arItem=$rsItem->Fetch()):?>
<option value="<?=$arItem["ID"]?>"<?if($arItem["ID"]==intval($value['VALUE'])):?> selected<?endif?>><?=$arItem["TITLE"]?></option>
<?endwhile?>
</select>
<input type="hidden" name="<?=$strHTMLControlName["DESCRIPTION"]?>" value="123">
<?
$return = ob_get_contents();
ob_end_clean();
return $return;
}
function GetAdminListViewHTML($value)
{
static $cache = array();
$value = intVal($value["VALUE"]);
if(!array_key_exists($value, $cache))
{
CModule::IncludeModule("crm");
$rsGroup=CCrmCompany::GetList(array(), array("ID"=>$value));
$arGroup=$rsGroup->Fetch();
$cache[$value] = $arGroup;
}
$arGroup = $cache[$value];
if($arGroup)
{
return '<a href="/crm/company/show/'.$arGroup["ID"].'/">'.$arGroup["TITLE"].'</a>';
//return "[".$arGroup["ID"]."] ".htmlspecialchars($arGroup["TITLE"]);
}
else
return " ";
}
}
class CUserTypeCRMCompany extends CICRMCompanyProperty
{
function GetUserTypeDescription()
{
return array(
"USER_TYPE_ID" => "crmcompany",
"CLASS_NAME" => "CUserTypeCRMCompany",
"DESCRIPTION" => "Привязка к компании CRM",
"BASE_TYPE" => "enum",
);
}
function GetDBColumnType()
{
global $DB;
switch(strtolower($DB->type))
{
case "mysql":
return "int(18)";
case "oracle":
return "number(18)";
case "mssql":
return "int";
}
}
// function PrepareSettings($arUserField)
// {
// return $arUserField['SETTINGS'];
// }
// function GetSettingsHTML($arUserField = false, $arHtmlControl, $bVarsFromForm)
// {
// return 'Settings!';
// }
function GetEditFormHTML($arUserField, $arHtmlControl)
{
return parent::GetEditForm(array('VALUE' => $arHtmlControl['VALUE']), array('VALUE' => $arHtmlControl['NAME']));
}
// function GetFilterHTML($arUserField, $arHtmlControl)
// {
// return 'Filter!';
// }
function GetFilterHTML($arUserField, $arHtmlControl)
{
return parent::GetEditForm(array('VALUE' => $arHtmlControl['VALUE']), array('VALUE' => $arHtmlControl['NAME']));
}
function GetAdminListViewHTML($arUserField, $arHtmlControl)
{
return parent::GetAdminListViewHTML($arHtmlControl);
}
// function GetAdminListEditHTML($arUserField, $arHtmlControl)
// {
// return 'AdminListEdit';
// }
function CheckFields($arUserField, $value)
{
return array();
}
function OnSearchIndex($arUserField)
{
return $arUserField["VALUE"];
}
function GetList($arUserField)
{
CModule::IncludeModule("crm");
return CCrmCompany::GetList(array("TITLE"=>"ASC"));
}
}
class CIBlockPropertyCRMCompany extends CICRMCompanyProperty
{
function GetUserTypeDescription()
{
return array(
"PROPERTY_TYPE" => "S",
"USER_TYPE" =>"crmcompany",
"DESCRIPTION" => "Привязка к компании CRM",
"GetPropertyFieldHtml"=> array("CIBlockPropertyCRMCompany","GetPropertyFieldHtml"),
"GetAdminListViewHTML"=> array("CIBlockPropertyCRMCompany","GetAdminListViewHTML"),
"GetPublicViewHTML" => array("CIBlockPropertyCRMCompany","GetPublicViewHTML"),
"GetPublicEditHTML" => array("CIBlockPropertyCRMCompany","GetPublicEditHTML"),
"GetPublicFilterHTML" => array("CIBlockPropertyCRMCompany","GetPublicFilterHTML"),
"ConvertToDB" => array("CIBlockPropertyCRMCompany","ConvertFromToDB"),
"ConvertFromDB" => array("CIBlockPropertyCRMCompany","ConvertFromToDB"),
);
}
function GetPropertyFieldHtml($arProperty, $value, $strHTMLControlName)
{
/*if(strpos($strHTMLControlName["VALUE"], "[VALUE]"))
$strHTMLControlName["VALUE"]=str_replace("[VALUE]", "", $strHTMLControlName["VALUE"]);*/
return parent::GetEditForm($value, $strHTMLControlName);
}
function GetAdminListViewHTML($arProperty, $value, $strHTMLControlName)
{
return parent::GetAdminListViewHTML($value);
}
function ConvertFromToDB($arProperty, $value)
{
CModule::IncludeModule("crm");
$value['VALUE'] = intval($value['VALUE']);
$rsGroup=CCrmCompany::GetList(array(), array("ID"=>$value['VALUE']));
$arGroup=$rsGroup->Fetch();
if (!$arGroup)
$value['VALUE'] = false;
return $value;
}
function GetPublicViewHTML($arProperty, $value, $strHTMLControlName)
{
if(!is_array($value["VALUE"]))
$value = CIBlockPropertyCRMCompany::ConvertFromToDB($arProperty, $value);
$rsGroup=CCrmCompany::GetList(array(), array("ID"=>$value['VALUE']));
$arGroup=$rsGroup->Fetch();
if($ar)
return '<a href="/crm/company/show/'.$arGroup["ID"].'/">'.$arGroup["TITLE"].'</a>';
else
return "";
}
function GetPublicEditHTML($arProperty, $value, $strHTMLControlName)
{
return parent::GetEditForm($value, $strHTMLControlName);
}
function GetPublicFilterHTML($arUserField, $arHtmlControl)
{
CModule::IncludeModule("crm");
$rsItem=CCrmCompany::GetList(array("TITLE"=>"ASC"));
ob_start();
?>
<select name="<?echo $arHtmlControl['VALUE']?>" style="width:100%">
<option value="">(выберите)</option>
<?while($arItem=$rsItem->Fetch()):?>
<option value="<?=$arItem["ID"]?>"<?if($arItem["ID"]==$_REQUEST[$arHtmlControl['VALUE']]):?> selected<?endif?>><?=$arItem["TITLE"]?></option>
<?endwhile?>
</select>
<?
$return = ob_get_contents();
ob_end_clean();
return $return;
}
}
?>
[/CODE]