Пример #1
0
 /**
  * run all 
  */
 function run($recurrence = 'daily')
 {
     // loop
     foreach ($this->schedules[$recurrence] as $callback) {
         // event_callback
         $event_callback = $recurrence . '_' . $callback;
         // daily_[callback]
         // trigger
         if (method_exists($this, $event_callback)) {
             // run
             call_user_func(array($this, $event_callback));
             // log executed
             $current_date = mgm_get_current_datetime('Y-m-d H:i:s');
             // with time part #1023 issue
             // last run set in events
             $this->events[$recurrence][$callback] = $current_date['timestamp'];
         }
     }
     // update option
     $this->save();
 }
 function get_earnings($date_start, $date_end, $member_type)
 {
     // global
     global $wpdb;
     $data = array();
     $curr_date = mgm_get_current_datetime();
     $current_date = $curr_date['timestamp'];
     // preparing query based on dates
     if (!empty($date_start) && !empty($date_end)) {
         /*			$date_end=str_replace('/','-',$date_end);
         			$end_date  = date('Y-m-d', strtotime( $date_end));
         			
         			$date_start=str_replace('/','-',$date_start);	
         			$start_date  = date('Y-m-d',  strtotime( $date_start));	
         */
         //issue #1311
         $sformat = mgm_get_date_format('date_format_short');
         $start_date = mgm_format_inputdate_to_mysql($date_start, $sformat);
         $end_date = mgm_format_inputdate_to_mysql($date_end, $sformat);
         $start_date .= ' 00:00:00';
         $end_date .= ' 23:59:59';
         //Issue #733
         //$condition =" WHERE transaction_dt BETWEEN  '$start_date' AND  '$end_date'";
         $condition = " AND status_text = 'Last payment was successful' AND transaction_dt BETWEEN  '{$start_date}' AND  '{$end_date}'";
     } else {
         //setting the default end date
         if (empty($date_end)) {
             $date_end = $end_date = date('Y-m-d', $current_date);
             $end_date .= ' 23:59:59';
         }
         //setting the default start date
         if (empty($date_start)) {
             $date_start = $start_date = date('Y-m-d', strtotime("{$end_date} - 3 months"));
             $start_date .= ' 00:00:00';
         }
         //$condition =" WHERE transaction_dt BETWEEN  '$start_date' AND  '$end_date'";
         $condition = " AND status_text = 'Last payment was successful' AND transaction_dt BETWEEN  '{$start_date}' AND  '{$end_date}'";
         //Issue #733
         //$condition =" ORDER BY  `transaction_dt` DESC LIMIT 10";
         //$condition = " AND status_text = 'Last payment was successful' ORDER BY  `transaction_dt` DESC LIMIT 10";
     }
     // sql
     $sql = "SELECT * FROM `" . TBL_MGM_TRANSACTION . "` WHERE 1 {$condition}";
     // mgm_log($sql);
     // row
     $rows = $wpdb->get_results($sql);
     // reset data
     $subscription = array();
     $purchase = array();
     $d = array();
     // looping the results
     foreach ($rows as $row) {
         $row->data = json_decode($row->data, true);
         extract($row->data);
         // Storing subscription data to array
         if (trim($row->payment_type) == 'subscription_purchase') {
             $dt = strtok($row->transaction_dt, " ");
             if (isset($subscription[$dt])) {
                 if ($membership_type == $member_type || $member_type == 'all') {
                     $subscription[$dt]['date'] = $dt;
                     //issue #1311
                     if ($trial_on) {
                         $subscription[$dt]['cost'] += $trial_cost;
                     } else {
                         $subscription[$dt]['cost'] += $cost;
                     }
                     //$subscription[$dt]['cost'] +=$cost;
                     $subscription[$dt]['count']++;
                 }
             } else {
                 if ($membership_type == $member_type || $member_type == 'all') {
                     $d[] = $dt;
                     $subscription[$dt]['date'] = $dt;
                     //issue #1311
                     if ($trial_on) {
                         $subscription[$dt]['cost'] += $trial_cost;
                     } else {
                         $subscription[$dt]['cost'] += $cost;
                     }
                     //$subscription[$dt]['cost'] =$cost;
                     $subscription[$dt]['count'] = 1;
                 }
             }
         }
         // Storing pay per post data to array
         if (trim($row->payment_type) == 'post_purchase') {
             $dt = strtok($row->transaction_dt, " ");
             if (isset($purchase[$dt])) {
                 // validating membership type
                 if ($membership_type == $member_type || $member_type == 'all') {
                     $purchase[$dt]['date'] = $dt;
                     $purchase[$dt]['cost'] += $cost;
                     $purchase[$dt]['count']++;
                 }
             } else {
                 // validating membership type
                 if ($membership_type == $member_type || $member_type == 'all') {
                     $d[] = $dt;
                     $purchase[$dt]['date'] = $dt;
                     $purchase[$dt]['cost'] = $cost;
                     $purchase[$dt]['count'] = 1;
                 }
             }
         }
     }
     //getting recurring earnings and dates
     $recurring_data = $this->recurring_earnings($date_start, $date_end, $member_type);
     $d = array_unique($d);
     $md = array_merge($d, $recurring_data['dates']);
     $d = array_unique($md);
     sort($d);
     $recurring = $recurring_data['recurring'];
     $dcount = count($d);
     $data[0]['date_start'] = $date_start;
     $data[0]['date_end'] = $date_end;
     $data[0]['member_type'] = $member_type;
     // Migrating the pay per post,recurring and subscription data to array
     for ($i = 0; $i < $dcount; $i++) {
         $udt = $d[$i];
         if (!empty($udt)) {
             $data[$i]['date'] = $udt;
             if (array_key_exists($udt, $purchase)) {
                 $data[$i]['purchase'] = $purchase[$udt]['cost'];
             } else {
                 $data[$i]['purchase'] = 0;
             }
             if (array_key_exists($udt, $subscription)) {
                 $data[$i]['subscription'] = $subscription[$udt]['cost'];
             } else {
                 $data[$i]['subscription'] = 0;
             }
             if (isset($recurring) && array_key_exists($udt, $recurring)) {
                 $data[$i]['recurring'] = $recurring[$udt]['cost'];
             } else {
                 $data[$i]['recurring'] = 0;
             }
         }
     }
     return $data;
 }
 function purchase_export()
 {
     global $wpdb;
     // data
     $data = array();
     // filter
     $sql_filter = $data['search_field_name'] = $data['search_field_value'] = '';
     $search_field_name = mgm_post_var('search_field_name');
     // check
     if (!empty($search_field_name)) {
         // post
         $search_field_value = mgm_post_var('search_field_value');
         $search_field_value_two = mgm_post_var('search_field_value_two');
         // view data
         $data['search_field_name'] = $search_field_name;
         // for display
         //issue #1281
         $data['search_field_value'] = htmlentities($search_field_value, ENT_QUOTES, "UTF-8");
         // for display
         $data['search_field_value_two'] = htmlentities($search_field_value_two, ENT_QUOTES, "UTF-8");
         // for display
         //searc value
         $search_field_value = esc_sql($search_field_value);
         // for sql
         // end date value
         $search_field_value_two = esc_sql($search_field_value_two);
         // for sql
         //current date
         $curr_date = mgm_get_current_datetime();
         $current_date = $curr_date['timestamp'];
         // by field
         switch ($search_field_name) {
             case 'user_login':
                 $sql_filter = " AND (`user_login` LIKE '%{$search_field_value}%')";
                 break;
             case 'addon_option':
                 $sql_filter = " AND (`option` LIKE '%{$search_field_value}%')";
                 break;
             case 'purchase_dt':
                 // date start
                 if (empty($search_field_value)) {
                     $search_field_value = date('Y-m-d', $current_date);
                 }
                 // date end
                 if (empty($search_field_value_two)) {
                     $search_field_value_two = date('Y-m-d', $current_date);
                 }
                 // convert
                 $search_field_value = mgm_format_inputdate_to_mysql($search_field_value);
                 $search_field_value_two = mgm_format_inputdate_to_mysql($search_field_value_two);
                 // set
                 $sql_filter = " AND (DATE_FORMAT(`purchase_dt`,'%Y-%m-%d') BETWEEN '{$search_field_value}' AND '{$search_field_value_two}')";
                 break;
         }
     }
     // order
     $sql_order = " ORDER BY `user_login`, `purchase_dt`";
     // sql
     $sql = "SELECT SQL_CALC_FOUND_ROWS A.id, A.purchase_dt, B.option AS addon_option, C.user_login\r\r\n\t\t        FROM `" . TBL_MGM_ADDON_PURCHASES . "` A \r\r\n\t\t\t\tLEFT JOIN " . TBL_MGM_ADDON_OPTION . " B ON (B.id = A.addon_option_id) \r\r\n\t\t\t\tLEFT JOIN " . $wpdb->users . " C ON (C.ID = A.user_id) WHERE 1 \r\r\n\t\t\t\t{$sql_filter} {$sql_order} ";
     // store
     $data['addon_purchases'] = $wpdb->get_results($sql);
     // date format
     $date_format = mgm_get_date_format('date_format');
     // init
     $purchases = array();
     // check
     if (count($data['addon_purchases']) > 0) {
         //purchases
         foreach ($data['addon_purchases'] as $purchase) {
             // int
             $row = new stdClass();
             // export fields
             $row->username = $purchase->user_login;
             $row->addon_option = $purchase->addon_option;
             $row->purchase_date = date($date_format, strtotime($purchase->purchase_dt));
             // cache
             $purchases[] = $row;
             // unset
             unset($row);
         }
     }
     // default response
     $response = array('status' => 'error', 'message' => __('Error while exporting addon purchases.', 'mgm'));
     // check
     if (count($purchases) > 0) {
         // success
         $success = count($purchases);
         // create
         if (mgm_post_var('export_format') == 'csv') {
             $filename = mgm_create_csv_file($purchases, 'addon_purchases');
         } else {
             $filename = mgm_create_xls_file($purchases, 'addon_purchases');
         }
         // src
         $file_src = MGM_FILES_EXPORT_URL . $filename;
         // message
         $message = sprintf(__('Successfully exported %d addon %s.', 'mgm'), $success, $success > 1 ? 'purchases' : 'purchase');
         // init
         $response = array('status' => 'success', 'message' => $message, 'src' => $file_src);
     }
     // return response
     echo json_encode($response);
     exit;
 }
