Example #1
0
 /**
  * Build a tax_query clause corresponding to a single input
  *
  * @param $taxonomy
  * @param $input_name
  * @param $input
  * @return array
  */
 private function taxQueryClause($taxonomy, $input_name, $input)
 {
     if (empty($input)) {
         return;
     }
     $request_var = RequestVar::nameToVar($input_name, 'taxonomy');
     $terms = $this->request->get($request_var);
     if (empty($terms)) {
         return;
     }
     $clause = array();
     $clause['taxonomy'] = $taxonomy;
     $clause['operator'] = $input['operator'];
     $clause['field'] = empty($inputs['term_format']) ? self::$default_format : $inputs['term_format'];
     $clause['terms'] = $terms;
     return $clause;
 }
 /**
  *  Build a meta_query clause for meta values which are stored as an array
  *
  *  Creates a separate sub-clause for each value being queried
  *
  * @param $meta_key
  * @param $input_name
  * @param $input
  * @return array
  */
 private function metaQueryClauseArray($meta_key, $input_name, $input)
 {
     $request_var = RequestVar::nameToVar($input_name, 'meta_key');
     $var = $this->request->get($request_var);
     if (empty($var)) {
         return array();
     }
     $clause = array();
     if (!is_array($var)) {
         $var = array($var);
     }
     foreach ($var as $value) {
         $clause[] = $this->subClause($meta_key, $input, $value);
     }
     if (count($clause) > 1) {
         $clause['relation'] = $input['relation'];
     }
     if (count($clause) == 1) {
         $clause = $clause[0];
     }
     return $clause;
 }
Example #3
0
 /**
  * Given a Field object, initializes that field's input(s) to Input objects
  * and adds them to the inputs table
  *
  * @param Field $field
  * @param $request
  */
 private function addInputs(Field $field, $request)
 {
     $field_type = $field->getFieldType();
     $inputs = $field->getInputs();
     foreach ($inputs as $name => $input_args) {
         try {
             if ($field_type == FieldType::date) {
                 $date_type = !empty($input_args['date_type']) ? $input_args['date_type'] : false;
                 $post_types = $this->selectedPostTypes($request);
                 $name = RequestVar::nameToVar($name, $field_type, $date_type);
                 $input = DateInputBuilder::make($name, $input_args, $post_types, $request);
             } else {
                 if ($field_type == FieldType::generic) {
                     $name = empty($input_args['id']) ? 'generic' : $input_args['id'];
                 } else {
                     $name = RequestVar::nameToVar($name, $field_type);
                 }
                 $input = InputBuilder::make($name, $field_type, $input_args, $request);
             }
             $this->inputs[] = $input;
         } catch (\InvalidArgumentException $e) {
             $this->addExceptionError($e);
             continue;
         } catch (\Exception $e) {
             $this->addExceptionError($e);
             continue;
         }
     }
 }
Example #4
0
 /**
  * Takes an array of query arguments and adds a sub-query
  * (eg tax_query, meta_query, or date_query)
  *
  * @param array $query
  * @param FieldGroup $field_group
  * @param $field_type
  * @param HttpRequest $request
  * @return array
  */
 private function addSubQuery(array $query, FieldGroup $field_group, $field_type, HttpRequest $request)
 {
     $classnames = array('taxonomy' => 'TaxQuery', 'meta_key' => 'MetaQuery', 'date' => 'DateQuery');
     $fields = $field_group->getFields();
     if (empty($classnames[$field_type]) || empty($fields)) {
         return $query;
     }
     $s_query = $this->getSubQuery($classnames[$field_type], $fields, $field_group->getRelation(), $request);
     if (!empty($s_query)) {
         $query[RequestVar::wpQueryVar($field_type)] = $s_query;
     }
     return $query;
 }