function ExportProperties(&$PROPERTY_MAP)
{
$PROPERTY_MAP = array();
fwrite($this->fp, "tt<".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",
)));
}
}
$featureList = [];
$iterator = IblockPropertyFeatureTable::getList([
'select' => ['PROPERTY_ID', 'MODULE_ID', 'FEATURE_ID', 'IS_ENABLED'],
'filter' => [
'=PROPERTY.IBLOCK_ID' => $this->arIBlock['ID'],
'=PROPERTY.ACTIVE' => 'Y'
],
'order' => ['PROPERTY_ID' => 'ASC']
]);
while ($row = $iterator->fetch())
{
$id = (int)$row['PROPERTY_ID'];
if (!isset($featureList[$id]))
$featureList[$id] = [];
$featureList[$id][] = [
'MODULE_ID' => $row['MODULE_ID'],
'FEATURE_ID' => $row['FEATURE_ID'],
'IS_ENABLED' => $row['IS_ENABLED']
];
unset($id);
}
unset($row, $iterator);
$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())
{
$id = (int)$arProp["ID"];
fwrite($this->fp, "ttt<".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, "tttt<".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,
"ttttt<".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"]))
."ttttt".GetMessage("IBLOCK_XML2_CHOICE").">n"
);
}
}
fwrite($this->fp, "tttt".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']));
}
}
$propertyFeatures = '';
if (isset($featureList[$id]))
{
$propertyFeatures = $this->formatXMLNode(
4,
GetMessage('IBLOCK_XML2_BX_PROPERTY_FEATURE_LIST'),
serialize($featureList[$id])
);
}
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
.$propertyFeatures
);
}
fwrite($this->fp, "ttt".GetMessage("IBLOCK_XML2_PROPERTY").">n");
}
fwrite($this->fp, "tt".GetMessage("IBLOCK_XML2_PROPERTIES").">n");
if($this->bExtended)
{
$catalog = false;
if (Loader::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);
}
}
}