/** * 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); }
/** * Gets info about reading query params that are acceptable * * @param \EEM_Base $model eg 'Event' or 'Venue' * @param string $version * @return array describing the args acceptable when querying this model * @throws \EE_Error */ protected function _get_read_query_params(\EEM_Base $model, $version) { $default_orderby = array(); foreach ($model->get_combined_primary_key_fields() as $key_field) { $default_orderby[$key_field->get_name()] = 'ASC'; } return array_merge($this->_get_response_selection_query_params($model, $version), array('where' => array('required' => false, 'default' => array()), 'limit' => array('required' => false, 'default' => EED_Core_Rest_Api::get_default_query_limit()), 'order_by' => array('required' => false, 'default' => $default_orderby), 'group_by' => array('required' => false, 'default' => null), 'having' => array('required' => false, 'default' => null), 'caps' => array('required' => false, 'default' => EEM_Base::caps_read))); }