public function getOptions() { if (!isset($this->options)) { $res = \CIBlockProperty::GetPropertyEnum($this->data['ID'], array("SORT" => "asc"), array()); while ($row = $res->Fetch()) { $this->options[] = $row; } } return $this->options; }
/** * Получить ID значения свойства типа "список" у инфоблока * * @param string $iblockCode * @param string $propertyCode * @param string $enumCode * @return int|bool */ public static function getIblockPropertyEnumId($iblockCode, $propertyCode, $enumCode) { if (!empty(self::$iblockPropertyEnumId[$iblockCode][$propertyCode][$enumCode])) { return self::$iblockPropertyEnumId[$iblockCode][$propertyCode][$enumCode]; } if (!($iblockId = self::getIblockId($iblockCode))) { return false; } if ($enum = \CIBlockProperty::GetPropertyEnum($propertyCode, [], ['IBLOCK_ID' => $iblockId, 'EXTERNAL_ID' => $enumCode])->fetch()) { self::$iblockPropertyEnumId[$iblockCode][$propertyCode][$enumCode] = $enum['ID']; return $enum['ID']; } return false; }
/** * Тип свойства - список * По коду и значению свойства получить id этого значения * В случае отсутствия, значение будет создано и будет возвращен его id * * <code> * $propertyCountryValue = getPropertyEnumValueId($IBLOCK_ID, 'COUNTRIES', 'Япония'); * $be = new CIBlockElement; * $be->Add(array( * "ACTIVE" => 'Y', * "IBLOCK_ID" => $IBLOCK_ID, * "NAME" => $name, * "PROPERTY_VALUES" => array( * 'COUNTRIES' => $propertyCountryValue, * ) * ); * </code> * @param $IBLOCK_ID int id инфоблока, в котором находится данное свойство * @param $prop string код свойства * @param $value string значение свойства * @return bool|int ID значения свойства или false, если не удалось найти свойство с таким кодом или не удалось создать запись с данным значением */ function getPropertyEnumValueId($IBLOCK_ID, $prop, $value) { $property = CIBlockProperty::GetByID($prop, $IBLOCK_ID)->Fetch(); if (!$property) { return false; } $ar_enum_list = CIBlockProperty::GetPropertyEnum($prop, array("SORT" => "asc"), array("IBLOCK_ID" => $IBLOCK_ID, 'VALUE' => $value))->Fetch(); if (!$ar_enum_list) { $ibpenum = new CIBlockPropertyEnum(); if ($PropID = $ibpenum->Add(array('PROPERTY_ID' => $property['ID'], 'VALUE' => $value))) { $ar_enum_list['ID'] = $PropID; } else { return false; } } return $ar_enum_list['ID']; }
/** * Получает значиния свойства типа Список * * @param $code * @param string $iblockID * @param string $valueID * @return array */ public static function getPropertyEnum($code, $iblockID = '', $valueID = '') { if (intval($iblockID) > 0) { $arFilter = array('IBLOCK_ID' => $iblockID); } if (intval($iblockID) > 0) { $arFilter['ID'] = $valueID; } $result = array(); $rsPropertyEnum = CIBlockProperty::GetPropertyEnum( $code, array('sort' => 'asc'), $arFilter ); while($arPropertyEnum = $rsPropertyEnum->GetNext()) { $result[] = $arPropertyEnum; } return $result; }
function ExportProperties(&$PROPERTY_MAP) { $PROPERTY_MAP = array(); fwrite($this->fp, "\t\t<".GetMessage("IBLOCK_XML2_PROPERTIES").">\n"); if($this->bExtended) { $arElementFields = array( "CML2_ACTIVE" => GetMessage("IBLOCK_XML2_BX_ACTIVE"), "CML2_CODE" => GetMessage("IBLOCK_XML2_SYMBOL_CODE"), "CML2_SORT" => GetMessage("IBLOCK_XML2_SORT"), "CML2_ACTIVE_FROM" => GetMessage("IBLOCK_XML2_START_TIME"), "CML2_ACTIVE_TO" => GetMessage("IBLOCK_XML2_END_TIME"), "CML2_PREVIEW_TEXT" => GetMessage("IBLOCK_XML2_ANONS"), "CML2_DETAIL_TEXT" => GetMessage("IBLOCK_XML2_DETAIL"), "CML2_PREVIEW_PICTURE" => GetMessage("IBLOCK_XML2_PREVIEW_PICTURE"), ); foreach($arElementFields as $key => $value) fwrite($this->fp, $this->formatXMLNode(3, GetMessage("IBLOCK_XML2_PROPERTY"), array( GetMessage("IBLOCK_XML2_ID") => $key, GetMessage("IBLOCK_XML2_NAME") => $value, GetMessage("IBLOCK_XML2_MULTIPLE") => "false", ))); } $arFilter = array( "IBLOCK_ID" => $this->arIBlock["ID"], "ACTIVE" => "Y", ); $arSort = array( "sort" => "asc", ); $obProp = new CIBlockProperty(); $rsProp = $obProp->GetList($arSort, $arFilter); while($arProp = $rsProp->Fetch()) { fwrite($this->fp, "\t\t\t<".GetMessage("IBLOCK_XML2_PROPERTY").">\n"); $xml_id = $this->GetPropertyXML_ID($this->arIBlock["ID"], $arProp["NAME"], $arProp["ID"], $arProp["XML_ID"]); $PROPERTY_MAP[$arProp["ID"]] = $xml_id; fwrite($this->fp, $this->formatXMLNode(4, GetMessage("IBLOCK_XML2_ID"), $xml_id)); fwrite($this->fp, $this->formatXMLNode(4, GetMessage("IBLOCK_XML2_NAME"), $arProp["NAME"])); fwrite($this->fp, $this->formatXMLNode(4, GetMessage("IBLOCK_XML2_MULTIPLE"), ($arProp["MULTIPLE"]=="Y"? "true": "false"))); if($arProp["PROPERTY_TYPE"]=="L") { fwrite($this->fp, "\t\t\t\t<".GetMessage("IBLOCK_XML2_CHOICE_VALUES").">\n"); $rsEnum = CIBlockProperty::GetPropertyEnum($arProp["ID"]); while($arEnum = $rsEnum->Fetch()) { fwrite($this->fp, $this->formatXMLNode(5, GetMessage("IBLOCK_XML2_VALUE"), $arEnum["VALUE"])); if($this->bExtended) { fwrite($this->fp, "\t\t\t\t\t<".GetMessage("IBLOCK_XML2_CHOICE").">\n" .$this->formatXMLNode(6, GetMessage("IBLOCK_XML2_ID"), $arEnum["XML_ID"]) .$this->formatXMLNode(6, GetMessage("IBLOCK_XML2_VALUE"), $arEnum["VALUE"]) .$this->formatXMLNode(6, GetMessage("IBLOCK_XML2_BY_DEFAULT"), ($arEnum["DEF"]=="Y"? "true": "false")) .$this->formatXMLNode(6, GetMessage("IBLOCK_XML2_SORT"), intval($arEnum["SORT"])) ."\t\t\t\t\t</".GetMessage("IBLOCK_XML2_CHOICE").">\n" ); } } fwrite($this->fp, "\t\t\t\t</".GetMessage("IBLOCK_XML2_CHOICE_VALUES").">\n"); } if($this->bExtended) { fwrite($this->fp, $this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_SORT"), intval($arProp["SORT"])) .$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_CODE"), $arProp["CODE"]) .$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_PROPERTY_TYPE"), $arProp["PROPERTY_TYPE"]) .$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_ROWS"), $arProp["ROW_COUNT"]) .$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_COLUMNS"), $arProp["COL_COUNT"]) .$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_LIST_TYPE"), $arProp["LIST_TYPE"]) .$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_FILE_EXT"), $arProp["FILE_TYPE"]) .$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_FIELDS_COUNT"), $arProp["MULTIPLE_CNT"]) .$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_LINKED_IBLOCK"), $this->GetIBlockXML_ID($arProp["LINK_IBLOCK_ID"])) .$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_WITH_DESCRIPTION"), ($arProp["WITH_DESCRIPTION"]=="Y"? "true": "false")) .$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_SEARCH"), ($arProp["SEARCHABLE"]=="Y"? "true": "false")) .$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_FILTER"), ($arProp["FILTRABLE"]=="Y"? "true": "false")) .$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_USER_TYPE"), $arProp["USER_TYPE"]) .$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_IS_REQUIRED"), ($arProp["IS_REQUIRED"]=="Y"? "true": "false")) .$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_DEFAULT_VALUE"), serialize($arProp["DEFAULT_VALUE"])) .$this->formatXMLNode(4, GetMessage("IBLOCK_XML2_SERIALIZED"), 1) ); } fwrite($this->fp, "\t\t\t</".GetMessage("IBLOCK_XML2_PROPERTY").">\n"); } fwrite($this->fp, "\t\t</".GetMessage("IBLOCK_XML2_PROPERTIES").">\n"); if($this->bExtended) { $arPropLink = CIBlockSectionPropertyLink::GetArray($this->arIBlock["ID"], 0); foreach($arPropLink as $PID => $arLink) if($arLink["INHERITED"] != "N" || !array_key_exists($PID, $PROPERTY_MAP)) unset($arPropLink[$PID]); if(!empty($arPropLink)) { fwrite($this->fp, "\t\t<".GetMessage("IBLOCK_XML2_SECTION_PROPERTIES").">\n"); foreach($arPropLink as $PID => $arLink) { fwrite($this->fp, "\t\t\t<".GetMessage("IBLOCK_XML2_PROPERTY").">\n"); fwrite($this->fp, "\t\t\t\t<".GetMessage("IBLOCK_XML2_ID").">".htmlspecialcharsbx($PROPERTY_MAP[$PID])."</".GetMessage("IBLOCK_XML2_ID").">\n"); fwrite($this->fp, "\t\t\t\t<".GetMessage("IBLOCK_XML2_SMART_FILTER").">".($arLink["SMART_FILTER"] == "Y"? "true": "false")."</".GetMessage("IBLOCK_XML2_SMART_FILTER").">\n"); fwrite($this->fp, "\t\t\t</".GetMessage("IBLOCK_XML2_PROPERTY").">\n"); } fwrite($this->fp, "\t\t</".GetMessage("IBLOCK_XML2_SECTION_PROPERTIES").">\n"); } } }
} $arResult["arrProp"][$arProp["ID"]] = $arTemp; } } // offer properties if ($arResultModules['catalog']) { $arOffersIBlock = CIBlockPriceTools::GetOffersIBlock($arParams["IBLOCK_ID"]); if (is_array($arOffersIBlock)) { $rsProp = CIBlockProperty::GetList(array("sort" => "asc", "name" => "asc"), array("ACTIVE" => "Y", "IBLOCK_ID" => $arOffersIBlock["OFFERS_IBLOCK_ID"])); while ($arProp = $rsProp->Fetch()) { if (in_array($arProp["CODE"], $arParams["OFFERS_PROPERTY_CODE"]) && $arProp["PROPERTY_TYPE"] != "F") { $arTemp = array("CODE" => $arProp["CODE"], "NAME" => $arProp["NAME"], "PROPERTY_TYPE" => $arProp["PROPERTY_TYPE"], "MULTIPLE" => $arProp["MULTIPLE"]); if ($arProp["PROPERTY_TYPE"] == "L") { $arTemp['LIST_TYPE'] = $arProp['LIST_TYPE']; $arrEnum = array(); $rsEnum = CIBlockProperty::GetPropertyEnum($arProp["ID"]); while ($arEnum = $rsEnum->Fetch()) { $arrEnum[$arEnum["ID"]] = $arEnum["VALUE"]; } $arTemp["VALUE_LIST"] = $arrEnum; } $arResult["arrOfferProp"][$arProp["ID"]] = $arTemp; } } } } $arResult['MODULES'] = $arResultModules; $this->EndResultCache(); } $arResult["FORM_ACTION"] = isset($_SERVER['REQUEST_URI']) ? htmlspecialcharsbx($_SERVER['REQUEST_URI']) : ""; $arResult["FILTER_NAME"] = $FILTER_NAME;
$arFilter = array("IBLOCK_ID" => $arParams["BLOCK_ID"], "CHECK_BP_VIRTUAL_PERMISSIONS" => "read"); $gridFilter = $gridOptions->GetFilter($arResult["FILTER"]); foreach ($gridFilter as $key => $value) { if (substr($key, -5) == "_from") { $op = ">="; $newKey = substr($key, 0, -5); } elseif (substr($key, -3) == "_to") { $op = "<="; $newKey = substr($key, 0, -3); } else { $op = ""; $newKey = $key; } if (array_key_exists($newKey, $arDocumentFields) && $arDocumentFields[$newKey]["Filterable"]) { if ($arDocumentFields[$newKey]["BaseType"] == "select") { $db = CIBlockProperty::GetPropertyEnum(substr($newKey, strlen("PROPERTY_")), array(), array("XML_ID" => $value, "IBLOCK_ID" => $arParams["BLOCK_ID"])); while ($ar = $db->Fetch()) { $value = $ar["ID"]; } } elseif ($arDocumentFields[$newKey]["BaseType"] == "string" || $arDocumentFields[$newKey]["BaseType"] == "text") { if ($op == "") { $op = "?"; } } elseif ($arDocumentFields[$newKey]["BaseType"] == "user") { $value = CBPHelper::UsersStringToArray($value, $documentType, $arErrors); if (is_array($value) && count($value) > 0) { $value = $value[0]; } if (substr($value, 0, strlen("user_")) == "user_") { $value = substr($value, strlen("user_")); }
$arProperty = array("ID" => $str_PROPERTY_ID, "ACTIVE" => $_POST["PROPERTY_ACTIVE"], "IBLOCK_ID" => $_POST["IBLOCK_ID"], "NAME" => $_POST["PROPERTY_NAME"], "SORT" => $_POST["PROPERTY_SORT"], "CODE" => $_POST["PROPERTY_CODE"], "MULTIPLE" => $_POST["PROPERTY_MULTIPLE"], "IS_REQUIRED" => $_POST["PROPERTY_IS_REQUIRED"], "SEARCHABLE" => $_POST["PROPERTY_SEARCHABLE"], "FILTRABLE" => $_POST["PROPERTY_FILTRABLE"], "WITH_DESCRIPTION" => $_POST["PROPERTY_WITH_DESCRIPTION"], "MULTIPLE_CNT" => $_POST["PROPERTY_MULTIPLE_CNT"], "HINT" => $_POST["PROPERTY_HINT"], "SECTION_PROPERTY" => $_POST["PROPERTY_SECTION_PROPERTY"], "SMART_FILTER" => $_POST["PROPERTY_SMART_FILTER"], "DISPLAY_TYPE" => $_POST["PROPERTY_DISPLAY_TYPE"], "DISPLAY_EXPANDED" => $_POST["PROPERTY_DISPLAY_EXPANDED"], "FILTER_HINT" => $_POST["PROPERTY_FILTER_HINT"], "ROW_COUNT" => $_POST["PROPERTY_ROW_COUNT"], "COL_COUNT" => $_POST["PROPERTY_COL_COUNT"], "DEFAULT_VALUE" => $_POST["PROPERTY_DEFAULT_VALUE"], "FILE_TYPE" => $_POST["PROPERTY_FILE_TYPE"]); if (isset($_POST["PROPERTY_PROPERTY_TYPE"])) { if (strpos($_POST["PROPERTY_PROPERTY_TYPE"], ":")) { list($arProperty["PROPERTY_TYPE"], $arProperty["USER_TYPE"]) = explode(':', $_POST["PROPERTY_PROPERTY_TYPE"], 2); } else { $arProperty["PROPERTY_TYPE"] = $_POST["PROPERTY_PROPERTY_TYPE"]; } } if (!empty($arListValues)) { $arProperty["VALUES"] = $arListValues; } } elseif (is_array($arPropCheck)) { $arProperty = $arPropCheck; if ($arProperty['PROPERTY_TYPE'] == "L") { $arProperty['VALUES'] = array(); $rsLists = CIBlockProperty::GetPropertyEnum($arProperty['ID'], array('SORT' => 'ASC', 'ID' => 'ASC')); while ($res = $rsLists->Fetch()) { $arProperty['VALUES'][$res["ID"]] = array('ID' => $res["ID"], 'VALUE' => $res["VALUE"], 'SORT' => $res['SORT'], 'XML_ID' => $res["XML_ID"], 'DEF' => $res['DEF']); } } $arPropLink = CIBlockSectionPropertyLink::GetArray($intIBlockID, 0); if (isset($arPropLink[$arProperty["ID"]])) { $arProperty["SECTION_PROPERTY"] = "Y"; $arProperty["SMART_FILTER"] = $arPropLink[$arProperty["ID"]]["SMART_FILTER"] == 'Y' ? 'Y' : 'N'; $arProperty["DISPLAY_TYPE"] = $arPropLink[$arProperty["ID"]]["DISPLAY_TYPE"]; $arProperty["DISPLAY_EXPANDED"] = $arPropLink[$arProperty["ID"]]["DISPLAY_EXPANDED"] == 'Y' ? 'Y' : 'N'; $arProperty["FILTER_HINT"] = $arPropLink[$arProperty["ID"]]["FILTER_HINT"]; } else { $arProperty["SECTION_PROPERTY"] = "N"; $arProperty["SMART_FILTER"] = "N"; $arProperty["DISPLAY_TYPE"] = "";
*/ $arTypesConfig = array('vendor.model' => array('vendor', 'vendorCode', 'model', 'manufacturer_warranty'), 'book' => array('author', 'publisher', 'series', 'year', 'ISBN', 'volume', 'part', 'language', 'binding', 'page_extent', 'table_of_contents'), 'audiobook' => array('author', 'publisher', 'series', 'year', 'ISBN', 'performed_by', 'performance_type', 'language', 'volume', 'part', 'format', 'storage', 'recording_length', 'table_of_contents'), 'artist.title' => array('title', 'artist', 'director', 'starring', 'originalName', 'country', 'year', 'media')); $arTypesConfigKeys = array_keys($arTypesConfig); $dbRes = CIBlockProperty::GetList(array('sort' => 'asc'), array('IBLOCK_ID' => $intIBlockID, 'ACTIVE' => 'Y')); $arIBlock['PROPERTY'] = array(); $arIBlock['OFFERS_PROPERTY'] = array(); while ($arRes = $dbRes->Fetch()) { $arIBlock['PROPERTY'][$arRes['ID']] = $arRes; } if ($boolOffers) { $rsProps = CIBlockProperty::GetList(array('SORT' => 'ASC'), array('IBLOCK_ID' => $intOfferIBlockID, 'ACTIVE' => 'Y')); while ($arProp = $rsProps->Fetch()) { if ($arOffers['SKU_PROPERTY_ID'] != $arProp['ID']) { if ($arProp['PROPERTY_TYPE'] == 'L') { $arProp['VALUES'] = array(); $rsPropEnums = CIBlockProperty::GetPropertyEnum($arProp['ID'], array('sort' => 'asc'), array('IBLOCK_ID' => $intOfferIBlockID)); while ($arPropEnum = $rsPropEnums->Fetch()) { $arProp['VALUES'][$arPropEnum['ID']] = $arPropEnum['VALUE']; } } $arIBlock['OFFERS_PROPERTY'][$arProp['ID']] = $arProp; if (in_array($arProp['PROPERTY_TYPE'], $arSelectedPropTypes)) { $arSelectOfferProps[] = $arProp['ID']; } } } } if ($_SERVER['REQUEST_METHOD'] == 'POST') { if (!empty($_REQUEST['save'])) { $arErrors = array(); $arCurrency = array('RUB' => array('rate' => 1));
/** * ћетод создает новый документ с указанными свойствами (пол¤ми). * * @param array $arFields - массив значений свойств документа в виде array(код_свойства => значение, ...). оды свойств соответствуют кодам свойств, возвращаемым методом GetDocumentFields. * @return int - код созданного документа. */ public function CreateDocument($parentDocumentId, $arFields) { if (!array_key_exists("IBLOCK_ID", $arFields) || intval($arFields["IBLOCK_ID"]) <= 0) { throw new Exception("IBlock ID is not found"); } $arFieldsPropertyValues = array(); $arDocumentFields = self::GetDocumentFields("iblock_" . $arFields["IBLOCK_ID"]); $arKeys = array_keys($arFields); foreach ($arKeys as $key) { if (!array_key_exists($key, $arDocumentFields)) { continue; } $arFields[$key] = is_array($arFields[$key]) && !CBPHelper::IsAssociativeArray($arFields[$key]) ? $arFields[$key] : array($arFields[$key]); if ($arDocumentFields[$key]["Type"] == "user") { $ar = array(); foreach ($arFields[$key] as $v1) { if (substr($v1, 0, strlen("user_")) == "user_") { $ar[] = substr($v1, strlen("user_")); } else { $a1 = self::GetUsersFromUserGroup($v1, $documentId); foreach ($a1 as $a11) { $ar[] = $a11; } } } $arFields[$key] = $ar; } elseif ($arDocumentFields[$key]["Type"] == "select") { $realKey = substr($key, 0, strlen("PROPERTY_")) == "PROPERTY_" ? substr($key, strlen("PROPERTY_")) : $key; $arV = array(); $db = CIBlockProperty::GetPropertyEnum($realKey, false, array("IBLOCK_ID" => $arFields["IBLOCK_ID"])); while ($ar = $db->GetNext()) { $arV[$ar["XML_ID"]] = $ar["ID"]; } foreach ($arFields[$key] as &$value) { if (array_key_exists($value, $arV)) { $value = $arV[$value]; } } } elseif ($arDocumentFields[$key]["Type"] == "file") { foreach ($arFields[$key] as &$value) { $value = CFile::MakeFileArray($value); } } elseif ($arDocumentFields[$key]["Type"] == "S:HTML") { foreach ($arFields[$key] as &$value) { $value = array("VALUE" => $value); } } if (!$arDocumentFields[$key]["Multiple"] && is_array($arFields[$key])) { if (count($arFields[$key]) > 0) { $a = array_values($arFields[$key]); $arFields[$key] = $a[0]; } else { $arFields[$key] = null; } } if (substr($key, 0, strlen("PROPERTY_")) == "PROPERTY_") { $realKey = substr($key, strlen("PROPERTY_")); $arFieldsPropertyValues[$realKey] = is_array($arFields[$key]) && !CBPHelper::IsAssociativeArray($arFields[$key]) ? $arFields[$key] : array($arFields[$key]); unset($arFields[$key]); } } if (count($arFieldsPropertyValues) > 0) { $arFields["PROPERTY_VALUES"] = $arFieldsPropertyValues; } $iblockElement = new CIBlockElement(); $id = $iblockElement->Add($arFields, false, true, true); if (!$id || $id <= 0) { throw new Exception($iblockElement->LAST_ERROR); } return $id; }
while ($price = $rsPrice->Fetch()) { $arPrices[] = $price; $arHeaders[] = array("id" => "PRICE" . $price["ID"], "content" => htmlspecialcharsex(!empty($price["NAME_LANG"]) ? $price["NAME_LANG"] : $price["NAME"]), "default" => $price["BASE"] == 'Y' ? true : false); } $arHeaders[] = array("id" => "ACT", "content" => GetMessage("SPS_FIELD_ACTION"), "default" => true); $lAdmin->AddHeaders($arHeaders); $arSelectedFields = $lAdmin->GetVisibleHeaderColumns(); if (!in_array('ACT', $arSelectedFields)) { $arSelectedFields[] = 'ACT'; } $arSelectedProps = array(); foreach ($arProps as $prop) { if ($key = array_search("PROPERTY_" . $prop['ID'], $arSelectedFields)) { $arSelectedProps[] = $prop; $arSelect[$prop['ID']] = array(); $props = CIBlockProperty::GetPropertyEnum($prop['ID']); while ($res = $props->Fetch()) { $arSelect[$prop['ID']][$res["ID"]] = $res["VALUE"]; } unset($arSelectedFields[$key]); } } if (!in_array("ID", $arSelectedFields)) { $arSelectedFields[] = "ID"; } $arSelectedFields[] = "LANG_DIR"; $arSelectedFields[] = "LID"; $arSelectedFields[] = "WF_PARENT_ELEMENT_ID"; $arSelectedFields[] = "ACT"; if (in_array("LOCKED_USER_NAME", $arSelectedFields)) { $arSelectedFields[] = "WF_LOCKED_BY";
function ExportProperties(&$PROPERTY_MAP) { $PROPERTY_MAP = array(); fwrite($this->fp, "\t\t<" . GetMessage("IBLOCK_XML2_PROPERTIES") . ">\n"); if ($this->bExtended) { $arElementFields = array("CML2_ACTIVE" => GetMessage("IBLOCK_XML2_BX_ACTIVE"), "CML2_CODE" => GetMessage("IBLOCK_XML2_SYMBOL_CODE"), "CML2_SORT" => GetMessage("IBLOCK_XML2_SORT"), "CML2_ACTIVE_FROM" => GetMessage("IBLOCK_XML2_START_TIME"), "CML2_ACTIVE_TO" => GetMessage("IBLOCK_XML2_END_TIME"), "CML2_PREVIEW_TEXT" => GetMessage("IBLOCK_XML2_ANONS"), "CML2_DETAIL_TEXT" => GetMessage("IBLOCK_XML2_DETAIL"), "CML2_PREVIEW_PICTURE" => GetMessage("IBLOCK_XML2_PREVIEW_PICTURE")); foreach ($arElementFields as $key => $value) { fwrite($this->fp, $this->formatXMLNode(3, GetMessage("IBLOCK_XML2_PROPERTY"), array(GetMessage("IBLOCK_XML2_ID") => $key, GetMessage("IBLOCK_XML2_NAME") => $value, GetMessage("IBLOCK_XML2_MULTIPLE") => "false"))); } } $arFilter = array("IBLOCK_ID" => $this->arIBlock["ID"], "ACTIVE" => "Y"); $arSort = array("sort" => "asc"); $obProp = new CIBlockProperty(); $rsProp = $obProp->GetList($arSort, $arFilter); while ($arProp = $rsProp->Fetch()) { fwrite($this->fp, "\t\t\t<" . GetMessage("IBLOCK_XML2_PROPERTY") . ">\n"); $xml_id = $this->GetPropertyXML_ID($this->arIBlock["ID"], $arProp["NAME"], $arProp["ID"], $arProp["XML_ID"]); $PROPERTY_MAP[$arProp["ID"]] = $xml_id; $PROPERTY_MAP["~" . $arProp["ID"]] = $arProp["NAME"]; fwrite($this->fp, $this->formatXMLNode(4, GetMessage("IBLOCK_XML2_ID"), $xml_id)); fwrite($this->fp, $this->formatXMLNode(4, GetMessage("IBLOCK_XML2_NAME"), $arProp["NAME"])); fwrite($this->fp, $this->formatXMLNode(4, GetMessage("IBLOCK_XML2_MULTIPLE"), $arProp["MULTIPLE"] == "Y" ? "true" : "false")); if ($arProp["PROPERTY_TYPE"] == "L") { fwrite($this->fp, "\t\t\t\t<" . GetMessage("IBLOCK_XML2_CHOICE_VALUES") . ">\n"); $rsEnum = CIBlockProperty::GetPropertyEnum($arProp["ID"]); while ($arEnum = $rsEnum->Fetch()) { fwrite($this->fp, $this->formatXMLNode(5, GetMessage("IBLOCK_XML2_VALUE"), $arEnum["VALUE"])); if ($this->bExtended) { fwrite($this->fp, "\t\t\t\t\t<" . GetMessage("IBLOCK_XML2_CHOICE") . ">\n" . $this->formatXMLNode(6, GetMessage("IBLOCK_XML2_ID"), $arEnum["XML_ID"]) . $this->formatXMLNode(6, GetMessage("IBLOCK_XML2_VALUE"), $arEnum["VALUE"]) . $this->formatXMLNode(6, GetMessage("IBLOCK_XML2_BY_DEFAULT"), $arEnum["DEF"] == "Y" ? "true" : "false") . $this->formatXMLNode(6, GetMessage("IBLOCK_XML2_SORT"), intval($arEnum["SORT"])) . "\t\t\t\t\t</" . GetMessage("IBLOCK_XML2_CHOICE") . ">\n"); } } fwrite($this->fp, "\t\t\t\t</" . GetMessage("IBLOCK_XML2_CHOICE_VALUES") . ">\n"); } if ($this->bExtended) { $strUserSettings = ''; if ('' != $arProp["USER_TYPE"]) { if (!empty($arProp['USER_TYPE_SETTINGS']) && is_array($arProp['USER_TYPE_SETTINGS'])) { $strUserSettings = $this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_USER_TYPE_SETTINGS"), serialize($arProp['USER_TYPE_SETTINGS'])); } } fwrite($this->fp, $this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_SORT"), intval($arProp["SORT"])) . $this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_CODE"), $arProp["CODE"]) . $this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_PROPERTY_TYPE"), $arProp["PROPERTY_TYPE"]) . $this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_ROWS"), $arProp["ROW_COUNT"]) . $this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_COLUMNS"), $arProp["COL_COUNT"]) . $this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_LIST_TYPE"), $arProp["LIST_TYPE"]) . $this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_FILE_EXT"), $arProp["FILE_TYPE"]) . $this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_FIELDS_COUNT"), $arProp["MULTIPLE_CNT"]) . $this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_LINKED_IBLOCK"), $this->GetIBlockXML_ID($arProp["LINK_IBLOCK_ID"])) . $this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_WITH_DESCRIPTION"), $arProp["WITH_DESCRIPTION"] == "Y" ? "true" : "false") . $this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_SEARCH"), $arProp["SEARCHABLE"] == "Y" ? "true" : "false") . $this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_FILTER"), $arProp["FILTRABLE"] == "Y" ? "true" : "false") . $this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_USER_TYPE"), $arProp["USER_TYPE"]) . $this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_IS_REQUIRED"), $arProp["IS_REQUIRED"] == "Y" ? "true" : "false") . $this->formatXMLNode(4, GetMessage("IBLOCK_XML2_BX_DEFAULT_VALUE"), serialize($arProp["DEFAULT_VALUE"])) . $this->formatXMLNode(4, GetMessage("IBLOCK_XML2_SERIALIZED"), 1) . $strUserSettings); } fwrite($this->fp, "\t\t\t</" . GetMessage("IBLOCK_XML2_PROPERTY") . ">\n"); } fwrite($this->fp, "\t\t</" . GetMessage("IBLOCK_XML2_PROPERTIES") . ">\n"); if ($this->bExtended) { $catalog = false; if (CModule::IncludeModule("catalog")) { $catalog = CCatalogSKU::getInfoByOfferIBlock($this->arIBlock["ID"]); } if (!empty($catalog) && is_array($catalog)) { $this->ExportSmartFilter(2, $this->arIBlock["ID"], false, $PROPERTY_MAP, $catalog["PRODUCT_IBLOCK_ID"]); } else { $this->ExportSmartFilter(2, $this->arIBlock["ID"], 0, $PROPERTY_MAP); } } }
protected function _SyncGetValueByType($FIELD, &$arQueue) { $fld = $FIELD['FIELD']; $bProperty = ($prop = self::__prop($fld['FIELD_ID'])) != null; $value = $FIELD['VALUE']; switch ($fld['SP_FIELD_TYPE']) { case 'DateTime': $ts = strtotime($value); if ($ts) { $value = ConvertTimeStamp($ts, 'FULL'); } break; case 'Counter': case 'Integer': $value = intval($value); break; case 'Number': $value = doubleval($value); break; case 'User': $bParseAsUser = false; if ($bProperty) { $dbRes = CIBlockProperty::GetByID($prop, $IBLOCK_ID); if ($arRes = $dbRes->Fetch()) { if ($arRes['USER_TYPE'] == 'UserID' || $arRes['USER_TYPE'] == 'employee') { $bParseAsUser = true; } } } elseif ($fld['FIELD_ID'] == 'MODIFIED_BY' || $fld['FIELD_ID'] == 'CREATED_BY') { $bParseAsUser = true; } //var_dump($value); if ($bParseAsUser) { $value = self::_SyncGetUser($value); } break; case 'Choice': if ($bProperty) { $dbRes = CIBlockProperty::GetByID($prop, $IBLOCK_ID); if ($arRes = $dbRes->Fetch()) { if ($arRes['PROPERTY_TYPE'] == 'L') { $dbRes = CIBlockProperty::GetPropertyEnum($prop, array(), array('VALUE' => $value)); if ($arRes = $dbRes->Fetch()) { $value = $arRes['ID']; } } } } break; case 'Attachments': $value = intval($value); if ($value > 0) { $arQueue[] = array('SP_METHOD' => 'GetAttachmentCollection', 'SP_METHOD_PARAMS' => array('SP_ID' => $FIELD['ROW']['ID']), 'CALLBACK' => array('CIntranetSharepoint', 'SetPropertyValue', array($FIELD['ROW']['UniqueId'], $fld['FIELD_ID']))); } $value = null; break; case 'ContentTypeId': case 'Lookup': case 'Computed': case 'Text': default: $bParseAsFile = false; if ($bProperty) { $dbRes = CIBlockProperty::GetByID($prop, $IBLOCK_ID); if ($arRes = $dbRes->Fetch()) { if ($arRes['PROPERTY_TYPE'] == 'F') { $bParseAsFile = true; } } } elseif ($fld['FIELD_ID'] == 'PREVIEW_PICTURE' || $fld['FIELD_ID'] == 'DETAIL_PICTURE') { $bParseAsFile = true; } if ($bParseAsFile) { $arQueue[] = array('SP_METHOD' => 'LoadFile', 'SP_METHOD_PARAMS' => array('URL' => $value), 'CALLBACK' => array('CIntranetSharepoint', 'SetPropertyValue', array($FIELD['ROW']['UniqueId'], $fld['FIELD_ID']))); $value = null; } } if ($bProperty) { return array('VALUE' => $value, 'PROPERTY' => $prop); } else { return array('VALUE' => $value, 'FIELD' => $fld['FIELD_ID']); } }
function MapEnum($prop_id, $value) { static $arEnumCache = array(); if (is_array($value)) { foreach ($value as $k => $v) { $value[$k] = $this->MapEnum($prop_id, $v); } } else { if (!isset($arEnumCache[$prop_id])) { $arEnumCache[$prop_id] = array(); } if (array_key_exists($value, $arEnumCache[$prop_id])) { $value = $arEnumCache[$prop_id][$value]; } else { $res2 = CIBlockProperty::GetPropertyEnum($prop_id, array(), array("IBLOCK_ID" => $this->IBLOCK_ID, "VALUE" => $value)); if ($arRes2 = $res2->Fetch()) { $value = $arEnumCache[$prop_id][$value] = $arRes2["ID"]; } else { $value = $arEnumCache[$prop_id][$value] = CIBlockPropertyEnum::Add(array("PROPERTY_ID" => $prop_id, "VALUE" => $value, "TMP_ID" => $this->tmpid)); } } } return $value; }
protected function createDataExcel() { $obList = new CList($this->arIBlock["ID"]); $gridOptions = new CGridOptions($this->arResult["GRID_ID"]); $gridColumns = $gridOptions->GetVisibleColumns(); $gridSort = $gridOptions->GetSorting(array("sort" => array("name" => "asc"))); $this->arResult["ELEMENTS_HEADERS"] = array(); $arSelect = array("ID", "IBLOCK_ID"); $arProperties = array(); $this->arResult["FIELDS"] = $arListFields = $obList->GetFields(); foreach ($arListFields as $fieldId => $arField) { if (!count($gridColumns) || in_array($fieldId, $gridColumns)) { if (substr($fieldId, 0, 9) == "PROPERTY_") { $arProperties[] = $fieldId; } else { $arSelect[] = $fieldId; } } if ($fieldId == "CREATED_BY") { $arSelect[] = "CREATED_USER_NAME"; } if ($fieldId == "MODIFIED_BY") { $arSelect[] = "USER_NAME"; } $this->arResult["ELEMENTS_HEADERS"][$fieldId] = array("name" => htmlspecialcharsex($arField["NAME"]), "default" => true, "sort" => $arField["MULTIPLE"] == "Y" ? "" : $fieldId); } if (!count($gridColumns) || in_array("IBLOCK_SECTION_ID", $gridColumns)) { $arSelect[] = "IBLOCK_SECTION_ID"; } $this->arResult["ELEMENTS_HEADERS"]["IBLOCK_SECTION_ID"] = array("name" => Loc::getMessage("CC_BLL_COLUMN_SECTION"), "default" => true, "sort" => false); /* FILTER */ $sections = array(); foreach ($this->arResult["LIST_SECTIONS"] as $id => $name) { $sections[$id] = $name; } $this->arResult["FILTER"] = array(array("id" => "list_section_id", "type" => "list", "items" => $sections, "filtered" => $this->arResult["SECTION_ID"] !== false, "filter_value" => $this->arResult["SECTION_ID"], "value" => $this->arResult["SECTION_ID"])); $i = 1; $arFilterable = array(); $arDateFilter = array(); foreach ($arListFields as $fieldId => $arField) { if ($arField["TYPE"] == "ACTIVE_FROM" || $arField["TYPE"] == "ACTIVE_TO") { $this->arResult["FILTER"][$i] = array("id" => "DATE_" . $fieldId, "name" => htmlspecialcharsex($arField["NAME"]), "type" => "date"); $arFilterable["DATE_" . $fieldId] = ""; $arDateFilter["DATE_" . $fieldId] = true; } elseif ($arField["TYPE"] == "DATE_CREATE" || $arField["TYPE"] == "TIMESTAMP_X") { $this->arResult["FILTER"][$i] = array("id" => $fieldId, "name" => htmlspecialcharsex($arField["NAME"]), "type" => "date"); $arFilterable[$fieldId] = ""; $arDateFilter[$fieldId] = true; } elseif (is_array($arField["PROPERTY_USER_TYPE"]) && array_key_exists("GetPublicFilterHTML", $arField["PROPERTY_USER_TYPE"])) { $this->arResult["FILTER"][$i] = array("id" => $fieldId, "name" => htmlspecialcharsex($arField["NAME"]), "type" => "custom", "enable_settings" => false, "value" => call_user_func_array($arField["PROPERTY_USER_TYPE"]["GetPublicFilterHTML"], array($arField, array("VALUE" => $fieldId, "FORM_NAME" => "filter_" . $this->arResult["GRID_ID"], "GRID_ID" => $this->arResult["GRID_ID"])))); $arFilterable[$fieldId] = ""; } elseif ($arField["TYPE"] == "SORT" || $arField["TYPE"] == "N") { $this->arResult["FILTER"][$i] = array("id" => $fieldId, "name" => htmlspecialcharsex($arField["NAME"]), "type" => "number"); $arFilterable[$fieldId] = ""; } elseif ($arField["TYPE"] == "G") { $items = array(); $prop_secs = CIBlockSection::GetList(array("left_margin" => "asc"), array("IBLOCK_ID" => $arField["LINK_IBLOCK_ID"])); while ($ar_sec = $prop_secs->Fetch()) { $items[$ar_sec["ID"]] = str_repeat(". ", $ar_sec["DEPTH_LEVEL"] - 1) . $ar_sec["NAME"]; } $this->arResult["FILTER"][$i] = array("id" => $fieldId, "name" => htmlspecialcharsex($arField["NAME"]), "type" => "list", "items" => $items, "params" => array("size" => 5, "multiple" => "multiple"), "valign" => "top"); $arFilterable[$fieldId] = ""; } elseif ($arField["TYPE"] == "E") { //Should be handled in template $this->arResult["FILTER"][$i] = array("id" => $fieldId, "name" => htmlspecialcharsex($arField["NAME"]), "type" => "E", "value" => $arField); $arFilterable[$fieldId] = ""; } elseif ($arField["TYPE"] == "L") { $items = array(); $propEnums = CIBlockProperty::GetPropertyEnum($arField["ID"]); while ($arEnum = $propEnums->Fetch()) { $items[$arEnum["ID"]] = $arEnum["VALUE"]; } $this->arResult["FILTER"][$i] = array("id" => $fieldId, "name" => htmlspecialcharsex($arField["NAME"]), "type" => "list", "items" => $items, "params" => array("size" => 5, "multiple" => "multiple"), "valign" => "top"); $arFilterable[$fieldId] = ""; } elseif (in_array($arField["TYPE"], array("S", "S:HTML", "NAME", "DETAIL_TEXT", "PREVIEW_TEXT"))) { $this->arResult["FILTER"][$i] = array("id" => $fieldId, "name" => htmlspecialcharsex($arField["NAME"])); $arFilterable[$fieldId] = "?"; } else { $this->arResult["FILTER"][$i] = array("id" => $fieldId, "name" => htmlspecialcharsex($arField["NAME"])); $arFilterable[$fieldId] = ""; } $i++; } $arFilter = array(); $gridFilter = $gridOptions->GetFilter($this->arResult["FILTER"]); foreach ($gridFilter as $key => $value) { if (substr($key, -5) == "_from") { $op = ">="; $newKey = substr($key, 0, -5); } elseif (substr($key, -3) == "_to") { $op = "<="; $newKey = substr($key, 0, -3); if (array_key_exists($newKey, $arDateFilter)) { if (!preg_match("/\\d\\d:\\d\\d:\\d\\d\$/", $value)) { $value .= " 23:59:59"; } } } else { $op = ""; $newKey = $key; } if (array_key_exists($newKey, $arFilterable)) { if ($op == "") { $op = $arFilterable[$newKey]; } $arFilter[$op . $newKey] = $value; } } $arFilter["IBLOCK_ID"] = $this->arIBlock["ID"]; if (!$this->arResult["ANY_SECTION"]) { $arFilter["SECTION_ID"] = $this->arResult["SECTION_ID"]; } $rsElements = CIBlockElement::GetList($gridSort["sort"], $arFilter, false, false, $arSelect); $this->arResult["EXCEL_COLUMN_NAME"] = array(); $this->arResult["EXCEL_CELL_VALUE"] = array(); $count = 0; while ($obElement = $rsElements->GetNextElement()) { $data = $obElement->GetFields(); $propertyArray = $obElement->GetProperties(); if (!empty($arProperties)) { foreach ($propertyArray as $arProp) { $fieldId = "PROPERTY_" . $arProp["ID"]; if (in_array($fieldId, $arProperties)) { $arField = $this->arResult["FIELDS"][$fieldId]; if (is_array($arField["PROPERTY_USER_TYPE"]) && is_array($arField["PROPERTY_USER_TYPE"]["GetPublicViewHTML"])) { if (is_array($arProp["~VALUE"])) { foreach ($arProp["~VALUE"] as $propValue) { $data[$fieldId][] = call_user_func_array($arField["PROPERTY_USER_TYPE"]["GetPublicViewHTML"], array($arField, array("VALUE" => $propValue), array())); } } else { $data[$fieldId] = call_user_func_array($arField["PROPERTY_USER_TYPE"]["GetPublicViewHTML"], array($arField, array("VALUE" => $arProp["~VALUE"]), array())); } } elseif ($arField["PROPERTY_TYPE"] == "L") { $data[$fieldId] = htmlspecialcharsex($arProp["VALUE_ENUM"]); } elseif ($arField["PROPERTY_TYPE"] == "F") { $files = is_array($arProp["VALUE"]) ? $arProp["VALUE"] : array($arProp["VALUE"]); foreach ($files as $file) { $value = CFile::MakeFileArray($file); $data[$fieldId] .= $value["name"] . "\r\n"; } } else { $data[$fieldId] = htmlspecialcharsex($arProp["VALUE"]); } } } if (!empty($data["IBLOCK_SECTION_ID"])) { if (array_key_exists($data["IBLOCK_SECTION_ID"], $this->arResult["SECTIONS"])) { $data["IBLOCK_SECTION_ID"] = $this->arResult["SECTIONS"][$data["IBLOCK_SECTION_ID"]]["NAME"]; } } if (in_array("BIZPROC", $gridColumns)) { $data["BIZPROC"] = $this->getArrayBizproc($data); } } if (isset($data["CREATED_BY"])) { $data["CREATED_BY"] = "[" . $data["CREATED_BY"] . "] " . $data["CREATED_USER_NAME"]; } if (isset($data["MODIFIED_BY"])) { $data["MODIFIED_BY"] = "[" . $data["MODIFIED_BY"] . "] " . $data["USER_NAME"]; } if (isset($data["ACTIVE_FROM"])) { $data['ACTIVE_FROM'] = FormatDateFromDB($data['ACTIVE_FROM']); } if (isset($data["ACTIVE_TO"])) { $data['ACTIVE_TO'] = FormatDateFromDB($data['ACTIVE_TO']); } if (isset($data["DATE_CREATE"])) { $data['DATE_CREATE'] = FormatDateFromDB($data['DATE_CREATE']); } if (isset($data["TIMESTAMP_X"])) { $data['TIMESTAMP_X'] = FormatDateFromDB($data['TIMESTAMP_X']); } foreach ($gridColumns as $position => $id) { $this->arResult["EXCEL_CELL_VALUE"][$count][$position] = is_array($data[$id]) ? implode('/', $data[$id]) : $data[$id]; $this->arResult["EXCEL_COLUMN_NAME"][$position] = $this->arResult["ELEMENTS_HEADERS"][$id]["name"]; } $count++; } }
} unset($strOneCode); } unset($arOffer); $arSKUPropIDs = array(); $arFilterProp = array(); foreach ($arSKUPropList as $arOneSKU) { if (!isset($arResultSKUPropIDs[$arOneSKU['CODE']])) continue; if ('L' == $arOneSKU['PROPERTY_TYPE']) { $arOneSKU['SHOW_MODE'] = 'LIST'; $arValues = array(); $rsPropEnums = CIBlockProperty::GetPropertyEnum($arOneSKU['ID']); while ($arEnum = $rsPropEnums->Fetch()) { $arEnum['ID'] = intval($arEnum['ID']); $arValues[$arEnum['ID']] = array( 'ID' => $arEnum['ID'], 'NAME' => $arEnum['VALUE'], 'SORT' => intval($arEnum['SORT']), 'PICT' => false ); } $arValues[0] = array( 'ID' => 0, 'SORT' => PHP_INT_MAX, 'NA' => true, 'NAME' => '-',
public function GetDocumentFields($documentType) { $iblockId = intval(substr($documentType, strlen("iblock_"))); if ($iblockId <= 0) { throw new CBPArgumentOutOfRangeException("documentType", $documentType); } $arDocumentFieldTypes = self::GetDocumentFieldTypes($documentType); $arResult = array("ID" => array("Name" => GetMessage("IBD_FIELD_ID"), "Type" => "int", "Filterable" => true, "Editable" => false, "Required" => false), "TIMESTAMP_X" => array("Name" => GetMessage("IBD_FIELD_TIMESTAMP_X"), "Type" => "datetime", "Filterable" => true, "Editable" => true, "Required" => false), "MODIFIED_BY" => array("Name" => GetMessage("IBD_FIELD_MODYFIED"), "Type" => "user", "Filterable" => true, "Editable" => true, "Required" => false), "MODIFIED_BY_PRINTABLE" => array("Name" => GetMessage("IBD_FIELD_MODIFIED_BY_USER_PRINTABLE"), "Type" => "string", "Filterable" => false, "Editable" => false, "Required" => false), "DATE_CREATE" => array("Name" => GetMessage("IBD_FIELD_DATE_CREATE"), "Type" => "datetime", "Filterable" => true, "Editable" => true, "Required" => false), "CREATED_BY" => array("Name" => GetMessage("IBD_FIELD_CREATED"), "Type" => "user", "Filterable" => true, "Editable" => false, "Required" => false), "CREATED_BY_PRINTABLE" => array("Name" => GetMessage("IBD_FIELD_CREATED_BY_USER_PRINTABLE"), "Type" => "string", "Filterable" => false, "Editable" => false, "Required" => false), "IBLOCK_ID" => array("Name" => GetMessage("IBD_FIELD_IBLOCK_ID"), "Type" => "int", "Filterable" => true, "Editable" => true, "Required" => false), "ACTIVE" => array("Name" => GetMessage("IBD_FIELD_ACTIVE"), "Type" => "bool", "Filterable" => true, "Editable" => true, "Required" => false), "BP_PUBLISHED" => array("Name" => GetMessage("IBD_FIELD_BP_PUBLISHED"), "Type" => "bool", "Filterable" => false, "Editable" => true, "Required" => false), "CODE" => array("Name" => GetMessage("IBD_FIELD_CODE"), "Type" => "string", "Filterable" => true, "Editable" => true, "Required" => false), "XML_ID" => array("Name" => GetMessage("IBD_FIELD_XML_ID"), "Type" => "string", "Filterable" => true, "Editable" => true, "Required" => false)); $arKeys = array_keys($arResult); foreach ($arKeys as $key) { $arResult[$key]["Multiple"] = false; } $dbProperties = CIBlockProperty::GetList(array("sort" => "asc", "name" => "asc"), array("IBLOCK_ID" => $iblockId, 'ACTIVE' => 'Y')); $ignoreProperty = array(); while ($arProperty = $dbProperties->Fetch()) { if (strlen(trim($arProperty["CODE"])) > 0) { $key = "PROPERTY_" . $arProperty["CODE"]; $ignoreProperty["PROPERTY_" . $arProperty["ID"]] = "PROPERTY_" . $arProperty["CODE"]; } else { $key = "PROPERTY_" . $arProperty["ID"]; $ignoreProperty["PROPERTY_" . $arProperty["ID"]] = 0; } $arResult[$key] = array("Name" => $arProperty["NAME"], "Filterable" => $arProperty["FILTRABLE"] == "Y", "Editable" => true, "Required" => $arProperty["IS_REQUIRED"] == "Y", "Multiple" => $arProperty["MULTIPLE"] == "Y", "TypeReal" => $arProperty["PROPERTY_TYPE"]); if (strlen($arProperty["USER_TYPE"]) > 0) { $arResult[$key]["TypeReal"] = $arProperty["PROPERTY_TYPE"] . ":" . $arProperty["USER_TYPE"]; if ($arProperty["USER_TYPE"] == "UserID" || $arProperty["USER_TYPE"] == "employee" && COption::GetOptionString("bizproc", "employee_compatible_mode", "N") != "Y") { $arResult[$key]["Type"] = "user"; $arResult[$key . "_PRINTABLE"] = array("Name" => $arProperty["NAME"] . GetMessage("IBD_FIELD_USERNAME_PROPERTY"), "Filterable" => false, "Editable" => false, "Required" => false, "Multiple" => $arProperty["MULTIPLE"] == "Y", "Type" => "string"); $arResult[$key]["DefaultValue"] = $arProperty["DEFAULT_VALUE"]; } elseif ($arProperty["USER_TYPE"] == "DateTime") { $arResult[$key]["Type"] = "datetime"; $arResult[$key]["DefaultValue"] = $arProperty["DEFAULT_VALUE"]; } elseif ($arProperty["USER_TYPE"] == "Date") { $arResult[$key]["Type"] = "date"; $arResult[$key]["DefaultValue"] = $arProperty["DEFAULT_VALUE"]; } elseif ($arProperty["USER_TYPE"] == "EList") { $arResult[$key]["Type"] = "E:EList"; $arResult[$key]["Options"] = $arProperty["LINK_IBLOCK_ID"]; } elseif ($arProperty["USER_TYPE"] == "HTML") { $arResult[$key]["Type"] = "S:HTML"; $arResult[$key]["DefaultValue"] = $arProperty["DEFAULT_VALUE"]; } else { $arResult[$key]["Type"] = "string"; $arResult[$key]["DefaultValue"] = $arProperty["DEFAULT_VALUE"]; } } elseif ($arProperty["PROPERTY_TYPE"] == "L") { $arResult[$key]["Type"] = "select"; $arResult[$key]["Options"] = array(); $dbPropertyEnums = CIBlockProperty::GetPropertyEnum($arProperty["ID"]); while ($arPropertyEnum = $dbPropertyEnums->GetNext()) { $arResult[$key]["Options"][$arPropertyEnum["XML_ID"]] = $arPropertyEnum["VALUE"]; if ($arPropertyEnum["DEF"] == "Y") { $arResult[$key]["DefaultValue"] = $arPropertyEnum["VALUE"]; } } } elseif ($arProperty["PROPERTY_TYPE"] == "N") { $arResult[$key]["Type"] = "int"; $arResult[$key]["DefaultValue"] = $arProperty["DEFAULT_VALUE"]; } elseif ($arProperty["PROPERTY_TYPE"] == "F") { $arResult[$key]["Type"] = "file"; $arResult[$key . "_printable"] = array("Name" => $arProperty["NAME"] . GetMessage("IBD_FIELD_USERNAME_PROPERTY"), "Filterable" => false, "Editable" => false, "Required" => false, "Multiple" => $arProperty["MULTIPLE"] == "Y", "Type" => "string"); } elseif ($arProperty["PROPERTY_TYPE"] == "S") { $arResult[$key]["Type"] = "string"; $arResult[$key]["DefaultValue"] = $arProperty["DEFAULT_VALUE"]; } else { $arResult[$key]["Type"] = "string"; $arResult[$key]["DefaultValue"] = $arProperty["DEFAULT_VALUE"]; } } $arKeys = array_keys($arResult); foreach ($arKeys as $k) { $arResult[$k]["BaseType"] = $arDocumentFieldTypes[$arResult[$k]["Type"]]["BaseType"]; $arResult[$k]["Complex"] = $arDocumentFieldTypes[$arResult[$k]["Type"]]["Complex"]; } $list = new CList($iblockId); $fields = $list->getFields(); foreach ($fields as $fieldId => $field) { if (empty($field["SETTINGS"])) { $field["SETTINGS"] = array("SHOW_ADD_FORM" => 'Y', "SHOW_EDIT_FORM" => 'Y'); } if (array_key_exists($fieldId, $ignoreProperty)) { $ignoreProperty[$fieldId] ? $key = $ignoreProperty[$fieldId] : ($key = $fieldId); $arResult[$key]["sort"] = $field["SORT"]; $arResult[$key]["settings"] = $field["SETTINGS"]; if ($field["ROW_COUNT"] && $field["COL_COUNT"]) { $arResult[$key]["row_count"] = $field["ROW_COUNT"]; $arResult[$key]["col_count"] = $field["COL_COUNT"]; } } else { if (!isset($arResult[$fieldId])) { $arResult[$fieldId] = array('Name' => $field['NAME'], 'Filterable' => false, 'Editable' => true, 'Required' => $field['IS_REQUIRED'], 'Multiple' => $field['MULTIPLE'], 'Type' => $field['TYPE']); } $arResult[$fieldId]["sort"] = $field["SORT"]; $arResult[$fieldId]["settings"] = $field["SETTINGS"]; if ($field["ROW_COUNT"] && $field["COL_COUNT"]) { $arResult[$fieldId]["row_count"] = $field["ROW_COUNT"]; $arResult[$fieldId]["col_count"] = $field["COL_COUNT"]; } } } return $arResult; }
} } } else { if ($arProp['PROPERTY_TYPE'] == 'L') { if ($bVarsFromForm && isset($_POST[$propID])) { $propsFormData[$propID] = $_POST[$propID]; } else { if ($arResult['PRODUCT_ID']) { if (isset($arResult['PRODUCT_PROPS'][$arProp['ID']])) { $propsFormData[$propID] = $arResult['PRODUCT_PROPS'][$arProp['ID']]['VALUES_LIST']; } else { $propsFormData[$propID] = array(); } } else { $propsFormData[$propID] = array(); $prop_enums = CIBlockProperty::GetPropertyEnum($arProp['ID']); while ($ar_enum = $prop_enums->Fetch()) { if ($ar_enum['DEF'] == 'Y') { $propsFormData[$propID][] = $ar_enum['ID']; } } } } } else { if ($arProp['PROPERTY_TYPE'] == 'F') { if ($arResult['PRODUCT_ID']) { if (isset($arResult['PRODUCT_PROPS'][$arProp['ID']])) { $propsFormData[$propID] = $arResult['PRODUCT_PROPS'][$arProp['ID']]['FULL_VALUES']; if ($arProp['MULTIPLE'] == 'Y') { $propsFormData[$propID]['n0'] = array('VALUE' => $arProp['DEFAULT_VALUE'], 'DESCRIPTION' => ''); }
if ('L' != $arProp['PROPERTY_TYPE'] && 'E' != $arProp['PROPERTY_TYPE'] && !('S' == $arProp['PROPERTY_TYPE'] && 'directory' == $arProp['USER_TYPE'])) { continue; } if ('S' == $arProp['PROPERTY_TYPE'] && 'directory' == $arProp['USER_TYPE']) { if (!isset($arProp['USER_TYPE_SETTINGS']['TABLE_NAME']) || empty($arProp['USER_TYPE_SETTINGS']['TABLE_NAME'])) { continue; } if (!CModule::IncludeModule('highloadblock')) { continue; } } $arOneSKU = array('ID' => intval($arProp['ID']), 'CODE' => $arProp['CODE'], 'NAME' => $arProp['NAME'], 'SORT' => intval($arProp['SORT']), 'PROPERTY_TYPE' => $arProp['PROPERTY_TYPE'], 'USER_TYPE' => $arProp['USER_TYPE'], 'LINK_IBLOCK_ID' => $arProp['LINK_IBLOCK_ID'], 'USER_TYPE_SETTINGS' => $arProp['USER_TYPE_SETTINGS'], 'VALUES' => array()); if ('L' == $arProp['PROPERTY_TYPE']) { $arOneSKU['SHOW_MODE'] = 'LIST'; $arValues = array(); $rsPropEnums = CIBlockProperty::GetPropertyEnum($arProp['ID']); while ($arEnum = $rsPropEnums->Fetch()) { $arEnum['ID'] = intval($arEnum['ID']); $arValues[$arEnum['ID']] = array('ID' => $arEnum['ID'], 'NAME' => $arEnum['VALUE'], 'SORT' => intval($arEnum['SORT']), 'PICT' => false); } $arValues[0] = array('ID' => 0, 'SORT' => PHP_INT_MAX, 'NA' => true, 'NAME' => '-', 'PICT' => false); $arOneSKU['VALUES'] = $arValues; $arOneSKU['VALUES_COUNT'] = count($arValues); } elseif ('E' == $arProp['PROPERTY_TYPE']) { $arOneSKU['SHOW_MODE'] = 'PICT'; $arValues = array(); $rsPropEnums = CIBlockElement::GetList(array('SORT' => 'ASC'), array('IBLOCK_ID' => $arProp['LINK_IBLOCK_ID'], 'ACTIVE' => 'Y'), false, false, array('ID', 'NAME', 'PREVIEW_PICTURE')); while ($arEnum = $rsPropEnums->Fetch()) { $arEnum['PREVIEW_PICTURE'] = CFile::GetFileArray($arEnum['PREVIEW_PICTURE']); if (!is_array($arEnum['PREVIEW_PICTURE'])) { continue;
function _ShowListPropertyField($name, $property_fields, $values, $bInitDef = false, $def_text = false) { if (!is_array($values)) { $values = array(); } foreach ($values as $key => $value) { if (is_array($value) && array_key_exists("VALUE", $value)) { $values[$key] = $value["VALUE"]; } } $id = $property_fields["ID"]; $multiple = $property_fields["MULTIPLE"]; $res = ""; if ($property_fields["LIST_TYPE"] == "C") { $cnt = 0; $wSel = false; $prop_enums = CIBlockProperty::GetPropertyEnum($id); while ($ar_enum = $prop_enums->Fetch()) { $cnt++; if ($bInitDef) { $sel = $ar_enum["DEF"] == "Y"; } else { $sel = in_array($ar_enum["ID"], $values); } if ($sel) { $wSel = true; } $uniq = md5(uniqid(rand(), true)); if ($multiple == "Y") { //multiple $res .= '<input type="checkbox" name="' . $name . '[]" value="' . htmlspecialcharsbx($ar_enum["ID"]) . '"' . ($sel ? " checked" : "") . ' id="' . $uniq . '"><label for="' . $uniq . '">' . htmlspecialcharsex($ar_enum["VALUE"]) . '</label><br>'; } else { //if(MULTIPLE=="Y") $res .= '<input type="radio" name="' . $name . '[]" id="' . $uniq . '" value="' . htmlspecialcharsbx($ar_enum["ID"]) . '"' . ($sel ? " checked" : "") . '><label for="' . $uniq . '">' . htmlspecialcharsex($ar_enum["VALUE"]) . '</label><br>'; } if ($cnt == 1) { $res_tmp = '<input type="checkbox" name="' . $name . '[]" value="' . htmlspecialcharsbx($ar_enum["ID"]) . '"' . ($sel ? " checked" : "") . ' id="' . $uniq . '"><br>'; } } $uniq = md5(uniqid(rand(), true)); if ($cnt == 1) { $res = $res_tmp; } elseif ($multiple != "Y") { $res = '<input type="radio" name="' . $name . '[]" value=""' . (!$wSel ? " checked" : "") . ' id="' . $uniq . '"><label for="' . $uniq . '">' . htmlspecialcharsex($def_text ? $def_text : GetMessage("IBLOCK_AT_PROP_NO")) . '</label><br>' . $res; } if ($multiple == "Y" || $cnt == 1) { $res = '<input type="hidden" name="' . $name . '" value="">' . $res; } } else { $bNoValue = true; $prop_enums = CIBlockProperty::GetPropertyEnum($id); while ($ar_enum = $prop_enums->Fetch()) { if ($bInitDef) { $sel = $ar_enum["DEF"] == "Y"; } else { $sel = in_array($ar_enum["ID"], $values); } if ($sel) { $bNoValue = false; } $res .= '<option value="' . htmlspecialcharsbx($ar_enum["ID"]) . '"' . ($sel ? " selected" : "") . '>' . htmlspecialcharsex($ar_enum["VALUE"]) . '</option>'; } if ($property_fields["MULTIPLE"] == "Y" && IntVal($property_fields["ROW_COUNT"]) < 2) { $property_fields["ROW_COUNT"] = 5; } if ($property_fields["MULTIPLE"] == "Y") { $property_fields["ROW_COUNT"]++; } $res = '<select name="' . $name . '[]" size="' . $property_fields["ROW_COUNT"] . '" ' . ($property_fields["MULTIPLE"] == "Y" ? "multiple" : "") . '>' . '<option value=""' . ($bNoValue ? ' selected' : '') . '>' . htmlspecialcharsex($def_text ? $def_text : GetMessage("IBLOCK_AT_PROP_NA")) . '</option>' . $res . '</select>'; } echo $res; }
$arUser = $UserGet->Fetch(); $arUser ["UF_DEALER_ID"]; $can_edit=true; if (CModule::IncludeModule("iblock")){ $ds=false; $ss=false; $arSelect = Array("ID","NAME",); $arFilter = Array("IBLOCK_ID" => IBLOCK_SK_DEALERS_ID, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y"); $res = CIBlockElement::GetList(Array("NAME" => "ASC"), $arFilter, false, false, $arSelect); while($ob = $res->GetNextElement()) { $arDealers[] = $ob->GetFields(); } $db_enum_list = CIBlockProperty::GetPropertyEnum("cntrct_status", Array("ORDER"=>"ASC"), Array("IBLOCK_ID"=>24)); while($ar_enum_list = $db_enum_list->GetNext()) { $arStatus[]=$ar_enum_list; } if ($_POST) { if ($_POST["dealer"] && $_POST["dealer"]!="none") $_SESSION["filter_contracts_page"]["PROPERTY_cntrct_dealer"]=$_POST["dealer"]; else $_SESSION["filter_contracts_page"]["PROPERTY_cntrct_dealer"]=""; if ($_POST["status"] && $_POST["status"]!="none") $_SESSION["filter_contracts_page"]["PROPERTY_cntrct_status"]=$_POST["status"]; else $_SESSION["filter_contracts_page"]["PROPERTY_cntrct_status"]=""; }
public static function getTreePropertyValues(&$propList, &$propNeedValues) { $result = array(); if (!empty($propList) && is_array($propList)) { foreach ($propList as $oneProperty) { $values = array(); $valuesExist = false; $pictMode = ('PICT' == $oneProperty['SHOW_MODE']); $needValuesExist = isset($propNeedValues[$oneProperty['ID']]) && !empty($propNeedValues[$oneProperty['ID']]); $filterValuesExist = ($needValuesExist && count($propNeedValues[$oneProperty['ID']]) <= 100); if ('L' == $oneProperty['PROPERTY_TYPE']) { $propEnums = CIBlockProperty::GetPropertyEnum( $oneProperty['ID'], array('SORT' => 'ASC', 'VALUE' => 'ASC') ); while ($oneEnum = $propEnums->Fetch()) { $oneEnum['ID'] = intval($oneEnum['ID']); if ($needValuesExist && !isset($propNeedValues[$oneProperty['ID']][$oneEnum['ID']])) continue; $values[$oneEnum['ID']] = array( 'ID' => $oneEnum['ID'], 'NAME' => $oneEnum['VALUE'], 'SORT' => intval($oneEnum['SORT']), 'PICT' => false ); $valuesExist = true; } $values[0] = array( 'ID' => 0, 'SORT' => PHP_INT_MAX, 'NA' => true, 'NAME' => $oneProperty['DEFAULT_VALUES']['NAME'], 'PICT' => $oneProperty['DEFAULT_VALUES']['PICT'] ); } elseif ('E' == $oneProperty['PROPERTY_TYPE']) { $selectFields = array('ID', 'NAME'); if ($pictMode) $selectFields[] = 'PREVIEW_PICTURE'; $filterValues = ( $filterValuesExist ? array('ID' => $propNeedValues[$oneProperty['ID']], 'IBLOCK_ID' => $oneProperty['LINK_IBLOCK_ID'], 'ACTIVE' => 'Y') : array('IBLOCK_ID' => $oneProperty['LINK_IBLOCK_ID'], 'ACTIVE' => 'Y') ); $propEnums = CIBlockElement::GetList( array('SORT' => 'ASC', 'NAME' => 'ASC'), $filterValues, false, false, $selectFields ); while ($oneEnum = $propEnums->Fetch()) { if ($needValuesExist && !$filterValuesExist) { if (!isset($propNeedValues[$oneProperty['ID']][$oneEnum['ID']])) continue; } if ($pictMode) { $oneEnum['PICT'] = false; if (!empty($oneEnum['PREVIEW_PICTURE'])) { $previewPict = CFile::GetFileArray($oneEnum['PREVIEW_PICTURE']); if (!empty($previewPict)) { $oneEnum['PICT'] = array( 'SRC' => $previewPict['SRC'], 'WIDTH' => intval($previewPict['WIDTH']), 'HEIGHT' => intval($previewPict['HEIGHT']) ); } } if (empty($oneEnum['PICT'])) { $oneEnum['PICT'] = $oneProperty['DEFAULT_VALUES']['PICT']; } } $oneEnum['ID'] = intval($oneEnum['ID']); $values[$oneEnum['ID']] = array( 'ID' => $oneEnum['ID'], 'NAME' => $oneEnum['NAME'], 'SORT' => intval($oneEnum['SORT']), 'PICT' => ($pictMode ? $oneEnum['PICT'] : false) ); $valuesExist = true; } $values[0] = array( 'ID' => 0, 'SORT' => PHP_INT_MAX, 'NA' => true, 'NAME' => $oneProperty['DEFAULT_VALUES']['NAME'], 'PICT' => ($pictMode ? $oneProperty['DEFAULT_VALUES']['PICT'] : false) ); } else { if (null === self::$highLoadInclude) self::$highLoadInclude = \Freetrix\Main\Loader::includeModule('highloadblock'); if (!self::$highLoadInclude) continue; $xmlMap = array(); $sortExist = isset($oneProperty['USER_TYPE_SETTINGS']['FIELDS_MAP']['UF_SORT']); $directorySelect = array('ID', 'UF_NAME', 'UF_XML_ID'); $directoryOrder = array(); if ($pictMode) { $directorySelect[] = 'UF_FILE'; } if ($sortExist) { $directorySelect[] = 'UF_SORT'; $directoryOrder['UF_SORT'] = 'ASC'; } $directoryOrder['UF_NAME'] = 'ASC'; $sortValue = 100; $entityDataClass = $oneProperty['USER_TYPE_SETTINGS']['ENTITY']->getDataClass(); $entityGetList = array( 'select' => $directorySelect, 'order' => $directoryOrder ); if ($filterValuesExist) $entityGetList['filter'] = array('=UF_XML_ID' => $propNeedValues[$oneProperty['ID']]); $propEnums = $entityDataClass::getList($entityGetList); while ($oneEnum = $propEnums->fetch()) { $oneEnum['ID'] = intval($oneEnum['ID']); $oneEnum['UF_SORT'] = ($sortExist ? intval($oneEnum['UF_SORT']) : $sortValue); $sortValue += 100; if ($pictMode) { if (!empty($oneEnum['UF_FILE'])) { $arFile = CFile::GetFileArray($oneEnum['UF_FILE']); if (!empty($arFile)) { $oneEnum['PICT'] = array( 'SRC' => $arFile['SRC'], 'WIDTH' => intval($arFile['WIDTH']), 'HEIGHT' => intval($arFile['HEIGHT']) ); } } if (empty($oneEnum['PICT'])) $oneEnum['PICT'] = $oneProperty['DEFAULT_VALUES']['PICT']; } $values[$oneEnum['ID']] = array( 'ID' => $oneEnum['ID'], 'NAME' => $oneEnum['UF_NAME'], 'SORT' => intval($oneEnum['UF_SORT']), 'XML_ID' => $oneEnum['UF_XML_ID'], 'PICT' => ($pictMode ? $oneEnum['PICT'] : false) ); $valuesExist = true; $xmlMap[$oneEnum['UF_XML_ID']] = $oneEnum['ID']; } $values[0] = array( 'ID' => 0, 'SORT' => PHP_INT_MAX, 'NA' => true, 'NAME' => $oneProperty['DEFAULT_VALUES']['NAME'], 'XML_ID' => '', 'PICT' => ($pictMode ? $oneProperty['DEFAULT_VALUES']['PICT'] : false) ); if ($valuesExist) $oneProperty['XML_MAP'] = $xmlMap; } if (!$valuesExist) continue; $oneProperty['VALUES'] = $values; $oneProperty['VALUES_COUNT'] = count($values); $result[$oneProperty['CODE']] = $oneProperty; } } $propList = $result; unset($arFilterProp); }
$arFilterable[$FIELD_ID] = ""; } elseif ($arField["TYPE"] == "G") { $items = array(); $prop_secs = CIBlockSection::GetList(array("left_margin" => "asc"), array("IBLOCK_ID" => $arField["LINK_IBLOCK_ID"])); while ($ar_sec = $prop_secs->Fetch()) { $items[$ar_sec["ID"]] = str_repeat(". ", $ar_sec["DEPTH_LEVEL"] - 1) . $ar_sec["NAME"]; } $arResult["FILTER"][$i] = array("id" => $FIELD_ID, "name" => htmlspecialcharsex($arField["NAME"]), "type" => "list", "items" => $items, "params" => array("size" => 5, "multiple" => "multiple"), "valign" => "top"); $arFilterable[$FIELD_ID] = ""; } elseif ($arField["TYPE"] == "E") { //Should be handled in template $arResult["FILTER"][$i] = array("id" => $FIELD_ID, "name" => htmlspecialcharsex($arField["NAME"]), "type" => "E", "value" => $arField); $arFilterable[$FIELD_ID] = ""; } elseif ($arField["TYPE"] == "L") { $items = array(); $prop_enums = CIBlockProperty::GetPropertyEnum($arField["ID"]); while ($ar_enum = $prop_enums->Fetch()) { $items[$ar_enum["ID"]] = $ar_enum["VALUE"]; } $arResult["FILTER"][$i] = array("id" => $FIELD_ID, "name" => htmlspecialcharsex($arField["NAME"]), "type" => "list", "items" => $items, "params" => array("size" => 5, "multiple" => "multiple"), "valign" => "top"); $arFilterable[$FIELD_ID] = ""; } elseif (in_array($arField["TYPE"], array("S", "S:HTML", "NAME", "DETAIL_TEXT", "PREVIEW_TEXT"))) { $arResult["FILTER"][$i] = array("id" => $FIELD_ID, "name" => htmlspecialcharsex($arField["NAME"])); $arFilterable[$FIELD_ID] = "?"; } else { $arResult["FILTER"][$i] = array("id" => $FIELD_ID, "name" => htmlspecialcharsex($arField["NAME"]), "fieldsType" => $arField["TYPE"]); $arFilterable[$FIELD_ID] = ""; } $i++; } $arFilter = array();
function GetConfirmedID($iblockId, $xml_id) { $bCache = true; if ($bCache) { $cache = new CPHPCache(); $cachePath = "event_calendar/iblock_confirmed_id/"; $cacheTime = 86400; $cacheId = $iblockId . "_" . $xml_id; if ($cache->InitCache($cacheTime, $cacheId, $cachePath)) { $res = $cache->GetVars(); $id = $res['id']; } } if (!$bCache || empty($res['id'])) { $bStatic = !isset($this) || !is_a($this, "CEventCalendar"); if (!$bStatic) { if (!is_array($this->arConfirmedID)) { $this->arConfirmedID = array(); } $arConfirmedID = $this->arConfirmedID; } else { $arConfirmedID = array(); } if ($bStatic || !array_key_exists($iblockId, $arConfirmedID)) { $rsProperty = CIBlockProperty::GetList(array(), array('IBLOCK_ID' => $iblockId, 'CODE' => 'CONFIRMED')); $arProperty = $rsProperty->Fetch(); if (!$arProperty) { $obProperty = new CIBlockProperty(); $obProperty->Add(array("IBLOCK_ID" => $iblockId, "ACTIVE" => "Y", "PROPERTY_TYPE" => "L", "MULTIPLE" => "N", "NAME" => GetMessage("EC_PROP_CONFIRMED_NAME"), "CODE" => "CONFIRMED", "VALUES" => array(array("SORT" => 10, "XML_ID" => "Q", "VALUE" => GetMessage("EC_PROP_CONFIRMED_UNK")), array("SORT" => 20, "XML_ID" => "Y", "VALUE" => GetMessage("EC_PROP_CONFIRMED_YES")), array("SORT" => 30, "XML_ID" => "N", "VALUE" => GetMessage("EC_PROP_CONFIRMED_NO"))))); } $arConfirmedID[$iblockId] = array(); $rsEnumValues = CIBlockProperty::GetPropertyEnum("CONFIRMED", array(), array("IBLOCK_ID" => $iblockId)); while ($arEnum = $rsEnumValues->Fetch()) { $arConfirmedID[$iblockId][$arEnum["XML_ID"]] = $arEnum["ID"]; } } $id = $arConfirmedID[$iblockId][$xml_id]; if ($bCache) { $cache->StartDataCache($cacheTime, $cacheId, $cachePath); $cache->EndDataCache(array("id" => $id)); } } return $id; }
$lAdmin->AddHeaders($arHeader); $arSelectedFields = $lAdmin->GetVisibleHeaderColumns(); $arSelectedProps = Array(); foreach($arProps as $i => $arProperty) { $k = array_search("PROPERTY_".$arProperty['ID'], $arSelectedFields); if($k!==false) { $arSelectedProps[] = $arProperty; if($arProperty["PROPERTY_TYPE"] == "L") { $arSelect[$arProperty['ID']] = Array(); $rs = CIBlockProperty::GetPropertyEnum($arProperty['ID']); while($ar = $rs->GetNext()) $arSelect[$arProperty['ID']][$ar["ID"]] = $ar["VALUE"]; } elseif($arProperty["PROPERTY_TYPE"] == "G") { $arSelect[$arProperty['ID']] = Array(); $rs = CIBlockSection::GetTreeList(Array("IBLOCK_ID"=>$arProperty["LINK_IBLOCK_ID"]), array("ID", "NAME", "DEPTH_LEVEL")); while($ar = $rs->GetNext()) $arSelect[$arProperty['ID']][$ar["ID"]] = str_repeat(" . ", $ar["DEPTH_LEVEL"]).$ar["NAME"]; } unset($arSelectedFields[$k]); } } $arSelectedFields[] = "ID";
if (strlen($strErrorR) <= 0) { $PROP = array(); for ($i = 0; $i < $NUM_FIELDS; $i++) { if (substr(${"field_" . $i}, 0, 7) == "IP_PROP") { $cur_prop_id = intval(substr(${"field_" . $i}, 7)); if (!is_set($arIBlockProperty, $cur_prop_id)) { $res1 = CIBlockProperty::GetByID($cur_prop_id, $IBLOCK_ID); if ($arRes1 = $res1->Fetch()) { $arIBlockProperty[$cur_prop_id] = $arRes1; } else { $arIBlockProperty[$cur_prop_id] = array(); } } if (is_array($arIBlockProperty[$cur_prop_id]) && count($arIBlockProperty[$cur_prop_id]) > 0) { if ($arIBlockProperty[$cur_prop_id]["PROPERTY_TYPE"] == "L") { $res2 = CIBlockProperty::GetPropertyEnum($cur_prop_id, array(), array("IBLOCK_ID" => $IBLOCK_ID, "VALUE" => Trim($arRes[$i]))); if ($arRes2 = $res2->Fetch()) { $arRes[$i] = $arRes2["ID"]; } else { $arRes[$i] = CIBlockPropertyEnum::Add(array("PROPERTY_ID" => $cur_prop_id, "VALUE" => Trim($arRes[$i]), "TMP_ID" => $tmpid)); } } elseif ($arIBlockProperty[$cur_prop_id]["PROPERTY_TYPE"] == "F") { if (preg_match("/^(http|https):\\/\\//", $arRes[$i])) { $arRes[$i] = CFile::MakeFileArray($arRes[$i]); } else { $arRes[$i] = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"] . $PATH2IMAGE_FILES . $arRes[$i]); } if (!is_array($arRes[$i]) || !isset($arRes[$i]["tmp_name"])) { $arRes[$i] = ''; } }
public function obtainBasketPropsSKU(&$arBasketItems, $arSkuProps, $arParents) { $arRes = array(); $arSkuIblockID = array(); if (self::isNonemptyArray($arBasketItems) && self::isNonemptyArray($arParents)) { foreach ($arBasketItems as &$arItem) { // catalog-specific logic farther if (!$this->cameFromCatalog($arItem)) { continue; } if (array_key_exists($arItem["PRODUCT_ID"], $arParents)) { $arSKU = CCatalogSKU::GetInfoByProductIBlock($arParents[$arItem["PRODUCT_ID"]]["IBLOCK_ID"]); if (!array_key_exists($arSKU["IBLOCK_ID"], $arSkuIblockID)) { $arSkuIblockID[$arSKU["IBLOCK_ID"]] = $arSKU; } $arItem["IBLOCK_ID"] = $arSKU["IBLOCK_ID"]; $arItem["SKU_PROPERTY_ID"] = $arSKU["SKU_PROPERTY_ID"]; } } unset($arItem); if ($this->useIBlock) { if (!self::isNonemptyArray($arSkuProps)) { $arSkuProps = array(); } foreach ($arSkuIblockID as $skuIblockID => $arSKU) { // possible props values $rsProps = CIBlockProperty::GetList(array('SORT' => 'ASC', 'ID' => 'ASC'), array('IBLOCK_ID' => $skuIblockID, 'ACTIVE' => 'Y')); while ($arProp = $rsProps->Fetch()) { if ($arProp['PROPERTY_TYPE'] == 'L' || $arProp['PROPERTY_TYPE'] == 'E' || $arProp['PROPERTY_TYPE'] == 'S' && $arProp['USER_TYPE'] == 'directory') { if ($arProp['XML_ID'] == 'CML2_LINK') { continue; } if (!in_array($arProp['CODE'], $arSkuProps)) { continue; } $arRes[$skuIblockID][$arProp['ID']] = array('ID' => $arProp['ID'], 'CODE' => $arProp['CODE'], 'NAME' => $arProp['NAME'], 'TYPE' => $arProp['PROPERTY_TYPE'], 'VALUES' => array()); if ($arProp['PROPERTY_TYPE'] == 'L') { $arValues = array(); $rsPropEnums = CIBlockProperty::GetPropertyEnum($arProp['ID']); while ($arEnum = $rsPropEnums->Fetch()) { $arValues[$arEnum['ID']] = array('ID' => $arEnum['ID'], 'NAME' => $arEnum['VALUE'], 'PICT' => false); } $arRes[$skuIblockID][$arProp['ID']]['VALUES'] = $arValues; } elseif ($arProp['PROPERTY_TYPE'] == 'E') { $arValues = array(); $rsPropEnums = CIBlockElement::GetList(array('SORT' => 'ASC'), array('IBLOCK_ID' => $arProp['LINK_IBLOCK_ID'], 'ACTIVE' => 'Y'), false, false, array('ID', 'NAME', 'PREVIEW_PICTURE')); while ($arEnum = $rsPropEnums->Fetch()) { $arEnum['PREVIEW_PICTURE'] = CFile::GetFileArray($arEnum['PREVIEW_PICTURE']); if (!is_array($arEnum['PREVIEW_PICTURE'])) { continue; } $productImg = CFile::ResizeImageGet($arEnum['PREVIEW_PICTURE'], array('width' => 80, 'height' => 80), BX_RESIZE_IMAGE_PROPORTIONAL, false, false); $arEnum['PREVIEW_PICTURE']['SRC'] = $productImg['src']; $arValues[$arEnum['ID']] = array('ID' => $arEnum['ID'], 'NAME' => $arEnum['NAME'], 'SORT' => $arEnum['SORT'], 'PICT' => $arEnum['PREVIEW_PICTURE']); } $arRes[$skuIblockID][$arProp['ID']]['VALUES'] = $arValues; } elseif ($arProp['PROPERTY_TYPE'] == 'S' && $arProp['USER_TYPE'] == 'directory') { $arValues = array(); if ($this->useHL) { $hlblock = HL\HighloadBlockTable::getList(array("filter" => array("TABLE_NAME" => $arProp["USER_TYPE_SETTINGS"]["TABLE_NAME"])))->fetch(); if ($hlblock) { $entity = HL\HighloadBlockTable::compileEntity($hlblock); $entity_data_class = $entity->getDataClass(); $rsData = $entity_data_class::getList(); while ($arData = $rsData->fetch()) { $arValues[$arData['ID']] = array('ID' => $arData['ID'], 'NAME' => $arData['UF_NAME'], 'SORT' => $arData['UF_SORT'], 'FILE' => $arData['UF_FILE'], 'PICT' => '', 'XML_ID' => $arData['UF_XML_ID']); } $arRes[$skuIblockID][$arProp['ID']]['VALUES'] = $arValues; } } } } } } foreach ($arBasketItems as &$arItem) { // catalog-specific logic farther: iblocks, catalogs and other friends if (!$this->cameFromCatalog($arItem)) { continue; } $arSelectSkuProps = array(); foreach ($arSkuProps as $prop) { $arSelectSkuProps[] = "PROPERTY_" . $prop; } if (isset($arItem["IBLOCK_ID"]) && intval($arItem["IBLOCK_ID"]) > 0 && array_key_exists($arItem["IBLOCK_ID"], $arRes)) { $arItem["SKU_DATA"] = $arRes[$arItem["IBLOCK_ID"]]; $arUsedValues = array(); $arTmpRes = array(); $arOfFilter = array("IBLOCK_ID" => $arItem["IBLOCK_ID"], "PROPERTY_" . $arSkuIblockID[$arItem["IBLOCK_ID"]]["SKU_PROPERTY_ID"] => $arParents[$arItem["PRODUCT_ID"]]["PRODUCT_ID"]); $rsOffers = CIBlockElement::GetList(array(), $arOfFilter, false, false, array_merge(array("ID"), $arSelectSkuProps)); while ($arOffer = $rsOffers->GetNext()) { foreach ($arSkuProps as $prop) { if (!empty($arOffer["PROPERTY_" . $prop . "_VALUE"]) && (!is_array($arUsedValues[$arItem["PRODUCT_ID"]][$prop]) || !in_array($arOffer["PROPERTY_" . $prop . "_VALUE"], $arUsedValues[$arItem["PRODUCT_ID"]][$prop]))) { $arUsedValues[$arItem["PRODUCT_ID"]][$prop][] = $arOffer["PROPERTY_" . $prop . "_VALUE"]; } } } if (!empty($arUsedValues)) { // add only used values to the item SKU_DATA foreach ($arRes[$arItem["IBLOCK_ID"]] as $propId => $arProp) { if (!array_key_exists($arProp["CODE"], $arUsedValues[$arItem["PRODUCT_ID"]])) { continue; } $propValues = array(); $skuType = ''; foreach ($arProp["VALUES"] as $valId => $arValue) { // properties of various type have different values in the used values data if ($arProp["TYPE"] == "L" && in_array($arValue["NAME"], $arUsedValues[$arItem["PRODUCT_ID"]][$arProp["CODE"]]) || $arProp["TYPE"] == "E" && in_array($arValue["ID"], $arUsedValues[$arItem["PRODUCT_ID"]][$arProp["CODE"]]) || $arProp["TYPE"] == "S" && in_array($arValue["XML_ID"], $arUsedValues[$arItem["PRODUCT_ID"]][$arProp["CODE"]])) { if ($arProp["TYPE"] == "S") { $arTmpFile = CFile::GetFileArray($arValue["FILE"]); $tmpImg = CFile::ResizeImageGet($arTmpFile, array('width' => 30, 'height' => 30), BX_RESIZE_IMAGE_PROPORTIONAL, true); $arValue['PICT'] = array_change_key_case($tmpImg, CASE_UPPER); $skuType = 'image'; } else { $skuType = 'link'; } $propValues[$valId] = $arValue; } } $arTmpRes['n' . $propId] = array('CODE' => $arProp["CODE"], 'NAME' => $arProp["NAME"], 'SKU_TYPE' => $skuType, 'VALUES' => $propValues); } } $arItem["SKU_DATA"] = $arTmpRes; } if (self::isNonemptyArray($arItem['PROPS'])) { foreach ($arItem['PROPS'] as $v => $prop) { // search for sku property that matches current one // establishing match based on codes even if the code may not set $code = $prop['CODE']; if (self::isNonemptyArray($arItem['SKU_DATA'])) { foreach ($arItem['SKU_DATA'] as $spIndex => $skuProp) { if ($skuProp['CODE'] == $code) { $arItem['PROPS'][$v]['SKU_PROP'] = $spIndex; $arItem['PROPS'][$v]['SKU_TYPE'] = $skuProp['SKU_TYPE']; if (self::isNonemptyArray($skuProp['VALUES'])) { foreach ($skuProp['VALUES'] as $spValue) { if ($skuProp['SKU_TYPE'] == 'image') { $match = $prop["VALUE"] == $spValue["NAME"] || $prop["VALUE"] == $spValue["XML_ID"]; } else { $match = $prop["VALUE"] == $spValue["NAME"]; } // otherwise - the other if ($match) { $arItem['PROPS'][$v]['SKU_VALUE'] = $spValue; break; } } } } } } } } } } } }
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'))); } } }
public function getSkuPropsData($arBasketItems, $arParents, $arSkuProps = array()) { $arRes = array(); $arSkuIblockID = array(); if (is_array($arParents)) { foreach ($arBasketItems as &$arItem) { if (array_key_exists($arItem["PRODUCT_ID"], $arParents)) { $arSKU = CCatalogSKU::GetInfoByProductIBlock($arParents[$arItem["PRODUCT_ID"]]["IBLOCK_ID"]); if (!array_key_exists($arSKU["IBLOCK_ID"], $arSkuIblockID)) { $arSkuIblockID[$arSKU["IBLOCK_ID"]] = $arSKU; } $arItem["IBLOCK_ID"] = $arSKU["IBLOCK_ID"]; $arItem["SKU_PROPERTY_ID"] = $arSKU["SKU_PROPERTY_ID"]; } } unset($arItem); foreach ($arSkuIblockID as $skuIblockID => $arSKU) { // possible props values $rsProps = CIBlockProperty::GetList(array('SORT' => 'ASC', 'ID' => 'ASC'), array('IBLOCK_ID' => $skuIblockID, 'ACTIVE' => 'Y')); while ($arProp = $rsProps->Fetch()) { if ($arProp['PROPERTY_TYPE'] == 'L' || $arProp['PROPERTY_TYPE'] == 'E' || $arProp['PROPERTY_TYPE'] == 'S' && $arProp['USER_TYPE'] == 'directory') { if ($arProp['XML_ID'] == 'CML2_LINK') { continue; } if (!in_array($arProp['CODE'], $arSkuProps)) { continue; } $arValues = array(); if ($arProp['PROPERTY_TYPE'] == 'L') { $arValues = array(); $rsPropEnums = CIBlockProperty::GetPropertyEnum($arProp['ID']); while ($arEnum = $rsPropEnums->Fetch()) { $arValues['n' . $arEnum['ID']] = array('ID' => $arEnum['ID'], 'NAME' => $arEnum['VALUE'], 'PICT' => false); } } elseif ($arProp['PROPERTY_TYPE'] == 'E') { $rsPropEnums = CIBlockElement::GetList(array('SORT' => 'ASC'), array('IBLOCK_ID' => $arProp['LINK_IBLOCK_ID'], 'ACTIVE' => 'Y'), false, false, array('ID', 'NAME', 'PREVIEW_PICTURE')); while ($arEnum = $rsPropEnums->Fetch()) { $arEnum['PREVIEW_PICTURE'] = CFile::GetFileArray($arEnum['PREVIEW_PICTURE']); if (!is_array($arEnum['PREVIEW_PICTURE'])) { $arEnum['PREVIEW_PICTURE'] = false; } if ($arEnum['PREVIEW_PICTURE'] !== false) { $productImg = CFile::ResizeImageGet($arEnum['PREVIEW_PICTURE'], array('width' => 80, 'height' => 80), BX_RESIZE_IMAGE_PROPORTIONAL, false, false); $arEnum['PREVIEW_PICTURE']['SRC'] = $productImg['src']; } $arValues['n' . $arEnum['ID']] = array('ID' => $arEnum['ID'], 'NAME' => $arEnum['NAME'], 'SORT' => $arEnum['SORT'], 'PICT' => $arEnum['PREVIEW_PICTURE']); } } elseif ($arProp['PROPERTY_TYPE'] == 'S' && $arProp['USER_TYPE'] == 'directory') { if (self::$highLoadInclude === null) { self::$highLoadInclude = Loader::includeModule('highloadblock'); } if (self::$highLoadInclude) { $hlblock = HL\HighloadBlockTable::getList(array("filter" => array("=TABLE_NAME" => $arProp["USER_TYPE_SETTINGS"]["TABLE_NAME"])))->fetch(); if ($hlblock) { $entity = HL\HighloadBlockTable::compileEntity($hlblock); $entity_data_class = $entity->getDataClass(); $rsData = $entity_data_class::getList(); while ($arData = $rsData->fetch()) { $arValues['n' . $arData['ID']] = array('ID' => $arData['ID'], 'NAME' => $arData['UF_NAME'], 'SORT' => $arData['UF_SORT'], 'FILE' => $arData['UF_FILE'], 'PICT' => false, 'XML_ID' => $arData['UF_XML_ID']); } } } } if (!empty($arValues) && is_array($arValues)) { $arRes[$skuIblockID][$arProp['ID']] = array('ID' => $arProp['ID'], 'CODE' => $arProp['CODE'], 'NAME' => $arProp['NAME'], 'TYPE' => $arProp['PROPERTY_TYPE'], 'USER_TYPE' => $arProp['USER_TYPE'], 'VALUES' => $arValues); } } } } foreach ($arBasketItems as &$arItem) { if (isset($arItem["IBLOCK_ID"]) && (int) $arItem["IBLOCK_ID"] > 0 && isset($arRes[$arItem["IBLOCK_ID"]])) { $arItem["SKU_DATA"] = $arRes[$arItem["IBLOCK_ID"]]; $arUsedValues = array(); $arTmpRes = array(); $arOfFilter = array("IBLOCK_ID" => $arItem["IBLOCK_ID"], "PROPERTY_" . $arSkuIblockID[$arItem["IBLOCK_ID"]]["SKU_PROPERTY_ID"] => $arParents[$arItem["PRODUCT_ID"]]["PRODUCT_ID"]); $rsOffers = CIBlockElement::GetList(array(), $arOfFilter, false, false, array("ID", "IBLOCK_ID")); while ($obOffer = $rsOffers->GetNextElement()) { $arProps = $obOffer->GetProperties(); foreach ($arProps as $propName => $propValue) { if (in_array($propName, $arSkuProps)) { if (array_key_exists('VALUE', $propValue)) { if (strlen($propValue['VALUE']) > 0 && (!is_array($arUsedValues[$arItem["PRODUCT_ID"]][$propName]) || !in_array($propValue['VALUE'], $arUsedValues[$arItem["PRODUCT_ID"]][$propName]))) { $arUsedValues[$arItem["PRODUCT_ID"]][$propName][] = $propValue['VALUE']; } } } } } if (!empty($arUsedValues)) { // add only used values to the item SKU_DATA foreach ($arRes[$arItem["IBLOCK_ID"]] as $propId => $arProp) { if (!array_key_exists($arProp["CODE"], $arUsedValues[$arItem["PRODUCT_ID"]])) { continue; } $arTmpRes['n' . $propId] = array(); foreach ($arProp["VALUES"] as $valId => $arValue) { // properties of various type have different values in the used values data if ($arProp["TYPE"] == "L" && in_array($arValue["NAME"], $arUsedValues[$arItem["PRODUCT_ID"]][$arProp["CODE"]]) || $arProp["TYPE"] == "E" && in_array($arValue["ID"], $arUsedValues[$arItem["PRODUCT_ID"]][$arProp["CODE"]]) || $arProp["TYPE"] == "S" && in_array($arValue["XML_ID"], $arUsedValues[$arItem["PRODUCT_ID"]][$arProp["CODE"]])) { if ($arProp["TYPE"] == "S") { if (!empty($arValue["FILE"])) { $arTmpFile = CFile::GetFileArray($arValue["FILE"]); if (!empty($arTmpFile)) { $tmpImg = CFile::ResizeImageGet($arTmpFile, array('width' => 80, 'height' => 80), BX_RESIZE_IMAGE_PROPORTIONAL, false, false); $arValue['PICT']['SRC'] = $tmpImg['src']; } } } $arTmpRes['n' . $propId]["CODE"] = $arProp["CODE"]; $arTmpRes['n' . $propId]["NAME"] = $arProp["NAME"]; $arTmpRes['n' . $propId]["VALUES"][$valId] = $arValue; } } } } $arItem["SKU_DATA"] = $arTmpRes; } } unset($arItem); } return $arBasketItems; }
public static function ListAddFilterFields($arPropUserTypeList, $arProps, $sFormName, &$arFilter, &$arFilterable, &$arCustomFilter, &$arDateFilter) { $i = count($arFilter); foreach ($arProps as $propID => $arProp) { if (!empty($arProp['USER_TYPE']) && !array_key_exists($arProp['USER_TYPE'], $arPropUserTypeList)) { continue; } if (!empty($arProp['USER_TYPE']) && is_array($arPropUserTypeList[$arProp['USER_TYPE']])) { if (array_key_exists('GetPublicFilterHTML', $arPropUserTypeList[$arProp['USER_TYPE']])) { $arFilter[$i] = array('id' => $propID, 'name' => htmlspecialcharsex($arProp['NAME']), 'type' => 'custom', 'enable_settings' => false, 'value' => call_user_func_array($arPropUserTypeList[$arProp['USER_TYPE']]['GetPublicFilterHTML'], array($arProp, array('VALUE' => $propID, 'FORM_NAME' => 'filter_' . $sFormName, 'GRID_ID' => $sFormName)))); $arFilterable[$propID] = $arProp['PROPERTY_TYPE'] === 'S' ? '?' : ''; if (array_key_exists('AddFilterFields', $arPropUserTypeList[$arProp['USER_TYPE']])) { $arCustomFilter[$propID] = array('callback' => $arPropUserTypeList[$arProp['USER_TYPE']]['AddFilterFields'], 'filter' => &$arFilter[$i]); } } } else { if (empty($arProp['USER_TYPE'])) { if ($arProp["PROPERTY_TYPE"] === "F") { } else { if ($arProp["PROPERTY_TYPE"] === "N") { $arFilter[$i] = array("id" => $propID, "name" => htmlspecialcharsex($arProp["NAME"]), "type" => "number"); $arFilterable[$propID] = ""; } else { if ($arProp["PROPERTY_TYPE"] === "G") { $items = array(); $propSections = CIBlockSection::GetList(array("left_margin" => "asc"), array("IBLOCK_ID" => $arProp["LINK_IBLOCK_ID"])); while ($arSection = $propSections->Fetch()) { $items[$arSection["ID"]] = str_repeat(". ", $arSection["DEPTH_LEVEL"] - 1) . $arSection["NAME"]; } unset($propSections, $arSection); $arFilter[$i] = array("id" => $propID, "name" => htmlspecialcharsex($arProp["NAME"]), "type" => "list", "items" => $items, "params" => array("size" => 5, "multiple" => "multiple"), "valign" => "top"); $arFilterable[$propID] = ""; } else { if ($arProp["PROPERTY_TYPE"] === "E") { //Should be handled in template $arFilter[$i] = array("id" => $propID, "name" => htmlspecialcharsex($arProp["NAME"]), "type" => "E", "value" => $arProp); $arFilterable[$propID] = ""; } else { if ($arProp["PROPERTY_TYPE"] === "L") { $items = array(); $propEnums = CIBlockProperty::GetPropertyEnum($arProp["ID"]); while ($ar_enum = $propEnums->Fetch()) { $items[$ar_enum["ID"]] = $ar_enum["VALUE"]; } unset($propEnums); $arFilter[$i] = array("id" => $propID, "name" => htmlspecialcharsex($arProp["NAME"]), "type" => "list", "items" => $items, "params" => array("size" => 5, "multiple" => "multiple"), "valign" => "top"); $arFilterable[$propID] = ""; } else { if ($arProp["PROPERTY_TYPE"] === 'S') { $arFilter[$i] = array("id" => $propID, "name" => htmlspecialcharsex($arProp["NAME"])); $arFilterable[$propID] = "?"; } else { $arFilter[$i] = array("id" => $propID, "name" => htmlspecialcharsex($arProp["NAME"])); $arFilterable[$propID] = ""; } } } } } } } } $i++; } }