/**
 * check membership rebill status
 * @todo should only run on users who are using a payment module with rebill support
 * add _mgm_module_has_rebill_status_check='Y' in usermeta
 */
function mgm_check_membership_rebill_status()
{
    global $wpdb;
    // flag
    $paged_fetch = false;
    // check user with meta only
    // if( ($a_users = mgm_get_users_with_meta('_mgm_module_has_rebill_status_check','Y')) === FALSE ){
    // 		// old fetch
    // 		// $a_users = mgm_get_users_for_rebill_status_check('fetch');
    // 		$a_users = mgm_get_users_for_cron_check('fetch', 'rebill_status');
    // 		// flag
    // 		$paged_fetch = true;
    // 	}
    // fetch on meta, with rebill check module only
    $a_users = mgm_get_users_with_meta('_mgm_module_has_rebill_status_check', 'Y');
    // current time
    $current_date = mgm_get_current_datetime('Y-m-d H:i:s');
    // with time part #1023 issue
    // log
    // mgm_log($a_users, __FUNCTION__);
    // loop
    if ($a_users) {
        // objects
        $spacks_obj = mgm_get_class('subscription_packs');
        // $mtypes_obj = mgm_get_class('membership_types');
        $duration_exprs = $spacks_obj->get_duration_exprs();
        $checked = $offset = 0;
        // define
        if (!defined('DOING_QUERY_REBILL_STATUS')) {
            define('DOING_QUERY_REBILL_STATUS', 'cron');
        }
        // loop
        foreach ($a_users as $user) {
            // set limit
            @set_time_limit(300);
            //300s
            @ini_set('memory_limit', 134217728);
            // 128M
            // get member
            $member = mgm_get_member($user->ID);
            // get rebill cycle
            if ((int) $member->pack_id > 0) {
                // get member subscribed  pack
                $pack = $spacks_obj->get_pack($member->pack_id);
                // member pack cycle
                $num_cycles = isset($member->active_num_cycles) && !empty($member->active_num_cycles) ? (int) $member->active_num_cycles : (int) $pack['num_cycles'];
                // lifetime ongoing/fixed cycle ongoing
                if ($num_cycles == 0 || $num_cycles > 1 && (int) $member->rebilled < (int) $num_cycles) {
                    // 100 to dynamic
                    // when current date is later than expire date, we will run rebill check after expire date, not before
                    // payment status available after scheduled transaction date
                    if (strtotime($current_date['date']) > strtotime($member->expire_date)) {
                        // check already run
                        if (!isset($member->last_payment_check_date) || isset($member->last_payment_check_date) && $current_date['date'] != $member->last_payment_check_date) {
                            // apply rebill filter
                            if (apply_filters('mgm_module_rebill_status', $user->ID, $member)) {
                                // success
                                $checked++;
                            }
                        }
                        // update type
                        mgm_update_payment_check_state($user->ID, 'cron');
                    }
                }
            }
            // unset
            unset($member);
            // increase $offset
            $offset++;
        }
    }
    // update
    if ($paged_fetch) {
        // mgm_get_users_for_rebill_status_check('update', $offset);
        mgm_get_users_for_cron_check('update', 'rebill_status', $offset);
    }
}
 function users()
 {
     global $wpdb;
     extract($_POST);
     // data
     $data = array();
     // coupon
     $data['coupon'] = $wpdb->get_row($wpdb->prepare("SELECT * FROM `" . TBL_MGM_COUPON . "` WHERE id=%d", $id));
     //user
     $meta_query = array(array('key' => '_mgm_user_register_coupon', 'value' => $id, 'compare' => '=', 'type' => 'UNSIGNED'), array('key' => '_mgm_user_upgrade_coupon', 'value' => $id, 'compare' => '=', 'type' => 'UNSIGNED'), array('key' => '_mgm_user_extend_coupon', 'value' => $id, 'compare' => '=', 'type' => 'UNSIGNED'), array('key' => $id . '_mgm_user_upgrade_coupon', 'value' => $id, 'compare' => '=', 'type' => 'UNSIGNED'), array('key' => $id . '_mgm_user_extend_coupon', 'value' => $id, 'compare' => '=', 'type' => 'UNSIGNED'));
     //users
     $data['users'] = array();
     //check
     foreach ($meta_query as $key) {
         $data['users'] = array_merge($data['users'], mgm_get_users_with_meta(array($key), null, null, null));
         //'OR' );
     }
     // load template view
     $this->load->template('coupons/users', array('data' => $data));
 }
/**
 * get user by rss token
 *
 * @param string token
 * @return mixed wp user or false
 * @since 1.0
 */
function mgm_get_user_by_token($token)
{
    $meta_exists = true;
    // get users by meta :
    $a_users = mgm_get_users_with_meta('_mgm_user_rss_token', $token);
    // fetch all users - paginated way
    if (empty($a_users)) {
        $a_users = mgm_get_all_userids();
        $meta_exists = false;
    }
    // default
    $user_id = false;
    // loop
    foreach ($a_users as $user) {
        // $user will be ID if returned from paginated array, otherwise object
        $uid = is_numeric($user) ? $user : $user->ID;
        // member object
        $member = mgm_get_member($uid);
        // match
        if ($member->rss_token == $token) {
            // set
            $user_id = $uid;
            // update usermeta for next time
            if (!$meta_exists) {
                update_user_option($user_id, '_mgm_user_rss_token', $member->rss_token, true);
            }
            // exit
            break;
        }
        // unset
        unset($member);
    }
    // set user
    if ($user_id) {
        return new WP_User($user_id);
    }
    // error
    return false;
}