Example #1
0
 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;
 }
Example #2
0
 /**
  * Получить 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'];
}
Example #4
0
	/**
	 * Получает значиния свойства типа Список
	 *
	 * @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;
	}
Example #5
0
	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");
			}
		}
	}
Example #6
0
            }
            $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;
Example #7
0
 $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));
Example #10
0
 /**
  * ћетод создает новый документ с указанными свойствами (пол¤ми).
  *
  * @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";
Example #12
0
 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);
         }
     }
 }
Example #13
0
 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']);
     }
 }
Example #14
0
 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;
 }
Example #15
0
 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++;
     }
 }
Example #16
0
		}
		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' => '-',
Example #17
0
 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;
 }
Example #18
0
         }
     }
 } 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' => '');
                     }
Example #19
0
 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;
Example #20
0
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;
}
Example #21
0
$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"]="";
	}
Example #22
0
	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);
	}
Example #23
0
        $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();
Example #24
0
 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;
 }
Example #25
0

$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";
Example #26
0
 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] = '';
                     }
                 }
Example #27
0
 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;
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
 }
Example #28
0
    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')));
            }
        }
    }
Example #29
0
 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++;
     }
 }