/**
 * fetch users for rebill check
 * 
 * @param string $act (fetch | update )
 * @param int $offset
 * @return void
 * @since 2.7 
 * @deprecated marked for history
 */
function mgm_get_users_for_rebill_status_check($act = 'fetch', $offset = NULL)
{
    global $wpdb;
    // date again
    $current_date = mgm_get_current_datetime('Y-m-d H:i:s');
    // with time part #1023 issue
    // get option
    $cron_record = get_option('mgm_cron_record');
    // check
    if (!isset($cron_record['run_date'])) {
        $cron_record = array('run_date' => date('Y-m-d', $current_date['timestamp']), 'rebill_status_check' => array('user_offset' => 0));
    } elseif (!isset($cron_record['rebill_status_check']['user_offset'])) {
        $cron_record['rebill_status_check'] = array('user_offset' => 0);
    }
    // act
    switch ($act) {
        case 'fetch':
            // user_offset
            $user_offset = (int) $cron_record['rebill_status_check']['user_offset'];
            // sql
            $sql_str = "SELECT ID,user_email,display_name FROM `{$wpdb->users}` WHERE ID <> 1 ORDER BY ID LIMIT %d, 50";
            // get 50 users
            $users = $wpdb->get_results(sprintf($sql_str, $user_offset));
            // check users count
            if (count($users) == 0) {
                // reset and refect
                $user_offset = 0;
                // get 50 users
                $users = $wpdb->get_results(sprintf($sql_str, $user_offset));
            }
            // init
            $a_users = array();
            // check
            if ($users) {
                // loop
                foreach ($users as $user) {
                    // skip admin
                    if (is_super_admin($user->ID)) {
                        continue;
                    }
                    // set
                    $a_users[] = $user;
                }
            }
            return $a_users;
            break;
        case 'update':
            // set
            if ($offset) {
                $cron_record['run_date'] = date('Y-m-d', $current_date['timestamp']);
                $cron_record['rebill_status_check']['user_offset'] = (int) $cron_record['rebill_status_check']['user_offset'] + $offset;
                // update
                update_option('mgm_cron_record', $cron_record);
            }
            break;
    }
}
/**
 * generate members list - short code content
 */
