function __construct($search_term = '', $page_num = '', $search_args = array(), $meta_args = array(), $additional_url_args = array())
 {
     global $wpdb;
     $this->additional_url_args = $additional_url_args;
     if (!empty($search_args['users_per_page']) && is_numeric($search_args['users_per_page'])) {
         $this->users_per_page = $search_args['users_per_page'];
     }
     $this->search_term = $search_term;
     $this->raw_page = '' == $page_num ? false : (int) $page_num;
     $this->page_num = (int) ('' == $page_num) ? 1 : $page_num;
     $args = array('search' => $this->search_term, 'number' => $this->users_per_page, 'offset' => ($this->page_num - 1) * $this->users_per_page);
     $search_args['meta_key'] = 'role';
     //( isset( $search_args['meta_key'] ) ? $search_args['meta_key'] : '' );
     $search_args['meta_value'] = 'student';
     //( isset( $search_args['meta_value'] ) ? $search_args['meta_value'] : '' );
     if (!empty($meta_args)) {
         $meta_args['number'] = $this->users_per_page;
         $meta_args['offset'] = ($this->page_num - 1) * $this->users_per_page;
         $args = $meta_args;
     }
     if (is_multisite()) {
         $args['meta_key'] = $wpdb->prefix . 'role';
     }
     $args['blog_id'] = get_current_blog_id();
     $this->query_vars = wp_parse_args($args, array('meta_value' => $search_args['meta_value'], 'meta_compare' => '', 'include' => array(), 'exclude' => array(), 'search' => '', 'search_columns' => array(), 'orderby' => 'ID', 'order' => 'ASC', 'offset' => ($this->page_num - 1) * $this->users_per_page, 'number' => '', 'count_total' => true, 'fields' => 'all_with_meta', 'who' => '', 'has_published_posts' => null));
     add_action('pre_user_query', array(&$this, 'add_first_and_last'));
     parent::prepare_query();
     $this->query();
     $this->do_paging();
 }
Example #2
0
 /**
  * Get users who signed up for a membership.
  *
  * @param array $args
  * @return WP_User_Query
  */
 public function get_members($args)
 {
     global $wpdb;
     $user_query = new WP_User_Query();
     $user_query->prepare_query($args);
     $user_query->query_from .= ' INNER JOIN ' . $this->tbl_members . ' ib_edu_m ON ib_edu_m.user_id = ' . $wpdb->users . '.ID';
     $user_query->query();
     return $user_query;
 }
Example #3
0
 function capture_query($args)
 {
     $args['count_total'] = false;
     $uq = new WP_User_Query();
     $uq->_p2p_capture = true;
     // needed by P2P_URL_Query
     $uq->prepare_query($args);
     return "SELECT {$uq->query_fields} {$uq->query_from} {$uq->query_where} {$uq->query_orderby} {$uq->query_limit}";
 }
Example #4
0
 function test_exclude()
 {
     $users = new WP_User_Query();
     $users->set('fields', '');
     $users->set('exclude', $this->user_id);
     $users->prepare_query();
     $users->query();
     $ids = $users->get_results();
     $this->assertNotContains($this->user_id, $ids);
 }
