function addValueToList($field, $entity, $props) { $raw = CUserTypeEntity::GetList(array($by => $order), array('FIELD_NAME' => $field, 'ENTITY_ID' => $entity))->Fetch(); $fields = array(); $enum = CUserFieldEnum::GetList(array(), array("USER_FIELD_ID" => $raw['ID'])); while ($el = $enum->GetNext()) { $fields[$el['XML_ID']] = $el; } if (!isset($fields[$props['XML_ID']])) { $obEnum = new CUserFieldEnum(); $obEnum->SetEnumValues($raw['ID'], array("n0" => $props)); } }
function InstallDBUserFields() { $ImportantUserFields = $this->GetIdeaUserFields(); foreach ($ImportantUserFields as $UserFieldName => $Exists) { if (!$Exists) { $UserType = new CUserTypeEntity(); switch ($UserFieldName) { case "UF_CATEGORY_CODE": $UserType->Add(array("ENTITY_ID" => "BLOG_POST", "FIELD_NAME" => $UserFieldName, "USER_TYPE_ID" => "string", "IS_SEARCHABLE" => "N", "EDIT_FORM_LABEL" => array(LANGUAGE_ID => GetMessage("IDEA_UF_CATEGORY_CODE_DESCRIPTION")))); break; case "UF_ANSWER_ID": $UserType->Add(array("ENTITY_ID" => "BLOG_POST", "FIELD_NAME" => $UserFieldName, "USER_TYPE_ID" => "integer", "IS_SEARCHABLE" => "N", "MULTIPLE" => "Y", "EDIT_FORM_LABEL" => array(LANGUAGE_ID => GetMessage("IDEA_UF_ANSWER_ID_DESCRIPTION")))); break; case "UF_ORIGINAL_ID": $UserType->Add(array("ENTITY_ID" => "BLOG_POST", "FIELD_NAME" => $UserFieldName, "USER_TYPE_ID" => "string", "IS_SEARCHABLE" => "N", "EDIT_FORM_LABEL" => array(LANGUAGE_ID => GetMessage("IDEA_UF_ORIGINAL_ID_DESCRIPTION")))); break; case "UF_STATUS": $ID = $UserType->Add(array("ENTITY_ID" => "BLOG_POST", "FIELD_NAME" => $UserFieldName, "USER_TYPE_ID" => "enumeration", "IS_SEARCHABLE" => "N", "EDIT_FORM_LABEL" => array(LANGUAGE_ID => GetMessage("IDEA_UF_STATUS_DESCRIPTION")))); if (intval($ID) > 0) { $UserTypeEnum = new CUserFieldEnum(); $UserTypeEnum->SetEnumValues($ID, array("n0" => array("SORT" => 100, "XML_ID" => "NEW", "VALUE" => GetMessage("IDEA_UF_STATUS_NEW_TITLE"), "DEF" => "Y"), "n1" => array("SORT" => 200, "XML_ID" => "PROCESSING", "VALUE" => GetMessage("IDEA_UF_STATUS_PROCESSING_TITLE"), "DEF" => "N"), "n2" => array("SORT" => 300, "XML_ID" => "COMPLETED", "VALUE" => GetMessage("IDEA_UF_STATUS_COMPLETED_TITLE"), "DEF" => "N"))); } break; } } } }
/** * Возвращает список значений поля типа список * @return array */ public static function getUserFieldEnum($entity) { if (!isset(self::$_uf_enum[$entity])) { self::$_uf_enum[$entity] = array(); $array = array(); $rsData = \CUserFieldEnum::GetList(array(), ['USER_FIELD_ID' => $entity]); while ($ob = $rsData->Fetch()) { self::$_uf_enum[$entity][] = $ob; } } return self::$_uf_enum[$entity]; }
foreach ($arResult['ITEMS'] as &$arItem) { if (is_array($arItem['PREVIEW_PICTURE'])) { $file = CFile::ResizeImageGet($arItem['PREVIEW_PICTURE'], array('width' => 124, 'height' => 167), BX_RESIZE_IMAGE_EXACT, true); $arItem['RESIZE_PICTURE'] = array_change_key_case($file, CASE_UPPER); $arItem['HAS_PIC'] = 'Y'; } $hlblock = \Bitrix\Highloadblock\HighloadBlockTable::getList(array("filter" => array('TABLE_NAME' => $arItem['PROPERTIES']['BG']['USER_TYPE_SETTINGS']['TABLE_NAME'])))->fetch(); if (!isset($hlblock['ID'])) { continue; } $entity = \Bitrix\Highloadblock\HighloadBlockTable::compileEntity($hlblock); $entity_data_class = $entity->getDataClass(); $rsPropEnums = $entity_data_class::getList(array('select' => array('ID', 'UF_NAME', 'UF_FILE', 'UF_TYPE'), 'filter' => array('UF_XML_ID' => $arItem['PROPERTIES']['BG']['VALUE']), 'order' => array('ID' => 'ASC'), 'limit' => 100)); while ($arEnum = $rsPropEnums->fetch()) { if ($arEnum["UF_TYPE"]) { $rsGender = CUserFieldEnum::GetList(array(), array("ID" => $arEnum["UF_TYPE"])); if ($arGender = $rsGender->GetNext()) { $arItem['BG_TYPE'] = $arGender["XML_ID"]; } } $arItem['PROPERTIES']['BG']['BG_SRC'] = CFile::GetPath($arEnum['UF_FILE']); } $arResult['ACTION_END'][$arItem['ID']] = $arItem["DATE_ACTIVE_TO"]; $seconds = strtotime($arItem["DATE_ACTIVE_TO"]) - time(); if ($seconds > 0) { $dt = new DateTime('@' . $seconds, new DateTimeZone('UTC')); $arItem['ACTION_END'] = $dt->format('z'); } } $cp = $this->__component; if (is_object($cp)) {
public static function GetDocument($documentId) { $arDocumentID = self::GetDocumentInfo($documentId); if (empty($arDocumentID)) { throw new CBPArgumentNullException('documentId'); } $arResult = null; switch ($arDocumentID['TYPE']) { case 'CONTACT': $dbDocumentList = CCrmContact::GetListEx(array(), array('ID' => $arDocumentID['ID'], "CHECK_PERMISSIONS" => "N"), false, false, array('*', 'UF_*')); break; case 'COMPANY': $dbDocumentList = CCrmCompany::GetListEx(array(), array('ID' => $arDocumentID['ID'], 'CHECK_PERMISSIONS' => 'N'), false, false, array('*', 'UF_*')); break; case 'DEAL': $dbDocumentList = CCrmDeal::GetListEx(array(), array('ID' => $arDocumentID['ID'], "CHECK_PERMISSIONS" => "N"), false, false, array('*', 'UF_*')); break; case 'LEAD': $dbDocumentList = CCrmLead::GetListEx(array(), array('ID' => $arDocumentID['ID'], "CHECK_PERMISSIONS" => "N"), false, false, array('*', 'UF_*')); break; } if (($objDocument = $dbDocumentList->Fetch()) !== false) { $assignedByID = isset($objDocument['ASSIGNED_BY_ID']) ? intval($objDocument['ASSIGNED_BY_ID']) : 0; if ($assignedByID > 0) { $dbUsers = CUser::GetList($sortBy = 'id', $sortOrder = 'asc', array('ID' => $assignedByID), array('SELECT' => array('EMAIL'))); $arUser = is_object($dbUsers) ? $dbUsers->Fetch() : null; $objDocument['ASSIGNED_BY_EMAIL'] = is_array($arUser) ? $arUser['EMAIL'] : ''; } $arUserField = array('CREATED_BY', 'CREATED_BY_ID', 'MODIFY_BY', 'MODIFY_BY_ID', 'ASSIGNED_BY', 'ASSIGNED_BY_ID'); foreach ($arUserField as $sField) { if (isset($objDocument[$sField])) { $objDocument[$sField] = 'user_' . $objDocument[$sField]; } } if (COption::GetOptionString('crm', 'bp_version', 2) == 2) { $userFieldsList = null; switch ($arDocumentID['TYPE']) { case 'CONTACT': $userFieldsList = CCrmContact::GetUserFields(); break; case 'COMPANY': $userFieldsList = CCrmCompany::GetUserFields(); break; case 'DEAL': $userFieldsList = CCrmDeal::GetUserFields(); break; case 'LEAD': $userFieldsList = CCrmLead::GetUserFields(); break; } if (is_array($userFieldsList)) { foreach ($userFieldsList as $userFieldName => $userFieldParams) { if (!isset($objDocument[$userFieldName])) { $objDocument[$userFieldName] = $objDocument[$userFieldName . '_PRINTABLE'] = ''; continue; } $fieldValue = $objDocument[$userFieldName]; $fieldTypeID = isset($userFieldParams['USER_TYPE']) ? $userFieldParams['USER_TYPE']['USER_TYPE_ID'] : ''; $isFieldMultiple = isset($userFieldParams['MULTIPLE']) && $userFieldParams['MULTIPLE'] === 'Y'; $fieldSettings = isset($userFieldParams['SETTINGS']) ? $userFieldParams['SETTINGS'] : array(); if ($fieldTypeID == 'employee') { if (!$isFieldMultiple) { $objDocument[$userFieldName] = 'user_' . $fieldValue; } else { $objDocument[$userFieldName] = array(); foreach ($fieldValue as $value) { $objDocument[$userFieldName][] = 'user_' . $value; } } } elseif ($fieldTypeID == 'crm') { $defaultTypeName = ''; foreach ($fieldSettings as $typeName => $flag) { if ($flag === 'Y') { $defaultTypeName = $typeName; break; } } if (!$isFieldMultiple) { $objDocument[$userFieldName . '_PRINTABLE'] = self::PrepareCrmUserTypeValueView($fieldValue, $defaultTypeName); } else { $views = array(); foreach ($fieldValue as $value) { $views[] = self::PrepareCrmUserTypeValueView($value, $defaultTypeName); } $objDocument[$userFieldName . '_PRINTABLE'] = $views; } } elseif ($fieldTypeID == 'enumeration') { $valueInfos = array(); if (!empty($fieldValue)) { $dbRes = CUserFieldEnum::GetList(array(), array('ID' => $fieldValue)); while ($valueData = $dbRes->Fetch()) { $valueInfos[] = array('NAME' => $valueData['XML_ID'], 'LABEL' => $valueData['VALUE']); } } $valueInfoQty = count($valueInfos); if ($valueInfoQty === 0) { $objDocument[$userFieldName] = $objDocument[$userFieldName . '_PRINTABLE'] = ''; } elseif ($valueInfoQty === 1) { $valueInfo = $valueInfos[0]; $objDocument[$userFieldName] = $valueInfo['NAME']; $objDocument[$userFieldName . '_PRINTABLE'] = $valueInfo['LABEL']; } else { $names = array(); $labels = array(); foreach ($valueInfos as &$valueInfo) { $names[] = $valueInfo['NAME']; $labels[] = $valueInfo['LABEL']; } unset($valueInfo); $objDocument[$userFieldName] = $names; $objDocument[$userFieldName . '_PRINTABLE'] = implode(', ', $labels); } } elseif ($fieldTypeID === 'boolean') { //Convert UF boolean values (1/0) in to bizproc boolean values (Y/N) is display type checkbox if (isset($fieldSettings['DISPLAY']) && $fieldSettings['DISPLAY'] === 'CHECKBOX') { $objDocument[$userFieldName] = $fieldValue > 0 ? 'Y' : 'N'; } $objDocument[$userFieldName . '_PRINTABLE'] = GetMessage($fieldValue > 0 ? 'MAIN_YES' : 'MAIN_NO'); } } } } $res = CCrmFieldMulti::GetList(array('ID' => 'asc'), array('ENTITY_ID' => $arDocumentID['TYPE'], 'ELEMENT_ID' => $arDocumentID['ID'])); while ($ar = $res->Fetch()) { if (!isset($objDocument[$ar['TYPE_ID']])) { $objDocument[$ar['TYPE_ID']] = array(); } $objDocument[$ar['TYPE_ID']]['n0' . $ar['ID']] = array('VALUE' => $ar['VALUE'], 'VALUE_TYPE' => $ar['VALUE_TYPE']); if (!isset($objDocument[$ar['TYPE_ID'] . "_" . $ar['VALUE_TYPE']])) { $objDocument[$ar['TYPE_ID'] . "_" . $ar['VALUE_TYPE']] = array(); } $objDocument[$ar['TYPE_ID'] . "_" . $ar['VALUE_TYPE']][] = $ar['VALUE']; if (!isset($objDocument[$ar['TYPE_ID'] . "_" . $ar['VALUE_TYPE'] . "_PRINTABLE"])) { $objDocument[$ar['TYPE_ID'] . "_" . $ar['VALUE_TYPE'] . "_PRINTABLE"] = ""; } $objDocument[$ar['TYPE_ID'] . "_" . $ar['VALUE_TYPE'] . "_PRINTABLE"] .= (strlen($objDocument[$ar['TYPE_ID'] . "_" . $ar['VALUE_TYPE'] . "_PRINTABLE"]) > 0 ? ", " : "") . $ar['VALUE']; if (!isset($objDocument[$ar['TYPE_ID'] . "_PRINTABLE"])) { $objDocument[$ar['TYPE_ID'] . "_PRINTABLE"] = ""; } $objDocument[$ar['TYPE_ID'] . "_PRINTABLE"] .= (strlen($objDocument[$ar['TYPE_ID'] . "_PRINTABLE"]) > 0 ? ", " : "") . $ar['VALUE']; } $multiFieldTypes = CCrmFieldMulti::GetEntityTypeList(); foreach ($multiFieldTypes as $typeId => $arFields) { if (!isset($objDocument[$typeId])) { $objDocument[$typeId] = array(); } $printableFieldName = $typeId . '_PRINTABLE'; if (!isset($objDocument[$printableFieldName])) { $objDocument[$printableFieldName] = ''; } foreach ($arFields as $valueType => $valueName) { $fieldName = $typeId . '_' . $valueType; if (!isset($objDocument[$fieldName])) { $objDocument[$fieldName] = array(''); } $printableFieldName = $fieldName . '_PRINTABLE'; if (!isset($objDocument[$printableFieldName])) { $objDocument[$printableFieldName] = ''; } } } // Preparation of user names --> $nameFormat = CSite::GetNameFormat(false); if (isset($objDocument['ASSIGNED_BY_ID'])) { $objDocument['ASSIGNED_BY_PRINTABLE'] = CUser::FormatName($nameFormat, array('LOGIN' => isset($objDocument['ASSIGNED_BY_LOGIN']) ? $objDocument['ASSIGNED_BY_LOGIN'] : '', 'NAME' => isset($objDocument['ASSIGNED_BY_NAME']) ? $objDocument['ASSIGNED_BY_NAME'] : '', 'LAST_NAME' => isset($objDocument['ASSIGNED_BY_LAST_NAME']) ? $objDocument['ASSIGNED_BY_LAST_NAME'] : '', 'SECOND_NAME' => isset($objDocument['ASSIGNED_BY_SECOND_NAME']) ? $objDocument['ASSIGNED_BY_SECOND_NAME'] : ''), true, false); } if (isset($objDocument['CREATED_BY_ID'])) { $objDocument['CREATED_BY_PRINTABLE'] = CUser::FormatName($nameFormat, array('LOGIN' => isset($objDocument['CREATED_BY_LOGIN']) ? $objDocument['CREATED_BY_LOGIN'] : '', 'NAME' => isset($objDocument['CREATED_BY_NAME']) ? $objDocument['CREATED_BY_NAME'] : '', 'LAST_NAME' => isset($objDocument['CREATED_BY_LAST_NAME']) ? $objDocument['CREATED_BY_LAST_NAME'] : '', 'SECOND_NAME' => isset($objDocument['CREATED_BY_SECOND_NAME']) ? $objDocument['CREATED_BY_SECOND_NAME'] : ''), true, false); } // <-- Preparation of user names switch ($arDocumentID['TYPE']) { case 'DEAL': CCrmDocumentDeal::PrepareDocument($objDocument); break; case 'LEAD': CCrmDocumentLead::PrepareDocument($objDocument); break; case 'CONTACT': CCrmDocumentContact::PrepareDocument($objDocument); break; } return $objDocument; } return null; }
foreach ($arUserFields as $arFields) { $dbRes = CUserTypeEntity::GetList(array(), array("ENTITY_ID" => $arFields["ENTITY_ID"], "FIELD_NAME" => $arFields["FIELD_NAME"])); if ($dbRes->Fetch()) { continue; } $arLabelNames = array(); foreach ($arLanguages as $languageID) { WizardServices::IncludeServiceLang("references.php", $languageID); $arLabelNames[$languageID] = GetMessage($arFields["FIELD_NAME"]); } $arFields["EDIT_FORM_LABEL"] = $arLabelNames; $arFields["LIST_COLUMN_LABEL"] = $arLabelNames; $arFields["LIST_FILTER_LABEL"] = $arLabelNames; $ID_USER_FIELD = $obUserField->Add($arFields); if ($arFields['FIELD_NAME'] == 'UF_TYPE') { $obEnum = new CUserFieldEnum(); $obEnum->SetEnumValues($ID_USER_FIELD, array('n0' => array('VALUE' => GetMessage('UF_TYPE_sv'), 'USER_FIELD_ID' => $ID_USER_FIELD, 'DEF' => 'N', 'SORT' => 100, 'XML_ID' => 'sv'), 'n1' => array('VALUE' => GetMessage('UF_TYPE_tm'), 'USER_FIELD_ID' => $ID_USER_FIELD, 'DEF' => 'N', 'SORT' => 200, 'XML_ID' => 'tm'))); } } } $dbHblock = HL\HighloadBlockTable::getList(array("filter" => array("TABLE_NAME" => "backgrounddet"))); $br = $dbHblock->Fetch(); if (!$br) { $data = array('NAME' => 'BackgroundDet', 'TABLE_NAME' => 'backgrounddet'); $result = HL\HighloadBlockTable::add($data); $ID = $result->getId(); $_SESSION["YOUSTORE_HBLOCK_DBACK_ID"] = $ID; $hldata = HL\HighloadBlockTable::getById($ID)->fetch(); $hlentity = HL\HighloadBlockTable::compileEntity($hldata); //adding user fields $arUserFields = array(array('ENTITY_ID' => 'HLBLOCK_' . $ID, 'FIELD_NAME' => 'UF_NAME', 'USER_TYPE_ID' => 'string', 'XML_ID' => 'UF_DBACK_NAME', 'SORT' => '100', 'MULTIPLE' => 'N', 'MANDATORY' => 'N', 'SHOW_FILTER' => 'N', 'SHOW_IN_LIST' => 'Y', 'EDIT_IN_LIST' => 'Y', 'IS_SEARCHABLE' => 'Y'), array('ENTITY_ID' => 'HLBLOCK_' . $ID, 'FIELD_NAME' => 'UF_FILE', 'USER_TYPE_ID' => 'file', 'XML_ID' => 'UF_DBACK_FILE', 'SORT' => '200', 'MULTIPLE' => 'N', 'MANDATORY' => 'N', 'SHOW_FILTER' => 'N', 'SHOW_IN_LIST' => 'Y', 'EDIT_IN_LIST' => 'Y', 'IS_SEARCHABLE' => 'Y'), array('ENTITY_ID' => 'HLBLOCK_' . $ID, 'FIELD_NAME' => 'UF_LINK', 'USER_TYPE_ID' => 'string', 'XML_ID' => 'UF_DBACK_LINK', 'SORT' => '300', 'MULTIPLE' => 'N', 'MANDATORY' => 'N', 'SHOW_FILTER' => 'N', 'SHOW_IN_LIST' => 'Y', 'EDIT_IN_LIST' => 'Y', 'IS_SEARCHABLE' => 'Y'), array('ENTITY_ID' => 'HLBLOCK_' . $ID, 'FIELD_NAME' => 'UF_DESCRIPTION', 'USER_TYPE_ID' => 'string', 'XML_ID' => 'UF_DBACK_DESCR', 'SORT' => '400', 'MULTIPLE' => 'N', 'MANDATORY' => 'N', 'SHOW_FILTER' => 'N', 'SHOW_IN_LIST' => 'Y', 'EDIT_IN_LIST' => 'Y', 'IS_SEARCHABLE' => 'Y'), array('ENTITY_ID' => 'HLBLOCK_' . $ID, 'FIELD_NAME' => 'UF_FULL_DESCRIPTION', 'USER_TYPE_ID' => 'string', 'XML_ID' => 'UF_DBACK_FULL_DESCR', 'SORT' => '500', 'MULTIPLE' => 'N', 'MANDATORY' => 'N', 'SHOW_FILTER' => 'N', 'SHOW_IN_LIST' => 'Y', 'EDIT_IN_LIST' => 'Y', 'IS_SEARCHABLE' => 'Y'), array('ENTITY_ID' => 'HLBLOCK_' . $ID, 'FIELD_NAME' => 'UF_SORT', 'USER_TYPE_ID' => 'double', 'XML_ID' => 'UF_DBACK_SORT', 'SORT' => '600', 'MULTIPLE' => 'N', 'MANDATORY' => 'N', 'SHOW_FILTER' => 'N', 'SHOW_IN_LIST' => 'Y', 'EDIT_IN_LIST' => 'Y', 'IS_SEARCHABLE' => 'N'), array('ENTITY_ID' => 'HLBLOCK_' . $ID, 'FIELD_NAME' => 'UF_EXTERNAL_CODE', 'USER_TYPE_ID' => 'string', 'XML_ID' => 'UF_DBACK_EXTERNAL_CODE', 'SORT' => '700', 'MULTIPLE' => 'N', 'MANDATORY' => 'N', 'SHOW_FILTER' => 'N', 'SHOW_IN_LIST' => 'Y', 'EDIT_IN_LIST' => 'Y', 'IS_SEARCHABLE' => 'N'), array('ENTITY_ID' => 'HLBLOCK_' . $ID, 'FIELD_NAME' => 'UF_XML_ID', 'USER_TYPE_ID' => 'string', 'XML_ID' => 'UF_DBACK_XML_ID', 'SORT' => '800', 'MULTIPLE' => 'N', 'MANDATORY' => 'Y', 'SHOW_FILTER' => 'N', 'SHOW_IN_LIST' => 'Y', 'EDIT_IN_LIST' => 'Y', 'IS_SEARCHABLE' => 'N'));
function ExportEnum($arUserField, $value) { static $cache = array(); if (!isset($cache[$value])) { $obEnum = new CUserFieldEnum(); $rsEnum = $obEnum->GetList(array(), array("USER_FIELD_ID" => $arUserField["ID"], "ID" => $value)); $cache[$value] = $rsEnum->Fetch(); } return $cache[$value]["XML_ID"]; }
/** * Функция удаляет пользовательское свойство и все его значения. * * <p>Сначала удаляются метаданные свойства.</p> * <p>Затем из таблички вида <b>b_utm_[ENTITY_ID]</b> удаляются все значения множественных свойств.</p> * <p>После чего у таблички вида <b>b_uts_[ENTITY_ID]</b> дропается колонка.</p> * <p>И если это было "последнее" свойство для сущности, то дропаются сами таблички хранившие значения.</p> * @param array $ID идентификатор свойства * @return CDBResult - результат выполнения последнего запроса функции. */ function Delete($ID) { global $DB, $CACHE_MANAGER, $USER_FIELD_MANAGER, $APPLICATION; $ID = intval($ID); $rs = $this->GetList(array(), array("ID"=>$ID)); if($arField = $rs->Fetch()) { /** * events * PROVIDE_STORAGE - use own uf subsystem to store data (uts/utm tables) */ $commonEventResult = array('PROVIDE_STORAGE' => true); foreach (GetModuleEvents("main", "OnBeforeUserTypeDelete", true) as $arEvent) { $eventResult = ExecuteModuleEventEx($arEvent, array(&$arField)); if ($eventResult ===false) { if($e = $APPLICATION->GetException()) { return false; } $aMsg = array(); $aMsg[] = array( "id"=>"FIELD_NAME", "text"=>GetMessage("USER_TYPE_DELETE_ERROR", array( "#FIELD_NAME#"=>htmlspecialcharsbx($arField["FIELD_NAME"]), "#ENTITY_ID#"=>htmlspecialcharsbx($arField["ENTITY_ID"]), )) ); $e = new CAdminException($aMsg); $APPLICATION->ThrowException($e); return false; } elseif (is_array($eventResult)) { $commonEventResult = array_merge($commonEventResult, $eventResult); } } if(is_object($USER_FIELD_MANAGER)) $USER_FIELD_MANAGER->CleanCache(); $arType = $USER_FIELD_MANAGER->GetUserType($arField["USER_TYPE_ID"]); //We need special handling of file type properties if($arType) { if($arType["BASE_TYPE"]=="file" && $commonEventResult['PROVIDE_STORAGE']) { // only if we store values if($arField["MULTIPLE"] == "Y") $strSql = "SELECT VALUE_INT VALUE FROM b_utm_".strtolower($arField["ENTITY_ID"])." WHERE FIELD_ID=".$arField["ID"]; else $strSql = "SELECT ".$arField["FIELD_NAME"]." VALUE FROM b_uts_".strtolower($arField["ENTITY_ID"]); $rsFile = $DB->Query($strSql, false, "FILE: ".__FILE__."<br>LINE: ".__LINE__); while($arFile = $rsFile->Fetch()) { CFile::Delete($arFile["VALUE"]); } } elseif($arType["BASE_TYPE"]=="enum") { $obEnum = new CUserFieldEnum; $obEnum->DeleteFieldEnum($arField["ID"]); } } if(CACHED_b_user_field!==false) $CACHE_MANAGER->CleanDir("b_user_field"); $rs = $DB->Query("DELETE FROM b_user_field_lang WHERE USER_FIELD_ID = ".$ID, false, "FILE: ".__FILE__."<br>LINE: ".__LINE__); if($rs) $rs = $DB->Query("DELETE FROM b_user_field WHERE ID = ".$ID, false, "FILE: ".__FILE__."<br>LINE: ".__LINE__); if($rs && $commonEventResult['PROVIDE_STORAGE']) { // only if we store values $rs = $this->GetList(array(), array("ENTITY_ID" => $arField["ENTITY_ID"])); if($rs->Fetch()) // more than one { foreach($this->DropColumnSQL("b_uts_".strtolower($arField["ENTITY_ID"]), array($arField["FIELD_NAME"])) as $strSql) $DB->Query($strSql, false, "FILE: ".__FILE__."<br>LINE: ".__LINE__); $rs = $DB->Query("DELETE FROM b_utm_".strtolower($arField["ENTITY_ID"])." WHERE FIELD_ID = '".$ID."'", false, "FILE: ".__FILE__."<br>LINE: ".__LINE__); } else { $DB->Query("DROP SEQUENCE SQ_B_UTM_".$arField["ENTITY_ID"], true); $DB->Query("DROP TABLE b_uts_".strtolower($arField["ENTITY_ID"]), false, "FILE: ".__FILE__."<br>LINE: ".__LINE__); $rs = $DB->Query("DROP TABLE b_utm_".strtolower($arField["ENTITY_ID"]), false, "FILE: ".__FILE__."<br>LINE: ".__LINE__); } } } return $rs; }
if (is_array($arCategory["ID"]) && !empty($arCategory["ID"])) { //UF value for filter $arParams["EXT_FILTER"][CIdeaManagment::UFCategroryCodeField] = $arCategory["CODE"]; } else { CHTTP::SetStatus("404 Not Found"); ShowError(GetMessage("IDEA_CATEGORY_NOT_EXISTS")); return; } unset($arParams["EXT_FILTER"]["IDEA_PARENT_CATEGORY_CODE"]); } elseif (array_key_exists("IDEA_CATEGORY_CODE", $arParams["EXT_FILTER"]) && strlen($arParams["EXT_FILTER"]["IDEA_CATEGORY_CODE"]) > 0) { $arParams["EXT_FILTER"][CIdeaManagment::UFCategroryCodeField] = $arParams["EXT_FILTER"]["IDEA_CATEGORY_CODE"]; } //end prepare ExtFilter //prepare ExtFilter - Child|Total ::@Idea if (array_key_exists("IDEA_STATUS", $arParams["EXT_FILTER"]) && strlen($arParams["EXT_FILTER"]["IDEA_STATUS"]) > 0) { if ($arStatusField = CUserFieldEnum::GetList(array(), array("USER_FIELD_NAME" => CIdeaManagment::UFStatusField, "XML_ID" => $arParams["EXT_FILTER"]["IDEA_STATUS"]))->Fetch()) { //UF value for filter $arParams["EXT_FILTER"][CIdeaManagment::UFStatusField] = $arStatusField["ID"]; } else { CHTTP::SetStatus("404 Not Found"); ShowError(GetMessage("IDEA_STATUS_NOT_EXISTS")); return; } } $arParams["MESSAGE_COUNT"] = IntVal($arParams["MESSAGE_COUNT"]) > 0 ? IntVal($arParams["MESSAGE_COUNT"]) : 20; $arParams["SORT_BY1"] = strlen($arParams["SORT_BY1"]) > 0 ? $arParams["SORT_BY1"] : "DATE_PUBLISH"; $arParams["SORT_ORDER1"] = strlen($arParams["SORT_ORDER1"]) > 0 ? $arParams["SORT_ORDER1"] : "DESC"; $arParams["SORT_BY2"] = strlen($arParams["SORT_BY2"]) > 0 ? $arParams["SORT_BY2"] : "ID"; $arParams["SORT_ORDER2"] = strlen($arParams["SORT_ORDER2"]) > 0 ? $arParams["SORT_ORDER2"] : "DESC"; $arParams["BLOG_URL"] = preg_replace("/[^a-zA-Z0-9_-]/is", "", Trim($arParams["BLOG_URL"])); $arParams["YEAR"] = IntVal($arParams["YEAR"]) > 0 ? IntVal($arParams["YEAR"]) : false;
$editable = $enableInstantEdit && isset($arUserField['EDIT_IN_LIST']) && $arUserField['EDIT_IN_LIST'] === 'Y'; if ($arUserField['MULTIPLE'] === 'Y') { continue; } $userTypeID = $arUserField['USER_TYPE']['USER_TYPE_ID']; $value = isset($arUserField['VALUE']) ? $arUserField['VALUE'] : ''; $caption = isset($formFieldNames[$fieldName]) ? $formFieldNames[$fieldName] : ''; if ($caption === '') { $caption = isset($arUserField['EDIT_FORM_LABEL']) ? $arUserField['EDIT_FORM_LABEL'] : $fieldName; } if ($userTypeID === 'string' || $userTypeID === 'integer' || $userTypeID === 'double' || $userTypeID === 'datetime') { $entityData[$fieldName] = array('type' => $userTypeID === 'datetime' ? 'datetime' : 'text', 'editable' => $editable, 'caption' => $caption, 'data' => array('text' => $value, 'multiline' => $userTypeID === 'string')); } elseif ($userTypeID === 'enumeration') { $text = ""; $enums = array(); $enumEntity = new CUserFieldEnum(); $dbResultEnum = $enumEntity->GetList(array('SORT' => 'ASC'), array('USER_FIELD_ID' => $arUserField['ID'])); while ($enum = $dbResultEnum->Fetch()) { $enums[] = array('ID' => $enum['ID'], 'VALUE' => $enum['VALUE']); if ($text === '' && $value !== '' && $value === $enum['ID']) { $text = $enum['VALUE']; } } $entityData[$fieldName] = array('type' => 'enumeration', 'editable' => $editable, 'caption' => $caption, 'data' => array('value' => $value, 'text' => $text, 'items' => $enums)); } elseif ($userTypeID === 'boolean') { $entityData[$fieldName] = array('type' => 'boolean', 'editable' => $editable, 'caption' => $caption, 'data' => array('baseType' => 'int', 'value' => $value)); } } unset($arUserField); } $arResult['ENTITY_DATA'] = $entityData;
public static function GetIBUF($BID, $CODE = false) { global $USER_FIELD_MANAGER, $APPLICATION; $arReturn = array(); $arUserFields = $USER_FIELD_MANAGER->GetUserFields(CASDiblock::$UF_IBLOCK, $BID, LANGUAGE_ID); foreach ($arUserFields as $FIELD_NAME => $arUserField) { if ($arUserField['USER_TYPE_ID'] == 'enumeration') { $arValue = array(); $rsSecEnum = CUserFieldEnum::GetList(array('SORT' => 'ASC', 'ID' => 'ASC'), array('USER_FIELD_ID' => $arUserField['ID'], 'ID' => $arUserField['VALUE'])); while ($arSecEnum = $rsSecEnum->Fetch()) { $arValue[$arSecEnum['ID']] = $arSecEnum['VALUE']; } $arReturn[$FIELD_NAME] = $arValue; } else { $arReturn[$FIELD_NAME] = $arUserField['VALUE']; } } return $CODE === false ? $arReturn : $arReturn[$CODE]; }
function getEnumValues($fieldId) { $obj = new CUserFieldEnum(); $list = $obj->GetList(array(), array("USER_FIELD_ID" => $fieldId)); while ($el = $list->Fetch()) { $result[$el["ID"]] = $el; } return $result; }
<?if($itemsCnt):?> <!-- noindex --> <div class="row filters-wrap"> <? if($arResult['VARIABLES']['SECTION_ID']){ $arSectiontmp = CIBlockSection::GetList(array(), array('IBLOCK_ID' => $arParams['IBLOCK_ID'], 'ID' => $arResult['VARIABLES']['SECTION_ID']), false, array('ID', 'UF_VIEWTYPE'))->GetNext(); } elseif($arResult['VARIABLES']['SECTION_CODE']){ $arSectiontmp = CIBlockSection::GetList(array(), array('IBLOCK_ID' => $arParams['IBLOCK_ID'], 'CODE' => $arResult['VARIABLES']['SECTION_CODE']), false, array('ID', 'UF_VIEWTYPE'))->GetNext(); } if($_SESSION['UF_VIEWTYPE_'.$arParams['IBLOCK_ID']] === NULL){ $arUserFieldViewType = CUserTypeEntity::GetList(array(), array('ENTITY_ID' => 'IBLOCK_'.$arParams['IBLOCK_ID'].'_SECTION', 'FIELD_NAME' => 'UF_VIEWTYPE'))->Fetch(); $resUserFieldViewTypeEnum = CUserFieldEnum::GetList(array(), array('USER_FIELD_ID' => $arUserFieldViewType['ID'])); while($arUserFieldViewTypeEnum = $resUserFieldViewTypeEnum->GetNext()){ $_SESSION['UF_VIEWTYPE_'.$arParams['IBLOCK_ID']][$arUserFieldViewTypeEnum['ID']] = $arUserFieldViewTypeEnum['XML_ID']; } } $sort_default = $arParams['SORT_PROP_DEFAULT'] ? $arParams['SORT_PROP_DEFAULT'] : 'name'; $order_default = $arParams['SORT_DIRECTION'] ? $arParams['SORT_DIRECTION'] : 'asc'; $arAvailableSort = array( 'name' => array( 'SORT' => 'NAME', 'ORDER_VALUES' => array( 'asc' => GetMessage('sort_title').GetMessage('sort_name_asc'), 'desc' => GetMessage('sort_title').GetMessage('sort_name_desc'), ), ), 'sort' => array(
public function UpdateField($ID, $arField) { $obUserField = new CUserTypeEntity(); $res = $obUserField->Update($ID, $arField); if ($res && $arField['USER_TYPE_ID'] == 'enumeration' && is_array($arField['LIST'])) { $obEnum = new CUserFieldEnum(); $res = $obEnum->SetEnumValues($ID, $arField['LIST']); } $this->arUFList = $this->GetUserFields($this->sUFEntityID, 0, LANGUAGE_ID); return $res; }
protected function migrateCustomElementProperties($iblockId, $entityNewName) { $iblockId = (int) $iblockId; $VERSION = \CIBlockElement::GetIBVersion($iblockId); if ($VERSION == 2) { $strTable = "b_iblock_element_prop_m" . $iblockId; } else { $strTable = "b_iblock_element_property"; } $tableNameUf = "b_utm_" . strtolower($entityNewName); $tableNameSingleUf = "b_uts_" . strtolower($entityNewName); $sqlHelper = $this->connection->getSqlHelper(); $listElementAll = array(); $objectQuery = $this->connection->query("\n\t\t\tSELECT obj.ID, prop.VALUE, prop.IBLOCK_PROPERTY_ID\n\t\t\tFROM b_disk_object obj\n\t\t\tINNER JOIN {$strTable} prop ON obj.WEBDAV_ELEMENT_ID = prop.IBLOCK_ELEMENT_ID\n\t\t\tWHERE obj.WEBDAV_IBLOCK_ID = {$iblockId} AND obj.TYPE = 3\n\t\t"); while ($listObject = $objectQuery->fetch()) { $listElementAll[$listObject['ID']][$listObject['IBLOCK_PROPERTY_ID']]['FIELD_VALUE'][] = $listObject['VALUE']; } $listElement = array(); foreach ($this->getIblockProperties($iblockId) as $prop) { $propId = $prop['ID']; $mappedUfType = $this->mapTypeElementPropertyToUfType($prop); if (!$mappedUfType) { $this->log(array('Unknown property of element', $prop)); continue; } $userTypeEntity = new \CUserTypeEntity(); $symbolicName = empty($prop['CODE']) ? $propId : strtoupper($prop['CODE']); $xmlId = empty($prop['CODE']) ? $propId : $prop['CODE']; $fieldName = substr('UF_' . $symbolicName, 0, 20); if ($mappedUfType == 'iblock_section' || $mappedUfType == 'iblock_element') { $settingsArray = array('IBLOCK_ID' => $prop['LINK_IBLOCK_ID'], 'DISPLAY' => 'LIST'); } else { $settingsArray = array(); } $id = $userTypeEntity->add(array('ENTITY_ID' => $entityNewName, 'FIELD_NAME' => $fieldName, 'USER_TYPE_ID' => $mappedUfType, 'XML_ID' => 'PROPERTY_' . $xmlId, 'MULTIPLE' => $prop['MULTIPLE'], 'MANDATORY' => $prop['IS_REQUIRED'], 'SHOW_FILTER' => 'N', 'SHOW_IN_LIST' => null, 'EDIT_IN_LIST' => null, 'IS_SEARCHABLE' => $prop['SEARCHABLE'], 'SETTINGS' => $settingsArray, 'EDIT_FORM_LABEL' => array('en' => $prop['NAME'], 'ru' => $prop['NAME'], 'de' => $prop['NAME']))); if ($id) { if ($mappedUfType == 'enumeration') { $i = 0; $enumValues = array(); $queryEnum = \CIBlockPropertyEnum::getlist(array("SORT" => "ASC", "VALUE" => "ASC"), array('PROPERTY_ID' => $propId)); while ($queryEnum && ($rowEnum = $queryEnum->fetch())) { $enumValues['n' . $i] = array('SORT' => $rowEnum['SORT'], 'VALUE' => $rowEnum['VALUE'], 'XML_ID' => $rowEnum['XML_ID'], 'DEF' => $rowEnum['DEF']); $i++; } $userTypeEnum = new \CUserFieldEnum(); $userTypeEnum->setEnumValues($id, $enumValues); } foreach ($listElementAll as $newId => $propArray) { if (array_key_exists($propId, $propArray)) { $listElement[$newId][$propId]['FIELD_VALUE'] = $listElementAll[$newId][$propId]['FIELD_VALUE']; $listElement[$newId][$propId]['FIELD_NAME'] = $fieldName; if ($prop['MULTIPLE'] == 'Y') { $listElement[$newId][$propId]['FIELD_ID'] = $id; $listElement[$newId][$propId]['PROPERTY_TYPE'] = $mappedUfType; } } } } } if (!empty($listElement)) { foreach ($listElement as $newId => $propArray) { $fieldArray = array(); $valueArray = array(); foreach ($propArray as $prop) { $fieldArray[] = $prop['FIELD_NAME']; if (count($prop['FIELD_VALUE']) > 1) { $valueArray[] = "'" . $sqlHelper->forSql(serialize($prop['FIELD_VALUE'])) . "'"; foreach ($prop['FIELD_VALUE'] as $utmValue) { if ($prop['PROPERTY_TYPE'] == 'integer') { $utmValue = (int) $utmValue; $this->connection->queryExecute("\n\t\t\t\t\t\t\t\t\tINSERT INTO {$tableNameUf} (VALUE_ID, FIELD_ID, VALUE_INT)\n\t\t\t\t\t\t\t\t\tVALUES ({$newId}, {$prop['FIELD_ID']}, {$utmValue})\n\t\t\t\t\t\t\t\t"); } else { $utmValueStr = "'" . $sqlHelper->forSql($utmValue) . "'"; $this->connection->queryExecute("\n\t\t\t\t\t\t\t\t\tINSERT INTO {$tableNameUf} (VALUE_ID, FIELD_ID, VALUE)\n\t\t\t\t\t\t\t\t\tVALUES ({$newId}, {$prop['FIELD_ID']}, {$utmValueStr})\n\t\t\t\t\t\t\t\t"); } } } else { $valueArray[] = "'" . $sqlHelper->forSql($prop['FIELD_VALUE'][0]) . "'"; } } if (!empty($fieldArray)) { if ($this->isMysql) { $sql = "\n\t\t\t\t\t\t\tINSERT IGNORE INTO {$tableNameSingleUf} (VALUE_ID, " . implode(', ', $fieldArray) . ")\n\t\t\t\t\t\t\tVALUES ({$newId}, " . implode(', ', $valueArray) . ")\n\t\t\t\t\t\t"; } elseif ($this->isOracle) { $sql = "\n\t\t\t\t\t\t\tINSERT INTO {$tableNameSingleUf} (VALUE_ID, " . implode(', ', $fieldArray) . ")\n\t\t\t\t\t\t\tSELECT {$newId}, " . implode(', ', $valueArray) . " FROM dual\n\t\t\t\t\t\t\tWHERE NOT EXISTS(SELECT 'x' FROM {$tableNameSingleUf} WHERE VALUE_ID = {$newId})\n\t\t\t\t\t\t"; } elseif ($this->isMssql) { $sql = "\n\t\t\t\t\t\t\tINSERT INTO {$tableNameSingleUf} (VALUE_ID, " . implode(', ', $fieldArray) . ")\n\t\t\t\t\t\t\tSELECT * FROM (SELECT {$newId}, " . implode(', ', $valueArray) . ") AS tmp\n\t\t\t\t\t\t\tWHERE NOT EXISTS(SELECT 'x' FROM {$tableNameSingleUf} WHERE VALUE_ID = {$newId})\n\t\t\t\t\t\t"; } $this->connection->queryExecute($sql); } } } }
$arTasksForModule[$group] = array('ID' => $arTaskIDs[$letter]); } CGroup::SetTasksForModule('timeman', $arTasksForModule); if (CModule::IncludeModule('iblock')) { $fields_file = $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/timeman/install/fields.php"; if (file_exists($fields_file)) { include $fields_file; } $dep = new CIBlockSection(); if ($ib = COption::GetOptionInt('intranet', 'iblock_structure', false)) { $entity_id = 'IBLOCK_' . $ib . '_SECTION'; } $arFields = array("UF_TM_TIME" => "16:00", "UF_TM_DAY" => 5); $entities = CUserTypeEntity::GetList(array(), array("ENTITY_ID" => $entity_id, "FIELD_NAME" => "UF_REPORT_PERIOD")); if ($arEntity = $entities->Fetch()) { $oStatus = CUserFieldEnum::GetList(array(), array("USER_FIELD_ID" => $arEntity["ID"])); while ($result = $oStatus->Fetch()) { if ($result["XML_ID"] == "WEEK") { $period = $result["ID"]; break; } } } $arFields["UF_REPORT_PERIOD"] = $period; $dbsec = $dep->GetList(array("ID" => "asc"), array("IBLOCK_ID" => $ib, "SECTION_ID" => false)); $root = $dbsec->Fetch(); if ($root) { $dep->Update($root["ID"], $arFields); } } }
public function UpdateField($ID, $arField) { $obUserField = new CUserTypeEntity(); $res = $obUserField->Update($ID, $arField); if ($res) { UserFieldHistory::processModification(CCrmOwnerType::ResolveIDByUFEntityID($this->sUFEntityID), $ID); } if ($res && $arField['USER_TYPE_ID'] == 'enumeration' && is_array($arField['LIST'])) { $obEnum = new CUserFieldEnum(); $res = $obEnum->SetEnumValues($ID, $arField['LIST']); } $this->arUFList = $this->GetUserFields($this->sUFEntityID, 0, LANGUAGE_ID); return $res; }
private static function _GetTreeSettings() { global $USER_FIELD_MANAGER, $CACHE_MANAGER; self::$SECTIONS_SETTINGS_CACHE = array(); $ibDept = COption::GetOptionInt('intranet', 'iblock_structure', false); $cache_id = 'timeman|structure_settings|' . $ibDept; if (CACHED_timeman_settings !== false && $CACHE_MANAGER->Read(CACHED_timeman_settings, $cache_id, "timeman_structure_" . $ibDept)) { self::$SECTIONS_SETTINGS_CACHE = $CACHE_MANAGER->Get($cache_id); } else { $arAllFields = $USER_FIELD_MANAGER->GetUserFields('IBLOCK_' . $ibDept . '_SECTION'); $arUFValues = array(); $arEnumFields = array('UF_TIMEMAN', 'UF_TM_REPORT_REQ', 'UF_TM_FREE', 'UF_REPORT_PERIOD'); foreach ($arEnumFields as $fld) { $dbRes = CUserFieldEnum::GetList(array(), array('USER_FIELD_ID' => $arAllFields[$fld]['ID'])); while ($arRes = $dbRes->Fetch()) { $arUFValues[$arRes['ID']] = $arRes['XML_ID']; } } $arSettings = array('UF_TIMEMAN', 'UF_TM_MAX_START', 'UF_TM_MIN_FINISH', 'UF_TM_MIN_DURATION', 'UF_TM_REPORT_REQ', 'UF_TM_REPORT_TPL', 'UF_TM_FREE', 'UF_TM_REPORT_DATE', 'UF_TM_DAY', 'UF_REPORT_PERIOD', 'UF_TM_TIME', 'UF_TM_ALLOWED_DELTA'); $arReportSettings = array('UF_TM_REPORT_DATE', 'UF_TM_DAY', 'UF_TM_TIME'); $dbRes = CIBlockSection::GetList(array("LEFT_MARGIN" => "ASC"), array('IBLOCK_ID' => $ibDept, 'ACTIVE' => 'Y'), false, array('ID', 'IBLOCK_SECTION_ID', 'UF_TIMEMAN', 'UF_TM_MAX_START', 'UF_TM_MIN_FINISH', 'UF_TM_MIN_DURATION', 'UF_TM_REPORT_REQ', 'UF_TM_REPORT_TPL', 'UF_TM_FREE', 'UF_REPORT_PERIOD', 'UF_TM_REPORT_DATE', 'UF_TM_DAY', 'UF_TM_TIME', 'UF_TM_ALLOWED_DELTA')); while ($arRes = $dbRes->Fetch()) { $arSectionSettings = array(); foreach ($arSettings as $key) { $arSectionSettings[$key] = $arRes[$key] && $arRes[$key] != '00:00' ? isset($arUFValues[$arRes[$key]]) && !in_array($key, $arReportSettings) ? $arUFValues[$arRes[$key]] : (in_array($key, $arReportSettings) ? $arRes[$key] : (is_array($arRes[$key]) ? $arRes[$key] : self::MakeShortTS($arRes[$key]))) : ($arRes['IBLOCK_SECTION_ID'] > 0 ? '_PARENT_|' . $arRes['IBLOCK_SECTION_ID'] : ''); } self::$SECTIONS_SETTINGS_CACHE[$arRes['ID']] = $arSectionSettings; } if (CACHED_timeman_settings !== false) { $CACHE_MANAGER->Set($cache_id, self::$SECTIONS_SETTINGS_CACHE); } } }
protected static function ExternalizeEnumerationField(array &$fields, $name) { $value = isset($fields[$name]) ? $fields[$name] : null; $valueInfos = array(); if (!empty($value)) { $dbRes = CUserFieldEnum::GetList(array(), array('ID' => $value)); while ($valueData = $dbRes->Fetch()) { $valueInfos[] = array('NAME' => $valueData['XML_ID'], 'LABEL' => $valueData['VALUE']); } } $valueInfoQty = count($valueInfos); if ($valueInfoQty === 0) { $fields[$name] = $fields["{$name}_PRINTABLE"] = ''; } elseif ($valueInfoQty === 1) { $valueInfo = $valueInfos[0]; $fields[$name] = $valueInfo['NAME']; $fields["{$name}_PRINTABLE"] = $valueInfo['LABEL']; } else { $names = array(); $labels = array(); foreach ($valueInfos as &$valueInfo) { $names[] = $valueInfo['NAME']; $labels[] = $valueInfo['LABEL']; } unset($valueInfo); $fields[$name] = $names; $fields["{$name}_PRINTABLE"] = implode(', ', $labels); } }
public static function addDocumentField($documentType, $fields) { $storageId = self::getStorageIdByType($documentType); if (!$storageId) { throw new CBPArgumentNullException('documentType'); } if (strpos($fields['type'], static::getPrefixForCustomType()) === 0) { $fields['type'] = substr($fields['type'], 3); } $fieldsTmp = array('USER_TYPE_ID' => $fields['type'], 'FIELD_NAME' => 'UF_' . strtoupper($fields['code']), 'ENTITY_ID' => 'DISK_FILE_' . $storageId, 'SORT' => 150, 'MULTIPLE' => $fields['multiple'] == 'Y' ? 'Y' : 'N', 'MANDATORY' => $fields['required'] == 'Y' ? 'Y' : 'N', 'SHOW_FILTER' => 'E'); $fieldsTmp['EDIT_FORM_LABEL'][LANGUAGE_ID] = $fields['name']; $fieldsTmp['LIST_COLUMN_LABEL'][LANGUAGE_ID] = $fields['name']; $fieldsTmp['LIST_FILTER_LABEL'][LANGUAGE_ID] = $fields['name']; switch ($fields['type']) { case 'select': case 'enumeration': $fieldsTmp['USER_TYPE_ID'] = 'enumeration'; if (!is_array($fieldsTmp['LIST'])) { $fieldsTmp['LIST'] = array(); } $options = isset($fields['options']) && is_array($fields['options']) ? $fields['options'] : array(); if (!empty($options)) { $i = 10; foreach ($options as $k => $v) { $fieldsTmp['LIST']['n' . $i] = array('XML_ID' => $k, 'VALUE' => $v, 'DEF' => 'N', 'SORT' => $i); $i = $i + 10; } } break; case 'text': $fieldsTmp['USER_TYPE_ID'] = 'string'; break; } $userField = new \CUserTypeEntity(); $id = $userField->add($fieldsTmp); if ($id > 0) { if ($fieldsTmp['USER_TYPE_ID'] == 'enumeration' && is_array($fieldsTmp['LIST'])) { $enum = new \CUserFieldEnum(); $res = $enum->setEnumValues($id, $fieldsTmp['LIST']); } } return $fieldsTmp['FIELD_NAME']; }
public static function OnBeforePrologHandler() { global $USER_FIELD_MANAGER; if (isset($_REQUEST['action_button']) && !isset($_REQUEST['action'])) { $_REQUEST['action'] = $_REQUEST['action_button']; } if (!isset($_REQUEST['action'])) { return; } $BID = isset($_REQUEST['ID']) ? (int) $_REQUEST['ID'] : 0; if ($_REQUEST['action'] == 'asd_prop_export' && $BID > 0 && check_bitrix_sessid() && CModule::IncludeModule('iblock') && CASDIblockRights::IsIBlockEdit($BID)) { $strPath = $_SERVER['DOCUMENT_ROOT'] . '/bitrix/tmp/asd.iblock/'; $strName = 'asd_props_export_' . $BID . '_' . md5(LICENSE_KEY) . '.xml'; CheckDirPath($strPath); if ($hdlOutput = fopen($strPath . $strName, 'wb')) { fwrite($hdlOutput, '<?xml version="1.0" encoding="' . SITE_CHARSET . '"?>' . "\n"); fwrite($hdlOutput, '<asd_iblock_props>' . "\n"); fwrite($hdlOutput, CASDiblockTools::ExportPropsToXML($BID, $_REQUEST['p'])); if ($_REQUEST['forms'] == 'Y') { fwrite($hdlOutput, CASDiblockTools::ExportSettingsToXML($BID, array('forms'))); } fwrite($hdlOutput, '</asd_iblock_props>' . "\n"); fclose($hdlOutput); } ?> <script type="text/javascript"> top.BX.closeWait(); top.BX.WindowManager.Get().AllowClose(); top.BX.WindowManager.Get().Close(); window.location.href = '/bitrix/tools/asd.iblock/props_export.php?ID=<?php echo $BID; ?> '; </script><?php die; } if ($_REQUEST['action'] == 'asd_prop_import' && $BID > 0 && !$_FILES['xml_file']['error'] && check_bitrix_sessid() && CModule::IncludeModule('iblock') && CASDIblockRights::IsIBlockEdit($BID)) { CASDiblockTools::ImportPropsFromXML($BID, $_FILES['xml_file']['tmp_name'], $arOldNewID); CASDiblockTools::ImportFormsFromXML($BID, $_FILES['xml_file']['tmp_name'], $arOldNewID); LocalRedirect('/bitrix/admin/iblock_edit.php?type=' . $_REQUEST['type'] . '&tabControl_active_tab=edit2&lang=' . LANGUAGE_ID . '&ID=' . $BID . '&admin=Y'); } $IBLOCK_ID = 0; if (isset($_REQUEST['IBLOCK_ID'])) { $IBLOCK_ID = (int) $_REQUEST['IBLOCK_ID']; if ($IBLOCK_ID < 0) { $IBLOCK_ID = 0; } } if ($_REQUEST['action'] == 'asd_reverse' && $IBLOCK_ID > 0 && check_bitrix_sessid() && CModule::IncludeModule('iblock') && CASDIblockRights::IsIBlockEdit($IBLOCK_ID)) { $LIST_MODE = CIBlock::GetArrayByID($IBLOCK_ID, 'LIST_MODE'); if (!strlen($LIST_MODE)) { $LIST_MODE = COption::GetOptionString('iblock', 'combined_list_mode', 'N') == 'Y' ? 'C' : 'S'; } $LIST_MODE = $LIST_MODE == 'C' ? 'S' : 'C'; $ib = new CIBlock(); $ib->Update($IBLOCK_ID, array('LIST_MODE' => $LIST_MODE)); LocalRedirect('/bitrix/admin/' . ($LIST_MODE == 'S' ? 'iblock_element_admin' : 'iblock_list_admin') . '.php?IBLOCK_ID=' . $IBLOCK_ID . '&type=' . htmlspecialcharsbx($_REQUEST['type']) . '&find_section_section=' . intval($_REQUEST['find_section_section']) . '&lang=' . LANGUAGE_ID); } $strCurPage = $GLOBALS['APPLICATION']->GetCurPage(); $bElemPage = $strCurPage == '/bitrix/admin/iblock_element_admin.php' || $strCurPage == '/bitrix/admin/cat_product_admin.php'; $bSectPage = $strCurPage == '/bitrix/admin/iblock_section_admin.php' || $strCurPage == '/bitrix/admin/cat_section_admin.php'; $bMixPage = $strCurPage == '/bitrix/admin/iblock_list_admin.php'; $bRightPage = $bElemPage || $bSectPage || $bMixPage; $successRedirect = false; if ($bRightPage && $_REQUEST['action'] == 'asd_copy_in_list' && strlen($_REQUEST['ID']) > 0) { $bDoAction = true; $_REQUEST['action'] = 'asd_copy'; $_REQUEST['asd_ib_dest'] = $IBLOCK_ID; $_REQUEST['ID'] = array($_REQUEST['ID']); } else { $bDoAction = false; } if ($bRightPage && check_bitrix_sessid() && !empty($_REQUEST['ID']) && ($_SERVER['REQUEST_METHOD'] == 'POST' || $bDoAction) && CModule::IncludeModule('iblock') && ($_REQUEST['action'] == 'asd_copy' || $_REQUEST['action'] == 'asd_move') && isset($_REQUEST['asd_ib_dest']) && (int) $_REQUEST['asd_ib_dest'] > 0 && CASDIblockRights::IsIBlockDisplay($_REQUEST['asd_ib_dest'])) { $intSrcIBlockID = $IBLOCK_ID; $intDestIBlockID = (int) $_REQUEST['asd_ib_dest']; $intSetSectID = 0; if (isset($_REQUEST['asd_sect_dest'])) { $intSetSectID = (int) $_REQUEST['asd_sect_dest']; if ($intSetSectID < 0) { $intSetSectID = 0; } } $boolCreateElement = false; $boolCreateSection = false; if ($bElemPage || $bMixPage) { $boolCreateElement = CASDIblockRights::IsSectionElementCreate($intDestIBlockID, $intSetSectID); } if ($bSectPage || $bMixPage) { $boolCreateSection = CASDIblockRights::IsSectionSectionCreate($intDestIBlockID, $intSetSectID); } if ($boolCreateElement || $boolCreateSection) { $arPropListCache = array(); $arOldPropListCache = array(); $arNamePropListCache = array(); $arOldNamePropListCache = array(); $boolUFListCache = false; $arUFListCache = array(); $arOldUFListCache = array(); $arUFEnumCache = array(); $arOldUFEnumCache = array(); $arUFNameEnumCache = array(); $arOldUFNameEnumCache = array(); $arDestIBlock = CIBlock::GetArrayByID($intDestIBlockID); $arDestIBFields = $arDestIBlock['FIELDS']; $boolCodeUnique = false; if ($arDestIBFields['CODE']['DEFAULT_VALUE']['UNIQUE'] == 'Y') { $boolCodeUnique = $intSrcIBlockID == $intDestIBlockID; } $boolSectCodeUnique = false; if ($arDestIBFields['SECTION_CODE']['DEFAULT_VALUE']['UNIQUE'] == 'Y') { $boolSectCodeUnique = $intSrcIBlockID == $intDestIBlockID; } $boolCatalog = CModule::IncludeModule('catalog'); $boolCopyCatalog = false; $boolNewCatalog = false; if ($boolCatalog) { $boolCopyCatalog = is_array(CCatalog::GetByID($intDestIBlockID)); $boolNewCatalog = $boolCopyCatalog; if ($boolCopyCatalog) { $boolCopyCatalog = is_array(CCatalog::GetByID($intSrcIBlockID)); } } $el = new CIBlockElement(); $sc = new CIBlockSection(); $obEnum = new CUserFieldEnum(); foreach ($_REQUEST['ID'] as $eID) { $boolCopyElem = false; $boolCopySect = false; if ($bMixPage) { if (substr($eID, 0, 1) != 'E') { $boolCopySect = true; } else { $boolCopyElem = true; } $ID = (int) substr($eID, 1); } else { $boolCopyElem = $bElemPage; $boolCopySect = $bSectPage; $ID = (int) $eID; } if ($boolCreateElement && $boolCopyElem) { if ($obSrc = CIBlockElement::GetByID($ID)->GetNextElement()) { $arSrc = $obSrc->GetFields(); $arSrcPr = $obSrc->GetProperties(false, array('EMPTY' => 'N')); $arSrc['PREVIEW_PICTURE'] = (int) $arSrc['PREVIEW_PICTURE']; if ($arSrc['PREVIEW_PICTURE'] > 0) { $arSrc['PREVIEW_PICTURE'] = CFile::MakeFileArray($arSrc['PREVIEW_PICTURE']); if (empty($arSrc['PREVIEW_PICTURE'])) { $arSrc['PREVIEW_PICTURE'] = false; } else { $arSrc['PREVIEW_PICTURE']['COPY_FILE'] = 'Y'; } } else { $arSrc['PREVIEW_PICTURE'] = false; } $arSrc['DETAIL_PICTURE'] = (int) $arSrc['DETAIL_PICTURE']; if ($arSrc['DETAIL_PICTURE'] > 0) { $arSrc['DETAIL_PICTURE'] = CFile::MakeFileArray($arSrc['DETAIL_PICTURE']); if (empty($arSrc['DETAIL_PICTURE'])) { $arSrc['DETAIL_PICTURE'] = false; } else { $arSrc['DETAIL_PICTURE']['COPY_FILE'] = 'Y'; } } else { $arSrc['DETAIL_PICTURE'] = false; } $arSrc = array('IBLOCK_ID' => $intDestIBlockID, 'ACTIVE' => $arSrc['ACTIVE'], 'ACTIVE_FROM' => $arSrc['ACTIVE_FROM'], 'ACTIVE_TO' => $arSrc['ACTIVE_TO'], 'SORT' => $arSrc['SORT'], 'NAME' => $arSrc['~NAME'], 'PREVIEW_PICTURE' => $arSrc['PREVIEW_PICTURE'], 'PREVIEW_TEXT' => $arSrc['~PREVIEW_TEXT'], 'PREVIEW_TEXT_TYPE' => $arSrc['PREVIEW_TEXT_TYPE'], 'DETAIL_TEXT' => $arSrc['~DETAIL_TEXT'], 'DETAIL_TEXT_TYPE' => $arSrc['DETAIL_TEXT_TYPE'], 'DETAIL_PICTURE' => $arSrc['DETAIL_PICTURE'], 'WF_STATUS_ID' => $arSrc['WF_STATUS_ID'], 'CODE' => $arSrc['~CODE'], 'TAGS' => $arSrc['~TAGS'], 'XML_ID' => $arSrc['~XML_ID'], 'PROPERTY_VALUES' => array()); if ($arDestIBFields['CODE']['IS_REQUIRED'] == 'Y') { if (!strlen($arSrc['CODE'])) { $arSrc['CODE'] = mt_rand(100000, 1000000); } } if ($arDestIBFields['CODE']['DEFAULT_VALUE']['UNIQUE'] == 'Y') { $boolElCodeUnique = $boolCodeUnique; if (!$boolCodeUnique) { $rsCheckItems = CIBlockElement::GetList(array(), array('IBLOCK_ID' => $intDestIBlockID, '=CODE' => $arSrc['CODE'], 'CHECK_PERMISSIONS' => 'N'), false, array('nTopCount' => 1), array('ID', 'IBLOCK_ID')); if ($arCheck = $rsCheckItems->Fetch()) { $boolElCodeUnique = true; } } if ($boolElCodeUnique) { $arSrc['CODE'] .= mt_rand(100, 10000); } } if ($intSetSectID > 0) { $arSrc['IBLOCK_SECTION_ID'] = $intSetSectID; } elseif ($intSrcIBlockID == $intDestIBlockID) { $arSectionList = array(); $rsSections = CIBlockElement::GetElementGroups($ID, true); while ($arSection = $rsSections->Fetch()) { $arSectionList[] = $arSection['ID']; } $arSrc['IBLOCK_SECTION'] = $arSectionList; } if ($intSrcIBlockID != $intDestIBlockID) { if (empty($arPropListCache)) { $rsProps = CIBlockProperty::GetList(array(), array('IBLOCK_ID' => $intDestIBlockID, 'PROPERTY_TYPE' => 'L', 'ACTIVE' => 'Y', 'CHECK_PERMISSIONS' => 'N')); while ($arProp = $rsProps->Fetch()) { $arValueList = array(); $arNameList = array(); $rsValues = CIBlockProperty::GetPropertyEnum($arProp['ID']); while ($arValue = $rsValues->Fetch()) { $arValueList[$arValue['XML_ID']] = $arValue['ID']; $arNameList[$arValue['ID']] = trim($arValue['VALUE']); } if (!empty($arValueList)) { $arPropListCache[$arProp['CODE']] = $arValueList; } if (!empty($arNameList)) { $arNamePropListCache[$arProp['CODE']] = $arNameList; } } } if (empty($arOldPropListCache)) { $rsProps = CIBlockProperty::GetList(array(), array('IBLOCK_ID' => $intSrcIBlockID, 'PROPERTY_TYPE' => 'L', 'ACTIVE' => 'Y', 'CHECK_PERMISSIONS' => 'N')); while ($arProp = $rsProps->Fetch()) { $arValueList = array(); $arNameList = array(); $rsValues = CIBlockProperty::GetPropertyEnum($arProp['ID']); while ($arValue = $rsValues->Fetch()) { $arValueList[$arValue['ID']] = $arValue['XML_ID']; $arNameList[$arValue['ID']] = trim($arValue['VALUE']); } if (!empty($arValueList)) { $arOldPropListCache[$arProp['CODE']] = $arValueList; } if (!empty($arNameList)) { $arOldNamePropListCache[$arProp['CODE']] = $arNameList; } } } } foreach ($arSrcPr as &$arProp) { if ($arProp['USER_TYPE'] == 'HTML') { if (is_array($arProp['~VALUE'])) { if ($arProp['MULTIPLE'] == 'N') { $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = array('VALUE' => array('TEXT' => $arProp['~VALUE']['TEXT'], 'TYPE' => $arProp['~VALUE']['TYPE'])); if ($arProp['WITH_DESCRIPTION'] == 'Y') { $arSrc['PROPERTY_VALUES'][$arProp['CODE']]['DESCRIPTION'] = $arProp['~DESCRIPTION']; } } else { if (!empty($arProp['~VALUE'])) { $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = array(); foreach ($arProp['~VALUE'] as $propValueKey => $propValue) { $oneNewValue = array('VALUE' => array('TEXT' => $propValue['TEXT'], 'TYPE' => $propValue['TYPE'])); if ($arProp['WITH_DESCRIPTION'] == 'Y') { $oneNewValue['DESCRIPTION'] = $arProp['~DESCRIPTION'][$propValueKey]; } $arSrc['PROPERTY_VALUES'][$arProp['CODE']][] = $oneNewValue; unset($oneNewValue); } unset($propValue, $propValueKey); } } } } elseif ($arProp['PROPERTY_TYPE'] == 'F') { if (is_array($arProp['VALUE'])) { $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = array(); foreach ($arProp['VALUE'] as $propValueKey => $file) { if ($file > 0) { $tmpValue = CFile::MakeFileArray($file); if (!is_array($tmpValue)) { continue; } if ($arProp['WITH_DESCRIPTION'] == 'Y') { $tmpValue = array('VALUE' => $tmpValue, 'DESCRIPTION' => $arProp['~DESCRIPTION'][$propValueKey]); } $arSrc['PROPERTY_VALUES'][$arProp['CODE']][] = $tmpValue; } } } elseif ($arProp['VALUE'] > 0) { $tmpValue = CFile::MakeFileArray($arProp['VALUE']); if (is_array($tmpValue)) { if ($arProp['WITH_DESCRIPTION'] == 'Y') { $tmpValue = array('VALUE' => $tmpValue, 'DESCRIPTION' => $arProp['~DESCRIPTION']); } $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = $tmpValue; } } } elseif ($arProp['PROPERTY_TYPE'] == 'L') { if (!empty($arProp['VALUE_ENUM_ID'])) { if ($intSrcIBlockID == $arSrc['IBLOCK_ID']) { $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = $arProp['VALUE_ENUM_ID']; } else { if (isset($arPropListCache[$arProp['CODE']]) && isset($arOldPropListCache[$arProp['CODE']])) { if (is_array($arProp['VALUE_ENUM_ID'])) { $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = array(); foreach ($arProp['VALUE_ENUM_ID'] as &$intValueID) { $strValueXmlID = $arOldPropListCache[$arProp['CODE']][$intValueID]; if (isset($arPropListCache[$arProp['CODE']][$strValueXmlID])) { $arSrc['PROPERTY_VALUES'][$arProp['CODE']][] = $arPropListCache[$arProp['CODE']][$strValueXmlID]; } else { $strValueName = $arOldNamePropListCache[$arProp['CODE']][$intValueID]; $intValueKey = array_search($strValueName, $arNamePropListCache[$arProp['CODE']]); if ($intValueKey !== false) { $arSrc['PROPERTY_VALUES'][$arProp['CODE']][] = $intValueKey; } } } if (isset($intValueID)) { unset($intValueID); } if (empty($arSrc['PROPERTY_VALUES'][$arProp['CODE']])) { unset($arSrc['PROPERTY_VALUES'][$arProp['CODE']]); } } else { $strValueXmlID = $arOldPropListCache[$arProp['CODE']][$arProp['VALUE_ENUM_ID']]; if (isset($arPropListCache[$arProp['CODE']][$strValueXmlID])) { $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = $arPropListCache[$arProp['CODE']][$strValueXmlID]; } else { $strValueName = $arOldNamePropListCache[$arProp['CODE']][$arProp['VALUE_ENUM_ID']]; $intValueKey = array_search($strValueName, $arNamePropListCache[$arProp['CODE']]); if ($intValueKey !== false) { $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = $intValueKey; } } } } } } } elseif ($arProp['PROPERTY_TYPE'] == 'S' || $arProp['PROPERTY_TYPE'] == 'N') { if ($arProp['MULTIPLE'] == 'Y') { if (is_array($arProp['~VALUE'])) { if ($arProp['WITH_DESCRIPTION'] == 'Y') { $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = array(); foreach ($arProp['~VALUE'] as $propValueKey => $propValue) { $arSrc['PROPERTY_VALUES'][$arProp['CODE']][] = array('VALUE' => $propValue, 'DESCRIPTION' => $arProp['~DESCRIPTION'][$propValueKey]); } unset($propValue, $propValueKey); } else { $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = $arProp['~VALUE']; } } } else { $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = $arProp['WITH_DESCRIPTION'] == 'Y' ? array('VALUE' => $arProp['~VALUE'], 'DESCRIPTION' => $arProp['~DESCRIPTION']) : $arProp['~VALUE']; } } else { $arSrc['PROPERTY_VALUES'][$arProp['CODE']] = $arProp['~VALUE']; } } if (isset($arProp)) { unset($arProp); } AddMessage2Log($arSrc['PROPERTY_VALUES']); $intNewID = $el->Add($arSrc, true, true, true); if ($intNewID) { if ($boolCatalog && $boolCopyCatalog) { $priceRes = CPrice::GetListEx(array(), array('PRODUCT_ID' => $ID), false, false, array('PRODUCT_ID', 'EXTRA_ID', 'CATALOG_GROUP_ID', 'PRICE', 'CURRENCY', 'QUANTITY_FROM', 'QUANTITY_TO')); while ($arPrice = $priceRes->Fetch()) { $arPrice['PRODUCT_ID'] = $intNewID; CPrice::Add($arPrice); } } if ($boolCatalog && $boolNewCatalog) { $arProduct = array('ID' => $intNewID); if ($boolCopyCatalog) { $productRes = CCatalogProduct::GetList(array(), array('ID' => $ID), false, false, array('QUANTITY', 'QUANTITY_TRACE_ORIG', 'CAN_BUY_ZERO_ORIG', 'NEGATIVE_AMOUNT_TRACE_ORIG', 'SUBSCRIBE_ORIG', 'WEIGHT', 'PRICE_TYPE', 'RECUR_SCHEME_TYPE', 'RECUR_SCHEME_LENGTH', 'TRIAL_PRICE_ID', 'WITHOUT_ORDER', 'SELECT_BEST_PRICE', 'VAT_ID', 'VAT_INCLUDED', 'WIDTH', 'LENGTH', 'HEIGHT', 'PURCHASING_PRICE', 'PURCHASING_CURRENCY', 'MEASURE')); if ($arCurProduct = $productRes->Fetch()) { $arProduct = $arCurProduct; $arProduct['ID'] = $intNewID; $arProduct['QUANTITY_TRACE'] = $arProduct['QUANTITY_TRACE_ORIG']; $arProduct['CAN_BUY_ZERO'] = $arProduct['CAN_BUY_ZERO_ORIG']; $arProduct['NEGATIVE_AMOUNT_TRACE'] = $arProduct['NEGATIVE_AMOUNT_TRACE_ORIG']; if (isset($arProduct['SUBSCRIBE_ORIG'])) { $arProduct['SUBSCRIBE'] = $arProduct['SUBSCRIBE_ORIG']; } foreach ($arProduct as $productKey => $productValue) { if ($productValue === null) { unset($arProduct[$productKey]); } } } } CCatalogProduct::Add($arProduct, false); } if ($_REQUEST['action'] == 'asd_move') { if (CASDIblockRights::IsElementDelete($intSrcIBlockID, $ID)) { $el->Delete($ID); } else { CASDiblock::$error .= '[' . $ID . '] ' . GetMessage('ASD_ACTION_ERR_DELETE_ELEMENT_RIGHTS') . "\n"; } } } else { CASDiblock::$error .= '[' . $ID . '] ' . $el->LAST_ERROR . "\n"; } } } if ($boolCreateSection && $boolCopySect) { if ($_REQUEST['action'] == 'asd_move') { continue; } $rsSections = CIBlockSection::GetList(array(), array('ID' => $ID, 'IBLOCK_ID' => $intSrcIBlockID), false, array('ID', 'NAME', 'XML_ID', 'CODE', 'IBLOCK_SECTION_ID', 'IBLOCK_ID', 'ACTIVE', 'SORT', 'PICTURE', 'DESCRIPTION', 'DESCRIPTION_TYPE', 'DETAIL_PICTURE', 'SOCNET_GROUP_ID', 'UF_*')); if ($arSrcSect = $rsSections->Fetch()) { $arDestSect = $arSrcSect; unset($arDestSect['ID']); $arDestSect['IBLOCK_ID'] = $intDestIBlockID; if ($arDestIBFields['SECTION_CODE']['IS_REQUIRED'] == 'Y') { if (!strlen($arDestSect['CODE'])) { $arDestSect['CODE'] = mt_rand(100000, 1000000); } } if ($arDestIBFields['SECTION_CODE']['DEFAULT_VALUE']['UNIQUE'] == 'Y') { $boolScCodeUnique = $boolSectCodeUnique; if (!$boolSectCodeUnique) { $rsCheckItems = CIBlockElement::GetList(array(), array('IBLOCK_ID' => $intDestIBlockID, '=CODE' => $arSrc['CODE'], 'CHECK_PERMISSIONS' => 'N'), false, array('nTopCount' => 1), array('ID', 'IBLOCK_ID')); if ($arCheck = $rsCheckItems->Fetch()) { $boolScCodeUnique = true; } } if ($boolScCodeUnique) { $arDestSect['CODE'] .= mt_rand(100, 10000); } } if ($intSetSectID > 0) { $arDestSect['IBLOCK_SECTION_ID'] = $intSetSectID; } elseif ($intSrcIBlockID != $intDestIBlockID) { $arDestSect['IBLOCK_SECTION_ID'] = 0; } $arDestSect['PICTURE'] = (int) $arDestSect['PICTURE']; if ($arDestSect['PICTURE'] > 0) { $arDestSect['PICTURE'] = CFile::MakeFileArray($arDestSect['PICTURE']); if (empty($arDestSect['PICTURE'])) { $arDestSect['PICTURE'] = false; } else { $arDestSect['PICTURE']['COPY_FILE'] = 'Y'; } } else { $arDestSect['PICTURE'] = false; } $arDestSect['DETAIL_PICTURE'] = (int) $arDestSect['DETAIL_PICTURE']; if ($arDestSect['DETAIL_PICTURE'] > 0) { $arDestSect['DETAIL_PICTURE'] = CFile::MakeFileArray($arDestSect['DETAIL_PICTURE']); if (empty($arDestSect['DETAIL_PICTURE'])) { $arDestSect['DETAIL_PICTURE'] = false; } else { $arDestSect['DETAIL_PICTURE']['COPY_FILE'] = 'Y'; } } else { $arDestSect['DETAIL_PICTURE'] = false; } if (!$boolUFListCache) { $boolUFListCache = true; $arUFListCache = $USER_FIELD_MANAGER->GetUserFields('IBLOCK_' . $intDestIBlockID . '_SECTION'); if (!empty($arUFListCache)) { if ($intSrcIBlockID != $intDestIBlockID) { $arOldUFListCache = $USER_FIELD_MANAGER->GetUserFields('IBLOCK_' . $intSrcIBlockID . '_SECTION'); if (empty($arOldUFListCache)) { $arUFListCache = array(); } } else { $arOldUFListCache = $arUFListCache; } } if (!empty($arUFListCache)) { if ($intSrcIBlockID != $intDestIBlockID) { foreach ($arUFListCache as &$arOneUserField) { if ('enum' == $arOneUserField['USER_TYPE']['BASE_TYPE']) { $arUFEnumCache[$arOneUserField['FIELD_NAME']] = array(); $arUFNameEnumCache[$arOneUserField['FIELD_NAME']] = array(); $rsEnum = $obEnum->GetList(array(), array('USER_FIELD_ID' => $arOneUserField['ID'])); while ($arEnum = $rsEnum->Fetch()) { $arUFEnumCache[$arOneUserField['FIELD_NAME']][$arEnum['XML_ID']] = $arEnum['ID']; $arUFNameEnumCache[$arOneUserField['FIELD_NAME']][$arEnum['ID']] = trim($arEnum['VALUE']); } } } if (isset($arOneUserField)) { unset($arOneUserField); } foreach ($arOldUFListCache as &$arOneUserField) { if ($arOneUserField['USER_TYPE']['BASE_TYPE'] == 'enum') { $arOldUFEnumCache[$arOneUserField['FIELD_NAME']] = array(); $arOldUFNameEnumCache[$arOneUserField['FIELD_NAME']] = array(); $rsEnum = $obEnum->GetList(array(), array('USER_FIELD_ID' => $arOneUserField['ID'])); while ($arEnum = $rsEnum->Fetch()) { $arOldUFEnumCache[$arOneUserField['FIELD_NAME']][$arEnum['ID']] = $arEnum['XML_ID']; $arOldUFNameEnumCache[$arOneUserField['FIELD_NAME']][$arEnum['ID']] = trim($arEnum['VALUE']); } } } if (isset($arOneUserField)) { unset($arOneUserField); } } } } if (!empty($arUFListCache)) { foreach ($arUFListCache as &$arOneUserField) { if (!isset($arDestSect[$arOneUserField['FIELD_NAME']])) { continue; } if ($arOneUserField['USER_TYPE']['BASE_TYPE'] == 'file') { if (!empty($arDestSect[$arOneUserField['FIELD_NAME']])) { if (is_array($arDestSect[$arOneUserField['FIELD_NAME']])) { $arNewFileList = array(); foreach ($arDestSect[$arOneUserField['FIELD_NAME']] as &$intFileID) { $arNewFile = false; $intFileID = (int) $intFileID; if ($intFileID > 0) { $arNewFile = CFile::MakeFileArray($intFileID); } if (!empty($arNewFile)) { $arNewFileList[] = $arNewFile; } } if (isset($intFileID)) { unset($intFileID); } $arDestSect[$arOneUserField['FIELD_NAME']] = !empty($arNewFileList) ? $arNewFileList : false; } else { $arNewFile = false; $intFileID = (int) $arDestSect[$arOneUserField['FIELD_NAME']]; if ($intFileID > 0) { $arNewFile = CFile::MakeFileArray($intFileID); } $arDestSect[$arOneUserField['FIELD_NAME']] = !empty($arNewFile) ? $arNewFile : false; } } else { $arDestSect[$arOneUserField['FIELD_NAME']] = false; } } elseif ($arOneUserField['USER_TYPE']['BASE_TYPE'] == 'enum') { if (!empty($arDestSect[$arOneUserField['FIELD_NAME']])) { if ($intSrcIBlockID != $intDestIBlockID) { if (array_key_exists($arOneUserField['FIELD_NAME'], $arUFEnumCache) && array_key_exists($arOneUserField['FIELD_NAME'], $arOldUFEnumCache)) { if (is_array($arDestSect[$arOneUserField['FIELD_NAME']])) { $arNewEnumList = array(); foreach ($arDestSect[$arOneUserField['FIELD_NAME']] as &$intValueID) { $strValueXmlID = $arOldUFEnumCache[$arOneUserField['FIELD_NAME']][$intValueID]; if (array_key_exists($strValueXmlID, $arUFEnumCache[$arOneUserField['FIELD_NAME']])) { $arNewEnumList[] = $arUFEnumCache[$arOneUserField['FIELD_NAME']][$strValueXmlID]; } else { $strValueName = $arOldUFNameEnumCache[$arOneUserField['FIELD_NAME']][$intValueID]; $intValueKey = array_search($strValueName, $arUFNameEnumCache[$arOneUserField['FIELD_NAME']]); if ($intValueKey !== false) { $arNewEnumList[] = $intValueKey; } } } if (isset($intValueID)) { unset($intValueID); } if (!empty($arNewEnumList)) { $arDestSect[$arOneUserField['FIELD_NAME']] = $arNewEnumList; } } else { $strValueXmlID = $arOldUFEnumCache[$arOneUserField['FIELD_NAME']][$arDestSect[$arOneUserField['FIELD_NAME']]]; if (array_key_exists($strValueXmlID, $arUFEnumCache[$arOneUserField['FIELD_NAME']])) { $arDestSect[$arOneUserField['FIELD_NAME']] = $arUFEnumCache[$arOneUserField['FIELD_NAME']][$strValueXmlID]; } else { $strValueName = $arOldUFNameEnumCache[$arOneUserField['FIELD_NAME']][$arDestSect[$arOneUserField['FIELD_NAME']]]; $intValueKey = array_search($strValueName, $arUFNameEnumCache[$arOneUserField['FIELD_NAME']]); if ($intValueKey !== false) { $arDestSect[$arOneUserField['FIELD_NAME']] = $intValueKey; } } } } } } else { $arDestSect[$arOneUserField['FIELD_NAME']] = false; } } } if (isset($arOneUserField)) { unset($arOneUserField); } } $intNewID = $sc->Add($arDestSect); if (!$intNewID) { CASDiblock::$error .= '[' . $ID . '] ' . $sc->LAST_ERROR . "\n"; } } } } $successRedirect = true; } unset($_REQUEST['action']); if (isset($_REQUEST['action_button'])) { unset($_REQUEST['action_button']); } if ($successRedirect) { LocalRedirect($GLOBALS['APPLICATION']->GetCurPageParam('', array('action', 'action_button', 'asd_ib_dest', 'asd_sect_dest', 'ID'))); } } if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'asd_remove' && $IBLOCK_ID > 0 && isset($_REQUEST['find_section_section']) && check_bitrix_sessid() && CASDIblockRights::IsIBlockDisplay($IBLOCK_ID)) { $intSectionID = (int) $_REQUEST['find_section_section']; if ($intSectionID > 0) { $strCurPage = $GLOBALS['APPLICATION']->GetCurPage(); $bElemPage = $strCurPage == '/bitrix/admin/iblock_element_admin.php' || $strCurPage == '/bitrix/admin/cat_product_admin.php'; $bMixPage = $strCurPage == '/bitrix/admin/iblock_list_admin.php'; if ($bElemPage || $bMixPage) { foreach ($_REQUEST['ID'] as $eID) { if ($bMixPage) { if (substr($eID, 0, 1) != 'E') { continue; } $ID = (int) substr($eID, 1); } else { $ID = (int) $eID; } if ($ID <= 0) { continue; } if (CASDIblockRights::IsElementEdit($IBLOCK_ID, $ID)) { $arSectionList = array(); $rsSections = CIBlockElement::GetElementGroups($ID, true); while ($arSection = $rsSections->Fetch()) { $arSection['ID'] = (int) $arSection['ID']; if ($arSection['ID'] != $intSectionID) { $arSectionList[] = $arSection['ID']; } } CIBlockElement::SetElementSection($ID, $arSectionList, false); $successRedirect = true; } } } } unset($_REQUEST['action']); if (isset($_REQUEST['action_button'])) { unset($_REQUEST['action_button']); } if ($successRedirect) { LocalRedirect($GLOBALS['APPLICATION']->GetCurPageParam('', array('action', 'action_button'))); } } }
function InstallUserFields() { $ImportantUserFields = $this->GetIdeaUserFields(); $messages = array(); $db_res = \Bitrix\Main\Localization\LanguageTable::getList(array('order' => array('SORT' => 'ASC'))); while ($ar = $db_res->fetch()) { $messages[$ar["LID"]] = IncludeModuleLangFile(__FILE__, $ar["LID"], true); } foreach ($ImportantUserFields as $UserFieldName => $Exists) { if (!$Exists) { $EDIT_FORM_LABEL = array(); foreach ($messages as $lid => $mess) { $EDIT_FORM_LABEL[$lid] = $mess["IDEA_" . $UserFieldName . "_DESCRIPTION"]; } $UserType = new CUserTypeEntity(); switch ($UserFieldName) { case "UF_CATEGORY_CODE": GetMessage("IDEA_UF_CATEGORY_CODE_DESCRIPTION"); $UserType->Add(array("ENTITY_ID" => "BLOG_POST", "FIELD_NAME" => $UserFieldName, "USER_TYPE_ID" => "string", "IS_SEARCHABLE" => "N", "EDIT_FORM_LABEL" => $EDIT_FORM_LABEL)); break; case "UF_ANSWER_ID": GetMessage("IDEA_UF_ANSWER_ID_DESCRIPTION"); $UserType->Add(array("ENTITY_ID" => "BLOG_POST", "FIELD_NAME" => $UserFieldName, "USER_TYPE_ID" => "integer", "IS_SEARCHABLE" => "N", "MULTIPLE" => "Y", "EDIT_FORM_LABEL" => $EDIT_FORM_LABEL)); break; case "UF_ORIGINAL_ID": GetMessage("IDEA_UF_ORIGINAL_ID_DESCRIPTION"); $UserType->Add(array("ENTITY_ID" => "BLOG_POST", "FIELD_NAME" => $UserFieldName, "USER_TYPE_ID" => "string", "IS_SEARCHABLE" => "N", "EDIT_FORM_LABEL" => $EDIT_FORM_LABEL)); break; case "UF_STATUS": GetMessage("IDEA_UF_STATUS_DESCRIPTION"); $ID = $UserType->Add(array("ENTITY_ID" => "BLOG_POST", "FIELD_NAME" => $UserFieldName, "USER_TYPE_ID" => "enumeration", "IS_SEARCHABLE" => "N", "EDIT_FORM_LABEL" => $EDIT_FORM_LABEL)); if (intval($ID) > 0) { $UserTypeEnum = new CUserFieldEnum(); $UserTypeEnum->SetEnumValues($ID, array("n0" => array("SORT" => 100, "XML_ID" => "NEW", "VALUE" => GetMessage("IDEA_UF_STATUS_NEW_TITLE"), "DEF" => "Y"), "n1" => array("SORT" => 200, "XML_ID" => "PROCESSING", "VALUE" => GetMessage("IDEA_UF_STATUS_PROCESSING_TITLE"), "DEF" => "N"), "n2" => array("SORT" => 300, "XML_ID" => "COMPLETED", "VALUE" => GetMessage("IDEA_UF_STATUS_COMPLETED_TITLE"), "DEF" => "N"))); } break; } } } }
public function GetStatusList($XML_ID = false) { if (is_array($this->CacheStorage["STATUS_LIST"]) && array_key_exists(intval($XML_ID), $this->CacheStorage["STATUS_LIST"])) { return $this->CacheStorage["STATUS_LIST"][intval($XML_ID)]; } $obCache = new CPHPCache(); $life_time = 60 * 60 * 24 * 30; //over 1 month $cache_id = 'idea_status_list'; //no need to keep unique all time, just caching for 1 day if no changes $cache_path = '/' . SITE_ID . '/idea/status_list/'; $arStatus = array(); if ($obCache->StartDataCache($life_time, $cache_id, $cache_path)) { $arStatusField = CUserTypeEntity::GetList(array(), array("ENTITY_ID" => "BLOG_POST", "FIELD_NAME" => CIdeaManagment::UFStatusField))->Fetch(); if ($arStatusField) { $oStatus = CUserFieldEnum::GetList(array(), array("USER_FIELD_ID" => $arStatusField["ID"])); while ($r = $oStatus->Fetch()) { $arStatus[$r["ID"]] = $r; } $obCache->EndDataCache($arStatus); } else { $obCache->AbortDataCache(); } } else { $arStatus = $obCache->GetVars(); } if ($XML_ID) { $arStatusXML = array(); foreach ($arStatus as $Status) { $arStatusXML[$Status["XML_ID"]] = $Status; } $arStatus = $arStatusXML; } return $this->CacheStorage["STATUS_LIST"][intval($XML_ID)] = $arStatus; }
protected function execute(InputInterface $input, OutputInterface $output) { $file = $input->getArgument('file'); if (!file_exists($file) || !($fh = fopen($file, 'r'))) { $output->writeln('<error>Can\'t read data from file</error>'); return null; } //выбираем группу $group = 0; $res = \CGroup::GetList($by = '', $order = '', ['STRING_ID' => 'totaldict_chairman_experts']); if ($ob = $res->Fetch()) { $group = $ob['ID']; } //выбираем список статусов $statusList = []; $rsData = \CUserTypeEntity::GetList([], ['ENTITY_ID' => 'USER', 'FIELD_NAME' => 'UF_TD_ORG_STATUS']); if ($fob = $rsData->GetNext()) { $ar = ['newby' => 'НОВИЧКИ', 'pretty_boy' => 'КРАСАВЧИКИ', 'catching' => 'ДОГОНЯЮЩИЕ', 'redneck' => 'ДЕРЕВНИ']; $res = \CUserFieldEnum::GetList([], ['USER_FIELD_ID' => $fob['ID']]); while ($ob = $res->Fetch()) { if (empty($ar[$ob['XML_ID']])) { continue; } $statusList[$ar[$ob['XML_ID']]] = $ob['ID']; } } //список стран для заполнения $countries = GetCountryArray(); $countries = array_combine($countries['reference'], $countries['reference_id']); $currentStatus = null; while (($data = fgetcsv($fh)) !== false) { //если заполнена только вторая колонка то это статус if (empty($data[1]) && !empty($data[0]) && isset($statusList[$data[0]])) { $currentStatus = $statusList[$data[1]]; continue; } //массив для загрузки данных пользователя $arLoad = ['ACTIVE' => 'Y', 'PERSONAL_COUNTRY' => isset($countries['Россия']) ? $countries['Россия'] : null, 'PERSONAL_CITY' => $data[0], 'LAST_NAME' => $data[1], 'WORK_POSITION' => $data[3], 'PERSONAL_MOBILE' => $data[4], 'PERSONAL_STREET' => $data[6], 'PERSONAL_WWW' => $data[8], 'PASSWORD' => 'Test,user,passwr0d', 'CONFIRM_PASSWORD' => 'Test,user,passwr0d', 'UF_TD_ORG_STATUS' => $currentStatus, 'GROUP_ID' => [2, $group]]; //пробуем разбить email if (strpos($data[5], ',')) { $explode = array_map('trim', explode(',', $data[5])); $arLoad['EMAIL'] = $explode[0]; unset($explode[0]); $arLoad['PERSONAL_NOTES'] = implode(', ', $explode); } elseif (strpos($data[5], 'и')) { $explode = array_map('trim', explode('и', $data[5])); $arLoad['EMAIL'] = $explode[0]; unset($explode[0]); $arLoad['PERSONAL_NOTES'] = implode(', ', $explode); } elseif (strpos($data[5], ';')) { $explode = array_map('trim', explode(';', $data[5])); $arLoad['EMAIL'] = $explode[0]; unset($explode[0]); $arLoad['PERSONAL_NOTES'] = implode(', ', $explode); } elseif (strpos($data[5], ' ')) { $explode = array_map('trim', explode(' ', $data[5])); $arLoad['EMAIL'] = $explode[0]; unset($explode[0]); $arLoad['PERSONAL_NOTES'] = implode(', ', $explode); } else { $arLoad['EMAIL'] = trim($data[5]); } //пробуем разбить фамилию и имя if (strpos($data[2], ' ')) { $explode = explode(' ', trim($data[2])); $arLoad['NAME'] = $explode[0]; $arLoad['SECOND_NAME'] = $explode[1]; } else { $arLoad['NAME'] = trim($data[2]); } //пробуем завести дату в базу if (($time = strtotime($data[7])) !== false) { $arLoad['PERSONAL_BIRTHDAY'] = ConvertTimeStamp($time, 'SHORT', 'ru'); } //пробуем найти страну, чтобы привязать пользователя к городу $country = \bxpimple\Locator::$item->get('countryFinder')->mergeFilterWith(['NAME' => 'Россия'])->one(); if ($country) { //если нашли страну, то пробуем найти и город $city = \bxpimple\Locator::$item->get('cityFinder')->mergeFilterWith(['NAME' => trim($data[0]), 'PROPERTY_TOTALDICT_GEO_CITIES_COUNTRY' => $country->getAttribute('ID')->getValue()])->one(); if ($city) { //если нашли город, то привязываем пользователя $arLoad['UF_TD_CITY_IB'] = $city->getAttribute('ID')->getValue(); } } //задаем логин, по умолчанию используем email $arLoad['LOGIN'] = $arLoad['EMAIL']; //пробуем найти пользователя по его логину $user = new \CUser(); $res = \CUser::GetList($by = '', $order = '', ['LOGIN_EQUAL' => $arLoad['LOGIN']]); if ($ob = $res->Fetch()) { $arGroups = \CUser::GetUserGroup($ob['ID']); if (is_array($arGroups)) { $arLoad['GROUP_ID'] = array_unique(array_merge($arLoad['GROUP_ID'], $arGroups)); } //обновляем if (!$user->Update($ob['ID'], $arLoad)) { $output->writeln('<error>User ' . $arLoad['LOGIN'] . ' error: ' . $user->LAST_ERROR . '</error>'); } else { $output->writeln('<info>User ' . $arLoad['LOGIN'] . ' updated</info>'); } } else { //создаем нового if (!$user->Add($arLoad)) { $output->writeln('<error>User ' . $arLoad['LOGIN'] . ' error: ' . $user->LAST_ERROR . '</error>'); } else { $output->writeln('<info>New user ' . $arLoad['LOGIN'] . ' added</info>'); } } } fclose($fh); }
function GetPeriodByID($ID, $ENTITY = "USER") { $entities = CUserTypeEntity::GetList(array(), array("ENTITY_ID" => $ENTITY, "FIELD_NAME" => "UF_REPORT_PERIOD")); if ($arEntity = $entities->Fetch()) { $oStatus = CUserFieldEnum::GetList(array(), array("USER_FIELD_ID" => $arEntity["ID"])); while ($result = $oStatus->Fetch()) { if ($ID == $result["ID"]) { return $result["XML_ID"]; } } } return false; }
public function ListAddEnumFieldsValue($arParams, &$arValue, &$arReplaceValue, $delimiter = '<br />', $textonly = false, $arOptions = array()) { global $APPLICATION; $arUserFields = $this->GetUserFields($this->sEntityID, 0, LANGUAGE_ID); $bSecondLoop = false; $arValuePrepare = array(); if (!is_array($arOptions)) { $arOptions = array(); } // The first loop to collect all the data fields foreach ($arUserFields as $FIELD_NAME => &$arUserField) { foreach ($arValue as $ID => $data) { if (!isset($arValue[$ID][$FIELD_NAME]) && $arUserField['USER_TYPE']['USER_TYPE_ID'] != 'boolean') { continue; } if ($arUserField['USER_TYPE']['USER_TYPE_ID'] == 'boolean') { if (isset($arValue[$ID][$FIELD_NAME])) { $arValue[$ID][$FIELD_NAME] == ($arValue[$ID][$FIELD_NAME] == 1 || $arValue[$ID][$FIELD_NAME] == 'Y' ? 'Y' : 'N'); } $arVal = $arValue[$ID][$FIELD_NAME]; if (!is_array($arVal)) { $arVal = array($arVal); } foreach ($arVal as $val) { $val = (string) $val; if (strlen($val) <= 0) { //Empty value is always 'N' (not default field value) $val = 'N'; } $arReplaceValue[$ID][$FIELD_NAME] .= (!empty($arReplaceValue[$ID][$FIELD_NAME]) ? $delimiter : '') . ($val == 1 ? GetMessage('MAIN_YES') : GetMessage('MAIN_NO')); if ($arUserField['MULTIPLE'] == 'Y') { $arValue[$ID][$FIELD_NAME][] = $val == 1 || $val == 'Y' ? 'Y' : 'N'; } else { $arValue[$ID][$FIELD_NAME] = $val == 1 || $val == 'Y' ? 'Y' : 'N'; } } } elseif ($arUserField['USER_TYPE']['USER_TYPE_ID'] == 'crm_status') { $ar = CCrmStatus::GetStatusList($arUserField['SETTINGS']['ENTITY_TYPE']); $arReplaceValue[$ID][$FIELD_NAME] = isset($ar[$arValue[$ID][$FIELD_NAME]]) ? $ar[$arValue[$ID][$FIELD_NAME]] : ''; } else { if ($arUserField['USER_TYPE']['USER_TYPE_ID'] == 'crm') { $arParams['CRM_ENTITY_TYPE'] = array(); if ($arUserField['SETTINGS']['LEAD'] == 'Y') { $arParams['CRM_ENTITY_TYPE'][] = 'LEAD'; } if ($arUserField['SETTINGS']['CONTACT'] == 'Y') { $arParams['CRM_ENTITY_TYPE'][] = 'CONTACT'; } if ($arUserField['SETTINGS']['COMPANY'] == 'Y') { $arParams['CRM_ENTITY_TYPE'][] = 'COMPANY'; } if ($arUserField['SETTINGS']['DEAL'] == 'Y') { $arParams['CRM_ENTITY_TYPE'][] = 'DEAL'; } $arParams['CRM_PREFIX'] = false; if (count($arParams['CRM_ENTITY_TYPE']) > 1) { $arParams['CRM_PREFIX'] = true; } $bSecondLoop = true; $arVal = $arValue[$ID][$FIELD_NAME]; if (!is_array($arVal)) { $arVal = array($arVal); } foreach ($arVal as $value) { if ($arParams['CRM_PREFIX']) { $ar = explode('_', $value); $arValuePrepare[$arUserField['USER_TYPE']['USER_TYPE_ID']][CUserTypeCrm::GetLongEntityType($ar[0])][] = intval($ar[1]); $arValuePrepare[$arUserField['USER_TYPE']['USER_TYPE_ID']]['FIELD'][$ID][$FIELD_NAME][CUserTypeCrm::GetLongEntityType($ar[0])][intval($ar[1])] = intval($ar[1]); } else { if (is_numeric($value)) { $arValuePrepare[$arUserField['USER_TYPE']['USER_TYPE_ID']][$arParams['CRM_ENTITY_TYPE'][0]][] = $value; $arValuePrepare[$arUserField['USER_TYPE']['USER_TYPE_ID']]['FIELD'][$ID][$FIELD_NAME][$arParams['CRM_ENTITY_TYPE'][0]][$value] = $value; } else { $ar = explode('_', $value); $arValuePrepare[$arUserField['USER_TYPE']['USER_TYPE_ID']][CUserTypeCrm::GetLongEntityType($ar[0])][] = intval($ar[1]); $arValuePrepare[$arUserField['USER_TYPE']['USER_TYPE_ID']]['FIELD'][$ID][$FIELD_NAME][CUserTypeCrm::GetLongEntityType($ar[0])][intval($ar[1])] = intval($ar[1]); } } } $arReplaceValue[$ID][$FIELD_NAME] = ''; } else { if ($arUserField['USER_TYPE']['USER_TYPE_ID'] == 'file' || $arUserField['USER_TYPE']['USER_TYPE_ID'] == 'employee' || $arUserField['USER_TYPE']['USER_TYPE_ID'] == 'iblock_element' || $arUserField['USER_TYPE']['USER_TYPE_ID'] == 'enumeration' || $arUserField['USER_TYPE']['USER_TYPE_ID'] == 'iblock_section') { $bSecondLoop = true; $arVal = $arValue[$ID][$FIELD_NAME]; $arReplaceValue[$ID][$FIELD_NAME] = ''; if (!is_array($arVal)) { $arVal = array($arVal); } foreach ($arVal as $value) { $arValuePrepare[$arUserField['USER_TYPE']['USER_TYPE_ID']]['FIELD'][$ID][$FIELD_NAME][$value] = $value; $arValuePrepare[$arUserField['USER_TYPE']['USER_TYPE_ID']]['ID'][] = $value; } } else { if ($arUserField['MULTIPLE'] == 'Y' && is_array($arValue[$ID][$FIELD_NAME])) { array_walk($arValue[$ID][$FIELD_NAME], create_function('&$v', '$v = htmlspecialcharsbx($v);')); $arReplaceValue[$ID][$FIELD_NAME] = implode($delimiter, $arValue[$ID][$FIELD_NAME]); } } } } } } unset($arUserField); // The second loop for special field if ($bSecondLoop) { $arValueReplace = array(); $arList = array(); foreach ($arValuePrepare as $KEY => $VALUE) { // collect multi data if ($KEY == 'iblock_section') { $dbRes = CIBlockSection::GetList(array('left_margin' => 'asc'), array('ID' => $VALUE['ID']), false); while ($arRes = $dbRes->Fetch()) { $arList[$KEY][$arRes['ID']] = $arRes; } } elseif ($KEY == 'file') { $dbRes = CFile::GetList(array(), array('@ID' => implode(',', $VALUE['ID']))); while ($arRes = $dbRes->Fetch()) { $arList[$KEY][$arRes['ID']] = $arRes; } } elseif ($KEY == 'iblock_element') { $dbRes = CIBlockElement::GetList(array('SORT' => 'DESC', 'NAME' => 'ASC'), array('ID' => $VALUE['ID']), false); while ($arRes = $dbRes->Fetch()) { $arList[$KEY][$arRes['ID']] = $arRes; } } elseif ($KEY == 'employee') { $dbRes = CUser::GetList($by = 'last_name', $order = 'asc', array('ID' => implode('|', $VALUE['ID']))); while ($arRes = $dbRes->Fetch()) { $arList[$KEY][$arRes['ID']] = $arRes; } } elseif ($KEY == 'enumeration') { foreach ($VALUE['ID'] as $___value) { $rsEnum = CUserFieldEnum::GetList(array(), array('ID' => $___value)); while ($arRes = $rsEnum->Fetch()) { $arList[$KEY][$arRes['ID']] = $arRes; } } } elseif ($KEY == 'crm') { if (isset($VALUE['LEAD']) && !empty($VALUE['LEAD'])) { $dbRes = CCrmLead::GetList(array('TITLE' => 'ASC', 'LAST_NAME' => 'ASC', 'NAME' => 'ASC'), array('ID' => $VALUE['LEAD'])); while ($arRes = $dbRes->Fetch()) { $arList[$KEY]['LEAD'][$arRes['ID']] = $arRes; } } if (isset($VALUE['CONTACT']) && !empty($VALUE['CONTACT'])) { $dbRes = CCrmContact::GetList(array('LAST_NAME' => 'ASC', 'NAME' => 'ASC'), array('ID' => $VALUE['CONTACT'])); while ($arRes = $dbRes->Fetch()) { $arList[$KEY]['CONTACT'][$arRes['ID']] = $arRes; } } if (isset($VALUE['COMPANY']) && !empty($VALUE['COMPANY'])) { $dbRes = CCrmCompany::GetList(array('TITLE' => 'ASC'), array('ID' => $VALUE['COMPANY'])); while ($arRes = $dbRes->Fetch()) { $arList[$KEY]['COMPANY'][$arRes['ID']] = $arRes; } } if (isset($VALUE['DEAL']) && !empty($VALUE['DEAL'])) { $dbRes = CCrmDeal::GetList(array('TITLE' => 'ASC'), array('ID' => $VALUE['DEAL'])); while ($arRes = $dbRes->Fetch()) { $arList[$KEY]['DEAL'][$arRes['ID']] = $arRes; } } } // assemble multi data foreach ($VALUE['FIELD'] as $ID => $arFIELD_NAME) { foreach ($arFIELD_NAME as $FIELD_NAME => $FIELD_VALUE) { foreach ($FIELD_VALUE as $FIELD_VALUE_NAME => $FIELD_VALUE_ID) { if ($KEY == 'iblock_section') { $sname = htmlspecialcharsbx($arList[$KEY][$FIELD_VALUE_ID]['NAME']); $arReplaceValue[$ID][$FIELD_NAME] .= (!empty($arReplaceValue[$ID][$FIELD_NAME]) ? $delimiter : '') . $sname; } if ($KEY == 'iblock_element') { $sname = htmlspecialcharsbx($arList[$KEY][$FIELD_VALUE_ID]['NAME']); if (!$textonly) { $surl = GetIBlockElementLinkById($arList[$KEY][$FIELD_VALUE_ID]['ID']); if ($surl && strlen($surl) > 0) { $sname = '<a href="' . $surl . '">' . $sname . '</a>'; } } $arReplaceValue[$ID][$FIELD_NAME] .= (!empty($arReplaceValue[$ID][$FIELD_NAME]) ? $delimiter : '') . $sname; } else { if ($KEY == 'employee') { $sname = CUser::FormatName(CSite::GetNameFormat(false), $arList[$KEY][$FIELD_VALUE_ID], false, true); if (!$textonly) { $ar['PATH_TO_USER_PROFILE'] = CComponentEngine::MakePathFromTemplate(COption::GetOptionString('crm', 'path_to_user_profile'), array('user_id' => $arList[$KEY][$FIELD_VALUE_ID]['ID'])); $sname = '<a href="' . $ar['PATH_TO_USER_PROFILE'] . '" id="balloon_' . $arParams['GRID_ID'] . '_' . $arList[$KEY][$FIELD_VALUE_ID]['ID'] . '">' . $sname . '</a>' . '<script type="text/javascript">BX.tooltip(' . $arList[$KEY][$FIELD_VALUE_ID]['ID'] . ', "balloon_' . $arParams['GRID_ID'] . '_' . $arList[$KEY][$FIELD_VALUE_ID]['ID'] . '", "");</script>'; } $arReplaceValue[$ID][$FIELD_NAME] .= (!empty($arReplaceValue[$ID][$FIELD_NAME]) ? $delimiter : '') . $sname; } else { if ($KEY == 'enumeration') { $arReplaceValue[$ID][$FIELD_NAME] .= (!empty($arReplaceValue[$ID][$FIELD_NAME]) ? $delimiter : '') . htmlspecialcharsbx($arList[$KEY][$FIELD_VALUE_ID]['VALUE']); } else { if ($KEY == 'file') { $fileInfo = $arList[$KEY][$FIELD_VALUE_ID]; if ($textonly) { $fileUrl = CFile::GetFileSRC($fileInfo); } else { $fileUrlTemplate = isset($arOptions['FILE_URL_TEMPLATE']) ? $arOptions['FILE_URL_TEMPLATE'] : ''; $fileUrl = $fileUrlTemplate === '' ? CFile::GetFileSRC($fileInfo) : CComponentEngine::MakePathFromTemplate($fileUrlTemplate, array('owner_id' => $ID, 'field_name' => $FIELD_NAME, 'file_id' => $fileInfo['ID'])); } $sname = $textonly ? $fileUrl : '<a href="' . htmlspecialcharsbx($fileUrl) . '" target="_blank">' . htmlspecialcharsbx($arList[$KEY][$FIELD_VALUE_ID]['FILE_NAME']) . '</a>'; $arReplaceValue[$ID][$FIELD_NAME] .= (!empty($arReplaceValue[$ID][$FIELD_NAME]) ? $delimiter : '') . $sname; } else { if ($KEY == 'crm') { foreach ($FIELD_VALUE_ID as $CID) { $link = ''; $title = ''; $prefix = ''; if ($FIELD_VALUE_NAME == 'LEAD') { $link = CComponentEngine::MakePathFromTemplate(COption::GetOptionString('crm', 'path_to_lead_show'), array('lead_id' => $CID)); $title = $arList[$KEY]['LEAD'][$CID]['TITLE']; $prefix = 'L'; } elseif ($FIELD_VALUE_NAME == 'CONTACT') { $link = CComponentEngine::MakePathFromTemplate(COption::GetOptionString('crm', 'path_to_contact_show'), array('contact_id' => $CID)); $title = CCrmContact::GetFullName($arList[$KEY]['CONTACT'][$CID], true); $prefix = 'C'; } elseif ($FIELD_VALUE_NAME == 'COMPANY') { $link = CComponentEngine::MakePathFromTemplate(COption::GetOptionString('crm', 'path_to_company_show'), array('company_id' => $CID)); $title = $arList[$KEY]['COMPANY'][$CID]['TITLE']; $prefix = 'CO'; } elseif ($FIELD_VALUE_NAME == 'DEAL') { $link = CComponentEngine::MakePathFromTemplate(COption::GetOptionString('crm', 'path_to_deal_show'), array('deal_id' => $CID)); $title = $arList[$KEY]['DEAL'][$CID]['TITLE']; $prefix = 'D'; } $sname = htmlspecialcharsbx($title); if (!$textonly) { $tooltip = '<script type="text/javascript">BX.tooltip(' . $CID . ', "balloon_' . $ID . '_' . $FIELD_NAME . '_' . $FIELD_VALUE_NAME . '_' . $CID . '", "/bitrix/components/bitrix/crm.' . strtolower($FIELD_VALUE_NAME) . '.show/card.ajax.php", "crm_balloon' . ($FIELD_VALUE_NAME == 'LEAD' || $FIELD_VALUE_NAME == 'DEAL' || $FIELD_VALUE_NAME == 'QUOTE' ? '_no_photo' : '_' . strtolower($FIELD_VALUE_NAME)) . '", true);</script>'; $sname = '<a href="' . $link . '" target="_blank" id="balloon_' . $ID . '_' . $FIELD_NAME . '_' . $FIELD_VALUE_NAME . '_' . $CID . '">' . $sname . '</a>' . $tooltip; } else { $sname = "[{$prefix}]{$sname}"; } $arReplaceValue[$ID][$FIELD_NAME] .= (!empty($arReplaceValue[$ID][$FIELD_NAME]) ? $delimiter : '') . $sname; } } } } } } } } } } } }
// arUserField VALUE- значение пользовательского свойства // ***************************************************************************************** $arParams["bVarsFromForm"] = $arParams["bVarsFromForm"] ? true : false; $arResult["VALUE"] = false; // ***************************************************************************************** if ($arParams["arUserField"]["USER_TYPE"]) { $arResult["VALUE"] = $arParams["~arUserField"]["VALUE"]; if (!is_array($arResult["VALUE"])) { $arResult["VALUE"] = array($arResult["VALUE"]); } if (empty($arResult["VALUE"])) { $arResult["VALUE"] = array(null); } $arResult["~VALUE"] = $arResult["VALUE"]; if ($arParams["arUserField"]["USER_TYPE"]["BASE_TYPE"] == "enum") { $obEnum = new CUserFieldEnum(); $rsEnum = $obEnum->GetList(array(), array("USER_FIELD_ID" => $arParams["arUserField"]["ID"])); $enum = array(); while ($arEnum = $rsEnum->GetNext()) { $enum[$arEnum["ID"]] = $arEnum["VALUE"]; } $arParams["arUserField"]["USER_TYPE"]["FIELDS"] = $enum; } foreach ($arResult["VALUE"] as $key => $res) { switch ($arParams["arUserField"]["USER_TYPE"]["BASE_TYPE"]) { case "double": if (strlen($res) > 0) { $res = round(doubleval($res), $arParams["arUserField"]["SETTINGS"]["PRECISION"]); } break; case "int":
/** * Synchronize source type fields with destination type fields. * Matches are searched by comparing field labels. * If a source field is not found in the destination type, it will be created there. * @static * @param int $srcEntityTypeID Source Entity Type ID * @param int $dstEntityTypeID Destination Entity Type ID * @param string $languageID Language * @return void */ public static function synchronize($srcEntityTypeID, $dstEntityTypeID, $languageID = '') { /** @var \CAllMain $APPLICATION */ global $APPLICATION; $entity = new \CUserTypeEntity(); $entityID = \CCrmOwnerType::ResolveUserFieldEntityID($dstEntityTypeID); $fields = self::getSynchronizationFields($srcEntityTypeID, $dstEntityTypeID, $languageID, true); foreach ($fields as $field) { $srcField = $entity->GetByID($field['ID']); if (!is_array($srcField)) { continue; } $typeID = $srcField['USER_TYPE_ID']; do { $fieldName = 'UF_CRM_' . strtoupper(uniqid()); $dbResult = $entity->GetList(array(), array('ENTITY_ID' => $entityID, 'FIELD_NAME' => $fieldName)); } while (is_array($dbResult->Fetch())); $dstField = array('FIELD_NAME' => $fieldName, 'ENTITY_ID' => $entityID, 'USER_TYPE_ID' => $typeID, 'SORT' => isset($srcField['SORT']) ? $srcField['SORT'] : 100, 'MULTIPLE' => isset($srcField['MULTIPLE']) ? $srcField['MULTIPLE'] : 'N', 'MANDATORY' => isset($srcField['MANDATORY']) ? $srcField['MANDATORY'] : 'N', 'SHOW_FILTER' => isset($srcField['SHOW_FILTER']) ? $srcField['SHOW_FILTER'] : 'N', 'SHOW_IN_LIST' => isset($srcField['SHOW_IN_LIST']) ? $srcField['SHOW_IN_LIST'] : 'N'); if (isset($srcField['SETTINGS'])) { $dstField['SETTINGS'] = $srcField['SETTINGS']; } if (isset($srcField['EDIT_FORM_LABEL'])) { $dstField['EDIT_FORM_LABEL'] = $srcField['EDIT_FORM_LABEL']; } if (isset($srcField['LIST_COLUMN_LABEL'])) { $dstField['LIST_COLUMN_LABEL'] = $srcField['LIST_COLUMN_LABEL']; } if (isset($srcField['LIST_FILTER_LABEL'])) { $dstField['LIST_FILTER_LABEL'] = $srcField['LIST_FILTER_LABEL']; } $ID = $entity->Add($dstField); if ($ID === false) { throw new UserFieldSynchronizationException($dstField, $APPLICATION->GetException(), UserFieldSynchronizationException::CREATE_FAILED, __FILE__, __LINE__); } if ($typeID === 'enumeration') { if (is_callable(array($field['USER_TYPE']['CLASS_NAME'], 'GetList'))) { $enumList = array(); $enumQty = 0; $enumResult = call_user_func_array(array($field['USER_TYPE']['CLASS_NAME'], 'GetList'), array($field)); while ($enum = $enumResult->GetNext()) { unset($enum['ID']); $enumList["n{$enumQty}"] = $enum; $enumQty++; } $enumEntity = new \CUserFieldEnum(); $enumEntity->SetEnumValues($ID, $enumList); } } } $historyItem = self::getHistoryItem($srcEntityTypeID, $dstEntityTypeID); if ($historyItem === null) { $historyItem = array(); } $historyItem['sync'] = new DateTime(); $historyItem['check'] = new DateTime(); $historyItem['required'] = false; self::setHistoryItem($srcEntityTypeID, $dstEntityTypeID, $historyItem); }
$v = intval($matches[1][0]) + (strtolower($matches[3][0]) == 'pm' ? 12 : 0) . ':' . $matches[2][0]; } } $arFields[$key] = $v; } else { $arFields[$key] = $_REQUEST[$key]; } } if ($arFields['UF_TM_ALLOWED_DELTA']) { $arFields['UF_TM_ALLOWED_DELTA'] = CTimeMan::FormatTime($arFields['UF_TM_ALLOWED_DELTA'], true); } $arAllFields = $USER_FIELD_MANAGER->GetUserFields($source == 'department' ? 'IBLOCK_' . COption::GetOptionInt('intranet', 'iblock_structure') . '_SECTION' : 'USER'); $arEnumFields = array('UF_TIMEMAN', 'UF_TM_REPORT_REQ', 'UF_TM_FREE'); foreach ($arEnumFields as $fld) { if ($arFields[$fld]) { $dbRes = CUserFieldEnum::GetList(array(), array('USER_FIELD_ID' => $arAllFields[$fld]['ID'], 'XML_ID' => $arFields[$fld])); if ($arRes = $dbRes->Fetch()) { $arFields[$fld] = $arRes['ID']; } } } if ($source == 'department') { $obSection = new CIBlockSection(); $obSection->Update($ID, $arFields); $CACHE_MANAGER->CleanDir("timeman_structure_" . COption::GetOptionInt('intranet', 'iblock_structure')); $res = array('ID' => $ID, 'SETTINGS' => CTimeMan::GetSectionPersonalSettings($ID, true, $arNeededSettings), 'SETTINGS_ALL' => CTimeMan::GetSectionSettings($ID, $arNeededSettings)); } else { $obUser = new CUser(); $obUser->Update($ID, $arFields); $CACHE_MANAGER->CleanDir("timeman_structure_" . COption::GetOptionInt('intranet', 'iblock_structure')); $TMUSER = new CTimeManUser($ID);
public static function OnSearchIndex($arUserField) { $res = ''; if (is_array($arUserField["VALUE"])) { $val = $arUserField["VALUE"]; } else { $val = array($arUserField["VALUE"]); } $val = array_filter($val, "strlen"); if (count($val)) { $ob = new CUserFieldEnum(); $rs = $ob->GetList(array(), array("USER_FIELD_ID" => $arUserField["ID"], "ID" => $val)); while ($ar = $rs->Fetch()) { $res .= $ar["VALUE"] . "\r\n"; } } return $res; }