10namespace Bitrix\Main\ORM\Data;
13use Bitrix\Main\ORM\Entity;
14use Bitrix\Main\ORM\EntityError;
15use Bitrix\Main\ORM\Event;
16use Bitrix\Main\ORM\Fields\ExpressionField;
17use Bitrix\Main\ORM\Fields\FieldError;
18use Bitrix\Main\ORM\Fields\FieldTypeMask;
19use Bitrix\Main\ORM\Fields\ScalarField;
20use Bitrix\Main\ORM\Objectify\Values;
21use Bitrix\Main\ORM\Query\Query;
22use Bitrix\Main\ORM\Query\Result as QueryResult;
23use Bitrix\Main\Localization\Loc;
24use Bitrix\Main\ORM\Data\AddStrategy\Contract\AddStrategy;
25use Bitrix\Main\ORM\Query\Filter\ConditionTree as
Filter;
26use Bitrix\Main\ORM\Objectify\EntityObject;
27use Bitrix\Main\ORM\Objectify\Collection;
29Loc::loadMessages(__FILE__);
67 $class = static::getEntityClass()::normalizeEntityClass(get_called_class());
69 if (!isset(static::$entity[$class]))
71 static::$entity[$class] = static::getEntityClass()::getInstance($class);
74 return static::$entity[$class];
79 $class = static::getEntityClass()::normalizeEntityClass($class);
81 if (isset(static::$entity[$class]))
83 unset(static::$entity[$class]);
122 if (!isset(static::$objectClass[get_called_class()]))
124 static::$objectClass[get_called_class()] = static::getObjectClassByDataClass(get_called_class());
127 return static::$objectClass[get_called_class()];
137 $class = static::getObjectClass();
138 return substr($class, strrpos($class,
'\\') + 1);
143 $objectClass = static::getEntityClass()::normalizeName($dataClass);
149 $className = static::getEntityClass()::getDefaultObjectClassName($className);
151 return $namespace.$className;
161 if (!isset(static::$collectionClass[get_called_class()]))
163 static::$collectionClass[get_called_class()] = static::getCollectionClassByDataClass(get_called_class());
166 return static::$collectionClass[get_called_class()];
176 $class = static::getCollectionClass();
177 return substr($class, strrpos($class,
'\\') + 1);
182 $objectClass = static::getEntityClass()::normalizeName($dataClass);
188 $className = static::getEntityClass()::getDefaultCollectionClassName($className);
190 return $namespace.$className;
198 return EntityObject::class;
206 return Collection::class;
222 return Entity::class;
234 return static::getEntity()->createObject($setDefaultValues);
244 return static::getEntity()->createCollection();
258 return static::getEntity()->wakeUpObject($row);
272 return static::getEntity()->wakeUpCollection(
$rows);
332 static::normalizePrimary($primary);
333 static::validatePrimary($primary);
335 $primaryFilter =
array();
337 foreach ($primary as
$k => $v)
339 $primaryFilter[
'='.$k] = $v;
342 if (isset($parameters[
'filter']))
344 $parameters[
'filter'] =
array($primaryFilter, $parameters[
'filter']);
348 $parameters[
'filter'] = $primaryFilter;
351 return static::getList($parameters);
366 return static::getByPrimary($id);
382 $result = static::getByPrimary($id, $parameters);
385 return (is_array($row)? $row :
null);
400 $parameters[
'limit'] = 1;
401 $result = static::getList($parameters);
404 return (is_array($row)? $row :
null);
435 if(!isset($parameters[
'select']))
440 foreach($parameters as $param => $value)
445 $query->setSelect($value);
460 $query->setOffset($value);
463 $query->countTotal($value);
466 foreach ($value as
$name => $fieldInfo)
471 case 'data_doubling':
474 $query->enableDataDoubling();
478 $query->disableDataDoubling();
481 case 'private_fields':
484 $query->enablePrivateFields();
488 $query->disablePrivateFields();
492 $query->setCacheTtl($value[
"ttl"]);
493 if(isset($value[
"cache_joins"]))
495 $query->cacheJoins($value[
"cache_joins"]);
532 if(isset($cache[
"ttl"]))
534 $query->setCacheTtl($cache[
"ttl"]);
551 $queryClass = static::getQueryClass();
552 return new $queryClass(static::getEntity());
567 foreach (
$data as $fieldName => $value)
569 $newData[
$entity->getField($fieldName)->getColumnName()] = $value;
582 protected static function normalizePrimary(&$primary,
$data =
array())
585 $entity_primary =
$entity->getPrimaryArray();
587 if ($primary ===
null)
592 foreach ($entity_primary as
$key)
596 if ($field->isAutocomplete())
604 'Primary `%s` was not found when trying to query %s row.',
$key,
$entity->getName()
611 elseif (is_scalar($primary))
613 if (
count($entity_primary) > 1)
615 throw new Main\ArgumentException(sprintf(
616 'Require multi primary {`%s`}, but one scalar value "%s" found when trying to query %s row.',
617 join(
'`, `', $entity_primary), $primary,
$entity->getName()
621 $primary =
array($entity_primary[0] => $primary);
634 if (is_array($primary))
639 'Empty primary found when trying to query %s row.',
$entity->getName()
643 $entity_primary =
$entity->getPrimaryArray();
645 foreach (array_keys($primary) as
$key)
647 if (!in_array(
$key, $entity_primary,
true))
650 'Unknown primary `%s` found when trying to query %s row.',
659 'Unknown type of primary "%s" found when trying to query %s row.', gettype($primary),
$entity->getName()
664 foreach ($primary as
$key => $value)
666 if (!is_scalar($value) && !($value instanceof
Main\
Type\
Date))
669 'Unknown value type "%s" for primary "%s" found when trying to query %s row.',
690 foreach (
$entity->getFields() as $field)
694 $fieldName = $field->getName();
696 (empty($primary) && (!isset(
$data[$fieldName]) || $field->isValueEmpty(
$data[$fieldName])))
697 || (!empty($primary) && array_key_exists($fieldName,
$data) && $field->isValueEmpty(
$data[$fieldName]))
702 Loc::getMessage(
"MAIN_ENTITY_FIELD_REQUIRED",
array(
"#FIELD#"=>$field->getTitle())),
703 FieldError::EMPTY_REQUIRED
720 'Field `%s` not found in entity when trying to query %s row.',
738 protected static function convertArrayToObject(&
$fields, $setDefaultValues =
false, $primary =
null)
750 if (isset(
$fields[
'__object']))
760 if ($primary ===
null)
762 $object =
$entity->createObject($setDefaultValues);
764 foreach (
$fields as $fieldName => $value)
767 if (
$entity->hasField($fieldName))
769 $object->sysSetValue($fieldName, $value);
775 $object =
$entity->wakeUpObject($primary);
777 foreach (
$fields as $fieldName => $value)
780 if (
$entity->hasField($fieldName))
782 if (
$entity->getField($fieldName) instanceof ScalarField &&
$entity->getField($fieldName)->isPrimary())
785 if (array_key_exists($fieldName, $primary) && $primary[$fieldName] == $value)
792 trigger_error(sprintf(
793 'Primary of %s %s can not be changed. You can delete this row and add a new one',
794 static::getObjectClass(), Main\Web\Json::encode($object->primary)
800 $object->sysSetValue($fieldName, $value);
807 if (isset(
$data[
'auth_context']))
809 $object->authContext =
$data[
'auth_context'];
824 $userId = ($object->authContext && $object->authContext->getUserId())
825 ? $object->authContext->getUserId()
834 $ufPrimary = $object->primary;
835 $ufPrimary = end($ufPrimary);
888 bool $ignoreEvents =
false,
897 $object = static::convertArrayToObject(
$fields,
true);
910 $fields = $object->collectValues(Values::CURRENT, FieldTypeMask::SCALAR);
913 $ufdata = $object->collectValues(Values::CURRENT, FieldTypeMask::USERTYPE);
921 static::checkUfFields($object, $ufdata,
$result);
925 if (empty(
$fields) && empty($ufdata))
945 foreach ($fieldsToDb as $fieldName => $value)
947 $field =
$entity->getField($fieldName);
948 if ($field->isPrimary() && $field->isAutocomplete() && is_null($value))
950 unset($fieldsToDb[$fieldName]);
953 $fieldsToDb[$fieldName] = $field->modifyValueBeforeSave($value,
$fields);
956 $addedData = $strategy->
add(static::replaceFieldName($fieldsToDb));
957 $id = $addedData->id;
961 $isGuessedPrimary =
false;
965 if (!empty(
$entity->getAutoIncrement()))
967 $primary = [
$entity->getAutoIncrement() => $id];
968 static::normalizePrimary($primary);
973 $primary = [
'ID' => $id];
974 $isGuessedPrimary =
true;
979 static::normalizePrimary($primary,
$fields);
987 if (!$isGuessedPrimary)
989 foreach ($primary as $primaryName => $primaryValue)
991 $object->sysSetActual($primaryName, $primaryValue);
1000 if ($object->authContext)
1002 $ufUserId = $object->authContext->getUserId();
1008 if ($addedData->isDBChanged)
1010 static::cleanCache();
1015 static::callOnAfterAddEvent($object,
$fields + $ufdata, $id);
1018 catch (\Exception $e)
1044 static::getAddStrategy(),
1046 (
bool)$ignoreEvents,
1056 bool $ignoreEvents =
false,
1059 if (
count($multiData) <= 0)
1063 if (
count($multiData) === 1)
1070 $rows = array_values($multiData);
1075 foreach (
$rows as
$k => &$row)
1077 $objects[
$k] = static::convertArrayToObject($row,
true);
1080 $entity = static::getEntity();
1088 foreach ($objects as
$k => $object)
1098 foreach ($objects as
$k => $object)
1101 $allFields[
$k] = $object->collectValues(Values::CURRENT, FieldTypeMask::SCALAR);
1104 $allUfData[
$k] = $object->collectValues(Values::CURRENT, FieldTypeMask::USERTYPE);
1108 foreach ($objects as
$k => $object)
1111 $ufdata = $allUfData[
$k];
1117 if (!empty($ufdata))
1119 static::checkUfFields($object, $ufdata,
$result);
1123 if (empty(
$fields) && empty($ufdata))
1130 if (!
$result->isSuccess(
true))
1138 foreach ($objects as
$k => $object)
1141 $ufdata = $allUfData[
$k];
1147 $allFieldsToDb = [];
1154 foreach ($fieldsToDb as $fieldName => $value)
1156 $field =
$entity->getField($fieldName);
1157 $fieldsToDb[$fieldName] = $field->modifyValueBeforeSave($value,
$fields);
1160 $dataReplacedColumn = static::replaceFieldName($fieldsToDb);
1162 $allFieldsToDb[
$k] = $dataReplacedColumn;
1165 if (!$ignoreEvents && !empty(
$entity->getAutoIncrement()))
1169 'Multi-insert doesn\'t work with events as far as we can not get last inserted IDs that we need for the events. '.
1170 'Insert query was forced to multiple separate queries.',
1174 $forcedSeparateQueries =
true;
1175 $isDBChanged =
false;
1178 foreach ($allFieldsToDb as
$key => $dbFields)
1180 $addedData = $strategy->
add($dbFields);
1181 $ids[
$key] = $addedData->id;
1182 $isDBChanged = $isDBChanged || $addedData->isDBChanged;
1187 $addedData = $strategy->
addMulti($allFieldsToDb);
1189 $forcedSeparateQueries =
false;
1190 $isDBChanged = $addedData->isDBChanged;
1195 foreach ($allUfData as
$k => $ufdata)
1197 if (!empty($ufdata))
1201 if ($objects[
$k]->authContext)
1203 $ufUserId = $objects[
$k]->authContext->getUserId();
1212 static::cleanCache();
1218 foreach ($objects as
$k => $object)
1221 $id = $forcedSeparateQueries ? $ids[
$k] :
null;
1223 static::callOnAfterAddEvent($object,
$fields, $id);
1227 catch (\Exception $e)
1261 static::normalizePrimary(
1264 static::validatePrimary($primary);
1270 $object = static::convertArrayToObject(
$fields,
false, $primary);
1272 $entity = static::getEntity();
1280 $fields = $object->collectValues(Values::CURRENT, FieldTypeMask::SCALAR);
1283 $ufdata = $object->collectValues(Values::CURRENT, FieldTypeMask::USERTYPE);
1289 if (!empty($ufdata))
1291 static::checkUfFields($object, $ufdata,
$result);
1295 if (empty(
$fields) && empty($ufdata))
1301 if (!
$result->isSuccess(
true))
1306 static::callOnUpdateEvent($object,
$fields, $ufdata);
1311 foreach ($fieldsToDb as $fieldName => $value)
1313 $field =
$entity->getField($fieldName);
1314 $fieldsToDb[$fieldName] = $field->modifyValueBeforeSave($value,
$fields);
1318 if (!empty($fieldsToDb))
1323 $tableName =
$entity->getDBTableName();
1325 $dataReplacedColumn = static::replaceFieldName($fieldsToDb);
1326 $update = $helper->prepareUpdate($tableName, $dataReplacedColumn);
1328 $replacedPrimary = static::replaceFieldName($primary);
1330 foreach ($replacedPrimary as
$k => $v)
1332 $id[] = $helper->prepareAssignment($tableName,
$k, $v);
1334 $where = implode(
' AND ', $id);
1336 $sql =
"UPDATE ".$helper->quote($tableName).
" SET ".$update[0].
" WHERE ".$where;
1343 $result->setPrimary($primary);
1347 if (!empty($ufdata))
1351 if ($object->authContext)
1353 $ufUserId = $object->authContext->getUserId();
1359 static::cleanCache();
1362 static::callOnAfterUpdateEvent($object,
$fields + $ufdata);
1364 catch (\Exception $e)
1384 public static function updateMulti($primaries,
$data, $ignoreEvents =
false)
1388 $entity = static::getEntity();
1389 $primaries = array_values($primaries);
1394 foreach ($primaries as &$primary)
1396 static::normalizePrimary($primary,
$data);
1397 static::validatePrimary($primary);
1400 $object =
$entity->wakeUpObject($primary);
1404 $object->set(
$k, $v);
1407 $objects[] = $object;
1417 foreach ($objects as $object)
1419 static::callOnBeforeUpdateEvent($object,
$data,
$result);
1427 foreach ($objects as
$k => $object)
1430 $allFields[
$k] = $object->collectValues(Values::CURRENT, FieldTypeMask::SCALAR);
1433 $allUfData[
$k] = $object->collectValues(Values::CURRENT, FieldTypeMask::USERTYPE);
1437 foreach ($objects as
$k => $object)
1440 $ufdata = $allUfData[
$k];
1446 if (!empty($ufdata))
1448 static::checkUfFields($object, $ufdata,
$result);
1452 if (empty(
$fields) && empty($ufdata))
1454 $result->addError(
new EntityError(
"There is no data to add."));
1459 if (!
$result->isSuccess(
true))
1467 foreach ($objects as
$k => $object)
1470 $ufdata = $allUfData[
$k];
1472 static::callOnUpdateEvent($object,
$fields, $ufdata);
1484 foreach ($fieldsToDb as $fieldName => $value)
1486 $field =
$entity->getField($fieldName);
1487 $fieldsToDb[$fieldName] = $field->modifyValueBeforeSave($value,
$fields);
1490 $dataReplacedColumn = static::replaceFieldName($fieldsToDb);
1492 $allSqlData[
$k] = $dataReplacedColumn;
1498 $dataSample = $allSqlData[0];
1501 if (!empty($allSqlData[0]))
1504 foreach ($allSqlData as
$data)
1508 if (
$data !== $dataSample)
1518 $tableName =
$entity->getDBTableName();
1524 $update = $helper->prepareUpdate($tableName, $dataSample);
1526 $isSinglePrimary = (
count(
$entity->getPrimaryArray()) == 1);
1528 foreach ($allSqlData as
$k =>
$data)
1530 $replacedPrimary = static::replaceFieldName($objects[
$k]->primary);
1532 if ($isSinglePrimary)
1535 $primaryName = key($replacedPrimary);
1536 $primaryValue = current($replacedPrimary);
1537 $tableField =
$entity->getConnection()->getTableField($tableName, $primaryName);
1539 $where[] = $helper->convertToDb($primaryValue, $tableField);
1545 foreach ($replacedPrimary as $primaryName => $primaryValue)
1547 $id[] = $helper->prepareAssignment($tableName, $primaryName, $primaryValue);
1549 $where[] = implode(
' AND ', $id);
1553 if ($isSinglePrimary)
1555 $where = $helper->quote(
$entity->getPrimary()).
' IN ('.join(
', ', $where).
')';
1559 $where =
'('.join(
') OR (', $where).
')';
1562 $sql =
"UPDATE ".$helper->quote($tableName).
" SET ".$update[0].
" WHERE ".$where;
1570 foreach ($allSqlData as
$k => $dataReplacedColumn)
1572 $update = $helper->prepareUpdate($tableName, $dataReplacedColumn);
1574 $replacedPrimary = static::replaceFieldName($objects[
$k]->primary);
1578 foreach ($replacedPrimary as $primaryName => $primaryValue)
1580 $id[] = $helper->prepareAssignment($tableName, $primaryName, $primaryValue);
1582 $where = implode(
' AND ', $id);
1584 $sql =
"UPDATE ".$helper->quote($tableName).
" SET ".$update[0].
" WHERE ".$where;
1593 $result->setData($dataSample);
1595 if (
count($allSqlData) == 1)
1597 $result->setPrimary($objects[0]->primary);
1598 $result->setObject($objects[0]);
1602 foreach ($allUfData as
$k => $ufdata)
1604 if (!empty($ufdata))
1606 $ufPrimary = $objects[
$k]->primary;
1611 static::cleanCache();
1616 foreach ($objects as
$k => $object)
1620 static::callOnAfterUpdateEvent($object,
$fields);
1624 catch (\Exception $e)
1644 public static function delete($primary)
1649 static::normalizePrimary($primary);
1650 static::validatePrimary($primary);
1652 $entity = static::getEntity();
1655 $entityClass = static::getEntity()->getDataClass();
1656 $primaryAsString = EntityObject::sysSerializePrimary($primary, static::getEntity());
1658 $object = !empty(static::$currentDeletingObjects[$entityClass][$primaryAsString])
1659 ? static::$currentDeletingObjects[$entityClass][$primaryAsString]
1660 : static::wakeUpObject($primary);
1668 if (!
$result->isSuccess(
true))
1674 static::callOnDeleteEvent($object,
$entity);
1680 $tableName =
$entity->getDBTableName();
1682 $replacedPrimary = static::replaceFieldName($primary);
1684 foreach ($replacedPrimary as
$k => $v)
1686 $id[] = $helper->prepareAssignment($tableName,
$k, $v);
1688 $where = implode(
' AND ', $id);
1690 $sql =
"DELETE FROM ".$helper->quote($tableName).
" WHERE ".$where;
1699 static::cleanCache();
1702 static::callOnAfterDeleteEvent($object,
$entity);
1704 catch (\Exception $e)
1714 if (!empty(static::$currentDeletingObjects[$entityClass][$primaryAsString]))
1716 unset(static::$currentDeletingObjects[$entityClass][$primaryAsString]);
1731 $event =
new Event($object->entity, self::EVENT_ON_BEFORE_ADD, [
1733 'object' => $object,
1738 $event->mergeObjectFields($object);
1741 $event =
new Event($object->entity, self::EVENT_ON_BEFORE_ADD, [
1743 'object' => $object,
1748 $event->mergeObjectFields($object);
1758 $event =
new Event($object->entity, self::EVENT_ON_ADD, [
1759 'fields' =>
$fields + $ufdata,
1760 'object' => clone $object,
1765 $event =
new Event($object->entity, self::EVENT_ON_ADD, [
1766 'fields' =>
$fields + $ufdata,
1767 'object' => clone $object,
1780 $event =
new Event($object->entity, self::EVENT_ON_AFTER_ADD, [
1783 'object' => clone $object,
1788 $event =
new Event($object->entity, self::EVENT_ON_AFTER_ADD, [
1790 'primary' => $object->primary,
1792 'object' => clone $object,
1804 $event =
new Event($object->entity, self::EVENT_ON_BEFORE_UPDATE, [
1805 'id' => $object->primary,
1807 'object' => $object,
1812 $event->mergeObjectFields($object);
1815 $event =
new Event($object->entity, self::EVENT_ON_BEFORE_UPDATE, [
1816 'id' => $object->primary,
1817 'primary' => $object->primary,
1819 'object' => $object,
1824 $event->mergeObjectFields($object);
1834 $event =
new Event($object->entity, self::EVENT_ON_UPDATE, [
1835 'id' => $object->primary,
1836 'fields' =>
$fields + $ufdata,
1837 'object' => clone $object,
1842 $event =
new Event($object->entity, self::EVENT_ON_UPDATE, [
1843 'id' => $object->primary,
1844 'primary' => $object->primary,
1845 'fields' =>
$fields + $ufdata,
1846 'object' => clone $object,
1857 $event =
new Event($object->entity, self::EVENT_ON_AFTER_UPDATE, [
1858 'id' => $object->primary,
1860 'object' => clone $object,
1865 $event =
new Event($object->entity, self::EVENT_ON_AFTER_UPDATE, [
1866 'id' => $object->primary,
1867 'primary' => $object->primary,
1869 'object' => clone $object,
1886 $event =
new Event(
$entity, self::EVENT_ON_BEFORE_DELETE,
array(
"id" => $object->primary,
"primary" => $object->primary,
"object" => clone $object),
true);
1901 $event =
new Event(
$entity, self::EVENT_ON_DELETE,
array(
"id" => $object->primary,
"primary" => $object->primary,
"object" => clone $object),
true);
1915 $event =
new Event(
$entity, self::EVENT_ON_AFTER_DELETE,
array(
"id" => $object->primary,
"primary" => $object->primary,
"object" => clone $object),
true);
1930 $table = static::getTableName();
1934 if($optionString <>
'')
1936 $options = unserialize($optionString, [
'allowed_classes' =>
false]);
1938 $options[strtoupper($field)] = $mode;
1954 $table = static::getTableName();
1957 if($optionString <>
'')
1959 $field = strtoupper($field);
1960 $options = unserialize($optionString, [
'allowed_classes' =>
false]);
1974 $entityClass = static::getEntity()->getDataClass();
1975 self::$currentDeletingObjects[$entityClass][$object->primaryAsString] = $object;
1985 if (static::isCacheable())
1987 $entity = static::getEntity();
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
static get($moduleId, $name, $default="", $siteId=false)
static set($moduleId, $name, $value="", $siteId="")
static getCollectionParentClass()
static callOnBeforeUpdateEvent($object, $fields, $result)
static wakeUpObject($row)
static getObjectClassByDataClass($dataClass)
static getCollectionClassByDataClass($dataClass)
static callOnAfterUpdateEvent($object, $fields)
static wakeUpCollection($rows)
static callOnAddEvent($object, $fields, $ufdata)
static onAfterUpdate(Event $event)
static setDefaultScope($query)
static getObjectParentClass()
static onAdd(Event $event)
static getObjectClassName()
static $currentDeletingObjects
const EVENT_ON_BEFORE_DELETE
static unsetEntity($class)
const EVENT_ON_AFTER_UPDATE
static onDelete(Event $event)
static callOnBeforeDeleteEvent($object, $entity, $result)
static getRowById($id, array $parameters=[])
static checkUfFields($object, $ufdata, $result)
static createCollection()
static setCurrentDeletingObject($object)
static getCollectionClassName()
static getRow(array $parameters)
static getList(array $parameters=array())
static onAfterAdd(Event $event)
static sysAddInternal(AddStrategy $strategy, array $data, bool $ignoreEvents=false,)
static onBeforeAdd(Event $event)
static validatePrimary($primary)
static callOnDeleteEvent($object, $entity)
static addMulti($rows, $ignoreEvents=false)
const EVENT_ON_BEFORE_ADD
const EVENT_ON_AFTER_DELETE
static callOnBeforeAddEvent($object, $fields, $result)
static sysAddMultiInternal(AddStrategy $strategy, array $multiData, bool $ignoreEvents=false,)
static createObject($setDefaultValues=true)
static getConnectionName()
static getCount($filter=array(), array $cache=array())
static cryptoEnabled($field, $table=null)
static replaceFieldName($data=array())
static checkFields(Result $result, $primary, array $data)
static enableCrypto($field, $table=null, $mode=true)
static onAfterDelete(Event $event)
static callOnUpdateEvent($object, $fields, $ufdata)
static postInitialize(Entity $entity)
static callOnAfterAddEvent($object, $fields, $id)
static onBeforeDelete(Event $event)
static onBeforeUpdate(Event $event)
static getByPrimary($primary, array $parameters=array())
const EVENT_ON_BEFORE_UPDATE
static onUpdate(Event $event)
static callOnAfterDeleteEvent($object, $entity)
static update($primary, array $data)
static getCollectionClass()
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
global $USER_FIELD_MANAGER
addMulti(array $multiDbFields)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if(empty($signedUserToken)) $key
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"