static function addDocumentField($documentType, $fields)
{
$iblockId = intval(mb_substr($documentType, mb_strlen("iblock_")));
if ($iblockId <= 0)
throw new CBPArgumentOutOfRangeException("documentType", $documentType);
if (mb_substr($fields["code"], 0, mb_strlen("PROPERTY_")) == "PROPERTY_")
$fields["code"] = mb_substr($fields["code"], mb_strlen("PROPERTY_"));
if(!empty($fields["active_type"]))
$fields["type"] = $fields["active_type"];
$fieldsTemporary = array(
"NAME" => $fields["name"],
"ACTIVE" => "Y",
"SORT" => $fields["sort"] ? $fields["sort"] : 900,
"CODE" => $fields["code"],
'MULTIPLE' => $fields['multiple'] == 'Y' || (string)$fields['multiple'] === '1' ? 'Y' : 'N',
'IS_REQUIRED' => $fields['required'] == 'Y' || (string)$fields['required'] === '1' ? 'Y' : 'N',
"IBLOCK_ID" => $iblockId,
"FILTRABLE" => "Y",
"SETTINGS" => $fields["settings"] ? $fields["settings"] : array("SHOW_ADD_FORM" => 'Y', "SHOW_EDIT_FORM"=>'Y'),
"DEFAULT_VALUE" => $fields['DefaultValue']
);
if (mb_strpos("0123456789", mb_substr($fieldsTemporary["CODE"], 0, 1)) !== false)
$fieldsTemporary["CODE"] = self::generatePropertyCode($fields["name"], $fields["code"], $iblockId);
if (array_key_exists("additional_type_info", $fields))
$fieldsTemporary["LINK_IBLOCK_ID"] = intval($fields["additional_type_info"]);
if(!empty($fields["UserTypeSettings"]))
$fieldsTemporary["USER_TYPE_SETTINGS"] = $fields["UserTypeSettings"];
if(mb_strstr($fields["type"], ":") !== false)
{
list($fieldsTemporary["TYPE"], $fieldsTemporary["USER_TYPE"]) = explode(":", $fields["type"], 2);
if($fields["type"] == "E:EList")
{
$fieldsTemporary["LINK_IBLOCK_ID"] = $fields["options"] ?? null;
}
elseif($fields["type"] == "E:ECrm")
{
$fieldsTemporary["TYPE"] = "S:ECrm";
}
}
elseif ($fields["type"] == "user")
{
$fieldsTemporary["TYPE"] = "S:employee";
$fieldsTemporary["USER_TYPE"]= "UserID";
}
elseif ($fields["type"] == "date")
{
$fieldsTemporary["TYPE"] = "S:Date";
$fieldsTemporary["USER_TYPE"]= "Date";
}
elseif ($fields["type"] == "datetime")
{
$fieldsTemporary["TYPE"] = "S:DateTime";
$fieldsTemporary["USER_TYPE"]= "DateTime";
}
elseif ($fields["type"] == "file")
{
$fieldsTemporary["TYPE"] = "F";
$fieldsTemporary["USER_TYPE"]= "";
}
elseif ($fields["type"] == "select")
{
$fieldsTemporary["TYPE"] = "L";
$fieldsTemporary["USER_TYPE"]= false;
if (is_array($fields["options"]))
{
$i = 10;
foreach ($fields["options"] as $k => $v)
{
$def = "N";
if($fields['DefaultValue'] == $v)
$def = "Y";
$fieldsTemporary["VALUES"][] = array("XML_ID" => $k, "VALUE" => $v, "DEF" => $def, "SORT" => $i);
$i = $i + 10;
}
}
elseif (is_string($fields["options"]) && ($fields["options"] <> ''))
{
$a = explode("n", $fields["options"]);
$i = 10;
foreach ($a as $v)
{
$v = trim(trim($v), "rn");
if (!$v)
continue;
$v1 = $v2 = $v;
if (mb_substr($v, 0, 1) == "[" && mb_strpos($v, "]") !== false)
{
$v1 = mb_substr($v, 1, mb_strpos($v, "]") - 1);
$v2 = trim(mb_substr($v, mb_strpos($v, "]") + 1));
}
$def = "N";
if($fields['DefaultValue'] == $v2)
$def = "Y";
$fieldsTemporary["VALUES"][] = array("XML_ID" => $v1, "VALUE" => $v2, "DEF" => $def, "SORT" => $i);
$i = $i + 10;
}
}
}
elseif($fields["type"] == "string")
{
$fieldsTemporary["TYPE"] = "S";
if($fields["row_count"] && $fields["col_count"])
{
$fieldsTemporary["ROW_COUNT"] = $fields["row_count"];
$fieldsTemporary["COL_COUNT"] = $fields["col_count"];
}
else
{
$fieldsTemporary["ROW_COUNT"] = 1;
$fieldsTemporary["COL_COUNT"] = 30;
}
}
elseif($fields["type"] == "text")
{
$fieldsTemporary["TYPE"] = "S";
if($fields["row_count"] && $fields["col_count"])
{
$fieldsTemporary["ROW_COUNT"] = $fields["row_count"];
$fieldsTemporary["COL_COUNT"] = $fields["col_count"];
}
else
{
$fieldsTemporary["ROW_COUNT"] = 4;
$fieldsTemporary["COL_COUNT"] = 30;
}
}
elseif($fields["type"] == "int" || $fields["type"] == "double")
{
$fieldsTemporary["TYPE"] = "N";
}
elseif($fields["type"] == "bool")
{
$fieldsTemporary["TYPE"] = "L";
$fieldsTemporary["VALUES"][] = array(
"XML_ID" => 'Y',
"VALUE" => GetMessage("BPVDX_YES"),
"DEF" => "N",
"SORT" => 10
);
$fieldsTemporary["VALUES"][] = array(
"XML_ID" => 'N',
"VALUE" => GetMessage("BPVDX_NO"),
"DEF" => "N",
"SORT" => 20
);
}
else
{
$fieldsTemporary["TYPE"] = $fields["type"];
$fieldsTemporary["USER_TYPE"] = false;
}
$idField = false;
$properties = CIBlockProperty::getList(
array(),
array("IBLOCK_ID" => $fieldsTemporary["IBLOCK_ID"], "CODE" => $fieldsTemporary["CODE"])
);
if(!$properties->fetch())
{
$listObject = new CList($iblockId);
$idField = $listObject->addField($fieldsTemporary);
}
if($idField)
{
global $CACHE_MANAGER;
$CACHE_MANAGER->clearByTag("lists_list_".$iblockId);
if(!empty($fieldsTemporary["CODE"]))
{
$idField = mb_substr($idField, 0, mb_strlen("PROPERTY_")).$fieldsTemporary["CODE"];
}
return $idField;
}
return false;
}