• Модуль: 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;
}