- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/internals/runtime.php
- Класс: BitrixTasksInternalsRuntime
- Вызов: Runtime::apply
static function apply($query, array $runtimes)
{
$isArray = is_array($query);
$isQuery = $query instanceOf Query;
foreach($runtimes as $runtime)
{
if(array_key_exists('runtime', $runtime) && is_array($runtime['runtime']) && !empty($runtime['runtime']))
{
foreach($runtime['runtime'] as $k => $field)
{
// $field could be array or instance of Field
$fieldIsObject = is_subclass_of($field, 'BitrixMainEntityField');
if($fieldIsObject)
{
$field = clone $field;
}
if($isArray)
{
if(is_array($field))
{
$query['runtime'][$k] = $field;
}
else
{
$query['runtime'][] = $field;
}
}
elseif($isQuery)
{
$query->registerRuntimeField(
$fieldIsObject ? '' : $k,
$field
);
}
}
}
if(array_key_exists('filter', $runtime) && is_array($runtime['filter']) && !empty($runtime['filter']))
{
if($isArray)
{
if(!array_key_exists('filter', $query))
{
$query['filter'] = array();
}
$query['filter'] = $query['filter'] + $runtime['filter'];
}
elseif($isQuery)
{
$query->setFilter($query->getFilter() + $runtime['filter']);
}
}
}
if($isArray && array_key_exists('runtime', $query))
{
// move runtime on top of the query array, or else orm will crush
$runtime = $query['runtime'];
unset($query['runtime']);
$query = array('runtime' => $runtime) + $query;
}
return $query;
}