function mgm_generate_member_list($args = array())
{
    global $wpdb, $post;
    //issue #1327
    $show_level = isset($args['show_level']) ? $args['show_level'] : null;
    $show_level_members = array();
    if (!empty($show_level) && $show_level != null) {
        $show_level = explode(',', $show_level);
        $show_level_count = count($show_level);
        for ($i = 0; $i < $show_level_count; $i++) {
            $level_match_members = mgm_get_members_with('membership_type', $show_level[$i]);
            if (!empty($level_match_members)) {
                $show_level_members = array_merge($show_level_members, $level_match_members);
            }
        }
        if (!empty($show_level_members)) {
            $show_level_members = array_unique($show_level_members);
        }
    }
    // current url
    $current_url = get_permalink($post->ID);
    // append ? why?
    // if( !strpos($current_url,'?') !== false) $current_url = ($current_url . '?');
    // echo $current_url;
    // init pager
    $pager = new mgm_pager();
    // init data
    $data = $custom_search_fields = $custom_sort_fields = $custom_user_list = $user_list = array();
    // css group
    $css_group = mgm_get_css_group();
    // html
    $html = '';
    // check
    if ($css_group != 'none') {
        // expand this if needed
        $css_link_format = '<link rel="stylesheet" href="%s" type="text/css" media="all" />';
        $css_file = MGM_ASSETS_URL . 'css/' . $css_group . '/mgm.pages.css';
        $html .= sprintf($css_link_format, $css_file);
    }
    // search fields
    $data['search_fields'] = array('' => __('Select', 'mgm'), 'username' => __('Username', 'mgm'), 'id' => __('User ID', 'mgm'), 'email' => __('User Email', 'mgm'), 'first_name' => __('First Name', 'mgm'), 'last_name' => __('Last Name', 'mgm'), 'membership_type' => __('Membership Type', 'mgm'), 'reg_date' => __('Registration Date', 'mgm'), 'last_payment' => __('Last Payment', 'mgm'), 'expire_date' => __('Expiration Date', 'mgm'), 'fee' => __('Fee', 'mgm'), 'status' => __('Status', 'mgm'));
    // sort fields
    $data['sort_fields'] = array('id' => __('User ID', 'mgm'), 'username' => __('Username', 'mgm'), 'email' => __('User Email', 'mgm'), 'reg_date' => __('Registration Date', 'mgm'));
    // order fields
    $data['order_fields'] = array('desc' => __('DESC', 'mgm'), 'asc' => __('ASC', 'mgm'));
    // custom_fields
    $custom_fields = mgm_get_class('member_custom_fields');
    // getting custom fileds and skip the search fields if allready exists.
    foreach ($custom_fields->custom_fields as $custom_field) {
        if (!array_key_exists($custom_field['name'], $data['search_fields'])) {
            $custom_search_fields[$custom_field['name']] = $custom_field['label'];
        }
    }
    // getting custom fileds and skip the sort fields if allready exists.
    foreach ($custom_fields->custom_fields as $custom_field) {
        if (!array_key_exists($custom_field['name'], $data['sort_fields'])) {
            if ($custom_field['name'] != 'status') {
                $custom_sort_fields[$custom_field['name']] = $custom_field['label'];
            }
        }
    }
    // filter
    $sql_filter = $data['search_field_name'] = $data['search_field_value'] = '';
    // field value
    if (isset($_REQUEST['query'])) {
        $search_field_value = $_REQUEST['query'];
    } else {
        $search_field_value = '';
    }
    // field name
    if (isset($_REQUEST['by'])) {
        $search_field_name = $_REQUEST['by'];
    } else {
        $search_field_name = '';
    }
    // sort field
    if (isset($_REQUEST['sort_field'])) {
        $sort_field_name = $_REQUEST['sort_field'];
    } else {
        $sort_field_name = '';
    }
    // sort order type //order_type
    if (isset($_REQUEST['sort_order'])) {
        $sort_order_type = $_REQUEST['sort_order'];
    } else {
        $sort_order_type = '';
    }
    // members
    $active_members = mgm_get_members_with('status', MGM_STATUS_ACTIVE);
    // wrongly called,use constant
    // check
    if (!empty($search_field_name)) {
        // clean
        $search_field_value = mgm_escape($search_field_value);
        // for sql
        $search_field_name = mgm_escape($search_field_name);
        // for sql
        // view data
        $data['search_field_name'] = $search_field_name;
        $data['search_field_value'] = trim($search_field_value);
        // current date
        $curr_date = mgm_get_current_datetime();
        $current_date = $curr_date['timestamp'];
        // check
        if (array_key_exists($search_field_name, $custom_search_fields)) {
            // members
            $members = mgm_get_members_with_customfiled($search_field_name, $search_field_value);
            //issue #1327
            if (!empty($show_level_members)) {
                $members = array_intersect($show_level_members, $members);
            }
            //check
            $members_in = count($members) == 0 ? 0 : implode(',', $members);
            // set filter
            $sql_filter = " AND `ID` IN ({$members_in})";
        } else {
            // by field
            switch ($search_field_name) {
                case 'username':
                    // issue#: 347(LIKE SEARCH)
                    $filter = " AND `user_login` LIKE '%{$search_field_value}%'";
                    // matched
                    $matched_members = mgm_get_members_with_sql_filter($filter);
                    //issue #1327
                    if (!empty($show_level_members)) {
                        $matched_members = array_intersect($show_level_members, $matched_members);
                    }
                    // common
                    $members = array_intersect($active_members, $matched_members);
                    // check
                    $members_in = count($members) == 0 ? 0 : implode(',', $members);
                    // set filter
                    $sql_filter = " AND `ID` IN ({$members_in})";
                    break;
                case 'id':
                    // filter
                    $filter = " AND `ID` = '" . (int) $search_field_value . "'";
                    // match
                    $matched_members = mgm_get_members_with_sql_filter($filter);
                    //issue #1327
                    if (!empty($show_level_members)) {
                        $matched_members = array_intersect($show_level_members, $matched_members);
                    }
                    // common
                    $members = array_intersect($active_members, $matched_members);
                    // check
                    $members_in = count($members) == 0 ? 0 : implode(',', $members);
                    // set filter
                    $sql_filter = " AND `ID` IN ({$members_in})";
                    break;
                case 'email':
                    // issue#: 347(LIKE SEARCH)
                    $filter = " AND `user_email` LIKE '%{$search_field_value}%'";
                    // match
                    $matched_members = mgm_get_members_with_sql_filter($filter);
                    //issue #1327
                    if (!empty($show_level_members)) {
                        $matched_members = array_intersect($show_level_members, $matched_members);
                    }
                    // common
                    $members = array_intersect($active_members, $matched_members);
                    // check
                    $members_in = count($members) == 0 ? 0 : implode(',', $members);
                    // set filter
                    $sql_filter = " AND `ID` IN ({$members_in})";
                    break;
                case 'membership_type':
                    // match
                    $matched_members = mgm_get_members_with('membership_type', $search_field_value);
                    //issue #1327
                    if (!empty($show_level_members)) {
                        $matched_members = array_intersect($show_level_members, $matched_members);
                    }
                    // common
                    $members = array_intersect($active_members, $matched_members);
                    // check
                    $members_in = count($members) == 0 ? 0 : implode(',', $members);
                    // set filter
                    $sql_filter = " AND `ID` IN ({$members_in})";
                    break;
                case 'reg_date':
                    // check
                    if (empty($search_field_value)) {
                        $search_field_value = date('Y-m-d', $current_date);
                    }
                    // convert
                    $search_field_value = mgm_format_inputdate_to_mysql($search_field_value);
                    // set filter
                    $filter = " AND DATE_FORMAT(`user_registered`,'%Y-%m-%d') = '{$search_field_value}'";
                    // match
                    $matched_members = mgm_get_members_with_sql_filter($filter);
                    //issue #1327
                    if (!empty($show_level_members)) {
                        $matched_members = array_intersect($show_level_members, $matched_members);
                    }
                    // common
                    $members = array_intersect($active_members, $matched_members);
                    // check
                    $members_in = count($members) == 0 ? 0 : implode(',', $members);
                    // set filter
                    $sql_filter = " AND `ID` IN ({$members_in})";
                    break;
                case 'last_payment':
                    // check
                    if (empty($search_field_value)) {
                        $search_field_value = date('Y-m-d', $current_date);
                    }
                    // convert
                    $search_field_value = mgm_format_inputdate_to_mysql($search_field_value);
                    // match
                    $matched_members = mgm_get_members_with('last_pay_date', $search_field_value);
                    //issue #1327
                    if (!empty($show_level_members)) {
                        $matched_members = array_intersect($show_level_members, $matched_members);
                    }
                    // common
                    $members = array_intersect($active_members, $matched_members);
                    // check
                    $members_in = count($members) == 0 ? 0 : implode(',', $members);
                    // set filter
                    $sql_filter = " AND `ID` IN ({$members_in})";
                    break;
                case 'expire_date':
                    // check
                    if (empty($search_field_value)) {
                        $search_field_value = date('Y-m-d', $current_date);
                    }
                    // convert
                    $search_field_value = mgm_format_inputdate_to_mysql($search_field_value);
                    // match
                    $matched_members = mgm_get_members_with('expire_date', $search_field_value);
                    //issue #1327
                    if (!empty($show_level_members)) {
                        $matched_members = array_intersect($show_level_members, $matched_members);
                    }
                    // common
                    $members = array_intersect($active_members, $matched_members);
                    // check
                    $members_in = count($members) == 0 ? 0 : implode(',', $members);
                    // set filter
                    $sql_filter = " AND `ID` IN ({$members_in})";
                    break;
                case 'fee':
                    // match
                    $matched_members = mgm_get_members_with('amount', $search_field_value);
                    //issue #1327
                    if (!empty($show_level_members)) {
                        $matched_members = array_intersect($show_level_members, $matched_members);
                    }
                    // common
                    $members = array_intersect($active_members, $matched_members);
                    // check
                    $members_in = count($members) == 0 ? 0 : implode(',', $members);
                    // set filter
                    $sql_filter = " AND `ID` IN ({$members_in})";
                    break;
                    /*				
                    case 'status':
                    	// members
                    	$members    = mgm_get_members_with('status', $search_field_value);
                    	// check
                    	$members_in = (count($members)==0) ? 0 : (implode(',', $members));
                    	// set filter
                    	$sql_filter = " AND `ID` IN ({$members_in})";
                    break;
                    */
                /*				
                case 'status':
                	// members
                	$members    = mgm_get_members_with('status', $search_field_value);
                	// check
                	$members_in = (count($members)==0) ? 0 : (implode(',', $members));
                	// set filter
                	$sql_filter = " AND `ID` IN ({$members_in})";
                break;
                */
                case 'first_name':
                case 'last_name':
                    // members
                    $matched_members = mgm_get_members_with($search_field_name, $search_field_value);
                    //issue #1327
                    if (!empty($show_level_members)) {
                        $matched_members = array_intersect($show_level_members, $matched_members);
                    }
                    // common
                    $members = array_intersect($active_members, $matched_members);
                    // check
                    $members_in = count($members) == 0 ? 0 : implode(',', $members);
                    // set filter
                    $sql_filter = " AND `ID` IN ({$members_in})";
                    break;
            }
        }
    }
    // filters via shortcode args
    $use_field = isset($args['use_field']) ? $args['use_field'] : null;
    $use_filter = isset($args['use_filter']) ? $args['use_filter'] : '';
    $sort_by = isset($args['sort_by']) ? $args['sort_by'] : null;
    $sort_type = isset($args['sort_type']) ? $args['sort_type'] : null;
    // use shortcode field
    if (!empty($use_field)) {
        $use_field = explode(',', $use_field);
    }
    // use shortcode flter
    if (!empty($use_filter)) {
        $use_filter = explode(',', $use_filter);
    }
    // use shortcode sort
    if (!empty($sort_by)) {
        $sort_by = explode(',', $sort_by);
    }
    // use shortcode sort order
    if (!empty($sort_type)) {
        $sort_type = explode(',', $sort_type);
    }
    //setting up the default list fiedls
    if (empty($use_field)) {
        $use_field = array('image', 'first_name', 'last_name', 'email');
    }
    // check length
    $use_field_len = count($use_field);
    //getting user fillter options from short code.
    $arr_filter_search = array();
    if (!empty($use_filter)) {
        $use_filter_len = count($use_filter);
        for ($k = 0; $k < $use_filter_len; $k++) {
            if (array_key_exists($use_filter[$k], $data['search_fields'])) {
                $arr_filter_search[$use_filter[$k]] = $data['search_fields'][$use_filter[$k]];
            } elseif (array_key_exists($use_filter[$k], $custom_search_fields)) {
                $arr_filter_search[$use_filter[$k]] = $custom_search_fields[$use_filter[$k]];
            }
        }
        $data['search_fields'] = $arr_filter_search;
    }
    //getting sort by options from short code.
    $arr_sort_search = array();
    if (!empty($sort_by)) {
        $use_sort_len = count($sort_by);
        for ($k = 0; $k < $use_sort_len; $k++) {
            if (array_key_exists($sort_by[$k], $data['sort_fields'])) {
                $arr_sort_search[$sort_by[$k]] = $data['sort_fields'][$sort_by[$k]];
            } elseif (array_key_exists($sort_by[$k], $custom_sort_fields)) {
                $arr_sort_search[$sort_by[$k]] = $custom_sort_fields[$sort_by[$k]];
            }
        }
        $data['sort_fields'] = $arr_sort_search;
    }
    //getting sort type options from short code.
    $arr_sort_type = array();
    if (!empty($sort_type)) {
        $use_sort_type_len = count($sort_by);
        for ($k = 0; $k < $use_sort_type_len; $k++) {
            if (array_key_exists($sort_type[$k], $data['order_fields'])) {
                $arr_sort_type[$sort_type[$k]] = $data['order_fields'][$sort_type[$k]];
            }
        }
        $data['order_fields'] = $arr_sort_type;
    }
    //issue #1301
    //setting default sort order field as sort fields first value
    if (empty($sort_field_name)) {
        $sort_field_name = array_shift(array_keys($data['sort_fields']));
    }
    //setting default sort order type as sort order fields first value
    if (empty($sort_order_type)) {
        $sort_order_type = array_shift(array_keys($data['order_fields']));
    }
    //setting page limit
    $page_limit = isset($args['page_limit']) ? (int) $args['page_limit'] : 20;
    // page limit
    $data['page_limit'] = isset($_REQUEST['page_limit']) ? (int) $_REQUEST['page_limit'] : $page_limit;
    // page no
    $data['page_no'] = isset($_REQUEST['page_no']) ? (int) $_REQUEST['page_no'] : 1;
    // limit
    $sql_limit = $pager->get_query_limit($data['page_limit']);
    // order
    $sql_order = $data['sort_field'] = $data['sort_type'] = '';
    // sort
    $sort_field_name = mgm_escape($sort_field_name);
    // for sql
    $sort_order_type = mgm_escape($sort_order_type);
    // for sql
    // check
    if (isset($sort_field_name)) {
        // set
        $data['sort_field'] = $sort_field_name;
        $data['sort_type'] = $sort_order_type;
        // init
        $custom_sort = false;
        // check
        if (array_key_exists($sort_field_name, $custom_sort_fields)) {
            $show_level_member = array_intersect($active_members, $show_level_members);
            // members
            $sql_order_by = mgm_userlist_customfield_sort($sort_field_name, $sort_order_type, $sql_filter, $show_level_member);
            // limit
            $lim = str_replace('LIMIT', '', $sql_limit);
            $lim = explode(',', $lim);
            // init
            $temp_array = array();
            // loop
            for ($i = trim($lim[0]); $i < $lim[0] + $lim[1]; $i++) {
                if (!empty($sql_order_by[$i])) {
                    $temp_array[] = $sql_order_by[$i];
                }
            }
            //check for active members
            //$temp_array = array_intersect ($active_members,$temp_array);
            $in_order = count($temp_array) == 0 ? 0 : implode(',', $temp_array);
            // order
            //$in_order = implode(',',$temp_array);
            if (!empty($temp_array)) {
                // set
                $sql_order = " ORDER BY FIELD( ID, {$in_order} ) ";
            } else {
                $sql_order = '';
            }
            // sql
            $sql = "SELECT * FROM `{$wpdb->users}` WHERE ID != 1 AND `ID` IN ({$in_order}) {$sql_order}";
            //  list
            $custom_user_list = $wpdb->get_results($sql);
            // flag
            $custom_sort = true;
        } else {
            // by name
            switch ($sort_field_name) {
                case 'username':
                    $sql_order_by = "user_login";
                    break;
                case 'id':
                    $sql_order_by = "ID";
                    break;
                case 'email':
                    $sql_order_by = "user_email";
                    break;
                case 'membership_type':
                    break;
                case 'reg_date':
                    $sql_order_by = "user_registered";
                    break;
            }
            // set
            if (isset($sql_order_by)) {
                $sql_order = " ORDER BY {$sql_order_by} {$sort_order_type}";
            }
        }
    }
    // default
    if (!isset($sql_order_by)) {
        $sql_order = " ORDER BY ID desc";
    }
    //default active members ids
    if (empty($sql_filter)) {
        //issue #1327
        if (!empty($show_level_members)) {
            // common
            $members = array_intersect($active_members, $show_level_members);
            $members_in = count($members) == 0 ? 0 : implode(',', $members);
        } else {
            $members_in = count($active_members) == 0 ? 0 : implode(',', $active_members);
        }
        // set filter
        $sql_filter = " AND `ID` IN ({$members_in})";
    }
    // get members
    $sql = "SELECT SQL_CALC_FOUND_ROWS * FROM `{$wpdb->users}` WHERE ID != 1 {$sql_filter} {$sql_order} {$sql_limit}";
    // users
    $user_list = $wpdb->get_results($sql);
    // echo $wpdb->last_query;
    // set
    if ($custom_sort) {
        $data['users'] = $custom_user_list;
    } else {
        $data['users'] = $user_list;
    }
    // page url
    $data['page_url'] = add_query_arg(array('query' => $search_field_value, 'by' => $search_field_name, 'sort_field' => $sort_field_name, 'sort_order' => $sort_order_type), $current_url);
    //$url.'query='.$search_field_value.'&by='.$search_field_name.'&sort_field='.$sort_field_name.'&order_type='.$order_type;
    // get page links
    $data['page_links'] = $pager->get_pager_links($data['page_url']);
    // total pages
    $data['page_count'] = $pager->get_page_count();
    // total rows/results
    $data['row_count'] = $pager->get_row_count();
    //sort by filed
    $sort_field_html = sprintf('<select id="sort_field" name="sort_field" class="width100px">%s</select>', mgm_make_combo_options($data['sort_fields'], $data['sort_field'], MGM_KEY_VALUE));
    //order by asc/desc
    $sort_order_html = sprintf('<select id="sort_order" name="sort_order" class="width100px">%s</select>', mgm_make_combo_options($data['order_fields'], $data['sort_type'], MGM_KEY_VALUE));
    //search by
    $search_by_html = sprintf('<select id="by" name="by" class="width100px">%s</select>', mgm_make_combo_options($data['search_fields'], $data['search_field_name'], MGM_KEY_VALUE));
    //search box
    $html = '<div>
				<form method="get" action="' . $current_url . '">
					<h5>' . __('Search Our Members', 'mgm') . ':</h5>
					<input type="text" id="query" name="query" value="' . $data['search_field_value'] . '" /> 
					' . __('in', 'mgm') . ' ' . $search_by_html . ' ' . __('sort by', 'mgm') . ' ' . $sort_field_html . ' ' . $sort_order_html . '					
					<input class="button" type="submit" id="submit" value="' . __('Submit', 'mgm') . '" />
					<input type="hidden" name="search" id="search" value="search" />
				</form>
			</div>';
    $html .= '<div><table><tr>';
    for ($i = 0; $i < $use_field_len; $i++) {
        $html .= sprintf('<th class="th_div mgm_text_align_left mgm_column_%s" id="mgm_column_%s"><label><b>%s</b></label></th>', $use_field[$i], $use_field[$i], ucwords(str_replace('_', ' ', $use_field[$i])));
    }
    $html .= '</tr>';
    $enable_public_profile = mgm_get_class('system')->get_setting('enable_public_profile');
    if (!empty($data['users'])) {
        foreach ($data['users'] as $user) {
            // user object
            $user = get_userdata($user->ID);
            // mgm member object
            $member = mgm_get_member($user->ID);
            $html .= '<tr>';
            for ($i = 0; $i < $use_field_len; $i++) {
                $app_user_filed = 'user_' . $use_field[$i];
                if (isset($member->custom_fields->{$use_field}[$i]) || isset($user->{$use_field}[$i]) || isset($user->{$app_user_filed}) || $use_field[$i] == 'image') {
                    if ($use_field[$i] == 'image') {
                        //is_multisite,network_home_url
                        $html .= sprintf('<td align="left" valign="top" class="mgm_%s_value">', $use_field[$i]);
                        if (bool_from_yn($enable_public_profile)) {
                            //$profile_url = add_query_arg(array('username'=>$user->user_login), site_url('userprofile'));
                            $profile_url = network_site_url() . '/userprofile/?username='******'<a class="tern_wp_member_gravatar" href="%s">%s</a>', $profile_url, get_avatar($user->ID, 60));
                        } else {
                            $html .= sprintf('<a href="javascript://">%s</a>', get_avatar($user->ID, 60));
                        }
                        $html .= '</td>';
                    } else {
                        //getting data from user object
                        if (isset($user->{$use_field}[$i])) {
                            $member->custom_fields->{$use_field}[$i] = $user->{$use_field}[$i];
                        }
                        //getting data from user object
                        if ($use_field[$i] == 'email') {
                            $member->custom_fields->{$use_field}[$i] = $user->{$app_user_filed};
                        }
                        // val unserialize
                        $val = maybe_unserialize($member->custom_fields->{$use_field}[$i]);
                        // array to string
                        if (is_array($val)) {
                            $val = implode(', ', $val);
                        }
                        // set
                        $html .= sprintf('<td align="left" valign="top" class="mgm_%s_value"><b>%s</b></td>', $use_field[$i], $val);
                    }
                }
            }
            $html .= '</tr>';
        }
    } else {
        $html .= '<tr><td colspan="' . $use_field_len . '" align="center">' . __('No members found', 'mgm') . ' ...! </td></tr>';
    }
    $html .= '</table></div><br/>';
    $html .= '<div class="mgm_page_links_div">';
    if ($data['page_links']) {
        $html .= '<div class="pager-wrap">' . $data['page_links'] . '</div><div class="clearfix"></div>';
    }
    $html .= '</div><br/>';
    //issue #1635
    $users_list_html = '<div class="mgm_user_list_container">' . $html . '</div>';
    return $users_list_html;
}
/**
 * Hook to specifically check rebill status 
 *
 * @param int $user_id
 * @param object $member
 * @return boolean
 */
