Коллеги, добрый день!
Выкладываю для общего пользования код пользовательского свойства типа "Привязка к компании". Соответственно его можно использовать в инфоблоках (списках) и в бизнес-процессах.
Есть одна маленькая проблемка, в списках в самом списке в табличке будет выводиться ID компании (собственно такая же проблема, если использовать штатное свойство "Привязка к ИБ в виде списка", так что можно считать, что компоненты списков просто не дописаны на предмет получения текстовых значений свойств), такая же ситуация в бизнес-процессах - в списках и в карточке бп будет выводиться ID.
Собственно вот код:
Выкладываю для общего пользования код пользовательского свойства типа "Привязка к компании". Соответственно его можно использовать в инфоблоках (списках) и в бизнес-процессах.
Есть одна маленькая проблемка, в списках в самом списке в табличке будет выводиться ID компании (собственно такая же проблема, если использовать штатное свойство "Привязка к ИБ в виде списка", так что можно считать, что компоненты списков просто не дописаны на предмет получения текстовых значений свойств), такая же ситуация в бизнес-процессах - в списках и в карточке бп будет выводиться ID.
Собственно вот код:
Код |
---|
<? 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; } } ?> |