- Модуль: disk
- Путь к файлу: ~/bitrix/modules/disk/lib/internals/model.php
- Класс: BitrixDiskInternalsModel
- Вызов: Model::setAttributes
protected function setAttributes(array $attributes, array &$aliases = null)
{
if(empty($attributes))
{
return $this;
}
$modelMapAttributes = static::getMapAttributes();
foreach(array_intersect_key($attributes, $modelMapAttributes) as $name => $value)
{
if(isset($modelMapAttributes[$name]))
{
$this->{$modelMapAttributes[$name]} = $value;
}
$this->setAsLoadedAttribute($modelMapAttributes[$name]);
unset($attributes[$name]);
}
unset($name, $value);
if(empty($attributes))
{
return $this;
}
if($aliases === null)
{
$aliases =& $this::$lastAliases;
}
if(!$aliases)
{
return $this;
}
ksort($attributes);
foreach($aliases as $prefix => &$aliasData)
{
$subEntity = array();
$pos = mb_strlen($prefix);
$entityName = $aliasData['alias'][$prefix];
if(!empty($aliasData['already_calc']))
{
list($start, $end) = $aliasData['already_calc'];
foreach(array_splice($attributes, $start, $end) as $name => $value)
{
$subEntity[mb_substr($name, $pos)] = $value;
}
unset($name, $value);
}
else
{
$start = null;
$end = null;
$i = 0;
$currentEntity = null;
foreach($attributes as $name => $value)
{
if(mb_substr($name, 0, $pos) === $prefix)
{
$subEntity[mb_substr($name, $pos)] = $value;
unset($attributes[$name]);
if($start === null)
{
$start = $i;
}
$end = $i;
}
$i++;
}
unset($name, $value);
$aliasData['already_calc'] = array($start, $end - $start + 1);
}
if(!empty($subEntity))
{
$alias = isset($aliasData['sub']) ? $aliasData['sub'] : array();
/** @var Model $className */
$className = $aliasData['class'];
$aliasesData =& $alias;
if(!array_filter($subEntity))
{
if(count($subEntity) > 1 && isset($modelMapAttributes[$entityName]))
{
$this->setAsLoadedAttribute($modelMapAttributes[$entityName]);
}
continue;
}
$this->setSubEntityToModel($entityName, $modelMapAttributes, $className, $subEntity, $aliasesData);
if(isset($modelMapAttributes[$entityName]))
{
$this->{$modelMapAttributes[$entityName]} = $className::buildFromArray($subEntity, $aliasesData);
$this->setAsLoadedAttribute($modelMapAttributes[$entityName]);
}
}
}
unset($prefix, $aliasData, $alias);
$this->setExtraAttributes($attributes);
return $this;
}