function mgm_module_rebill_status($user_id, $member = NULL)
{
    // object
    if (!isset($member) && !is_object($member)) {
        $member = mgm_get_member($user_id);
    }
    // return
    $return = false;
    //Give exceptions to check rebill status for express checkout,mgm_authorizenet and epoch modules even AWAITING_CANCEL status also.
    $rebill_module_exceptions = array('mgm_paypalexpresscheckout', 'mgm_epoch', 'mgm_authorizenet');
    // do not process if user is awaiting cancel #1259
    if ($member->status == MGM_STATUS_AWAITING_CANCEL) {
        // before reset date, DO NOT CHECK
        if (time() < strtotime($member->status_reset_on)) {
            return false;
        }
        // excluded modules, DO NOT CHECK, better use $module_obj->is_rebill_status_check_supported()
        if (!empty($member->payment_info->module) && !in_array($member->payment_info->module, $rebill_module_exceptions)) {
            return false;
        }
    }
    // do not run on expire date
    if (isset($member->expire_date) && !empty($member->expire_date)) {
        // current tim
        $c_date = mgm_get_current_datetime('Y-m-d', false, 'date');
        $e_date = date('Y-m-d', strtotime($member->expire_date));
        // mgm_log( 'date run: '. $c_date . ' ' . $e_date, $this->module . '_' . __FUNCTION__);
        // skip
        if ($e_date == $c_date) {
            return false;
        }
    }
    // if not disabled or manual
    if (!isset($member->last_payment_check) || isset($member->last_payment_check) && $member->last_payment_check != 'disabled') {
        // check
        if (!empty($member->payment_info->module) && ($module_obj = mgm_is_valid_module($member->payment_info->module, 'payment', 'object'))) {
            // check is supported
            if ($module_obj->is_rebill_status_check_supported()) {
                // query api, triggered by MGM,
                // module::process_rebill_status() will be triggered via module::process_status_notify() web hook triggered by gateway
                if ($module_obj->query_rebill_status($user_id, $member)) {
                    // return
                    $return = true;
                }
            }
        }
    }
    // nothing
    return $return;
}
 function member_list()
 {
     global $wpdb;
     // system
     $system_obj = mgm_get_class('system');
     // getting super admin ids - issue#1219
     $super_adminids = mgm_get_super_adminids();
     // pager
     $pager = new mgm_pager();
     // data
     $data = array();
     // search fields
     $data['search_fields'] = array('' => __('Select', 'mgm'), 'username' => __('Username', 'mgm'), 'id' => __('User ID', 'mgm'), 'email' => __('User Email', 'mgm'), 'first_name' => __('First Name', 'mgm'), 'last_name' => __('Last Name', 'mgm'), 'membership_type' => __('Membership Type', 'mgm'), 'reg_date' => __('Registration Date', 'mgm'), 'last_payment' => __('Last Payment', 'mgm'), 'expire_date' => __('Expiration Date', 'mgm'), 'join_date' => __('Join Date', 'mgm'), 'fee' => __('Fee', 'mgm'), 'status' => __('Status', 'mgm'), 'transaction_id' => __('Transaction ID', 'mgm'), 'payment_module' => __('Payment Module', 'mgm'), 'pack_id' => __('Pack ID', 'mgm'));
     // sort fields
     $data['sort_fields'] = array('id' => __('User ID', 'mgm'), 'username' => __('Username', 'mgm'), 'email' => __('User Email', 'mgm'), 'reg_date' => __('Registration Date', 'mgm'), 'last_pay_date' => __('Last Pay Date', 'mgm'));
     // filter
     $sql_filter = $data['search_field_name'] = $data['search_field_value'] = '';
     $search_field_name = mgm_post_var('search_field_name');
     //issue #1311
     $sformat = mgm_get_date_format('date_format_short');
     // check
     if (!empty($search_field_name)) {
         // post
         $search_field_value = mgm_post_var('search_field_value');
         $search_field_value_two = mgm_post_var('search_field_value_two');
         // view data
         $data['search_field_name'] = $search_field_name;
         // for display
         //issue #1281
         $data['search_field_value'] = htmlentities($search_field_value, ENT_QUOTES, "UTF-8");
         // for display
         $data['search_field_value_two'] = htmlentities($search_field_value_two, ENT_QUOTES, "UTF-8");
         // for display
         // issue#: 219
         $search_field_value = mgm_escape($search_field_value);
         // for sql
         // end date value
         $search_field_value_two = mgm_escape($search_field_value_two);
         // for sql
         //current date
         $curr_date = mgm_get_current_datetime();
         $current_date = $curr_date['timestamp'];
         // by field
         switch ($search_field_name) {
             case 'username':
                 // issue#: 347(LIKE SEARCH)
                 $sql_filter = " AND `user_login` LIKE '%{$search_field_value}%'";
                 break;
             case 'id':
                 $sql_filter = " AND `ID` = '" . (int) $search_field_value . "'";
                 break;
             case 'email':
                 // issue#: 347(LIKE SEARCH)
                 $sql_filter = " AND `user_email` LIKE '%{$search_field_value}%'";
                 break;
             case 'membership_type':
                 // members
                 $members = mgm_get_members_with('membership_type', $search_field_value);
                 //super admins check - issue#1219
                 $members = array_diff($members, $super_adminids);
                 // check
                 $members_in = count($members) == 0 ? 0 : implode(',', $members);
                 // set filter
                 $sql_filter = " AND `ID` IN ({$members_in})";
                 break;
             case 'reg_date':
                 if (empty($search_field_value)) {
                     $search_field_value = date('Y-m-d', $current_date);
                 }
                 if (empty($search_field_value_two)) {
                     $search_field_value_two = date('Y-m-d', $current_date);
                 }
                 // convert
                 $search_field_value = mgm_format_inputdate_to_mysql($search_field_value, $sformat);
                 $search_field_value_two = mgm_format_inputdate_to_mysql($search_field_value_two, $sformat);
                 // set filter
                 // $sql_filter = " AND DATE_FORMAT(user_registered,'%Y-%m-%d') = '{$search_field_value}'";
                 $sql_filter = " AND DATE_FORMAT(user_registered,'%Y-%m-%d') BETWEEN '{$search_field_value}' AND '{$search_field_value_two}'";
                 // AND transaction_dt BETWEEN  '$start_date' AND  '$end_date'";
                 break;
             case 'last_payment':
                 // date1
                 if (empty($search_field_value)) {
                     $search_field_value = date('Y-m-d', $current_date);
                 }
                 // date2
                 if (empty($search_field_value_two)) {
                     $search_field_value_two = date('Y-m-d', $current_date);
                 }
                 // convert
                 $date_one = mgm_format_inputdate_to_mysql($search_field_value, $sformat);
                 $date_two = mgm_format_inputdate_to_mysql($search_field_value_two, $sformat);
                 // members
                 $members = mgm_get_members_between_two_dates('last_pay_date', $date_one, $date_two);
                 //super admins check - issue#1219
                 $members = array_diff($members, $super_adminids);
                 // convert
                 // $search_field_value = mgm_format_inputdate_to_mysql($search_field_value);
                 // members
                 // $members = mgm_get_members_with('last_pay_date', $search_field_value);
                 // check
                 $members_in = count($members) == 0 ? 0 : implode(',', $members);
                 // set filter
                 $sql_filter = " AND `ID` IN ({$members_in})";
                 break;
             case 'expire_date':
                 // date1
                 if (empty($search_field_value)) {
                     $search_field_value = date('Y-m-d', $current_date);
                 }
                 // date2
                 if (empty($search_field_value_two)) {
                     $search_field_value_two = date('Y-m-d', $current_date);
                 }
                 // convert
                 $date_one = mgm_format_inputdate_to_mysql($search_field_value, $sformat);
                 $date_two = mgm_format_inputdate_to_mysql($search_field_value_two, $sformat);
                 // members
                 $members = mgm_get_members_between_two_dates('expire_date', $date_one, $date_two);
                 //super admins check - issue#1219
                 $members = array_diff($members, $super_adminids);
                 // check
                 $members_in = count($members) == 0 ? 0 : implode(',', $members);
                 // set filter
                 $sql_filter = " AND `ID` IN ({$members_in})";
                 break;
             case 'join_date':
                 // date1
                 if (empty($search_field_value)) {
                     $search_field_value = date('Y-m-d', $current_date);
                 }
                 // date2
                 if (empty($search_field_value_two)) {
                     $search_field_value_two = date('Y-m-d', $current_date);
                 }
                 // convert
                 $date_one = mgm_format_inputdate_to_mysql($search_field_value, $sformat);
                 $date_two = mgm_format_inputdate_to_mysql($search_field_value_two, $sformat);
                 // members
                 $members = mgm_get_members_between_two_dates('join_date', $date_one, $date_two);
                 //super admins check - issue#1219
                 $members = array_diff($members, $super_adminids);
                 // check
                 $members_in = count($members) == 0 ? 0 : implode(',', $members);
                 // set filter
                 $sql_filter = " AND `ID` IN ({$members_in})";
                 break;
             case 'fee':
                 // members
                 $members = mgm_get_members_with('amount', $search_field_value);
                 //super admins check - issue#1219
                 $members = array_diff($members, $super_adminids);
                 // check
                 $members_in = count($members) == 0 ? 0 : implode(',', $members);
                 // set filter
                 $sql_filter = " AND `ID` IN ({$members_in})";
                 break;
             case 'status':
                 // members
                 $members = mgm_get_members_with('status', $search_field_value);
                 //super admins check - issue#1219
                 $members = array_diff($members, $super_adminids);
                 // check
                 $members_in = count($members) == 0 ? 0 : implode(',', $members);
                 // set filter
                 $sql_filter = " AND `ID` IN ({$members_in})";
                 break;
             case 'first_name':
             case 'last_name':
                 // members
                 $members = mgm_get_members_with($search_field_name, $search_field_value);
                 //super admins check - issue#1219
                 $members = array_diff($members, $super_adminids);
                 //check
                 $members_in = count($members) == 0 ? 0 : implode(',', $members);
                 // set filter
                 $sql_filter = " AND `ID` IN ({$members_in})";
                 break;
             case 'transaction_id':
                 // members
                 $members = mgm_get_members_with('transaction_id', $search_field_value);
                 //super admins check - issue#1219
                 $members = array_diff($members, $super_adminids);
                 // check
                 $members_in = count($members) == 0 ? 0 : implode(',', $members);
                 // set filter
                 $sql_filter = " AND `ID` IN ({$members_in})";
                 break;
             case 'payment_module':
                 // members
                 $members = mgm_get_members_with('payment_module', $search_field_value);
                 //super admins check - issue#1219
                 $members = array_diff($members, $super_adminids);
                 // check
                 $members_in = count($members) == 0 ? 0 : implode(',', $members);
                 // set filter
                 $sql_filter = " AND `ID` IN ({$members_in})";
                 // show nice name
                 $data['search_field_value'] = mgm_get_module($search_field_value)->name;
                 break;
             case 'pack_id':
                 // members
                 $members = mgm_get_members_with('pack_id', $search_field_value);
                 //super admins check
                 $members = array_diff($members, $super_adminids);
                 // check
                 $members_in = count($members) == 0 ? 0 : implode(',', $members);
                 // set filter
                 $sql_filter = " AND `ID` IN ({$members_in})";
                 break;
         }
     }
     //super admins check - issue#1219
     $super_admin_in = count($super_adminids) == 0 ? 0 : implode(',', $super_adminids);
     // page limit
     $data['page_limit'] = isset($_REQUEST['page_limit']) ? (int) $_REQUEST['page_limit'] : 20;
     // page no
     $data['page_no'] = isset($_REQUEST['page_no']) ? (int) $_REQUEST['page_no'] : 1;
     // limit
     $sql_limit = $pager->get_query_limit($data['page_limit']);
     //init
     $custom_user_list = array();
     $member_custom_sort = false;
     // order
     $sql_order = $data['sort_field'] = $data['sort_type'] = '';
     // sort
     $sort_field_name = mgm_post_var('sort_field_name');
     $sort_type = mgm_post_var('sort_type');
     // check
     if (isset($sort_field_name)) {
         //issue#: 219
         $data['sort_field'] = $sort_field_name;
         $data['sort_type'] = $sort_type;
         // by name
         switch ($sort_field_name) {
             case 'username':
                 $sql_order_by = "user_login";
                 break;
             case 'id':
                 $sql_order_by = "ID";
                 break;
             case 'email':
                 $sql_order_by = "user_email";
                 break;
             case 'membership_type':
                 break;
             case 'reg_date':
                 $sql_order_by = "user_registered";
                 break;
             case 'last_pay_date':
                 $sql_order_by = mgm_member_sort($sort_field_name, $sort_type, $sql_filter, $super_adminids);
                 //mgm_log(mgm_array_dump($sql_order_by,true),__FUNCTION__);
                 // limit
                 $lim = str_replace('LIMIT', '', $sql_limit);
                 $lim = explode(',', $lim);
                 // init
                 $temp_array = array();
                 // loop
                 for ($i = trim($lim[0]); $i < $lim[0] + $lim[1]; $i++) {
                     if (!empty($sql_order_by[$i])) {
                         $temp_array[] = $sql_order_by[$i];
                     }
                 }
                 $in_order = count($temp_array) == 0 ? 0 : implode(',', $temp_array);
                 // order
                 if (!empty($temp_array)) {
                     // set
                     $sql_order = " ORDER BY FIELD( ID, {$in_order} ) ";
                 } else {
                     $sql_order = '';
                 }
                 // sql
                 $sql = "SELECT * FROM `{$wpdb->users}` WHERE ID != 1 AND `ID` IN ({$in_order}) {$sql_order}";
                 //mgm_log($sql,__FUNCTION__);
                 //  list
                 $custom_user_list = $wpdb->get_results($sql);
                 unset($sql_order_by);
                 // flag
                 $member_custom_sort = true;
                 break;
         }
         // set
         if (isset($sql_order_by)) {
             $sql_order = " ORDER BY {$sql_order_by} {$sort_type}";
         }
     }
     // issue #1119
     if (!isset($sql_order_by)) {
         $sql_order = " ORDER BY ID desc";
     }
     // get members
     $sql = "SELECT SQL_CALC_FOUND_ROWS * FROM `{$wpdb->users}` WHERE ID NOT IN ({$super_admin_in}) {$sql_filter} {$sql_order} {$sql_limit}";
     //list
     $user_list = $wpdb->get_results($sql);
     // users
     if ($member_custom_sort) {
         // users
         $data['users'] = $custom_user_list;
     } else {
         // users
         $data['users'] = $user_list;
     }
     // page url
     $data['page_url'] = 'admin-ajax.php?action=mgm_admin_ajax_action&page=mgm/admin/members&method=member_list';
     // get page links
     $data['page_links'] = $pager->get_pager_links($data['page_url']);
     // total pages
     $data['page_count'] = $pager->get_page_count();
     // total rows/results
     $data['row_count'] = $pager->get_row_count();
     // search term
     $search_term = '';
     // search provided
     if (!empty($data['search_field_value'])) {
         if (!empty($data['search_field_value_two'])) {
             $search_term = sprintf('where <b>%s</b> between <b>%s</b> and <b>%s</b> dates', isset($data['search_fields'][$search_field_name]) ? $data['search_fields'][$search_field_name] : '', $data['search_field_value'], $data['search_field_value_two']);
         } else {
             $search_term = sprintf('where <b>%s</b> is <b>%s</b>', isset($data['search_fields'][$search_field_name]) ? $data['search_fields'][$search_field_name] : '', $data['search_field_value']);
         }
     }
     // message
     $data['message'] = sprintf(__('%d %s matched %s', 'mgm'), $data['row_count'], $data['row_count'] > 1 ? 'members' : 'member', $search_term);
     // modules
     $data['payment_modules'] = $system_obj->get_active_modules('payment');
     // load template view
     $this->load->template('members/member/lists', array('data' => $data));
 }
