Example #1
0
 /**
  * @param array $args
  * @param string $output_type
  * @return int|mixed
  */
 public function find($args, $output_type = OBJECT)
 {
     $args = wp_parse_args($args, array('select' => '*', 'offset' => 0, 'limit' => 1, 'orderby' => 'id', 'order' => 'DESC', 'type' => '', 'email' => '', 'datetime_after' => '', 'datetime_before' => '', 'include_errors' => true));
     $where = array();
     $params = array();
     // build general select from query
     $query = sprintf("SELECT %s FROM `%s`", $args['select'], $this->table_name);
     // add email to WHERE clause
     if ('' !== $args['email']) {
         $where[] = 'email LIKE %s';
         $params[] = '%%' . $this->db->esc_like($args['email']) . '%%';
     }
     // add type to WHERE clause
     if ('' !== $args['type']) {
         $where[] = 'type = %s';
         $params[] = $args['type'];
     }
     // add datetime to WHERE clause
     if ('' !== $args['datetime_after']) {
         $where[] = 'datetime >= %s';
         $params[] = $args['datetime_after'];
     }
     if ('' !== $args['datetime_before']) {
         $where[] = 'datetime <= %s';
         $params[] = $args['datetime_before'];
     }
     // add where parameters
     if (count($where) > 0) {
         $query .= ' WHERE ' . implode(' AND ', $where);
     }
     // prepare parameters
     if (!empty($params)) {
         $query = $this->db->prepare($query, $params);
     }
     // return result count
     if ($args['select'] === 'COUNT(*)') {
         return (int) $this->db->get_var($query);
     }
     // return single row
     if ($args['limit'] === 1) {
         $query .= ' LIMIT 1';
         return $this->db->get_row($query);
     }
     // perform rest of query
     $args['limit'] = absint($args['limit']);
     $args['offset'] = absint($args['offset']);
     $args['orderby'] = preg_replace("/[^a-zA-Z]/", "", $args['orderby']);
     $args['order'] = preg_replace("/[^a-zA-Z]/", "", $args['order']);
     // add ORDER BY, OFFSET and LIMIT to SQL
     $query .= sprintf(' ORDER BY `%s` %s LIMIT %d, %d', $args['orderby'], $args['order'], $args['offset'], $args['limit']);
     return $this->db->get_results($query, $output_type);
 }