示例#1
0
 function column_default($item, $column_name)
 {
     $date_format = get_option('date_format');
     if (empty($date_format)) {
         $date_format = 'Y-m-d';
     }
     if ($column_name == 'expiry_date') {
         $expires = emember_get_expiry_by_member_id($item['member_id']);
         if ($expires == 'noexpire') {
             return "Until Cancelled";
         }
         return date($date_format, strtotime($expires));
     }
     if ($column_name == 'subscription_starts') {
         return date($date_format, strtotime($item[$column_name]));
     }
     if ($column_name == 'notes') {
         if (empty($item[$column_name])) {
             return "";
         }
         return '<a href="javascript:void(0);" class="eMember_tooltip">Notes
             <span>' . stripslashes($item['notes']) . '</span></a>';
     }
     if ($column_name == 'last_accessed') {
         if ('0000-00-00 00:00:00' == $item[$column_name]) {
             return 'Never';
         }
         return date($date_format, strtotime($item[$column_name]));
     }
     return stripslashes($item[$column_name]);
 }
示例#2
0
function export_members_to_csv()
{
    global $wpdb;
    if (isset($_POST['wp_emember_export'])) {
        $filename = "member_list_" . date("Y-m-d_H-i", time());
        header('Content-Encoding: UTF-8');
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Content-Description: File Transfer");
        header('Content-Type: text/csv; charset=utf-8');
        header("Content-disposition: attachment; filename=" . $filename . ".csv");
        $output = apply_filters('emember_export_csv', '');
        if (!empty($output)) {
            header("Content-Length: " . strlen($output));
            echo "";
            echo $output;
            exit;
        }
        ob_start();
        $output_buffer = fopen("php://output", 'w');
        $emember_config = Emember_Config::getInstance();
        $wpememmeta = new WPEmemberMeta();
        $member_meta_tbl = $wpememmeta->get_table('member_meta');
        $customer_field_indices = array();
        $member_table = $wpememmeta->get_table('member');
        $ret_member_db = $wpdb->get_results("SELECT * FROM {$member_table} ORDER BY member_id DESC", OBJECT);
        $header = array("User name", "First Name", "Last Name", "Street", "City", "State", "ZIP", "Country", "Email", "Phone", "Membership Start", "Membership Expiry", "Member Since", "Membership Level", "Account State", "Last Accessed", "Last Accessed From IP", "Gender", "Referrer", "Reg Code", "Txn ID", "Subscr ID", "Company");
        if ($emember_config->getValue('eMember_custom_field')) {
            $custom_fields = get_option('emember_custom_field_type');
            $custom_names = $custom_fields['emember_field_name'];
            $custom_types = $custom_fields['emember_field_type'];
            $custom_extras = $custom_fields['emember_field_extra'];
            if (count($custom_names) > 0) {
                foreach ($custom_names as $i => $name) {
                    $name = stripslashes($name);
                    $customer_field_indices[$i] = emember_escape_custom_field($name);
                    array_push($header, $name);
                }
            }
        }
        fputcsv($output_buffer, $header);
        $membership_levels = Emember_Level_Collection::get_instance();
        $order = array('user_name', 'first_name', 'last_name', 'address_street', 'address_city', 'address_state', 'address_zipcode', 'country', 'email', 'phone', 'subscription_starts', 'expiry_date', 'member_since', 'alias', 'account_state', 'last_accessed', 'last_accessed_from_ip', 'gender', 'referrer', 'reg_code', 'txn_id', 'subscr_id', 'company_name');
        foreach ($ret_member_db as $result) {
            $level = $membership_levels->get_levels($result->membership_level);
            $data = array();
            foreach ($order as $key) {
                switch ($key) {
                    case 'alias':
                        $value = empty($level) || is_array($level) ? '' : escape_csv_value(stripslashes($level->get('alias')));
                        break;
                    case 'expiry_date':
                        $value = emember_get_expiry_by_member_id($result->member_id);
                        $value = escape_csv_value(stripslashes($value));
                        break;
                    default:
                        $value = escape_csv_value(stripslashes($result->{$key}));
                        break;
                }
                array_push($data, $value);
            }
            if ($emember_config->getValue('eMember_custom_field')) {
                $custom_values = $wpdb->get_col("select meta_value from " . $member_meta_tbl . ' WHERE  user_id=' . $result->member_id . ' AND meta_key="custom_field"');
                $custom_values = unserialize(isset($custom_values[0]) ? $custom_values[0] : "");
                foreach ($customer_field_indices as $i => $n) {
                    $v = isset($custom_values[$n]) ? $custom_values[$n] : "";
                    if ($custom_types[$i] == 'dropdown') {
                        $m = explode(",", stripslashes($custom_extras[$i]));
                        $e = array();
                        foreach ($m as $k) {
                            $k = explode("=>", $k);
                            $e[$k[0]] = $k[1];
                        }
                        $v = isset($e[$v]) ? $e[$v] : "";
                    }
                    $value = escape_csv_value(stripslashes($v));
                    array_push($data, $value);
                }
            }
            fputcsv($output_buffer, $data);
        }
        fclose($output_buffer);
        $output = ob_get_clean();
        header("Content-Length: " . strlen($output));
        echo "";
        echo $output;
        exit;
    }
}
示例#3
0
function wp_emember_get_user_details_by_id($key, $member_id)
{
    if (empty($key)) {
        return '<p style="emember_error">You need to specify a user info field to use this function.</p>';
    }
    global $wpdb;
    $membership_lvl_tbl = WP_EMEMBER_MEMBERSHIP_LEVEL_TABLE;
    $profile = dbAccess::find(WP_EMEMBER_MEMBERS_TABLE_NAME, ' member_id=' . $member_id);
    if ($key === "user_membership_level_name") {
        //Membership level name
        //TODO - need to work it out //return $profile->user_membership_level_name;
    }
    if ($key === "user_additional_membership_level_names") {
        if ($profile->more_membership_levels) {
            $names = $wpdb->get_col("SELECT alias FROM {$membership_lvl_tbl} WHERE id IN (" . $profile->more_membership_levels . ")");
            return implode(', ', $names);
        }
        return "";
    }
    if ($key === "profile_picture") {
        //member's profile pic embedded with class eMember_custom_profile_picture
        //TODO - return $this->getProfilePictureEmbeded();
    }
    if ($key === "profile_picture_src") {
        //member's profile picture raw image URL
        return $profile->profile_image;
    }
    if ($key === "member_expiry_date") {
        return emember_get_expiry_by_member_id($member_id);
    }
    if (isset($profile->{$key}) && !empty($profile->{$key})) {
        return $profile->{$key};
    }
    $key = stripslashes($key);
    $key = str_replace(array('\\', '\'', '(', ')', '[', ']', ' ', '"', '%', '<', '>'), "_", $key);
    $customUserInfo = dbAccess::find(WP_EMEMBER_MEMBERS_META_TABLE, 'user_id=' . $member_id . ' AND meta_key=\'custom_field\'');
    $customUserInfo = unserialize($customUserInfo->meta_value);
    if (isset($customUserInfo[$key]) && !empty($customUserInfo[$key])) {
        return $customUserInfo[$key];
    }
}
示例#4
0
function wp_emem_user_list_ajax()
{
    if (!current_user_can('manage_options')) {
        die("Access Forbidden");
    }
    $member_table = WP_EMEMBER_MEMBERS_TABLE_NAME;
    $membership_table = WP_EMEMBER_MEMBERSHIP_LEVEL_TABLE;
    $table_name = " {$member_table} LEFT JOIN {$membership_table} ON " . " ({$member_table}.membership_level = {$membership_table}.id)";
    global $wpdb;
    $condition = "";
    if (!empty($_GET['t'])) {
        $_GET['t'] = strip_tags($_GET['t']);
        $condition = 'user_name LIKE \'%' . $_GET['t'] . '%\' OR email LIKE \'%' . $_GET['t'] . '%\'' . ' OR first_name LIKE \'%' . $_GET['t'] . '%\' OR last_name LIKE \'%' . $_GET['t'] . '%\'' . ' OR address_street LIKE \'%' . $_GET['t'] . '%\' OR address_city LIKE \'%' . $_GET['t'] . '%\'' . ' OR address_state LIKE \'%' . $_GET['t'] . '%\' OR country LIKE \'%' . $_GET['t'] . '%\'';
    }
    if (isset($_GET['ac']) && $_GET['ac'] != -1) {
        if (!empty($condition)) {
            $condition .= ' AND ';
        }
        $condition .= ' account_state=\'' . $_GET['ac'] . '\'';
    }
    if (isset($_GET['mem']) && $_GET['mem'] != -1) {
        if (!empty($condition)) {
            $condition .= ' AND ';
        }
        $condition .= ' membership_level=' . $_GET['mem'];
    }
    $orderby = $_GET['orderby'];
    $order = $_GET['order'];
    if (empty($orderby)) {
        $orderby = "member_id";
        $order = "asc";
    }
    if (empty($condition)) {
        $q = "SELECT member_id, user_name, membership_level,first_name,last_name,email,alias,last_accessed_from_ip,\n            subscription_starts,account_state,notes FROM {$table_name} ORDER BY {$orderby} {$order} LIMIT ";
    } else {
        $q = "SELECT member_id, user_name, membership_level,first_name,last_name,email,alias,last_accessed_from_ip,\n           subscription_starts,account_state,notes FROM {$table_name} WHERE {$condition} ORDER BY {$orderby} {$order} LIMIT ";
    }
    $wp_users = $wpdb->get_results($q . strip_tags($_GET['start']) . ',' . strip_tags($_GET['limit']));
    //echo json_encode($wp_users);
    ?>
<tbody><?php 
    if (count($wp_users) > 0) {
        $count = 0;
        foreach ($wp_users as $wp_user) {
            ?>
                <tr valign="top" <?php 
            echo $count % 2 ? "class='alternate'" : "";
            ?>
>
                    <td><input type="checkbox" name="deleterecord[<?php 
            echo $wp_user->member_id;
            ?>
]" class="emember_blk_op" value="<?php 
            echo $wp_user->member_id;
            ?>
"></td>
                    <td><?php 
            echo $wp_user->member_id;
            ?>
</td>
                    <td><a href="admin.php?page=wp_eMember_manage&members_action=add_edit&editrecord=<?php 
            echo $wp_user->member_id;
            ?>
" class="emember_user_name" ><?php 
            echo $wp_user->user_name;
            ?>
</a></td>
                    <td><?php 
            echo $wp_user->first_name;
            ?>
</td>
                    <td><?php 
            echo $wp_user->last_name;
            ?>
</td>
                    <td><?php 
            echo $wp_user->email;
            ?>
</td>
                    <td><?php 
            echo stripslashes($wp_user->alias);
            ?>
<!--<a href="#" class="emember_membership_level"><?php 
            echo stripslashes($wp_user->alias);
            ?>
</a>--></td>
                    <td><?php 
            $expires = emember_get_expiry_by_member_id($wp_user->member_id);
            if ($expires == 'noexpire') {
                echo "Until Cancelled";
            } else {
                echo date(get_option('date_format'), strtotime($expires));
            }
            ?>
<!--<input type="text" size="12" readonly="readonly" value="<?php 
            echo $wp_user->last_accessed_from_ip;
            ?>
" onfocus="this.select();" onclick="this.select();">--></td>
                    <td><?php 
            echo date(get_option('date_format'), strtotime($wp_user->subscription_starts));
            ?>
</td>
                    <td><?php 
            echo $wp_user->account_state;
            ?>
</td>
                    <td>
                        <?php 
            if (empty($wp_user->notes)) {
                ?>
            <?php 
            } else {
                ?>
                            <a href="javascript:void(0);" class="eMember_tooltip">Notes
                                <span><?php 
                echo stripslashes($wp_user->notes);
                ?>
</span></a>
            <?php 
            }
            ?>
                    </td>
                    <td><a href="admin.php?page=wp_eMember_manage&amp;members_action=edit_ip_lock&amp;editrecord=<?php 
            echo $wp_user->member_id;
            ?>
" class="edit_ip_lock">Unlock</a></td>
                    <td><a href="admin.php?page=wp_eMember_manage&amp;members_action=add_edit&amp;editrecord=<?php 
            echo $wp_user->member_id;
            ?>
" class="edit">Edit</a></td>
                    <td><a href="<?php 
            echo $wp_user->member_id;
            ?>
" class="del">Delete</a></td>
                </tr>
                <?php 
            $count++;
        }
    } else {
        ?>
            <tr valign="top">
                <td colspan="13"><?php 
        echo EMEMBER_DATA_NOT_FOUND;
        ?>
</td>
            </tr>
        <?php 
    }
    ?>
    </tbody>
    <script type="text/javascript">
        $j('#member_list').find('a.del').each(function(e) {
            $j(this).click(function() {
                var u = 'admin.php?page=wp_eMember_manage&members_action=delete&deleterecord=' + $j(this).attr('href');
                top.document.location = u;
                return false;
            });
            $j(this).confirm({msg: "", timeout: 5000});
        });
        //$j('.emember_user_name').tooltip();
    </script>
    <?php 
    exit(0);
}
示例#5
0
    ?>