/**
 * generate dashboard widget data
 * 
 * @param void
 * @return array
 * @since 2.7
 */
function mgm_set_dashboard_widget_data()
{
    // obj
    $mtypes_obj = mgm_get_class('membership_types');
    // get membership counts
    $membership_count = mgm_get_membershiptype_users_count();
    // init
    $memberships_c = array();
    // loop through and update $arr_membership with count
    foreach ($mtypes_obj->membership_types as $type_code => $type_name) {
        // store
        $memberships_c[] = array('count' => $membership_count[$type_code], 'name' => mgm_stripslashes_deep($type_name), 'code' => $type_code);
    }
    // Membership count ends
    // Status count starts
    // get status counts
    $statuses = mgm_get_subscription_statuses(true);
    $status_count = mgm_get_subscription_status_users_count($statuses);
    $statuses_c = array();
    // loop
    foreach ($statuses as $status) {
        // store
        $statuses_c[] = array('count' => isset($status_count[$status]) ? $status_count[$status] : 0, 'name' => $status, 'css_class' => mgm_get_status_css_class($status));
    }
    // Current time
    $time = mgm_get_current_datetime('Y-m-d H:i:s');
    // Form data
    return $widget_data = array('membership_count' => $memberships_c, 'status_count' => $statuses_c, 'updated_time' => $time['date']);
}
 function post_purchase_export()
 {
     global $wpdb;
     // data
     $data = array();
     // filter
     $sql_filter = $data['search_field_name'] = $data['search_field_value'] = '';
     $search_field_name = mgm_post_var('search_field_name');
     // check
     if (!empty($search_field_name)) {
         // post
         $search_field_value = mgm_post_var('search_field_value');
         $search_field_value_two = mgm_post_var('search_field_value_two');
         // view data
         $data['search_field_name'] = $search_field_name;
         // for display
         //issue #1281
         $data['search_field_value'] = htmlentities($search_field_value, ENT_QUOTES, "UTF-8");
         // for display
         $data['search_field_value_two'] = htmlentities($search_field_value_two, ENT_QUOTES, "UTF-8");
         // for display
         //searc value
         $search_field_value = esc_sql($search_field_value);
         // for sql
         // end date value
         $search_field_value_two = esc_sql($search_field_value_two);
         // for sql
         //current date
         $curr_date = mgm_get_current_datetime();
         $current_date = $curr_date['timestamp'];
         // by field
         switch ($search_field_name) {
             case 'user_login':
                 $sql_filter = " AND (`user_login` LIKE '%{$search_field_value}%' OR `guest_token` LIKE '%{$search_field_value}%')";
                 break;
             case 'post_title':
                 $sql_filter = " AND (`post_title` LIKE '%{$search_field_value}%')";
                 break;
             case 'is_gift':
                 $sql_filter = " AND (`is_gift` = '{$search_field_value}')";
                 break;
             case 'purchase_dt':
                 // date start
                 if (empty($search_field_value)) {
                     $search_field_value = date('Y-m-d', $current_date);
                 }
                 // date end
                 if (empty($search_field_value_two)) {
                     $search_field_value_two = date('Y-m-d', $current_date);
                 }
                 // convert
                 $search_field_value = mgm_format_inputdate_to_mysql($search_field_value);
                 $search_field_value_two = mgm_format_inputdate_to_mysql($search_field_value_two);
                 // set
                 $sql_filter = " AND (DATE_FORMAT(`pp`.`purchase_dt`,'%Y-%m-%d') BETWEEN '{$search_field_value}' AND '{$search_field_value_two}')";
                 break;
         }
     }
     // order
     $sql_order = " ORDER BY u.user_login, p.post_title";
     // sql
     $sql = "SELECT SQL_CALC_FOUND_ROWS p.ID AS post_id, p.post_title, pp.purchase_dt, \r\r\n\t\t        IF(user_id IS NULL, CONCAT('guest-', guest_token), u.user_login) AS user_login, pp.id,\r\r\n\t\t        pp.is_gift,pp.is_expire FROM `" . TBL_MGM_POST_PURCHASES . "` pp \r\r\n\t\t\t\tLEFT JOIN " . $wpdb->posts . " p ON (p.id = pp.post_id) \r\r\n\t\t\t\tLEFT JOIN " . $wpdb->users . " u ON (u.ID = pp.user_id) WHERE 1 \r\r\n\t\t\t\t{$sql_filter} {$sql_order} ";
     // log
     // mgm_log($sql);
     // store
     $data['post_purchases'] = $wpdb->get_results($sql);
     // date format
     $date_format = mgm_get_date_format('date_format');
     // init
     $purchases = array();
     // check
     if (count($data['post_purchases']) > 0) {
         //purchases
         foreach ($data['post_purchases'] as $purchase) {
             // int
             $row = new stdClass();
             // type
             $type = $purchase->is_gift == 'Y' ? __('Gift', 'mgm') : __('Purchase', 'mgm');
             // check is_expiry
             if ($purchase->is_expire == 'N') {
                 $expiry = __('Indefinite', 'mgm');
             } else {
                 $expiry = mgm_get_post($purchase->post_id)->get_access_duration();
                 $expiry = !$expiry ? __('Indefinite', 'mgm') : date($date_format, 86400 * $expiry + strtotime($purchase->purchase_dt)) . " (" . $expiry . __(' D', 'mgm') . ")";
             }
             // member name
             if (preg_match('/^guest-/', $purchase->user_login)) {
                 // guest token
                 $guest_token = str_replace('guest-', '', $purchase->user_login);
                 // username
                 $username = __('Guest', 'mgm') . sprintf(' (%s)', $guest_token);
             } else {
                 // username
                 $username = $purchase->user_login;
             }
             //export fields
             $row->username = $username;
             $row->post = $purchase->post_title;
             $row->type = $type;
             $row->expire_date = $expiry;
             $row->purchase_or_gift_date = date($date_format, strtotime($purchase->purchase_dt));
             // cache
             $purchases[] = $row;
             // unset
             unset($row);
         }
     }
     // default response
     $response = array('status' => 'error', 'message' => __('Error while exporting post (purchase/gift)s.', 'mgm'));
     // check
     if (count($purchases) > 0) {
         // success
         $success = count($purchases);
         // create
         if (mgm_post_var('export_format') == 'csv') {
             $filename = mgm_create_csv_file($purchases, 'post_purchases');
         } else {
             $filename = mgm_create_xls_file($purchases, 'post_purchases');
         }
         // src
         $file_src = MGM_FILES_EXPORT_URL . $filename;
         // message
         $message = sprintf(__('Successfully exported %d post %s.', 'mgm'), $success, $success > 1 ? 'purchases' : 'purchase');
         // init
         $response = array('status' => 'success', 'message' => $message, 'src' => $file_src);
     }
     // return response
     echo json_encode($response);
     exit;
 }