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