/** @brief Creates full query from array of parameters. * * Unknown parameters are silently ignored. * * @param $params [in] structured array of parameters. * @return correctly initialized query. */ public static function create_from_parameters(array $params) { $result = AfsQuery::work_on_specific_parameters($params); $page = $result->get_page(); # page can be reset by some method calls foreach ($params as $param => $values) { $adder = 'add_' . $param; $setter = 'set_' . $param; if (strpos($param, 'filter') !== false) { $filter_array = explode('@', $param); if (count($filter_array) === 2) { $feed = $filter_array[1]; } else { $feed = null; } foreach ($values as $filter => $filter_values) { foreach ($filter_values as $value) { if (!is_null($feed)) { $result = $result->add_filter_on_feed($filter, array($value), $feed); } else { $result = $result->add_filter($filter, $value, $feed); } } } } elseif ($param == 'sort') { foreach ($values as $key => $value) { $result = $result->{$adder}($key, $value); } } elseif (is_object($result) && is_callable(array($result, $adder))) { foreach ($values as $value) { $result = $result->{$adder}($value); } } elseif (is_object($result) && is_callable(array($result, $setter))) { $result = $result->{$setter}($values); } else { // Store unknown parameter as a custom one $result->set_custom_parameter($param, $values); } } $result->page->set_value($page); return $result; }