query_fields() public static method

Get the string to use in a query for WHERE/HAVING, uses WP_Query meta_query arguments
Since: 2.3
public static query_fields ( array $fields, array $pod = null, object &$params = null ) : string | null
$fields array Array of field matches for querying
$pod array Related Pod
$params object Parameters passed from select()
return string | null Query string for WHERE/HAVING
Esempio n. 1
0
 /**
  * @param bool $full Whether to get ALL data or use pagination
  *
  * @return bool
  */
 public function get_data($params = null)
 {
     $action = $this->action;
     $defaults = array('full' => false, 'flatten' => true, 'fields' => null, 'type' => '');
     if (!empty($params) && is_array($params)) {
         $params = (object) array_merge($defaults, $params);
     } else {
         $params = (object) $defaults;
     }
     if (!in_array($action, array('manage', 'reorder'))) {
         $action = 'manage';
     }
     if (false !== $this->pod && is_object($this->pod) && ('Pods' == get_class($this->pod) || 'Pod' == get_class($this->pod))) {
         $orderby = array();
         $limit = $this->limit;
         $sql = null;
         if ('reorder' == $this->action) {
             if (!empty($this->reorder['orderby'])) {
                 $orderby[$this->reorder['orderby']] = $this->reorder['orderby_dir'];
             } else {
                 $orderby[$this->reorder['on']] = $this->reorder['orderby_dir'];
             }
             if (!empty($this->reorder['limit'])) {
                 $limit = $this->reorder['limit'];
             }
             if (!empty($this->reorder['sql'])) {
                 $sql = $this->reorder['sql'];
             }
         }
         if (!empty($this->orderby)) {
             $this->orderby = (array) $this->orderby;
             foreach ($this->orderby as $order) {
                 if (false === strpos(' ', $order) && !isset($orderby[$order])) {
                     $orderby[$order] = $this->orderby_dir;
                 }
             }
         }
         $find_params = array('where' => pods_var_raw($action, $this->where, null, null, true), 'orderby' => $orderby, 'page' => (int) $this->page, 'pagination' => true, 'limit' => (int) $limit, 'search' => $this->searchable, 'search_query' => $this->search, 'search_across' => $this->search_across, 'search_across_picks' => $this->search_across_picks, 'filters' => $this->filters, 'sql' => $sql);
         if (empty($find_params['where']) && $this->restricted($this->action)) {
             $find_params['where'] = $this->pods_data->query_fields($this->restrict[$this->action], is_object($this->pod) ? $this->pod->pod_data : null);
         }
         if ($params->full) {
             $find_params['limit'] = -1;
         }
         $find_params = array_merge($find_params, (array) $this->params);
         // Debug purposes
         if (1 == pods_var('pods_debug_params', 'get', 0) && pods_is_admin(array('pods'))) {
             pods_debug($find_params);
         }
         $this->pod->find($find_params);
         if (!$params->full) {
             $data = $this->pod->data();
             $this->data = $data;
             if (!empty($this->data)) {
                 $this->data_keys = array_keys($this->data);
             }
             $this->total = $this->pod->total();
             $this->total_found = $this->pod->total_found();
         } else {
             $this->data_full = array();
             $export_params = array('fields' => $params->fields, 'flatten' => true);
             if (in_array($params->type, array('json', 'xml'))) {
                 $export_params['flatten'] = false;
             }
             $export_params = $this->do_hook('export_options', $export_params, $params);
             while ($this->pod->fetch()) {
                 $this->data_full[$this->pod->id()] = $this->pod->export($export_params);
             }
             $this->pod->reset();
             return $this->data_full;
         }
     } else {
         if (!empty($this->data)) {
             return $this->data;
         }
         if (empty($this->sql['table'])) {
             return $this->data;
         }
         $orderby = '';
         if (!empty($this->orderby)) {
             $orderby = '`' . $this->orderby . '` ' . (false === strpos($this->orderby, ' ') ? strtoupper($this->orderby_dir) : '');
         }
         $find_params = array('table' => $this->sql['table'], 'where' => pods_var_raw($action, $this->where, null, null, true), 'orderby' => $orderby, 'page' => (int) $this->page, 'pagination' => true, 'limit' => (int) $this->limit, 'search' => $this->searchable, 'search_query' => $this->search, 'fields' => $this->fields['search']);
         if (empty($find_params['where']) && $this->restricted($this->action)) {
             $find_params['where'] = $this->pods_data->query_fields($this->restrict[$this->action], is_object($this->pod) ? $this->pod->pod_data : null);
         }
         if ($params->full) {
             $find_params['limit'] = -1;
         }
         // Debug purposes
         if (1 == pods_var('pods_debug_params', 'get', 0) && pods_is_admin(array('pods'))) {
             pods_debug($find_params);
         }
         $this->pods_data->select($find_params);
         if (!$params->full) {
             $this->data = $this->pods_data->data;
             if (!empty($this->data)) {
                 $this->data_keys = array_keys($this->data);
             }
             $this->total = $this->pods_data->total();
             $this->total_found = $this->pods_data->total_found();
         } else {
             $this->data_full = $this->pods_data->data;
             return $this->data_full;
         }
     }
     return $this->data;
 }
 /**
  * Get find() params based on current UI action
  *
  * @param null|array $params
  * @param null|string $action
  */
 public function get_params($params = null, $action = null)
 {
     if (null === $action) {
         $action = $this->action;
     }
     $defaults = array('full' => false, 'flatten' => true, 'fields' => null, 'type' => '');
     if (!empty($params) && is_array($params)) {
         $params = (object) array_merge($defaults, $params);
     } else {
         $params = (object) $defaults;
     }
     if (!in_array($action, array('manage', 'reorder'))) {
         $action = 'manage';
     }
     $params_override = false;
     $orderby = array();
     $limit = $this->limit;
     $sql = null;
     if ('reorder' == $this->action) {
         if (!empty($this->reorder['orderby'])) {
             $orderby[$this->reorder['orderby']] = $this->reorder['orderby_dir'];
         } else {
             $orderby[$this->reorder['on']] = $this->reorder['orderby_dir'];
         }
         if (!empty($this->reorder['limit'])) {
             $limit = $this->reorder['limit'];
         }
         if (!empty($this->reorder['sql'])) {
             $sql = $this->reorder['sql'];
         }
     }
     if (!empty($this->orderby)) {
         $this->orderby = (array) $this->orderby;
         foreach ($this->orderby as $order) {
             if (false !== strpos($order, ' ')) {
                 $orderby[] = $order;
             } elseif (!isset($orderby[$order])) {
                 $orderby[$order] = $this->orderby_dir;
             }
         }
     }
     if (false !== $this->pod && is_object($this->pod) && ('Pods' == get_class($this->pod) || 'Pod' == get_class($this->pod))) {
         $find_params = array('where' => pods_v($action, $this->where, null, true), 'orderby' => $orderby, 'page' => (int) $this->page, 'pagination' => true, 'limit' => (int) $limit, 'search' => $this->searchable, 'search_query' => $this->search, 'search_across' => $this->search_across, 'search_across_picks' => $this->search_across_picks, 'filters' => $this->filters, 'sql' => $sql);
         $params_override = true;
     } else {
         $find_params = array('table' => $this->sql['table'], 'id' => $this->sql['field_id'], 'index' => $this->sql['field_index'], 'where' => pods_v($action, $this->where, null, true), 'orderby' => $orderby, 'page' => (int) $this->page, 'pagination' => true, 'limit' => (int) $limit, 'search' => $this->searchable, 'search_query' => $this->search, 'fields' => $this->fields['search'], 'sql' => $sql);
         if (!empty($this->sql['select'])) {
             $find_params['select'] = $this->sql['select'];
         }
     }
     if (empty($find_params['where']) && $this->restricted($this->action)) {
         $find_params['where'] = $this->pods_data->query_fields($this->restrict[$this->action], is_object($this->pod) ? $this->pod->pod_data : null);
     }
     if ($params_override) {
         $find_params = array_merge($find_params, (array) $this->params);
     }
     if ($params->full) {
         $find_params['limit'] = -1;
     }
     // Debug purposes
     if (1 == pods_v('pods_debug_params', 'get', 0) && pods_is_admin(array('pods'))) {
         pods_debug($find_params);
     }
     return $find_params;
 }