Example #5
0
 function capture_query($args)
 {
     $args['count_total'] = false;
     $uq = new WP_User_Query();
     $uq->_p2p_capture = true;
     // needed by P2P_URL_Query
     // see http://core.trac.wordpress.org/ticket/21119
     $uq->query_vars = wp_parse_args($args, array('blog_id' => $GLOBALS['blog_id'], 'role' => '', 'meta_key' => '', 'meta_value' => '', 'meta_compare' => '', 'include' => array(), 'exclude' => array(), 'search' => '', 'search_columns' => array(), 'orderby' => 'login', 'order' => 'ASC', 'offset' => '', 'number' => '', 'count_total' => true, 'fields' => 'all', 'who' => ''));
     $uq->prepare_query();
     return "SELECT {$uq->query_fields} {$uq->query_from} {$uq->query_where} {$uq->query_orderby} {$uq->query_limit}";
 }
 function __construct($search_term = '', $page_num = '')
 {
     global $wpdb;
     $this->search_term = $search_term;
     $this->raw_page = '' == $page_num ? false : (int) $page_num;
     $this->page_num = (int) ('' == $page_num) ? 1 : $page_num;
     $args = array('search' => $this->search_term, 'number' => $this->users_per_page, 'offset' => ($this->page_num - 1) * $this->users_per_page, 'fields' => 'all');
     $meta_key = 'role_ins';
     if (is_multisite()) {
         $args['meta_key'] = $wpdb->prefix . 'role_ins';
     } else {
         $args['meta_key'] = 'role_ins';
     }
     $args['blog_id'] = get_current_blog_id();
     $this->query_vars = wp_parse_args($args, array('meta_value' => 'instructor', 'meta_compare' => '', 'include' => array(), 'exclude' => array(), 'search' => '', 'search_columns' => '', 'counter' => '', 'orderby' => 'login', 'order' => 'ASC', 'offset' => ($this->page_num - 1) * $this->users_per_page, 'number' => $this->users_per_page, 'count_total' => true, 'fields' => 'all', 'who' => ''));
     $this->query_vars = $args;
     add_action('pre_user_query', array(&$this, 'add_first_and_last'));
     parent::prepare_query();
     $this->query();
     $this->do_paging();
 }
 /**
  * @ticket 22212
  * @ticket 21119
  */
 public function test_calling_prepare_query_a_second_time_should_not_add_another_cap_query_on_multisite()
 {
     if (!is_multisite()) {
         $this->markTestSkipped(__METHOD__ . ' requires Multisite.');
     }
     $site_id = get_current_blog_id();
     add_user_to_blog($site_id, self::$author_ids[0], 'author');
     $q = new WP_User_Query(array('include' => self::$author_ids[0]));
     $r1 = $q->request;
     $q->prepare_query(array('include' => self::$author_ids[0]));
     $r2 = $q->request;
     $q->prepare_query(array('include' => self::$author_ids[0]));
     $r3 = $q->request;
     $this->assertSame($r1, $r2);
     $this->assertSame($r1, $r3);
 }
Example #8
0
 /**
  * @ticket 21119
  */
 function test_prepare_query()
 {
     $query = new WP_User_Query();
     $this->assertEmpty($query->query_fields);
     $this->assertEmpty($query->query_from);
     $this->assertEmpty($query->query_limit);
     $this->assertEmpty($query->query_orderby);
     $this->assertEmpty($query->query_where);
     $this->assertEmpty($query->query_vars);
     $_query_vars = $query->query_vars;
     $query->prepare_query();
     $this->assertNotEmpty($query->query_fields);
     $this->assertNotEmpty($query->query_from);
     $this->assertEmpty($query->query_limit);
     $this->assertNotEmpty($query->query_orderby);
     $this->assertNotEmpty($query->query_where);
     $this->assertNotEmpty($query->query_vars);
     $this->assertNotEquals($_query_vars, $query->query_vars);
     // All values get reset
     $query->prepare_query(array('number' => 8));
     $this->assertNotEmpty($query->query_limit);
     $this->assertEquals('LIMIT 8', $query->query_limit);
     // All values get reset
     $query->prepare_query(array('fields' => 'all'));
     $this->assertEmpty($query->query_limit);
     $this->assertEquals('', $query->query_limit);
     $_query_vars = $query->query_vars;
     $query->prepare_query();
     $this->assertEquals($_query_vars, $query->query_vars);
 }
