protected function getElementFields($iblockId, $elementId) { $totalResult = array(); $list = new CList($iblockId); $listFields = $list->getFields(); foreach ($listFields as $fieldId => $field) { $totalResult[$fieldId] = $field; } $elementQuery = CIBlockElement::getList(array(), array("IBLOCK_ID" => $iblockId, "=ID" => $elementId), false, false, array('*')); $elementObject = $elementQuery->getNextElement(); $elementNewData = $elementObject->getFields(); if (is_array($elementNewData)) { foreach ($elementNewData as $fieldId => $fieldValue) { if (!$list->is_field($fieldId)) { continue; } if (isset($totalResult[$fieldId]["NAME"])) { $totalResult[$fieldId]["VALUE"] = $fieldValue; } } } $query = \CIblockElement::getPropertyValues($iblockId, array('ID' => $elementId)); if ($propertyValues = $query->fetch()) { foreach ($propertyValues as $id => $values) { if ($id == "IBLOCK_ELEMENT_ID") { continue; } $fieldId = "PROPERTY_" . $id; $totalResult[$fieldId]["VALUE"] = $values; } } return $totalResult; }
/** * @param int $iblockId This variable is the id iblock. * @return string * @throws Main\ArgumentNullException * @throws Main\ArgumentOutOfRangeException */ public static function export($iblockId) { $iblockId = intval($iblockId); if ($iblockId <= 0) { throw new Main\ArgumentNullException("iblockId"); } $db = \CIBlock::GetList(array(), array("ID" => $iblockId, "CHECK_PERMISSIONS" => "N")); $iblock = $db->Fetch(); if (!$iblock) { throw new Main\ArgumentOutOfRangeException("iblockId"); } if (!$iblock["CODE"]) { throw new Main\ArgumentException("Parameter 'CODE' is required.", "matches"); } $list = new \CList($iblockId); $fields = $list->getFields(); foreach ($fields as $fieldId => $field) { if ($field["TYPE"] == "NAME") { $iblock["~NAME_FIELD"] = array("NAME" => $field["NAME"], "SETTINGS" => $field["SETTINGS"], "DEFAULT_VALUE" => $field["DEFAULT_VALUE"], "SORT" => $field["SORT"]); break; } } $iblockUtf8 = Main\Text\Encoding::convertEncodingArray($iblock, LANG_CHARSET, "UTF-8"); $iblockUtf8 = serialize($iblockUtf8); $iblockUtf8Length = Main\Text\String::getBinaryLength($iblockUtf8); $datum = str_pad($iblockUtf8Length, 10, "0", STR_PAD_LEFT) . $iblockUtf8; if (intval($iblock["PICTURE"]) > 0) { $picture = \CFile::MakeFileArray($iblock["PICTURE"]); if (isset($picture["tmp_name"]) && !empty($picture["tmp_name"])) { $f = fopen($picture["tmp_name"], "rb"); $pictureData = fread($f, filesize($picture["tmp_name"])); fclose($f); $pictureTypeLength = Main\Text\String::getBinaryLength($picture["type"]); $pictureLength = Main\Text\String::getBinaryLength($pictureData); $datum .= "P" . str_pad($pictureTypeLength, 10, "0", STR_PAD_LEFT) . $picture["type"] . str_pad($pictureLength, 10, "0", STR_PAD_LEFT) . $pictureData; } } $documentType = self::getDocumentType($iblock["IBLOCK_TYPE_ID"], $iblockId); $templatesList = \CBPWorkflowTemplateLoader::GetList(array(), array("DOCUMENT_TYPE" => $documentType), false, false, array("ID", "AUTO_EXECUTE", "NAME", "DESCRIPTION", "SYSTEM_CODE")); while ($templatesListItem = $templatesList->Fetch()) { $bpDescrUtf8 = Main\Text\Encoding::convertEncodingArray($templatesListItem, LANG_CHARSET, "UTF-8"); $bpDescrUtf8 = serialize($bpDescrUtf8); $bpDescrUtf8Length = Main\Text\String::getBinaryLength($bpDescrUtf8); $datum .= "B" . str_pad($bpDescrUtf8Length, 10, "0", STR_PAD_LEFT) . $bpDescrUtf8; $bp = \CBPWorkflowTemplateLoader::ExportTemplate($templatesListItem["ID"], false); $bpLength = Main\Text\String::getBinaryLength($bp); $datum .= str_pad($bpLength, 10, "0", STR_PAD_LEFT) . $bp; } if (function_exists("gzcompress")) { $datum = "compressed" . gzcompress($datum, 9); } return $datum; }
protected function getListData() { $list = new CList($this->iblockId); $this->lists['FIELDS'] = $list->getFields(); $this->lists['SELECT'] = array('ID', 'IBLOCK_ID', 'NAME', 'IBLOCK_SECTION_ID', 'CREATED_BY', 'BP_PUBLISHED'); $this->lists['DATA'] = array(); $this->lists['DATA']['NAME'] = Loc::getMessage('LISTS_SEAC_FIELD_NAME_DEFAULT'); $this->lists['DATA']['IBLOCK_SECTION_ID'] = ''; foreach ($this->lists['FIELDS'] as $fieldId => $field) { $this->lists['FIELDS'][$fieldId]['NAME'] = htmlspecialcharsbx($this->lists['FIELDS'][$fieldId]['NAME']); if ($list->is_field($fieldId)) { if ($fieldId == 'ACTIVE_FROM' || $fieldId == 'PREVIEW_PICTURE' || $fieldId == 'DETAIL_PICTURE') { if ($field['DEFAULT_VALUE'] === '=now') { $this->lists['DATA'][$fieldId] = ConvertTimeStamp(time() + CTimeZone::GetOffset(), 'FULL'); } elseif ($field['DEFAULT_VALUE'] === '=today') { $this->lists['DATA'][$fieldId] = ConvertTimeStamp(time() + CTimeZone::GetOffset(), 'SHORT'); } else { $this->lists['DATA'][$fieldId] = ''; } } else { $this->lists['DATA'][$fieldId] = $field['DEFAULT_VALUE']; } $this->lists['SELECT'][] = $fieldId; } elseif (is_array($field['PROPERTY_USER_TYPE']) && array_key_exists('GetPublicEditHTML', $field['PROPERTY_USER_TYPE'])) { $this->lists['DATA'][$fieldId] = array('n0' => array('VALUE' => $field['DEFAULT_VALUE'], 'DESCRIPTION' => '')); } elseif ($field['PROPERTY_TYPE'] == 'L') { $this->lists['DATA'][$fieldId] = array(); $propEnums = CIBlockProperty::getPropertyEnum($field['ID']); while ($enum = $propEnums->fetch()) { if ($enum['DEF'] == 'Y') { $this->lists['DATA'][$fieldId][] = $enum['ID']; } } } elseif ($field['PROPERTY_TYPE'] == 'F') { $this->lists['DATA'][$fieldId] = array('n0' => array('VALUE' => $field['DEFAULT_VALUE'], 'DESCRIPTION' => '')); } elseif ($field['PROPERTY_TYPE'] == 'G' || $field['PROPERTY_TYPE'] == 'E') { $this->lists['DATA'][$fieldId] = array($field['DEFAULT_VALUE']); } else { $this->lists['DATA'][$fieldId] = array('n0' => array('VALUE' => $field['DEFAULT_VALUE'], 'DESCRIPTION' => '')); if ($field['MULTIPLE'] == 'Y') { if (is_array($field['DEFAULT_VALUE']) || strlen($field['DEFAULT_VALUE'])) { $this->lists['DATA'][$fieldId]['n1'] = array('VALUE' => '', 'DESCRIPTION' => ''); } } } if ($fieldId == 'CREATED_BY') { $this->lists['SELECT'][] = 'CREATED_USER_NAME'; } if ($fieldId == 'MODIFIED_BY') { $this->lists['SELECT'][] = 'USER_NAME'; } } }
public function GetDocumentFields($documentType) { $iblockId = intval(substr($documentType, strlen("iblock_"))); if ($iblockId <= 0) { throw new CBPArgumentOutOfRangeException("documentType", $documentType); } $documentFieldTypes = self::getDocumentFieldTypes($documentType); $result = 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)); $keys = array_keys($result); foreach ($keys as $key) { $result[$key]["Multiple"] = false; } $dbProperties = CIBlockProperty::getList(array("sort" => "asc", "name" => "asc"), array("IBLOCK_ID" => $iblockId, 'ACTIVE' => 'Y')); $ignoreProperty = array(); while ($property = $dbProperties->fetch()) { if (strlen(trim($property["CODE"])) > 0) { $key = "PROPERTY_" . $property["CODE"]; $ignoreProperty["PROPERTY_" . $property["ID"]] = "PROPERTY_" . $property["CODE"]; } else { $key = "PROPERTY_" . $property["ID"]; $ignoreProperty["PROPERTY_" . $property["ID"]] = 0; } $result[$key] = array("Name" => $property["NAME"], "Filterable" => $property["FILTRABLE"] == "Y", "Editable" => true, "Required" => $property["IS_REQUIRED"] == "Y", "Multiple" => $property["MULTIPLE"] == "Y", "TypeReal" => $property["PROPERTY_TYPE"]); if (strlen($property["USER_TYPE"]) > 0) { $result[$key]["TypeReal"] = $property["PROPERTY_TYPE"] . ":" . $property["USER_TYPE"]; if ($property["USER_TYPE"] == "UserID" || $property["USER_TYPE"] == "employee" && COption::getOptionString("bizproc", "employee_compatible_mode", "N") != "Y") { $result[$key]["Type"] = "user"; $result[$key . "_PRINTABLE"] = array("Name" => $property["NAME"] . GetMessage("IBD_FIELD_USERNAME_PROPERTY"), "Filterable" => false, "Editable" => false, "Required" => false, "Multiple" => $property["MULTIPLE"] == "Y", "Type" => "string"); $result[$key]["DefaultValue"] = $property["DEFAULT_VALUE"]; } elseif ($property["USER_TYPE"] == "DateTime") { $result[$key]["Type"] = "datetime"; $result[$key]["DefaultValue"] = $property["DEFAULT_VALUE"]; } elseif ($property["USER_TYPE"] == "Date") { $result[$key]["Type"] = "date"; $result[$key]["DefaultValue"] = $property["DEFAULT_VALUE"]; } elseif ($property["USER_TYPE"] == "EList") { $result[$key]["Type"] = "E:EList"; $result[$key]["Options"] = $property["LINK_IBLOCK_ID"]; } elseif ($property["USER_TYPE"] == "HTML") { $result[$key]["Type"] = "S:HTML"; $result[$key]["DefaultValue"] = $property["DEFAULT_VALUE"]; } else { $result[$key]["Type"] = "string"; $result[$key]["DefaultValue"] = $property["DEFAULT_VALUE"]; } } elseif ($property["PROPERTY_TYPE"] == "L") { $result[$key]["Type"] = "select"; $result[$key]["Options"] = array(); $dbPropertyEnums = CIBlockProperty::getPropertyEnum($property["ID"]); while ($propertyEnum = $dbPropertyEnums->getNext()) { $result[$key]["Options"][$propertyEnum["XML_ID"]] = $propertyEnum["VALUE"]; if ($propertyEnum["DEF"] == "Y") { $result[$key]["DefaultValue"] = $propertyEnum["VALUE"]; } } } elseif ($property["PROPERTY_TYPE"] == "N") { $result[$key]["Type"] = "int"; $result[$key]["DefaultValue"] = $property["DEFAULT_VALUE"]; } elseif ($property["PROPERTY_TYPE"] == "F") { $result[$key]["Type"] = "file"; $result[$key . "_printable"] = array("Name" => $property["NAME"] . GetMessage("IBD_FIELD_USERNAME_PROPERTY"), "Filterable" => false, "Editable" => false, "Required" => false, "Multiple" => $property["MULTIPLE"] == "Y", "Type" => "string"); } elseif ($property["PROPERTY_TYPE"] == "S") { $result[$key]["Type"] = "string"; $result[$key]["DefaultValue"] = $property["DEFAULT_VALUE"]; } else { $result[$key]["Type"] = "string"; $result[$key]["DefaultValue"] = $property["DEFAULT_VALUE"]; } } $keys = array_keys($result); foreach ($keys as $k) { $result[$k]["BaseType"] = $documentFieldTypes[$result[$k]["Type"]]["BaseType"]; $result[$k]["Complex"] = $documentFieldTypes[$result[$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); $result[$key]["sort"] = $field["SORT"]; $result[$key]["settings"] = $field["SETTINGS"]; if ($field["ROW_COUNT"] && $field["COL_COUNT"]) { $result[$key]["row_count"] = $field["ROW_COUNT"]; $result[$key]["col_count"] = $field["COL_COUNT"]; } } else { if (!isset($result[$fieldId])) { $result[$fieldId] = array('Name' => $field['NAME'], 'Filterable' => false, 'Editable' => true, 'Required' => $field['IS_REQUIRED'], 'Multiple' => $field['MULTIPLE'], 'Type' => $field['TYPE']); } $result[$fieldId]["sort"] = $field["SORT"]; $result[$fieldId]["settings"] = $field["SETTINGS"]; if ($field["ROW_COUNT"] && $field["COL_COUNT"]) { $result[$fieldId]["row_count"] = $field["ROW_COUNT"]; $result[$fieldId]["col_count"] = $field["COL_COUNT"]; } } } return $result; }
private static function getVisibleFieldsList($iblockId) { $list = new CList($iblockId); $listFields = $list->getFields(); $result = array(); foreach ($listFields as $key => $field) { if (strpos($key, 'PROPERTY_') === 0) { if (!empty($field['CODE'])) { $key = 'PROPERTY_' . $field['CODE']; } } $result[] = $key; } return $result; }