- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/lib/orm/data/datamanager.php
- Класс: BitrixMainORMDataDataManager
- Вызов: DataManager::convertArrayToObject
static function convertArrayToObject(&$fields, $setDefaultValues = false, $primary = null)
{
// extended data format
$data = null;
if (isset($fields["fields"]) && is_array($fields["fields"]))
{
$data = $fields;
$fields = $data["fields"];
}
// convert to object
if (isset($fields['__object']))
{
$object = $fields['__object'];
unset($fields['__object']);
}
else
{
$entity = static::getEntity();
/** @var EntityObject $object */
if ($primary === null)
{
$object = $entity->createObject($setDefaultValues);
foreach ($fields as $fieldName => $value)
{
// sometimes data array can be used for storing non-entity data
if ($entity->hasField($fieldName))
{
$object->sysSetValue($fieldName, $value);
}
}
}
else
{
$object = $entity->wakeUpObject($primary);
foreach ($fields as $fieldName => $value)
{
// sometimes data array can be used for storing non-entity data
if ($entity->hasField($fieldName))
{
if ($entity->getField($fieldName) instanceof ScalarField && $entity->getField($fieldName)->isPrimary())
{
// ignore old primary
if (array_key_exists($fieldName, $primary) && $primary[$fieldName] == $value)
{
unset($fields[$fieldName]);
continue;
}
// but prevent primary changing
trigger_error(sprintf(
'Primary of %s %s can not be changed. You can delete this row and add a new one',
static::getObjectClass(), MainWebJson::encode($object->primary)
), E_USER_WARNING);
continue;
}
$object->sysSetValue($fieldName, $value);
}
}
}
}
// auth context
if (isset($data['auth_context']))
{
$object->authContext = $data['auth_context'];
}
return $object;
}