Example #1
0
 /** @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;
 }