Esempio n. 3
0
 /**
  * @param bool $full Whether to get ALL data or use pagination
  *
  * @return bool
  */
 public function get_data($params = null)
 {
     $action = $this->action;
     $defaults = array('full' => false, 'flatten' => true, 'fields' => null, 'type' => '');
     if (!empty($params) && is_array($params)) {
         $params = (object) array_merge($defaults, $params);
     } else {
         $params = (object) $defaults;
     }
     if (!in_array($action, array('manage', 'reorder'))) {
         $action = 'manage';
     }
     if (false !== $this->pod && is_object($this->pod) && ('Pods' == get_class($this->pod) || 'Pod' == get_class($this->pod))) {
         $orderby = array();
         $limit = $this->limit;
         $sql = null;
         if ('reorder' == $this->action) {
             if (!empty($this->reorder['orderby'])) {
                 $orderby[$this->reorder['orderby']] = $this->reorder['orderby_dir'];
             } else {
                 $orderby[$this->reorder['on']] = $this->reorder['orderby_dir'];
             }
             if (!empty($this->reorder['limit'])) {
                 $limit = $this->reorder['limit'];
             }
             if (!empty($this->reorder['sql'])) {
                 $sql = $this->reorder['sql'];
             }
         }
         if (!empty($this->orderby)) {
             $this->orderby = (array) $this->orderby;
             foreach ($this->orderby as $order) {
                 if (false === strpos(' ', $order) && !isset($orderby[$order])) {
                     $orderby[$order] = $this->orderby_dir;
                 }
             }
         }
         $find_params = array('where' => pods_var_raw($action, $this->where, null, null, true), 'orderby' => $orderby, 'page' => (int) $this->page, 'pagination' => true, 'limit' => (int) $limit, 'search' => $this->searchable, 'search_query' => $this->search, 'search_across' => $this->search_across, 'search_across_picks' => $this->search_across_picks, 'filters' => $this->filters, 'sql' => $sql);
         if (empty($find_params['where']) && $this->restricted($this->action)) {
             $find_params['where'] = $this->pods_data->query_fields($this->restrict[$this->action], is_object($this->pod) ? $this->pod->pod_data : null);
         }
         if ($params->full) {
             $find_params['limit'] = -1;
         }
         $find_params = array_merge($find_params, (array) $this->params);
         // Debug purposes
         if (1 == pods_var('pods_debug_params', 'get', 0) && pods_is_admin(array('pods'))) {
             pods_debug($find_params);
         }
         $this->pod->find($find_params);
         if (!$params->full) {
             $data = $this->pod->data();
             $this->data = $data;
             if (!empty($this->data)) {
                 $this->data_keys = array_keys($this->data);
             }
             $this->total = $this->pod->total();
             $this->total_found = $this->pod->total_found();
         } else {
             $this->data_full = array();
             $export_params = array('fields' => $params->fields, 'flatten' => true);
             if (in_array($params->type, array('json', 'xml'))) {
                 $export_params['flatten'] = false;
             }
             $export_params = $this->do_hook('export_options', $export_params, $params);
             while ($this->pod->fetch()) {
                 $this->data_full[$this->pod->id()] = $this->pod->export($export_params);
             }
             $this->pod->reset();
             return $this->data_full;
         }
     } else {
         if (!empty($this->data)) {
             return $this->data;
         }
         if (empty($this->sql['table'])) {
             return $this->data;
         }
         $orderby = array();
         if (!empty($this->orderby)) {
             $this->orderby = (array) $this->orderby;
             foreach ($this->orderby as $k => $order) {
                 if (false === strpos($order, ' ')) {
                     if (in_array(strtoupper($order), array('ASC', 'DESC'))) {
                         $orderby[$k] = $order;
                     } elseif (!isset($orderby[$order])) {
                         $orderby[$order] = $this->orderby_dir;
                     }
                 } else {
                     $orderby[] = $order;
                 }
             }
         }
         // Allow orderby array ( 'field' => 'asc|desc' )
         if (!empty($orderby) && is_array($orderby)) {
             foreach ($orderby as $k => &$orderby_value) {
                 if (!is_numeric($k)) {
                     $order = 'ASC';
                     if ('DESC' == strtoupper($orderby_value)) {
                         $order = 'DESC';
                     }
                     if (false !== strpos($k, '.')) {
                         $key = $k;
                         if (false === strpos($key, ' ') && false === strpos($key, '`')) {
                             $key = '`' . str_replace('.', '`.`', $key) . '`';
                         }
                     } else {
                         $key = "`t`.`{$k}`";
                     }
                     $orderby_value = $key;
                     if (false === strpos($orderby_value, ' ')) {
                         $orderby_value .= ' ' . $order;
                     }
                 }
             }
         }
         // Add prefix to $orderby if needed
         if (!empty($orderby)) {
             if (!is_array($orderby)) {
                 $orderby = array($orderby);
             }
             foreach ($orderby as &$prefix_orderby) {
                 if (false === strpos($prefix_orderby, ',') && false === strpos($prefix_orderby, '(') && false === stripos($prefix_orderby, ' AS ') && false === strpos($prefix_orderby, '`') && false === strpos($prefix_orderby, '.')) {
                     if (false !== stripos($prefix_orderby, ' DESC')) {
                         $k = trim(str_ireplace(array('`', ' DESC'), '', $prefix_orderby));
                         $dir = 'DESC';
                     } else {
                         $k = trim(str_ireplace(array('`', ' ASC'), '', $prefix_orderby));
                         $dir = 'ASC';
                     }
                     $key = "`t`.`{$k}`";
                     $prefix_orderby = "{$key} {$dir}";
                 }
             }
         }
         $find_params = array('table' => $this->sql['table'], 'id' => $this->sql['field_id'], 'index' => $this->sql['field_index'], 'where' => pods_var_raw($action, $this->where, null, null, true), 'orderby' => $orderby, 'page' => (int) $this->page, 'pagination' => true, 'limit' => (int) $this->limit, 'search' => $this->searchable, 'search_query' => $this->search, 'fields' => $this->fields['search']);
         if (empty($find_params['where']) && $this->restricted($this->action)) {
             $find_params['where'] = $this->pods_data->query_fields($this->restrict[$this->action], is_object($this->pod) ? $this->pod->pod_data : null);
         }
         if ($params->full) {
             $find_params['limit'] = -1;
         }
         // Debug purposes
         if (1 == pods_var('pods_debug_params', 'get', 0) && pods_is_admin(array('pods'))) {
             pods_debug($find_params);
         }
         $this->pods_data->select($find_params);
         if (!$params->full) {
             $this->data = $this->pods_data->data;
             if (!empty($this->data)) {
                 $this->data_keys = array_keys($this->data);
             }
             $this->total = $this->pods_data->total();
             $this->total_found = $this->pods_data->total_found();
         } else {
             $this->data_full = $this->pods_data->data;
             if (!empty($this->data_full)) {
                 $this->data_keys = array_keys($this->data_full);
             }
             return $this->data_full;
         }
     }
     return $this->data;
 }