get_results("SELECT `user_id` AS `ID` FROM `".$wpdb->usermeta."` WHERE `meta_key` = '".$wpdb->prefix."s2member_subscr_gateway' AND `meta_value` = 'paypal' AND `user_id` NOT IN(SELECT `user_id` FROM `".$wpdb->usermeta."` WHERE `meta_key` = '".$wpdb->prefix."s2member_last_status_scan' AND `meta_value` > '".esc_sql($scan_time)."')"))) { foreach($objs as $obj /* Run through all of the Paid Member IDs that originated their Subscription through the PayPal gateway. */) { if(($user_id = $obj->ID) && ($counter = (int)$counter + 1)) // Update counter. Only run through X records; given by $per_process. { $processed = FALSE; // Initialize and/or reset all of these variables. unset($paypal, $subscr_id, $processing, $ipn, $log4, $_log4, $log2, $logs_dir); if(($subscr_id = get_user_option('s2member_subscr_id', $user_id)) && !get_user_option('s2member_auto_eot_time', $user_id)) { if(($paypal = c_ws_plugin__s2member_pro_paypal_utilities::payflow_get_profile($subscr_id))) { $paypal['ipn_signup_vars'] = c_ws_plugin__s2member_utils_users::get_user_ipn_signup_vars(FALSE, $subscr_id); if($paypal['ipn_signup_vars'] && preg_match('/too many failures/i', $paypal['STATUS'])) { $paypal['s2member_log'][] = 'Payflow IPN via polling, processed on: '.date('D M j, Y g:i:s a T'); $paypal['s2member_log'][] = 'Payflow transaction identified as ( `SUBSCRIPTION EXPIRATION` ).'; $paypal['s2member_log'][] = 'IPN reformulated. Piping through s2Member\'s core/standard PayPal processor as `txn_type` ( `subscr_eot` ).'; $paypal['s2member_log'][] = 'Please check PayPal IPN logs for further processing details.'; $processing = $processed = TRUE; $ipn = array(); // Reset. $ipn['txn_type'] = 'subscr_eot'; $ipn['subscr_id'] = $paypal['ipn_signup_vars']['subscr_id']; $ipn['custom'] = $paypal['ipn_signup_vars']['custom']; $ipn['period1'] = $paypal['ipn_signup_vars']['period1']; $ipn['period3'] = $paypal['ipn_signup_vars']['period3']; $ipn['payer_email'] = $paypal['ipn_signup_vars']['payer_email']; $ipn['first_name'] = $paypal['ipn_signup_vars']['first_name']; $ipn['last_name'] = $paypal['ipn_signup_vars']['last_name']; $ipn['option_name1'] = $paypal['ipn_signup_vars']['option_name1']; $ipn['option_selection1'] = $paypal['ipn_signup_vars']['option_selection1']; $ipn['option_name2'] = $paypal['ipn_signup_vars']['option_name2']; $ipn['option_selection2'] = $paypal['ipn_signup_vars']['option_selection2']; $ipn['item_number'] = $paypal['ipn_signup_vars']['item_number']; $ipn['item_name'] = $paypal['ipn_signup_vars']['item_name']; $ipn['s2member_paypal_proxy'] = 'paypal'; $ipn['s2member_paypal_proxy_use'] = 'pro-emails'; $ipn['s2member_paypal_proxy_verification'] = c_ws_plugin__s2member_paypal_utilities::paypal_proxy_key_gen(); c_ws_plugin__s2member_utils_urls::remote(home_url('/?s2member_paypal_notify=1'), $ipn, array('timeout' => 20)); } else if($paypal['ipn_signup_vars'] && preg_match('/(expired|suspended|canceled|terminated|deactivated)/i', $paypal['STATUS'])) { $paypal['s2member_log'][] = 'Payflow IPN via polling, processed on: '.date('D M j, Y g:i:s a T'); $paypal['s2member_log'][] = 'Payflow transaction identified as ( `SUBSCRIPTION '.strtoupper($paypal['STATUS']).'` ).'; $paypal['s2member_log'][] = 'IPN reformulated. Piping through s2Member\'s core/standard PayPal processor as `txn_type` ( `subscr_cancel` ).'; $paypal['s2member_log'][] = 'Please check PayPal IPN logs for further processing details.'; $processing = $processed = TRUE; $ipn = array(); // Reset. $ipn['txn_type'] = 'subscr_cancel'; $ipn['subscr_id'] = $paypal['ipn_signup_vars']['subscr_id']; $ipn['custom'] = $paypal['ipn_signup_vars']['custom']; $ipn['period1'] = $paypal['ipn_signup_vars']['period1']; $ipn['period3'] = $paypal['ipn_signup_vars']['period3']; $ipn['payer_email'] = $paypal['ipn_signup_vars']['payer_email']; $ipn['first_name'] = $paypal['ipn_signup_vars']['first_name']; $ipn['last_name'] = $paypal['ipn_signup_vars']['last_name']; $ipn['option_name1'] = $paypal['ipn_signup_vars']['option_name1']; $ipn['option_selection1'] = $paypal['ipn_signup_vars']['option_selection1']; $ipn['option_name2'] = $paypal['ipn_signup_vars']['option_name2']; $ipn['option_selection2'] = $paypal['ipn_signup_vars']['option_selection2']; $ipn['item_number'] = $paypal['ipn_signup_vars']['item_number']; $ipn['item_name'] = $paypal['ipn_signup_vars']['item_name']; $ipn['s2member_paypal_proxy'] = 'paypal'; $ipn['s2member_paypal_proxy_use'] = 'pro-emails'; $ipn['s2member_paypal_proxy_verification'] = c_ws_plugin__s2member_paypal_utilities::paypal_proxy_key_gen(); c_ws_plugin__s2member_utils_urls::remote(home_url('/?s2member_paypal_notify=1'), $ipn, array('timeout' => 20)); } else if(!$processed && !$paypal['ipn_signup_vars']) $paypal['s2member_log'][] = 'Ignoring status (`'.$paypal['STATUS'].'`).'. ' The user has no IPN Signup Vars recorded on-site by s2Member.'; else if(!$processed) $paypal['s2member_log'][] = 'Ignoring status (`'.$paypal['STATUS'].'`).'. ' It does NOT require any action on the part of s2Member.'; $logt = c_ws_plugin__s2member_utilities::time_details(); $logv = c_ws_plugin__s2member_utilities::ver_details(); $logm = c_ws_plugin__s2member_utilities::mem_details(); $log4 = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."\n".'User-Agent: '.$_SERVER['HTTP_USER_AGENT']; $log4 = (is_multisite() && !is_main_site()) ? ($_log4 = $current_blog->domain.$current_blog->path)."\n".$log4 : $log4; $log2 = (is_multisite() && !is_main_site()) ? 'paypal-payflow-ipn-4-'.trim(preg_replace('/[^a-z0-9]/i', '-', (!empty($_log4) ? $_log4 : '')), '-').'.log' : 'paypal-payflow-ipn.log'; if($GLOBALS['WS_PLUGIN__']['s2member']['o']['gateway_debug_logs']) if(is_dir($logs_dir = $GLOBALS['WS_PLUGIN__']['s2member']['c']['logs_dir'])) if(is_writable($logs_dir) && c_ws_plugin__s2member_utils_logs::archive_oversize_log_files()) file_put_contents($logs_dir.'/'.$log2, 'LOG ENTRY: '.$logt."\n".$logv."\n".$logm."\n".$log4."\n". c_ws_plugin__s2member_utils_logs::conceal_private_info(var_export($paypal, TRUE))."\n\n", FILE_APPEND); } } update_user_option($user_id, 's2member_last_status_scan', time()); if($counter >= $per_process) // Only this many. break; // Break the loop now. } } } } } } }