/** * @param $id * @param bool|false $forCache * @return bool|string */ public static function run($id, $forCache = false) { $data = \CIBlock::GetByID($id)->Fetch(); if ($data) { $code = $data['CODE']; $name = $data['NAME']; $isactive = $data['ACTIVE'] == 'Y'; $sort = $data['SORT']; $description = (string) $data['DESCRIPTION']; $descriptionType = $data['DESCRIPTION_TYPE']; $className = $forCache ? \TAO::normalizeMnemocode($code) : \TAO::chunkCap($code); unset($data['ID']); unset($data['TIMESTAMP_X']); unset($data['IBLOCK_TYPE_ID']); unset($data['CODE']); unset($data['NAME']); unset($data['LANG_DIR']); unset($data['SERVER_NAME']); unset($data['LID']); unset($data['ACTIVE']); unset($data['SORT']); unset($data['DESCRIPTION']); unset($data['DESCRIPTION_TYPE']); $defs = array('RSS_ACTIVE' => 'Y', 'RSS_TTL' => '24', 'RSS_FILE_ACTIVE' => 'N', 'RSS_YANDEX_ACTIVE' => 'N', 'INDEX_ELEMENT' => 'Y', 'INDEX_SECTION' => 'N', 'WORKFLOW' => 'Y', 'VERSION' => '1', 'BIZPROC' => 'N', 'SECTION_CHOOSER' => 'L', 'RIGHTS_MODE' => 'S', 'SECTION_PROPERTY' => 'N', 'PROPERTY_INDEX' => 'N'); foreach (array_keys($data) as $k) { if (empty($data[$k])) { unset($data[$k]); } if (isset($defs[$k]) && $defs[$k] == $data[$k]) { unset($data[$k]); } } $sites = ''; $res = \CIBlock::GetSite($id); while ($row = $res->Fetch()) { $sites .= $sites != '' ? ',' : ''; $sites .= "'" . $row['SITE_ID'] . "'"; } unset($data['ELEMENTS_NAME']); unset($data['ELEMENT_NAME']); $sData = self::generateArrayExport($data, ' '); $sDescription = self::generateSimpleStringFunctionText('description', $description, ''); $sDescriptionType = self::generateSimpleStringFunctionText('descriptionType', $descriptionType, 'text'); $sIsActive = self::generateSimpleStringFunctionText('isActive', $isactive, true); $sSort = self::generateSimpleStringFunctionText('sort', $sort, '500'); $sSites = "\n\n public function sites()\n {\n return array({$sites});\n }"; $properties = array(); $result = \CIBlockProperty::GetList(array(), array('IBLOCK_ID' => $id, 'CHECK_PERMISSIONS' => 'N')); $defs = array('VERSION' => '1', 'FILTRABLE' => 'N', 'SEARCHABLE' => 'N', 'LIST_TYPE' => 'L', 'COL_COUNT' => '30', 'ROW_COUNT' => '1', 'MULTIPLE' => 'N', 'SORT' => '500', 'IS_REQUIRED' => 'N', 'WITH_DESCRIPTION' => 'N', 'MULTIPLE_CNT' => '5'); while ($row = $result->Fetch()) { $code = trim($row['CODE']); if ($code == '') { $code = 'PROP_' . $row['ID']; } $pid = $row['ID']; unset($row['ID']); unset($row['TIMESTAMP_X']); unset($row['IBLOCK_ID']); unset($row['ACTIVE']); unset($row['CODE']); foreach (array_keys($row) as $k) { if (empty($row[$k])) { unset($row[$k]); } if (isset($defs[$k]) && $defs[$k] == $row[$k]) { unset($row[$k]); } } if ($row['PROPERTY_TYPE'] == 'L') { $items = array(); $res = \CIBlockPropertyEnum::GetList(array(), array('PROPERTY_ID' => $pid, 'CHECK_PERMISSIONS' => 'N')); while ($lrow = $res->Fetch()) { $iid = $lrow['ID']; $eid = $lrow['EXTERNAL_ID']; unset($lrow['ID']); unset($lrow['EXTERNAL_ID']); unset($lrow['XML_ID']); unset($lrow['TMP_ID']); unset($lrow['PROPERTY_ID']); unset($lrow['PROPERTY_NAME']); unset($lrow['PROPERTY_CODE']); unset($lrow['PROPERTY_SORT']); if ($lrow['SORT'] == '500') { unset($lrow['SORT']); } if ($lrow['DEF'] == 'N') { unset($lrow['DEF']); } if (count($lrow) == 1 && isset($lrow['VALUE'])) { $lrow = $lrow['VALUE']; } $items[$eid] = $lrow; } $row['ITEMS'] = $items; } if (isset($row['LINK_IBLOCK_ID']) && !$forCache) { $row['LINK_IBLOCK_CODE'] = \TAO::getInfoblockCode($row['LINK_IBLOCK_ID']); unset($row['LINK_IBLOCK_ID']); } $properties[$code] = $row; } $sProperties = self::generateArrayExport($properties, ' '); $messages = \CIBlock::GetMessages($id); $sMessages = self::generateArrayExport($messages, ' '); $fields = self::trimArrayValues(\CIBlock::GetFields($id)); $defFields = self::defaultFields(); foreach (array_keys($fields) as $field) { if (isset($defFields[$field])) { $md5 = md5(serialize($fields[$field])); $def = md5(serialize($defFields[$field])); if ($md5 == $def) { //unset($fields[$field]); } else { //var_dump($fields[$field], $defFields[$field]); } } } $sFields = self::generateArrayExport($fields, ' '); $permissions = \CIBlock::GetGroupPermissions($id); $sPermissions = self::generateArrayExport($permissions, ' '); ob_start(); include \TAO::taoDir() . '/views/template-iblock.phtml'; $content = "<?php\n" . ob_get_clean(); return $content; } return false; }