예제 #1
1
 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;
 }
예제 #2
0
 /**
  * @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;
 }
예제 #3
0
 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';
         }
     }
 }
예제 #4
0
 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;
 }