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 ImportSectionPropertyEnum($FIELD_ID, $arEnumXmlNodes) { $arEnumMap = array(); $arEnumValues = array(); $obEnum = new CUserFieldEnum(); $rsEnum = $obEnum->GetList(array(), array("USER_FIELD_ID" => $FIELD_ID)); while ($arEnum = $rsEnum->Fetch()) { $arEnumValues[$arEnum["ID"]] = $arEnum; $arEnumMap[$arEnum["XML_ID"]] =& $arEnumValues[$arEnum["ID"]]; } $i = 0; foreach ($arEnumXmlNodes as $arE) { if ($arE["NAME"] == $this->mess["IBLOCK_XML2_CHOICE"]) { $arE = $this->_xml_file->GetAllChildrenArray($arE); if (isset($arE[$this->mess["IBLOCK_XML2_ID"]])) { $xml_id = $arE[$this->mess["IBLOCK_XML2_ID"]]; if (!array_key_exists($xml_id, $arEnumMap)) { $arEnumValues["n" . $i] = array(); $arEnumMap[$xml_id] =& $arEnumValues["n" . $i]; $i++; } $arEnumMap[$xml_id]["CML2_EXPORT_FLAG"] = true; $arEnumMap[$xml_id]["XML_ID"] = $xml_id; if (isset($arE[$this->mess["IBLOCK_XML2_VALUE"]])) { $arEnumMap[$xml_id]["VALUE"] = $arE[$this->mess["IBLOCK_XML2_VALUE"]]; } if (isset($arE[$this->mess["IBLOCK_XML2_BY_DEFAULT"]])) { $arEnumMap[$xml_id]["DEF"] = $arE[$this->mess["IBLOCK_XML2_BY_DEFAULT"]] == "true" || intval($arE[$this->mess["IBLOCK_XML2_BY_DEFAULT"]]) ? "Y" : "N"; } if (isset($arE[$this->mess["IBLOCK_XML2_SORT"]])) { $arEnumMap[$xml_id]["SORT"] = intval($arE[$this->mess["IBLOCK_XML2_SORT"]]); } } } } $bUpdateOnly = array_key_exists("bUpdateOnly", $this->next_step) && $this->next_step["bUpdateOnly"]; $sort = 100; foreach ($arEnumValues as $id => $arEnum) { if (!isset($arEnum["CML2_EXPORT_FLAG"])) { //Delete value only when full exchange happened if (!$bUpdateOnly) { $arEnumValues[$id]["VALUE"] = ""; } } elseif (isset($arEnum["SORT"])) { if ($arEnum["SORT"] > $sort) { $sort = $arEnum["SORT"] + 100; } } else { $arEnumValues[$id]["SORT"] = $sort; $sort += 100; } } $obEnum = new CUserFieldEnum(); $res = $obEnum->SetEnumValues($FIELD_ID, $arEnumValues); return true; }
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; }
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; } } } }
protected function migrateCustomUf($oldName, $newName) { global $DB; $arUserFieldQuery = CUserTypeEntity::GetList(array(), array("ENTITY_ID" => $oldName)); if (!$arUserFieldQuery) { return; } $blackList = array('UF_LINK_SECTION_ID' => true, 'UF_LINK_IBLOCK_ID' => true, 'UF_LINK_CAN_FORWARD' => true, 'UF_LINK_RSECTION_ID' => true, 'UF_USE_DOC_PREVIEW' => true, 'UF_USE_EXT_SERVICES' => true, 'UF_USE_BP' => true); $oldTableNameUf = "b_utm_" . strtolower($oldName); $oldTableNameSingleUf = "b_uts_" . strtolower($oldName); $newTableNameUf = "b_utm_" . strtolower($newName); $newTableNameSingleUf = "b_uts_" . strtolower($newName); $isFolder = strpos($newName, 'FILE') === false; $externalColumn = $isFolder ? 'WEBDAV_SECTION_ID' : 'WEBDAV_ELEMENT_ID'; $columns = array(); while ($arUserField = $arUserFieldQuery->fetch()) { if (isset($blackList[$arUserField['FIELD_NAME']])) { continue; } $enumValueInfos = array(); $rs = $DB->Query("SELECT * FROM b_user_field_lang WHERE USER_FIELD_ID = " . intval($arUserField['ID']), false, "FILE: " . __FILE__ . "<br>LINE: " . __LINE__); while ($ar = $rs->Fetch()) { foreach (array("EDIT_FORM_LABEL", "LIST_COLUMN_LABEL", "LIST_FILTER_LABEL", "ERROR_MESSAGE", "HELP_MESSAGE") as $label) { $arUserField[$label][$ar["LANGUAGE_ID"]] = $ar[$label]; } } if ($arUserField['USER_TYPE_ID'] == 'enumeration') { $dbRes = CUserFieldEnum::GetList(array(), array('USER_FIELD_ID' => $arUserField['ID'])); $key = 0; while ($valueData = $dbRes->Fetch()) { $enumValueInfos['n' . $key] = array('VALUE' => $valueData['VALUE'], 'XML_ID' => $valueData['XML_ID'], 'DEF' => $valueData['DEF'], 'SORT' => $valueData['SORT']); $key++; } } $arUserField['ENTITY_ID'] = $newName; $CAllUserTypeEntity = new CUserTypeEntity(); unset($arUserField['ID']); $id = $CAllUserTypeEntity->add($arUserField); if ($id) { $id = (int) $id; $oldId = (int) $arUserField['ID']; $columns[] = $arUserField['FIELD_NAME']; if ($arUserField['MULTIPLE'] == 'Y') { if ($isFolder) { //id section == id folders $this->connection->queryExecute("\n\t\t\t\t\t\tINSERT INTO {$newTableNameUf} (VALUE_ID, FIELD_ID, VALUE, VALUE_INT, VALUE_DOUBLE, VALUE_DATE)\n\t\t\t\t\t\t\tSELECT obj.ID, {$id}, VALUE, VALUE_INT, VALUE_DOUBLE, VALUE_DATE FROM {$oldTableNameUf}\n\t\t\t\t\t\t\tWHERE FIELD_ID = {$oldId}\n\t\t\t\t\t\t"); } else { $this->connection->queryExecute("\n\t\t\t\t\t\tINSERT INTO {$newTableNameUf} (VALUE_ID, FIELD_ID, VALUE, VALUE_INT, VALUE_DOUBLE, VALUE_DATE)\n\t\t\t\t\t\t\tSELECT obj.ID, {$id}, VALUE, VALUE_INT, VALUE_DOUBLE, VALUE_DATE FROM {$oldTableNameUf}\n\t\t\t\t\t\t\t\tINNER JOIN b_disk_object obj ON obj.{$externalColumn} = {$oldTableNameUf}.VALUE_ID\n\t\t\t\t\t\t\tWHERE FIELD_ID = {$oldId}\n\t\t\t\t\t\t"); } } } if ($id && $enumValueInfos) { $obEnum = new CUserFieldEnum(); $res = $obEnum->SetEnumValues($id, $enumValueInfos); } if (!$id) { $this->log(array('Could not add userType', $arUserField)); } } if ($columns) { if ($isFolder) { //id section == id folders $this->connection->queryExecute("\n\t\t\t\tINSERT INTO {$newTableNameSingleUf} (VALUE_ID, " . implode(',', $columns) . ")\n\t\t\t\t\tSELECT VALUE_ID, " . implode(',', $columns) . " FROM {$oldTableNameSingleUf}\n\t\t\t\t"); } else { $this->connection->queryExecute("\n\t\t\t\tINSERT INTO {$newTableNameSingleUf} (VALUE_ID, " . implode(',', $columns) . ")\n\t\t\t\t\tSELECT obj.ID, " . implode(',', $columns) . " FROM {$oldTableNameSingleUf}\n\t\t\t\t\t\tINNER JOIN b_disk_object obj ON obj.{$externalColumn} = {$oldTableNameSingleUf}.VALUE_ID\n\t\t\t\t"); } } }
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; }
$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')); $arLanguages = array();
/** * 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); }
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; } } } }
/** * @param string $entity * @param array $data * @var bool $deleteIfExists */ protected function UFUpdate(array $data) { global $USER_FIELD_MANAGER; if (empty($data['FIELD_NAME'])) { throw new \Exception('You must set group FIELD_NAME'); } if (empty($data['ENTITY_ID'])) { throw new \Exception('You must set group ENTITY_ID'); } $fire = false; if ($id = $this->UFGetIdByCode($data['ENTITY_ID'], $data['FIELD_NAME'])) { $ib = new \CUserTypeEntity(); $id = $ib->Update($id, $data); if ($id) { echo "Update {$data['FIELD_NAME']} user field\r\n"; if (!empty($data['LIST']) && ($arType = $USER_FIELD_MANAGER->GetUserType($data['USER_TYPE_ID'])) && $arType['BASE_TYPE'] == 'enum') { $obEnum = new \CUserFieldEnum(); $res = $obEnum->SetEnumValues($id, $data['LIST']); echo "Update {$data['FIELD_NAME']} user field list\r\n"; } } } else { throw new \Exception("Can't update {$data['FIELD_NAME']} user field"); } }
foreach ($arUserFields as $key => $arFields) { if (array_key_exists($key, $arExistFields)) { if ($arFields["USER_TYPE_ID"] == "enumeration") { $entities = $obUserType->GetList(array(), array("ENTITY_ID" => $entity, "FIELD_NAME" => $arFields["FIELD_NAME"])); $arEnumValuesUpdate = array(); if ($arEntity = $entities->Fetch()) { $dbEnumValues = $obEnum->GetList(array(), array("USER_FIELD_ID" => $arEntity["ID"])); while ($arEnumValue = $dbEnumValues->Fetch()) { unset($arFields["ENUM"][$arEnumValue["XML_ID"]]); } if (count($arFields["ENUM"]) > 0) { foreach ($arFields["ENUM"] as $key => $name) { $arEnumValuesUpdate['n' . $key] = array('VALUE' => $name, 'XML_ID' => $key, 'DEF' => $key == $arFields['ENUM_DEFAULT'] ? 'Y' : 'N'); } } $obEnum->SetEnumValues($arEntity["ID"], $arEnumValuesUpdate); } } else { continue; } } $arFields['ENTITY_ID'] = $entity; if ($enum = $arFields['ENUM']) { unset($arFields['ENUM']); } if ($FIELD_ID = $obUserType->Add($arFields)) { if (is_array($enum)) { $arEnumValues = array(); foreach ($enum as $key => $name) { $arEnumValues['n' . $key] = array('VALUE' => $name, 'XML_ID' => $key, 'DEF' => $key == $arFields['ENUM_DEFAULT'] ? 'Y' : 'N'); }