LLMS_Analytics_Widget::set_order_data_query( $args = array() )
Contents
Source Source
File: includes/abstracts/abstract.llms.analytics.widget.php
protected function set_order_data_query( $args = array() ) { extract( wp_parse_args( $args, array( 'select' => array( '*' ), 'date_range' => true, // whether or not to add a "where" for the posted date range. 'date_field' => 'post_date', 'query_function' => 'get_results', // query function to pass to $wpdb->query(). 'output_type' => OBJECT, 'joins' => array(), // array of JOIN statements. 'statuses' => array(), // array of order statuses to query. 'wheres' => array(), // array of "WHERE" statements. 'order' => 'ASC', 'orderby' => '', ) ) ); $this->query_function = $query_function; $this->query_vars = array(); $this->output_type = $output_type; global $wpdb; // setup student join & where clauses. $students = $this->get_posted_students(); $students_join = ''; $students_where = ''; if ( $students ) { $students_join = "JOIN {$wpdb->postmeta} AS m1 ON orders.ID = m1.post_id"; $students_where .= "AND m1.meta_key = '_llms_user_id'"; $students_where .= ' AND m1.meta_value IN ( ' . implode( ', ', $students ) . ' )'; } // setup post (product) joins & where clauses. $posts = $this->get_posted_posts(); $products_join = ''; $products_where = ''; if ( $posts ) { $products_join = "JOIN {$wpdb->postmeta} AS m2 ON orders.ID = m2.post_id"; $products_where .= "AND m2.meta_key = '_llms_product_id'"; $products_where .= ' AND m2.meta_value IN ( ' . implode( ', ', $posts ) . ' )'; } $order_dates = ''; if ( $date_range ) { $dates = $this->get_posted_dates(); $order_dates = "AND orders.{$date_field} BETWEEN CAST( %s AS DATETIME ) AND CAST( %s AS DATETIME )"; $this->query_vars[] = $this->format_date( $dates['start'], 'start' ); $this->query_vars[] = $this->format_date( $dates['end'], 'end' ); } // setup post status conditions in the where clause. $post_statuses = ''; if ( $statuses ) { $post_statuses .= ' AND ( '; foreach ( $statuses as $i => $status ) { if ( $i > 0 ) { $post_statuses .= ' OR '; } $post_statuses .= 'post_status = %s'; $this->query_vars[] = $status; } $post_statuses .= ' )'; } // setup the select clause. $select_clause = ''; foreach ( $select as $i => $s ) { if ( $i > 0 ) { $select_clause .= ', '; } $select_clause .= $s; } $joins_clause = ''; foreach ( $joins as $join ) { $joins_clause .= $join . "\r\n"; } $wheres_clause = ''; foreach ( $wheres as $where ) { $wheres_clause .= $where . "\r\n"; } $order_clause = ''; if ( $order && $orderby ) { $order_clause = 'ORDER BY ' . $orderby . ' ' . $order; } $this->query = "SELECT {$select_clause} FROM {$wpdb->posts} AS orders {$students_join} {$products_join} {$joins_clause} WHERE orders.post_type = 'llms_order' {$order_dates} {$post_statuses} {$students_where} {$products_where} {$wheres_clause} {$order_clause} ;"; }
Expand full source code Collapse full source code View on GitHub