function emember_update_membership_level($member_id, $target_membership_level) { $emember_auth = Emember_Auth::getInstance(); $emember_config = Emember_Config::getInstance(); global $wpdb; $resultset = dbAccess::find(WP_EMEMBER_MEMBERS_TABLE_NAME, ' member_id=' . esc_sql($member_id)); $target_level_info = dbAccess::find(WP_EMEMBER_MEMBERSHIP_LEVEL_TABLE, ' id=' . esc_sql($target_membership_level)); if ($resultset->membership_level != $target_membership_level) { if ($emember_config->getValue('eMember_enable_secondary_membership')) { $additional_levels = $resultset->more_membership_levels; $active_membership_level = $resultset->membership_level; $additional_levels = array_filter(explode(',', $additional_levels)); $additional_levels[] = $active_membership_level; $additional_levels = array_unique($additional_levels); $additional_levels = implode(',', $additional_levels); $level_info['membership_level'] = trim($target_membership_level); $level_info['more_membership_levels'] = $additional_levels; } else { $level_info['membership_level'] = trim($target_membership_level); } dbAccess::update(WP_EMEMBER_MEMBERS_TABLE_NAME, 'member_id=' . $member_id, $level_info); } emember_update_wp_role_for_member($resultset->user_name, $target_level_info->role); }
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); }