</th>
                                <td><b><?php 
    echo stripslashes(isset($editingrecord['last_accessed']) ? $editingrecord['last_accessed'] : "");
    ?>
</b></td>
                            </tr>
                            <tr valign="top">
                                <th scope="row"><?php 
    _e('Expiry Date', 'wp_eMember');
    ?>
</th>
                                <td><b><?php 
    $member_id = $_GET['editrecord'];
    //TODO
    $expiry_dt = emember_get_expiry_by_member_id($member_id);
    if ($expiry_dt != "noexpire") {
        echo $expiry_dt;
    } else {
        echo "No expiry or until cancelled";
    }
    ?>
</b></td>
                            </tr>

                            <?php 
}
//End of additional info
?>

                        <?php 
function eMember_handle_subsc_signup($ipn_data, $subsc_ref, $unique_ref, $eMember_id = '')
{
    global $wpdb, $emember_config;
    $emember_config = Emember_Config::getInstance();
    $members_table_name = $wpdb->prefix . "wp_eMember_members_tbl";
    $membership_level_table = $wpdb->prefix . "wp_eMember_membership_tbl";
    $email = $ipn_data['payer_email'];
    if (empty($eMember_id)) {
        //TODO - query db using subscr_id if the txn_type is recurring payment
        debug_log_subsc("eMember ID is empty. Checking the database for existing record of this email address..", true);
        $query_db = $wpdb->get_row("SELECT * FROM {$members_table_name} WHERE email = '{$email}'", OBJECT);
        if ($query_db) {
            $eMember_id = $query_db->member_id;
            debug_log_subsc("Found record in the members table. The account will be upgraded. Member ID: " . $eMember_id, true);
        } else {
            debug_log_subsc("Did not find record in the members table. A new member account will be created for: " . $email, true);
        }
    }
    debug_log_subsc("eMember user payment debug data: Unique ID: " . $unique_ref . "| Email: " . $email . "| Level: " . $subsc_ref, true);
    if (!empty($eMember_id)) {
        // upgrade the member account or assign new membership levels to his/her profile
        debug_log_subsc("Upgrading member account", true);
        $account_state = 'active';
        $membership_level = $subsc_ref;
        $subscription_starts = date("Y-m-d");
        $subscr_id = $unique_ref;
        $resultset = "";
        $resultset = $wpdb->get_row("SELECT * FROM {$members_table_name} where member_id='{$eMember_id}'", OBJECT);
        if (!$resultset) {
            debug_log_subsc("Error! Could not find a member account for the given eMember ID: " . $eMember_id, false);
            return;
        }
        $old_membership_level = $resultset->membership_level;
        if ($emember_config->getValue('eMember_enable_secondary_membership')) {
            debug_log_subsc("Using secondary membership level feature... adding additional levels to the existing profile of member ID:" . $eMember_id, true);
            debug_log_subsc("Quering the table :" . $members_table_name . ", to retrieve member profile of eMember ID: " . $eMember_id, true);
            debug_log_subsc("Retrieved member profile. Need to add membership level ID: " . $membership_level . ", to this profile", true);
            $additional_levels = $resultset->more_membership_levels;
            debug_log_subsc("Current additional levels for this profile: " . $additional_levels, true);
            if (is_null($additional_levels)) {
                $additional_levels = $resultset->membership_level;
                //assign the current primary level to the additional level
                debug_log_subsc("Current additional levels for this profile is null. Adding level: " . $additional_levels, true);
            } else {
                if (empty($additional_levels)) {
                    $additional_levels = $resultset->membership_level;
                    //assign the current primary level to the additional level
                    debug_log_subsc("Current additional levels for this profile is empty. Adding level: " . $additional_levels, true);
                } else {
                    $additional_levels = $additional_levels . "," . $resultset->membership_level;
                    //add the current primary level to the list of additional levels
                    $sec_levels = explode(',', $additional_levels);
                    $additional_levels = implode(',', array_unique($sec_levels));
                    //make sure there is no duplicate entry
                    debug_log_subsc("New additional level set: " . $additional_levels, true);
                }
            }
            $membership_level = apply_filters('emember_secondary_before_updating_primary_level', $membership_level, $subsc_ref, $eMember_id);
            $additional_levels = apply_filters('emember_secondary_before_updating_additional_level', $additional_levels, $subsc_ref, $eMember_id);
            debug_log_subsc("Updating additional levels column for username: "******" with value: " . $additional_levels, true);
            $updatedb = "UPDATE {$members_table_name} SET more_membership_levels='{$additional_levels}' WHERE member_id='{$eMember_id}'";
            $results = $wpdb->query($updatedb);
            debug_log_subsc("Upgrading the primary membership level to the recently paid level. New primary membership level ID for this member is: " . $membership_level, true);
            $updatedb = "UPDATE {$members_table_name} SET account_state='{$account_state}',membership_level='{$membership_level}',subscription_starts='{$subscription_starts}',subscr_id='{$subscr_id}' WHERE member_id='{$eMember_id}'";
            $results = $wpdb->query($updatedb);
            do_action('emember_membership_changed', array('member_id' => $eMember_id, 'from_level' => $old_membership_level, 'to_level' => $membership_level));
        } else {
            debug_log_subsc("Not using secondary membership level feature... upgrading the current membership level of member ID: " . $eMember_id, true);
            if (function_exists('emember_get_expiry_by_member_id')) {
                $current_expiry_date = emember_get_expiry_by_member_id($eMember_id);
                if ($current_expiry_date != "noexpire") {
                    if (strtotime($current_expiry_date) > strtotime($subscription_starts)) {
                        //Expiry time is in the future
                        $subscription_starts = $current_expiry_date;
                        //Start at the end of the previous expiry date to make sure he doesn't loose the remaning days from the current level
                        debug_log_subsc("Updating the subscription start date to the current expiry date value: " . $subscription_starts, true);
                    }
                }
            }
            debug_log_subsc("Executing DB update. Debug data: " . $account_state . "|" . $membership_level . "|" . $subscription_starts, true);
            $updatedb = "UPDATE {$members_table_name} SET account_state='{$account_state}',membership_level='{$membership_level}',subscription_starts='{$subscription_starts}',subscr_id='{$subscr_id}' WHERE member_id='{$eMember_id}'";
            $results = $wpdb->query($updatedb);
            do_action('emember_membership_changed', array('member_id' => $eMember_id, 'from_level' => $old_membership_level, 'to_level' => $membership_level));
        }
        //If using the WP user integration then update the role on WordPress too
        if ($emember_config->getValue('eMember_create_wp_user')) {
            debug_log_subsc("Updating WordPress user role...", true);
            $resultset = $wpdb->get_row("SELECT * FROM {$members_table_name} where member_id='{$eMember_id}'", OBJECT);
            $membership_level = $resultset->membership_level;
            $username = $resultset->user_name;
            $membership_level_resultset = $wpdb->get_row("SELECT * FROM {$membership_level_table} where id='{$membership_level}'", OBJECT);
            $user_info = get_user_by('login', $username);
            $role_name = $membership_level_resultset->role;
            debug_log_subsc("The member username :"******" ,WP User ID is: " . $user_info->ID . " , Target role name: " . $role_name, true);
            if (!empty($role_name)) {
                update_wp_user_Role($user_info->ID, $role_name);
                debug_log_subsc("Current WP users role updated to: " . $membership_level_resultset->role, true);
            } else {
                debug_log_subsc("You have a configuration error. Could not retrieve role name from the membership level. Level ID: " . $membership_level, false);
            }
        }
        // Set "notify email address" to the member's email address
        $resultset = $wpdb->get_row("SELECT * FROM {$members_table_name} where member_id='{$eMember_id}'", OBJECT);
        $email = $resultset->email;
        //$email = $ipn_data['payer_email'];
        debug_log_subsc("Setting the TO EMAIL address for membership upgrade notification to: " . $email, true);
        $subject = $emember_config->getValue('eMember_account_upgrade_email_subject');
        if (empty($subject)) {
            $subject = WP_ESTORE_EMEMBER_ACCOUNT_UPGRADE_SUBJECT;
        }
        $body = $emember_config->getValue('eMember_account_upgrade_email_body');
        if (empty($body)) {
            $body = WP_ESTORE_EMEMBER_ACCOUNT_UPGRADE_BODY;
        }
        $from_address = get_option('senders_email_address');
        //$email_body = $body;
        $login_link = $emember_config->getValue('login_page_url');
        $tags1 = array("{first_name}", "{last_name}", "{user_name}", "{login_link}");
        $vals1 = array($resultset->first_name, $resultset->last_name, $resultset->user_name, $login_link);
        $email_body = str_replace($tags1, $vals1, $body);
        $headers = 'From: ' . $from_address . "\r\n";
    } else {
        // create fresh new member account
        debug_log_subsc("Creating new member account", true);
        $user_name = '';
        $password = '';
        $first_name = $ipn_data['first_name'];
        $last_name = $ipn_data['last_name'];
        $email = $ipn_data['payer_email'];
        $membership_level = $subsc_ref;
        $subscr_id = $unique_ref;
        $address_street = $ipn_data['address_street'];
        $address_city = $ipn_data['address_city'];
        $address_state = $ipn_data['address_state'];
        $address_zipcode = $ipn_data['address_zip'];
        $country = $ipn_data['address_country'];
        $gender = 'not specified';
        $date = date("Y-m-d");
        $account_state = 'active';
        $reg_code = uniqid();
        //rand(10, 1000);
        $md5_code = md5($reg_code);
        $updatedb = "INSERT INTO {$members_table_name} (user_name,first_name,last_name,password,member_since,membership_level,account_state,last_accessed,last_accessed_from_ip,email,address_street,address_city,address_state,address_zipcode,country,gender,referrer,extra_info,reg_code,subscription_starts,txn_id,subscr_id) VALUES ('{$user_name}','{$first_name}','{$last_name}','{$password}', '{$date}','{$membership_level}','{$account_state}','{$date}','IP','{$email}','{$address_street}','{$address_city}','{$address_state}','{$address_zipcode}','{$country}','{$gender}','','','{$reg_code}','{$date}','','{$subscr_id}')";
        $results = $wpdb->query($updatedb);
        $results = $wpdb->get_row("SELECT * FROM {$members_table_name} where subscr_id='{$subscr_id}' and reg_code='{$reg_code}'", OBJECT);
        $id = $results->member_id;
        $separator = '?';
        $url = $emember_config->getValue('eMember_registration_page');
        if (empty($url)) {
            $url = get_option('eMember_registration_page');
        }
        if (strpos($url, '?') !== false) {
            $separator = '&';
        }
        $reg_url = $url . $separator . 'member_id=' . $id . '&code=' . $md5_code;
        debug_log_subsc("Member signup URL :" . $reg_url, true);
        //Save the registration signup URL value
        eStore_save_membership_signup_rego_url($email, $reg_url, $ipn_data);
        $subject = get_option('eMember_email_subject');
        $body = get_option('eMember_email_body');
        $from_address = get_option('senders_email_address');
        $tags = array("{first_name}", "{last_name}", "{reg_link}");
        $vals = array($first_name, $last_name, $reg_url);
        $email_body = str_replace($tags, $vals, $body);
        $headers = 'From: ' . $from_address . "\r\n";
    }
    if (get_option('eStore_use_wp_mail')) {
        wp_mail($email, $subject, $email_body, $headers);
        debug_log_subsc("Member signup/upgrade completion email successfully sent to:" . $email . " From email address value used:" . $from_address, true);
    } else {
        $attachment = '';
        if (@eStore_send_mail($email, $email_body, $subject, $from_address, $attachment)) {
            debug_log_subsc("Member signup/upgrade completion email successfully sent (using PHP mail) to:" . $email . " From email address value used:" . $from_address, true);
        } else {
            debug_log_subsc("Member signup/upgrade completion email sending failed (using PHP mail) ", false);
        }
    }
}
function eMember_handle_subsc_signup_stand_alone($ipn_data, $subsc_ref, $unique_ref, $eMember_id = '')
{
    global $wpdb, $emember_config;
    $emember_config = Emember_Config::getInstance();
    $members_table_name = $wpdb->prefix . "wp_eMember_members_tbl";
    if (empty($eMember_id)) {
        $email = $ipn_data['payer_email'];
        $query_db = $wpdb->get_row("SELECT * FROM {$members_table_name} WHERE email = '{$email}'", OBJECT);
        if (!$query_db) {
            //try to retrieve the member details based on the unique_ref
            eMember_debug_log_subsc("Could not find any record using the given email address (" . $email . "). Attempting to query database using the unique reference: " . $unique_ref, true);
            if (!empty($unique_ref)) {
                $query_db = $wpdb->get_row("SELECT * FROM {$members_table_name} WHERE subscr_id = '{$unique_ref}'", OBJECT);
                $eMember_id = $query_db->member_id;
            } else {
                eMember_debug_log_subsc("Unique reference is missing in the notification so we have to assume that this is not a payment for an existing member.", true);
            }
        } else {
            $eMember_id = $query_db->member_id;
            eMember_debug_log_subsc("Found a match in the member database. Member ID: " . $eMember_id, true);
        }
    }
    if (!empty($eMember_id)) {
        //Update the existing member account
        eMember_debug_log_subsc("Modifying the existing membership profile... Member ID: " . $eMember_id, true);
        // upgrade the member account
        $account_state = 'active';
        $membership_level = $subsc_ref;
        $subscription_starts = date("Y-m-d");
        $subscr_id = $unique_ref;
        $resultset = "";
        $resultset = $wpdb->get_row("SELECT * FROM {$members_table_name} where member_id='{$eMember_id}'", OBJECT);
        if (!$resultset) {
            eMember_debug_log_subsc("ERROR! Could not find a member account record for the given eMember ID: " . $eMember_id, false);
            return;
        }
        $old_membership_level = $resultset->membership_level;
        if ($emember_config->getValue('eMember_enable_secondary_membership')) {
            eMember_debug_log_subsc("Using secondary membership level feature... adding additional levels to the existing profile", true);
            $additional_levels = $resultset->more_membership_levels;
            if (is_null($additional_levels)) {
                $additional_levels = $resultset->membership_level;
                eMember_debug_log_subsc("Current additional levels for this profile is null. Adding level: " . $additional_levels, true);
            } else {
                if (empty($additional_levels)) {
                    $additional_levels = $resultset->membership_level;
                    eMember_debug_log_subsc("Current additional levels for this profile is empty. Adding level: " . $additional_levels, true);
                } else {
                    $additional_levels = $additional_levels . "," . $resultset->membership_level;
                    $sec_levels = explode(',', $additional_levels);
                    $additional_levels = implode(',', array_unique($sec_levels));
                    //make sure there is not duplicate entry
                    eMember_debug_log_subsc("New additional level set: " . $additional_levels, true);
                }
            }
            eMember_debug_log_subsc("Updating additional levels column for username: "******" with value: " . $additional_levels, true);
            $updatedb = "UPDATE {$members_table_name} SET more_membership_levels='{$additional_levels}' WHERE member_id='{$eMember_id}'";
            $results = $wpdb->query($updatedb);
            eMember_debug_log_subsc("Upgrading the primary membership level to the recently paid level. New primary membership level ID for this member is: " . $membership_level, true);
            $updatedb = "UPDATE {$members_table_name} SET account_state='{$account_state}',membership_level='{$membership_level}',subscription_starts='{$subscription_starts}',subscr_id='{$subscr_id}' WHERE member_id='{$eMember_id}'";
            $results = $wpdb->query($updatedb);
            do_action('emember_membership_changed', array('member_id' => $eMember_id, 'from_level' => $old_membership_level, 'to_level' => $membership_level));
        } else {
            eMember_debug_log_subsc("Not using secondary membership level feature... upgrading the current membership level.", true);
            $current_expiry_date = emember_get_expiry_by_member_id($eMember_id);
            if ($current_expiry_date != "noexpire") {
                if (strtotime($current_expiry_date) > strtotime($subscription_starts)) {
                    //Expiry time is in the future
                    $subscription_starts = $current_expiry_date;
                    //Start at the end of the previous expiry date
                    eMember_debug_log_subsc("Updating the subscription start date to the current expiry date value: " . $subscription_starts, true);
                }
            }
            $updatedb = "UPDATE {$members_table_name} SET account_state='{$account_state}',membership_level='{$membership_level}',subscription_starts='{$subscription_starts}',subscr_id='{$subscr_id}' WHERE member_id='{$eMember_id}'";
            $results = $wpdb->query($updatedb);
            do_action('emember_membership_changed', array('member_id' => $eMember_id, 'from_level' => $old_membership_level, 'to_level' => $membership_level));
        }
        //If using the WP user integration then update the role on WordPress too
        $membership_level_table = $wpdb->prefix . "wp_eMember_membership_tbl";
        if ($emember_config->getValue('eMember_create_wp_user')) {
            eMember_debug_log_subsc("Updating WordPress user role...", true);
            $resultset = $wpdb->get_row("SELECT * FROM {$members_table_name} where member_id='{$eMember_id}'", OBJECT);
            $membership_level = $resultset->membership_level;
            $username = $resultset->user_name;
            $membership_level_resultset = $wpdb->get_row("SELECT * FROM {$membership_level_table} where id='{$membership_level}'", OBJECT);
            eMember_debug_log_subsc("Calling WP role update function. Current users membership level is: " . $membership_level, true);
            emember_update_wp_role_for_member($username, $membership_level_resultset->role);
            //do_action( 'set_user_role', $wp_user_id, $membership_level_resultset->role );
            eMember_debug_log_subsc("Current WP users role updated to: " . $membership_level_resultset->role, true);
        }
        //Set Email details	for the account upgrade notification
        $email = $ipn_data['payer_email'];
        $subject = $emember_config->getValue('eMember_account_upgrade_email_subject');
        if (empty($subject)) {
            $subject = "Member Account Upgraded";
        }
        $body = $emember_config->getValue('eMember_account_upgrade_email_body');
        if (empty($body)) {
            $body = "Your account has been upgraded successfully";
        }
        $from_address = get_option('senders_email_address');
        //$email_body = $body;
        $login_link = $emember_config->getValue('login_page_url');
        $tags1 = array("{first_name}", "{last_name}", "{user_name}", "{login_link}");
        $vals1 = array($resultset->first_name, $resultset->last_name, $resultset->user_name, $login_link);
        $email_body = str_replace($tags1, $vals1, $body);
        $headers = 'From: ' . $from_address . "\r\n";
    } else {
        // create new member account
        $user_name = '';
        $password = '';
        $first_name = $ipn_data['first_name'];
        $last_name = $ipn_data['last_name'];
        $email = $ipn_data['payer_email'];
        $membership_level = $subsc_ref;
        $subscr_id = $unique_ref;
        $gender = 'not specified';
        eMember_debug_log_subsc("Membership level ID: " . $membership_level, true);
        $address_street = $ipn_data['address_street'];
        $address_city = $ipn_data['address_city'];
        $address_state = $ipn_data['address_state'];
        $address_zipcode = $ipn_data['address_zip'];
        $country = $ipn_data['address_country'];
        $date = date("Y-m-d");
        $account_state = 'active';
        $reg_code = uniqid();
        //rand(10, 1000);
        $md5_code = md5($reg_code);
        $updatedb = "INSERT INTO {$members_table_name} (user_name,first_name,last_name,password,member_since,membership_level,account_state,last_accessed,last_accessed_from_ip,email,address_street,address_city,address_state,address_zipcode,country,gender,referrer,extra_info,reg_code,subscription_starts,txn_id,subscr_id) VALUES ('{$user_name}','{$first_name}','{$last_name}','{$password}', '{$date}','{$membership_level}','{$account_state}','{$date}','IP','{$email}','{$address_street}','{$address_city}','{$address_state}','{$address_zipcode}','{$country}','{$gender}','','','{$reg_code}','{$date}','','{$subscr_id}')";
        $results = $wpdb->query($updatedb);
        $results = $wpdb->get_row("SELECT * FROM {$members_table_name} where subscr_id='{$subscr_id}' and reg_code='{$reg_code}'", OBJECT);
        $id = $results->member_id;
        //Alternatively use $wpdb->insert_id;
        $separator = '?';
        $url = $emember_config->getValue('eMember_registration_page');
        if (empty($url)) {
            $url = get_option('eMember_registration_page');
        }
        if (strpos($url, '?') !== false) {
            $separator = '&';
        }
        $reg_url = $url . $separator . 'member_id=' . $id . '&code=' . $md5_code;
        eMember_debug_log_subsc("Member signup URL :" . $reg_url, true);
        $subject = get_option('eMember_email_subject');
        $body = get_option('eMember_email_body');
        $from_address = get_option('senders_email_address');
        $tags = array("{first_name}", "{last_name}", "{reg_link}");
        $vals = array($first_name, $last_name, $reg_url);
        $email_body = str_replace($tags, $vals, $body);
        $headers = 'From: ' . $from_address . "\r\n";
    }
    wp_mail($email, $subject, $email_body, $headers);
    eMember_debug_log_subsc("Member signup/upgrade completion email successfully sent", true);
}