Exemplo n.º 1
0
 /**
  * Translates API filter get parameter into $query_params array used by EEM_Base::get_all().
  * Note: right now the query parameter keys for fields (and related fields)
  * can be left as-is, but it's quite possible this will change someday.
  * Also, this method's contents might be candidate for moving to Model_Data_Translator
  *
  * @param \EEM_Base $model
  * @param array     $query_parameters from $_GET parameter @see Read:handle_request_get_all
  * @return array like what EEM_Base::get_all() expects or FALSE to indicate
  *                          that absolutely no results should be returned
  * @throws \EE_Error
  */
 public function create_model_query_params($model, $query_parameters)
 {
     $model_query_params = array();
     if (isset($query_parameters['where'])) {
         $model_query_params[0] = Model_Data_Translator::prepare_conditions_query_params_for_models($query_parameters['where'], $model, $this->get_model_version_info()->requested_version());
     }
     if (isset($query_parameters['order_by'])) {
         $order_by = $query_parameters['order_by'];
     } elseif (isset($query_parameters['orderby'])) {
         $order_by = $query_parameters['orderby'];
     } else {
         $order_by = null;
     }
     if ($order_by !== null) {
         $model_query_params['order_by'] = $order_by;
     }
     if (isset($query_parameters['group_by'])) {
         $group_by = $query_parameters['group_by'];
     } elseif (isset($query_parameters['groupby'])) {
         $group_by = $query_parameters['groupby'];
     } else {
         $group_by = array_keys($model->get_combined_primary_key_fields());
     }
     if ($group_by !== null) {
         $model_query_params['group_by'] = $group_by;
     }
     if (isset($query_parameters['having'])) {
         $model_query_params['having'] = Model_Data_Translator::prepare_conditions_query_params_for_models($query_parameters['having'], $model, $this->get_model_version_info()->requested_version());
     }
     if (isset($query_parameters['order'])) {
         $model_query_params['order'] = $query_parameters['order'];
     }
     if (isset($query_parameters['mine'])) {
         $model_query_params = $model->alter_query_params_to_only_include_mine($model_query_params);
     }
     if (isset($query_parameters['limit'])) {
         //limit should be either a string like '23' or '23,43', or an array with two items in it
         if (!is_array($query_parameters['limit'])) {
             $limit_array = explode(',', (string) $query_parameters['limit']);
         } else {
             $limit_array = $query_parameters['limit'];
         }
         $sanitized_limit = array();
         foreach ($limit_array as $key => $limit_part) {
             if ($this->_debug_mode && (!is_numeric($limit_part) || count($sanitized_limit) > 2)) {
                 throw new \EE_Error(sprintf(__('An invalid limit filter was provided. It was: %s. If the EE4 JSON REST API weren\'t in debug mode, this message would not appear.', 'event_espresso'), json_encode($query_parameters['limit'])));
             }
             $sanitized_limit[] = (int) $limit_part;
         }
         $model_query_params['limit'] = implode(',', $sanitized_limit);
     } else {
         $model_query_params['limit'] = \EED_Core_Rest_Api::get_default_query_limit();
     }
     if (isset($query_parameters['caps'])) {
         $model_query_params['caps'] = $this->validate_context($query_parameters['caps']);
     } else {
         $model_query_params['caps'] = \EEM_Base::caps_read;
     }
     return apply_filters('FHEE__Read__create_model_query_params', $model_query_params, $query_parameters, $model);
 }