Example #9
0
 /**
  * Resets the user query to handle request for unapproved users only.
  *
  * @author Konstantin Obenland
  * @since  2.2.0 - 30.03.2013
  * @access public
  *
  * @param  WP_User_Query $query
  *
  * @return void
  */
 public function pre_user_query($query)
 {
     if ('wpau_unapproved' == $query->query_vars['role']) {
         unset($query->query_vars['meta_query'][0]);
         $query->query_vars['role'] = '';
         $query->query_vars['meta_key'] = 'wp-approve-user';
         $query->query_vars['meta_value'] = false;
         $query->prepare_query();
     }
 }
 /**
  * our own prepare_query
  * first, we call the original one
  * then do our own stuff for
  * levels, statuses, etc.
  */
 function prepare_query($query = array())
 {
     global $wpdb;
     global $WishListMemberInstance;
     // add display_name to search columns
     add_filter('user_search_columns', array($this, 'user_search_columns_filter'), 10, 3);
     parent::prepare_query($query);
     add_filter('user_search_columns', array($this, 'user_search_columns_filter'), 10);
     $wpm_levels = $WishListMemberInstance->GetOption('wpm_levels');
     $search_sql = array();
     /**
      * Filters By Membership Level
      * incomplete/nonmembers has special handling
      **/
     $level = $this->additional_filters['level'];
     if (!empty($level)) {
         if ($level == 'incomplete') {
             $search_sql[] = "{$wpdb->users}.user_login REGEXP '^temp_[a-f0-9]{32}'";
             $search_sql[] = "{$wpdb->users}.user_login = {$wpdb->users}.user_email";
         } else {
             if ($level == 'nonmembers') {
                 $search_sql[] = "(ul.level_id  IS NULL)";
             } else {
                 $search_sql[] = $wpdb->prepare("ul.level_id=%s", $this->additional_filters['level']);
             }
         }
     }
     /** Filters By Sequential Status **/
     $sequential_filter = isset($this->additional_filters['sequential']) ? $this->additional_filters['sequential'] : false;
     if ($sequential_filter) {
         $filter = $sequential_filter == 'on' ? 1 : 0;
         $search_sql[] = $wpdb->prepare("( uo.option_name='sequential' AND uo.option_value=%d ) ", $filter);
     }
     /**
      * Filters By Status
      * Note that expired members are handled differently
      */
     $status = isset($this->additional_filters['status']) ? $this->additional_filters['status'] : false;
     if ($status) {
         $expired_sql = array();
         $inactive_sql = array();
         $active_sql = array();
         //expired members are specially handled
         $ids = array();
         $expiredmembers = $WishListMemberInstance->ExpiredMembersID();
         //flatten the result
         $ids = call_user_func_array('array_merge', $expiredmembers);
         if (empty($ids)) {
             $ids = array(-1);
         }
         $expired_sql[] = "{$wpdb->users}.ID IN (" . implode(',', $ids) . ")";
         $inactives = array('cancelled', 'unconfirmed', 'forapproval');
         foreach ($inactives as $i) {
             $inactive_sql[] = $wpdb->prepare("( ulo.option_name=%s AND ulo.option_value=%d )", $i, 1);
         }
         switch ($status) {
             case 'expired':
                 $search_sql = array_merge($search_sql, $expired_sql);
                 break;
             case 'inactive':
                 $or_sql = array_merge($expired_sql, $inactive_sql);
                 $search_sql[] = "(" . implode(' OR ', $or_sql) . ")";
                 break;
             case 'cancelled':
             case 'uncomfirmed':
             case 'forapproval':
                 $search_sql[] = $wpdb->prepare("( ulo.option_name=%s AND ulo.option_value=%d )", $status, 1);
             default:
                 break;
         }
     }
     /**
      * Filter by Date Ranges
      * Again, due to expired being computed on the fly
      * it has to be handled in a specific way
      */
     $date_meta = !empty($this->additional_filters['date_type']) ? $this->additional_filters['date_type'] : false;
     if ($date_meta) {
         //no real option rather than initiate a sub-query since dates are stored as strings
         if ($date_meta == 'expiration_date') {
             $ids = array();
             $expired_ts_from = strtotime($this->additional_filters['from_date']);
             $expired_ts_to = strtotime($this->additional_filters['to_date']);
             if ($expired_ts_to <= 0) {
                 $expired_ts_to = time();
             }
             $expiredmembers = $WishListMemberInstance->ExpiredMembersID();
             foreach ($expiredmembers as $level_id => $expired_per_level) {
                 foreach ($expired_per_level as $user_id) {
                     $expired_ts = $WishListMemberInstance->LevelExpireDate($level_id, $user_id);
                     if ($expired_ts >= $expired_ts_from && $expired_ts <= $expired_ts_to) {
                         $ids[] = $user_id;
                     }
                 }
             }
         } else {
             $ids = $WishListMemberInstance->GetMembersIDByDateRange($date_meta, $this->additional_filters['from_date'], $this->additional_filters['to_date']);
         }
         //nothing found? force to return nothing
         if (empty($ids)) {
             $ids = array(-1);
         }
         $search_sql[] = "{$wpdb->users}.ID IN (" . implode(',', $ids) . ")";
     }
     if (!empty($search_sql)) {
         $search_sql = implode(' AND ', $search_sql);
         $this->query_where .= " AND {$search_sql}";
     }
     $this->query_orderby = "GROUP BY {$wpdb->users}.ID {$this->query_orderby}";
     $this->query_from .= "" . " LEFT JOIN {$WishListMemberInstance->Tables->userlevels} ul on ({$wpdb->users}.ID=ul.user_id)" . " LEFT JOIN {$WishListMemberInstance->Tables->userlevel_options} ulo on (ulo.userlevel_id=ul.ID)" . " LEFT JOIN {$WishListMemberInstance->Tables->user_options} uo on ({$wpdb->users}.ID=uo.user_id)";
 }