s2Member Framework (Member Roles, Capabilities, Membership, PayPal Members) - Version 3.0.8

Version Description

  • Framework updated to support a special %%modification%% Replacement Code in proxy IPN Return URLs; used by the s2Member Pro Module.
Download this release

Release Info

Developer PriMoThemes
Plugin Icon 128x128 s2Member Framework (Member Roles, Capabilities, Membership, PayPal Members)
Version 3.0.8
Comparing to
See all releases

Code changes from version 3.0.6 to 3.0.8

includes/functions/paypal-notify.inc.php CHANGED
@@ -12,7 +12,7 @@ If not, see: <http://www.gnu.org/licenses/>.
12
  Direct access denial.
13
  */
14
  if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
15
- exit("Do not access this file directly.");
16
  /*
17
  Handles PayPal® IPN URL processing.
18
  These same routines also handle s2Member Pro/PayPal® Pro operations;
@@ -54,7 +54,7 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
54
  /*
55
  Custom conditionals can be applied by filters.
56
  */
57
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
58
  if (!apply_filters ("ws_plugin__s2member_during_paypal_notify_conditionals", false, get_defined_vars ()))
59
  {
60
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
@@ -67,7 +67,7 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
67
  if (/**/preg_match ("/^express_checkout$/i", $paypal["txn_type"])/**/
68
  && $paypal["item_number"] && $paypal["payer_email"] && $paypal["txn_id"]/**/)
69
  {
70
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
71
  do_action ("ws_plugin__s2member_during_paypal_notify_before_express_checkout", get_defined_vars ());
72
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
73
  /**/
@@ -78,11 +78,11 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
78
  $paypal["s2member_log"][] = "The txn_type does not require any action on the part of s2Member.";
79
  $paypal["s2member_log"][] = "s2Member Pro handles Express Checkout events on-site, with an IPN proxy.";
80
  /**/
81
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
82
  do_action ("ws_plugin__s2member_during_paypal_notify_during_express_checkout", get_defined_vars ());
83
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
84
  /**/
85
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
86
  do_action ("ws_plugin__s2member_during_paypal_notify_after_express_checkout", get_defined_vars ());
87
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
88
  }
@@ -95,7 +95,7 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
95
  else if (/**/preg_match ("/^cart$/i", $paypal["txn_type"])/**/
96
  && $paypal["item_number1"] && $paypal["payer_email"] && $paypal["txn_id"]/**/)
97
  {
98
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
99
  do_action ("ws_plugin__s2member_during_paypal_notify_before_cart", get_defined_vars ());
100
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
101
  /**/
@@ -106,11 +106,11 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
106
  $paypal["s2member_log"][] = "The txn_type does not require any action on the part of s2Member.";
107
  $paypal["s2member_log"][] = "s2Member Pro handles Cart events on-site, with an IPN proxy.";
108
  /**/
109
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
110
  do_action ("ws_plugin__s2member_during_paypal_notify_during_cart", get_defined_vars ());
111
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
112
  /**/
113
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
114
  do_action ("ws_plugin__s2member_during_paypal_notify_after_cart", get_defined_vars ());
115
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
116
  }
@@ -121,7 +121,7 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
121
  && preg_match ("/^sp\:[0-9,]+\:[0-9]+$/", $paypal["item_number"])/**/
122
  && $paypal["payer_email"] && $paypal["txn_id"]/**/)
123
  {
124
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
125
  do_action ("ws_plugin__s2member_during_paypal_notify_before_sp_access", get_defined_vars ());
126
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
127
  /**/
@@ -173,11 +173,27 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
173
  if (($url = preg_replace ("/%%payer_email%%/i", ws_plugin__s2member_esc_ds (urlencode ($paypal["payer_email"])), $url)))
174
  /**/
175
  if (($url = trim ($url))) /* Empty? */
176
- ws_plugin__s2member_remote($url);
177
  /**/
178
  $paypal["s2member_log"][] = "Specific Post/Page Access Notification URLs have been processed.";
179
  }
180
  /**/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
181
  if ($processing && ($code = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sp_tracking_codes"]))
182
  {
183
  if (($code = preg_replace ("/%%cv([0-9]+)%%/ei", 'trim($cv[$1])', $code)) && ($code = preg_replace ("/%%amount%%/i", ws_plugin__s2member_esc_ds ($paypal["mc_gross"]), $code)) && ($code = preg_replace ("/%%txn_id%%/i", ws_plugin__s2member_esc_ds ($paypal["txn_id"]), $code)))
@@ -193,7 +209,7 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
193
  }
194
  }
195
  /**/
196
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
197
  do_action ("ws_plugin__s2member_during_paypal_notify_during_sp_access", get_defined_vars ());
198
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
199
  }
@@ -202,7 +218,7 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
202
  $paypal["s2member_log"][] = "Unable to generate Access Link for Specific Post/Page Access. Does your Leading Post/Page still exist?";
203
  }
204
  /**/
205
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
206
  do_action ("ws_plugin__s2member_during_paypal_notify_after_sp_access", get_defined_vars ());
207
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
208
  }
@@ -216,7 +232,7 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
216
  && preg_match ("/^[1-4](\:|$)([a-z_0-9,]+)?(\:)?([0-9]+ [A-Z])?$/", $paypal["item_number"])/**/
217
  && $paypal["payer_email"]/**/)
218
  {
219
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
220
  do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_signup", get_defined_vars ());
221
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
222
  /**/
@@ -242,7 +258,7 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
242
  /* This advanced method is required whenever a Subscription that is already completed, or was never setup to recur in the first place needs to be modified. PayPal will not allow the
243
  modify=1|2 parameter to be used in those scenarios, because technically there is nothing to update. The only thing that actually needs to be updated is the account. */
244
  {
245
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
246
  do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_signup_w_update_vars", get_defined_vars ());
247
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
248
  /**/
@@ -253,7 +269,7 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
253
  {
254
  if (!ws_plugin__s2member_user_has_wp_role ($user)) /* Non WP Roles. */
255
  {
256
- $processing = $during = true; /* Yes, we ARE processing this. */
257
  /**/
258
  $user->set_role ("s2member_level" . $paypal["level"]);
259
  update_usermeta ($user_id, "s2member_subscr_id", $paypal["subscr_id"]);
@@ -283,7 +299,7 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
283
  /**/
284
  $paypal["s2member_log"][] = "Modification Confirmation Email sent to Customer, with a URL that provides them with a way to log back in.";
285
  /**/
286
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
287
  do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_signup_w_update_vars", get_defined_vars ());
288
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
289
  }
@@ -297,7 +313,7 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
297
  $paypal["s2member_log"][] = "Unable to modify Subscription. Could not get the existing User ID from the DB. Please check the on0 and os0 variables in your Button Code.";
298
  }
299
  /**/
300
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
301
  do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_signup_w_update_vars", get_defined_vars ());
302
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
303
  }
@@ -306,7 +322,7 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
306
  */
307
  else /* Else this is a normal Subscription signup, we are not updating anything. */
308
  {
309
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
310
  do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_signup_wo_update_vars", get_defined_vars ());
311
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
312
  /**/
@@ -359,7 +375,7 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
359
  if (($url = preg_replace ("/%%payer_email%%/i", ws_plugin__s2member_esc_ds (urlencode ($paypal["payer_email"])), $url)))
360
  /**/
361
  if (($url = trim ($url))) /* Empty? */
362
- ws_plugin__s2member_remote($url);
363
  /**/
364
  $paypal["s2member_log"][] = "Signup Notification URLs have been processed.";
365
  }
@@ -381,7 +397,7 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
381
  }
382
  }
383
  /**/
384
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
385
  do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_signup_wo_update_vars", get_defined_vars ());
386
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
387
  }
@@ -390,11 +406,28 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
390
  $paypal["s2member_log"][] = "Unable to generate Registration URL for Membership Access. Possible data corruption within the IPN response.";
391
  }
392
  /**/
393
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
394
  do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_signup_wo_update_vars", get_defined_vars ());
395
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
396
  }
397
  /**/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
398
  if ($processing && preg_match ("/^web_accept$/i", $paypal["txn_type"]) && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["payment_notification_urls"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
399
  {
400
  foreach (preg_split ("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["payment_notification_urls"]) as $url)
@@ -407,12 +440,12 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
407
  if (($url = preg_replace ("/%%payer_email%%/i", ws_plugin__s2member_esc_ds (urlencode ($paypal["payer_email"])), $url)))
408
  /**/
409
  if (($url = trim ($url))) /* Empty? */
410
- ws_plugin__s2member_remote($url);
411
  /**/
412
  $paypal["s2member_log"][] = "Payment Notification URLs have been processed.";
413
  }
414
  /**/
415
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
416
  do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_signup", get_defined_vars ());
417
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
418
  }
@@ -429,7 +462,7 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
429
  && ($paypal["item_name"] || ($paypal["item_name"] = $paypal["product_name"]))/**/)
430
  /* The "payer_email" is not passed in: recurring_payment_profile_created ?? */
431
  {
432
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
433
  do_action ("ws_plugin__s2member_during_paypal_notify_before_recurring_payment_profile_created", get_defined_vars ());
434
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
435
  /**/
@@ -440,11 +473,11 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
440
  $paypal["s2member_log"][] = "The txn_type does not require any action on the part of s2Member.";
441
  $paypal["s2member_log"][] = "s2Member Pro handles this event on-site, with an IPN proxy.";
442
  /**/
443
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
444
  do_action ("ws_plugin__s2member_during_paypal_notify_during_recurring_payment_profile_created", get_defined_vars ());
445
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
446
  /**/
447
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
448
  do_action ("ws_plugin__s2member_during_paypal_notify_after_recurring_payment_profile_created", get_defined_vars ());
449
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
450
  }
@@ -455,7 +488,7 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
455
  && preg_match ("/^[1-4](\:|$)([a-z_0-9,]+)?(\:)?([0-9]+ [A-Z])?$/", $paypal["item_number"])/**/
456
  && $paypal["subscr_id"] && $paypal["payer_email"]/**/)
457
  {
458
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
459
  do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_modify", get_defined_vars ());
460
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
461
  /**/
@@ -467,7 +500,7 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
467
  {
468
  if (!ws_plugin__s2member_user_has_wp_role ($user)) /* Non WP Roles. */
469
  {
470
- $processing = $during = true; /* Yes, we ARE processing this. */
471
  /**/
472
  $user->set_role ("s2member_level" . $paypal["level"]);
473
  update_usermeta ($user_id, "s2member_subscr_id", $paypal["subscr_id"]);
@@ -493,7 +526,7 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
493
  /**/
494
  $paypal["s2member_log"][] = "Modification Confirmation Email sent to Customer, with a URL that provides them with a way to log back in.";
495
  /**/
496
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
497
  do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_modify", get_defined_vars ());
498
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
499
  }
@@ -507,7 +540,7 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
507
  $paypal["s2member_log"][] = "Unable to modify Subscription. Could not get the existing User ID from the DB.";
508
  }
509
  /**/
510
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
511
  do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_modify", get_defined_vars ());
512
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
513
  }
@@ -522,14 +555,14 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
522
  && ($paypal["item_name"] || ($paypal["item_name"] = $paypal["product_name"]))/**/
523
  && $paypal["payer_email"] && $paypal["txn_id"] && $paypal["mc_gross"]/**/)
524
  {
525
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
526
  do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_payment", get_defined_vars ());
527
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
528
  /**/
529
  $paypal["s2member_log"][] = "s2Member txn_type identified as subscr_payment|recurring_payment.";
530
  $paypal["s2member_log"][] = "Sleeping for 2 seconds. Waiting for a possible subscr_signup|subscr_modify|recurring_payment_profile_created.";
531
- sleep(2); /* Sleep here for a moment. PayPal® sometimes sends a subscr_payment before the subscr_signup, subscr_modify.
532
- It is NOT a big deal if they do. However, s2Member goes to sleep here, just to help keep the log files in a logical order. */
533
  $paypal["s2member_log"][] = "Awake. It's " . date ("D M j, Y g:i:s a T") . ". s2Member txn_type identified as subscr_payment|recurring_payment.";
534
  /**/
535
  list ($paypal["level"], $paypal["ccaps"]) = preg_split ("/\:/", $paypal["item_number"], 2);
@@ -554,12 +587,12 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
554
  if (($url = preg_replace ("/%%payer_email%%/i", ws_plugin__s2member_esc_ds (urlencode ($paypal["payer_email"])), $url)))
555
  /**/
556
  if (($url = trim ($url))) /* Empty? */
557
- ws_plugin__s2member_remote($url);
558
  /**/
559
  $paypal["s2member_log"][] = "Payment Notification URLs have been processed.";
560
  }
561
  /**/
562
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
563
  do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_payment", get_defined_vars ());
564
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
565
  }
@@ -570,7 +603,7 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
570
  set_transient (md5 ("s2member_transient_ipn_subscr_payment_" . $paypal["subscr_id"]), $_POST, 43200);
571
  }
572
  /**/
573
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
574
  do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_payment", get_defined_vars ());
575
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
576
  }
@@ -587,7 +620,7 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
587
  && ($paypal["item_name"] || ($paypal["item_name"] = $paypal["product_name"]))/**/
588
  && $paypal["payer_email"]/**/)
589
  {
590
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
591
  do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_failed", get_defined_vars ());
592
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
593
  /**/
@@ -599,11 +632,11 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
599
  $paypal["s2member_log"][] = "s2Member does NOT respond to individual failed payments, only multiple consecutive failed payments.";
600
  $paypal["s2member_log"][] = "When multiple consecutive payments fail, a special IPN response will be triggered.";
601
  /**/
602
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
603
  do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_failed", get_defined_vars ());
604
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
605
  /**/
606
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
607
  do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_failed", get_defined_vars ());
608
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
609
  }
@@ -622,7 +655,7 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
622
  && ($paypal["period3"] || ($paypal["period3"] = ws_plugin__s2member_paypal_pro_period3 ($paypal)))/**/
623
  && $paypal["payer_email"]/**/)
624
  {
625
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
626
  do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_cancel", get_defined_vars ());
627
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
628
  /**/
@@ -642,7 +675,7 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
642
  /**/
643
  $paypal["s2member_log"][] = "Auto-EOT Time for this account: " . date ("D M j, Y g:i a T", $auto_eot_time);
644
  /**/
645
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
646
  do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_cancel", get_defined_vars ());
647
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
648
  }
@@ -656,7 +689,7 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
656
  $paypal["s2member_log"][] = "Unable to handle Cancellation. Could not get the existing User ID from the DB.";
657
  }
658
  /**/
659
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
660
  do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_cancel", get_defined_vars ());
661
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
662
  }
@@ -672,7 +705,7 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
672
  && ($paypal["item_number"] || ($paypal["item_number"] = ws_plugin__s2member_paypal_pro_item_number ($paypal)))/**/
673
  && preg_match ("/^[1-4](\:|$)([a-z_0-9,]+)?(\:)?([0-9]+ [A-Z])?$/", $paypal["item_number"])/**/)
674
  {
675
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
676
  do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_eot", get_defined_vars ());
677
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
678
  /**/
@@ -719,12 +752,12 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
719
  if (($url = preg_replace ("/%%user_email%%/i", ws_plugin__s2member_esc_ds (urlencode ($user->user_email)), $url)))
720
  /**/
721
  if (($url = trim ($url))) /* Empty? */
722
- ws_plugin__s2member_remote($url);
723
  /**/
724
  $paypal["s2member_log"][] = "EOT/Deletion Notification URLs have been processed.";
725
  }
726
  /**/
727
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
728
  do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_eot_demote", get_defined_vars ());
729
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
730
  }
@@ -732,19 +765,19 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
732
  {
733
  $processing = $during = true; /* Yes, we ARE processing this. */
734
  /**/
735
- wp_delete_user($user_id); /* Triggers: `ws_plugin__s2member_handle_user_deletions()` */
736
  /* `ws_plugin__s2member_handle_user_deletions()` triggers `eot_del_notification_urls` */
737
  /**/
738
  $paypal["s2member_log"][] = "The Member's account has been deleted completely.";
739
  /**/
740
  $paypal["s2member_log"][] = "EOT/Deletion Notification URLs have been processed.";
741
  /**/
742
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
743
  do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_eot_delete", get_defined_vars ());
744
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
745
  }
746
  /**/
747
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
748
  do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_eot", get_defined_vars ());
749
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
750
  }
@@ -758,7 +791,7 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
758
  $paypal["s2member_log"][] = "Auto-EOT is currently disabled. Skipping immediate EOT (demote|delete), for now.";
759
  $paypal["s2member_log"][] = "Recording the Auto-EOT Time for this Member's account: " . date ("D M j, Y g:i a T", $auto_eot_time);
760
  /**/
761
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
762
  do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_eot_disabled", get_defined_vars ());
763
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
764
  }
@@ -797,17 +830,17 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
797
  if (($url = preg_replace ("/%%payer_email%%/i", ws_plugin__s2member_esc_ds (urlencode ($paypal["payer_email"])), $url)))
798
  /**/
799
  if (($url = trim ($url))) /* Empty? */
800
- ws_plugin__s2member_remote($url);
801
  /**/
802
  $paypal["s2member_log"][] = "Refund/Reversal Notification URLs have been processed.";
803
  }
804
  /**/
805
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
806
  do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_eot_refund_reversal", get_defined_vars ());
807
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
808
  }
809
  /**/
810
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
811
  do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_eot", get_defined_vars ());
812
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
813
  }
@@ -864,14 +897,14 @@ if (!function_exists ("ws_plugin__s2member_paypal_notify"))
864
  if (is_writable ($logs_dir = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["logs_dir"]))
865
  file_put_contents ($logs_dir . "/paypal-ipn.log", var_export ($paypal, true) . "\n\n", FILE_APPEND);
866
  /**/
867
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
868
  do_action ("ws_plugin__s2member_during_paypal_notify", get_defined_vars ());
869
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
870
  /**/
871
- exit ();
872
  }
873
  /**/
874
- eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
875
  do_action ("ws_plugin__s2member_after_paypal_notify", get_defined_vars ());
876
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
877
  }
12
  Direct access denial.
13
  */
14
  if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
15
+ exit ("Do not access this file directly.");
16
  /*
17
  Handles PayPal® IPN URL processing.
18
  These same routines also handle s2Member Pro/PayPal® Pro operations;
54
  /*
55
  Custom conditionals can be applied by filters.
56
  */
57
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
58
  if (!apply_filters ("ws_plugin__s2member_during_paypal_notify_conditionals", false, get_defined_vars ()))
59
  {
60
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
67
  if (/**/preg_match ("/^express_checkout$/i", $paypal["txn_type"])/**/
68
  && $paypal["item_number"] && $paypal["payer_email"] && $paypal["txn_id"]/**/)
69
  {
70
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
71
  do_action ("ws_plugin__s2member_during_paypal_notify_before_express_checkout", get_defined_vars ());
72
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
73
  /**/
78
  $paypal["s2member_log"][] = "The txn_type does not require any action on the part of s2Member.";
79
  $paypal["s2member_log"][] = "s2Member Pro handles Express Checkout events on-site, with an IPN proxy.";
80
  /**/
81
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
82
  do_action ("ws_plugin__s2member_during_paypal_notify_during_express_checkout", get_defined_vars ());
83
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
84
  /**/
85
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
86
  do_action ("ws_plugin__s2member_during_paypal_notify_after_express_checkout", get_defined_vars ());
87
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
88
  }
95
  else if (/**/preg_match ("/^cart$/i", $paypal["txn_type"])/**/
96
  && $paypal["item_number1"] && $paypal["payer_email"] && $paypal["txn_id"]/**/)
97
  {
98
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
99
  do_action ("ws_plugin__s2member_during_paypal_notify_before_cart", get_defined_vars ());
100
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
101
  /**/
106
  $paypal["s2member_log"][] = "The txn_type does not require any action on the part of s2Member.";
107
  $paypal["s2member_log"][] = "s2Member Pro handles Cart events on-site, with an IPN proxy.";
108
  /**/
109
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
110
  do_action ("ws_plugin__s2member_during_paypal_notify_during_cart", get_defined_vars ());
111
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
112
  /**/
113
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
114
  do_action ("ws_plugin__s2member_during_paypal_notify_after_cart", get_defined_vars ());
115
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
116
  }
121
  && preg_match ("/^sp\:[0-9,]+\:[0-9]+$/", $paypal["item_number"])/**/
122
  && $paypal["payer_email"] && $paypal["txn_id"]/**/)
123
  {
124
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
125
  do_action ("ws_plugin__s2member_during_paypal_notify_before_sp_access", get_defined_vars ());
126
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
127
  /**/
173
  if (($url = preg_replace ("/%%payer_email%%/i", ws_plugin__s2member_esc_ds (urlencode ($paypal["payer_email"])), $url)))
174
  /**/
175
  if (($url = trim ($url))) /* Empty? */
176
+ ws_plugin__s2member_remote ($url);
177
  /**/
178
  $paypal["s2member_log"][] = "Specific Post/Page Access Notification URLs have been processed.";
179
  }
180
  /**/
181
+ if ($processing && ($url = $paypal["proxy_return_url"])) /* A proxy is requesting a return URL for this transaction? */
182
+ {
183
+ if (($url = preg_replace ("/%%cv([0-9]+)%%/ei", 'urlencode(trim($cv[$1]))', $url)) && ($url = preg_replace ("/%%sp_access_url%%/i", ws_plugin__s2member_esc_ds (rawurlencode ($sp_access_url)), $url)))
184
+ if (($url = preg_replace ("/%%sp_access_exp%%/i", ws_plugin__s2member_esc_ds (urlencode (ws_plugin__s2member_approx_time_difference (time (), strtotime ("+" . $paypal["hours"] . " hours")))), $url)))
185
+ if (($url = preg_replace ("/%%amount%%/i", ws_plugin__s2member_esc_ds (urlencode ($paypal["mc_gross"])), $url)) && ($url = preg_replace ("/%%txn_id%%/i", ws_plugin__s2member_esc_ds (urlencode ($paypal["txn_id"])), $url)))
186
+ if (($url = preg_replace ("/%%item_number%%/i", ws_plugin__s2member_esc_ds (urlencode ($paypal["item_number"])), $url)) && ($url = preg_replace ("/%%item_name%%/i", ws_plugin__s2member_esc_ds (urlencode ($paypal["item_name"])), $url)))
187
+ if (($url = preg_replace ("/%%first_name%%/i", ws_plugin__s2member_esc_ds (urlencode ($paypal["first_name"])), $url)) && ($url = preg_replace ("/%%last_name%%/i", ws_plugin__s2member_esc_ds (urlencode ($paypal["last_name"])), $url)))
188
+ if (($url = preg_replace ("/%%full_name%%/i", ws_plugin__s2member_esc_ds (urlencode (trim ($paypal["first_name"] . " " . $paypal["last_name"]))), $url)))
189
+ if (($url = preg_replace ("/%%payer_email%%/i", ws_plugin__s2member_esc_ds (urlencode ($paypal["payer_email"])), $url)))
190
+ /**/
191
+ if (($url = trim ($url))) /* Empty? */
192
+ $paypal["proxy_return_url"] = $url;
193
+ /**/
194
+ $paypal["s2member_log"][] = "Specific Post/Page Return, a Proxy Return URL is ready.";
195
+ }
196
+ /**/
197
  if ($processing && ($code = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sp_tracking_codes"]))
198
  {
199
  if (($code = preg_replace ("/%%cv([0-9]+)%%/ei", 'trim($cv[$1])', $code)) && ($code = preg_replace ("/%%amount%%/i", ws_plugin__s2member_esc_ds ($paypal["mc_gross"]), $code)) && ($code = preg_replace ("/%%txn_id%%/i", ws_plugin__s2member_esc_ds ($paypal["txn_id"]), $code)))
209
  }
210
  }
211
  /**/
212
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
213
  do_action ("ws_plugin__s2member_during_paypal_notify_during_sp_access", get_defined_vars ());
214
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
215
  }
218
  $paypal["s2member_log"][] = "Unable to generate Access Link for Specific Post/Page Access. Does your Leading Post/Page still exist?";
219
  }
220
  /**/
221
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
222
  do_action ("ws_plugin__s2member_during_paypal_notify_after_sp_access", get_defined_vars ());
223
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
224
  }
232
  && preg_match ("/^[1-4](\:|$)([a-z_0-9,]+)?(\:)?([0-9]+ [A-Z])?$/", $paypal["item_number"])/**/
233
  && $paypal["payer_email"]/**/)
234
  {
235
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
236
  do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_signup", get_defined_vars ());
237
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
238
  /**/
258
  /* This advanced method is required whenever a Subscription that is already completed, or was never setup to recur in the first place needs to be modified. PayPal will not allow the
259
  modify=1|2 parameter to be used in those scenarios, because technically there is nothing to update. The only thing that actually needs to be updated is the account. */
260
  {
261
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
262
  do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_signup_w_update_vars", get_defined_vars ());
263
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
264
  /**/
269
  {
270
  if (!ws_plugin__s2member_user_has_wp_role ($user)) /* Non WP Roles. */
271
  {
272
+ $processing = $modifying = $during = true; /* Yes, we ARE processing this. */
273
  /**/
274
  $user->set_role ("s2member_level" . $paypal["level"]);
275
  update_usermeta ($user_id, "s2member_subscr_id", $paypal["subscr_id"]);
299
  /**/
300
  $paypal["s2member_log"][] = "Modification Confirmation Email sent to Customer, with a URL that provides them with a way to log back in.";
301
  /**/
302
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
303
  do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_signup_w_update_vars", get_defined_vars ());
304
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
305
  }
313
  $paypal["s2member_log"][] = "Unable to modify Subscription. Could not get the existing User ID from the DB. Please check the on0 and os0 variables in your Button Code.";
314
  }
315
  /**/
316
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
317
  do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_signup_w_update_vars", get_defined_vars ());
318
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
319
  }
322
  */
323
  else /* Else this is a normal Subscription signup, we are not updating anything. */
324
  {
325
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
326
  do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_signup_wo_update_vars", get_defined_vars ());
327
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
328
  /**/
375
  if (($url = preg_replace ("/%%payer_email%%/i", ws_plugin__s2member_esc_ds (urlencode ($paypal["payer_email"])), $url)))
376
  /**/
377
  if (($url = trim ($url))) /* Empty? */
378
+ ws_plugin__s2member_remote ($url);
379
  /**/
380
  $paypal["s2member_log"][] = "Signup Notification URLs have been processed.";
381
  }
397
  }
398
  }
399
  /**/
400
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
401
  do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_signup_wo_update_vars", get_defined_vars ());
402
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
403
  }
406
  $paypal["s2member_log"][] = "Unable to generate Registration URL for Membership Access. Possible data corruption within the IPN response.";
407
  }
408
  /**/
409
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
410
  do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_signup_wo_update_vars", get_defined_vars ());
411
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
412
  }
413
  /**/
414
+ if ($processing && ($url = $paypal["proxy_return_url"])) /* A proxy is requesting a return URL for this transaction? */
415
+ {
416
+ if (($url = preg_replace ("/%%cv([0-9]+)%%/ei", 'urlencode(trim($cv[$1]))', $url)) && ($url = preg_replace ("/%%subscr_id%%/i", ws_plugin__s2member_esc_ds (urlencode ($paypal["subscr_id"])), $url)))
417
+ if (($url = preg_replace ("/%%initial%%/i", ws_plugin__s2member_esc_ds (urlencode ($paypal["initial"])), $url)) && ($url = preg_replace ("/%%regular%%/i", ws_plugin__s2member_esc_ds (urlencode ($paypal["regular"])), $url)) && ($url = preg_replace ("/%%recurring%%/i", ws_plugin__s2member_esc_ds (urlencode ($paypal["recurring"])), $url)))
418
+ if (($url = preg_replace ("/%%initial_term%%/i", ws_plugin__s2member_esc_ds (urlencode ($paypal["initial_term"])), $url)) && ($url = preg_replace ("/%%regular_term%%/i", ws_plugin__s2member_esc_ds (urlencode ($paypal["regular_term"])), $url)))
419
+ if (($url = preg_replace ("/%%item_number%%/i", ws_plugin__s2member_esc_ds (urlencode ($paypal["item_number"])), $url)) && ($url = preg_replace ("/%%item_name%%/i", ws_plugin__s2member_esc_ds (urlencode ($paypal["item_name"])), $url)))
420
+ if (($url = preg_replace ("/%%first_name%%/i", ws_plugin__s2member_esc_ds (urlencode ($paypal["first_name"])), $url)) && ($url = preg_replace ("/%%last_name%%/i", ws_plugin__s2member_esc_ds (urlencode ($paypal["last_name"])), $url)))
421
+ if (($url = preg_replace ("/%%full_name%%/i", ws_plugin__s2member_esc_ds (urlencode (trim ($paypal["first_name"] . " " . $paypal["last_name"]))), $url)))
422
+ if (($url = preg_replace ("/%%payer_email%%/i", ws_plugin__s2member_esc_ds (urlencode ($paypal["payer_email"])), $url)))
423
+ if (($url = preg_replace ("/%%modification%%/i", ws_plugin__s2member_esc_ds (urlencode ((int)$modifying)), $url)))
424
+ /* The modification variable indicates whether this was a modification, or a new signup. */
425
+ if (($url = trim ($url))) /* Empty? */
426
+ $paypal["proxy_return_url"] = $url;
427
+ /**/
428
+ $paypal["s2member_log"][] = "Subscr. Return ( modification=" . (int)$modifying . " ), a Proxy Return URL is ready.";
429
+ }
430
+ /**/
431
  if ($processing && preg_match ("/^web_accept$/i", $paypal["txn_type"]) && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["payment_notification_urls"] && is_array ($cv = preg_split ("/\|/", $paypal["custom"])))
432
  {
433
  foreach (preg_split ("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["payment_notification_urls"]) as $url)
440
  if (($url = preg_replace ("/%%payer_email%%/i", ws_plugin__s2member_esc_ds (urlencode ($paypal["payer_email"])), $url)))
441
  /**/
442
  if (($url = trim ($url))) /* Empty? */
443
+ ws_plugin__s2member_remote ($url);
444
  /**/
445
  $paypal["s2member_log"][] = "Payment Notification URLs have been processed.";
446
  }
447
  /**/
448
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
449
  do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_signup", get_defined_vars ());
450
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
451
  }
462
  && ($paypal["item_name"] || ($paypal["item_name"] = $paypal["product_name"]))/**/)
463
  /* The "payer_email" is not passed in: recurring_payment_profile_created ?? */
464
  {
465
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
466
  do_action ("ws_plugin__s2member_during_paypal_notify_before_recurring_payment_profile_created", get_defined_vars ());
467
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
468
  /**/
473
  $paypal["s2member_log"][] = "The txn_type does not require any action on the part of s2Member.";
474
  $paypal["s2member_log"][] = "s2Member Pro handles this event on-site, with an IPN proxy.";
475
  /**/
476
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
477
  do_action ("ws_plugin__s2member_during_paypal_notify_during_recurring_payment_profile_created", get_defined_vars ());
478
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
479
  /**/
480
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
481
  do_action ("ws_plugin__s2member_during_paypal_notify_after_recurring_payment_profile_created", get_defined_vars ());
482
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
483
  }
488
  && preg_match ("/^[1-4](\:|$)([a-z_0-9,]+)?(\:)?([0-9]+ [A-Z])?$/", $paypal["item_number"])/**/
489
  && $paypal["subscr_id"] && $paypal["payer_email"]/**/)
490
  {
491
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
492
  do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_modify", get_defined_vars ());
493
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
494
  /**/
500
  {
501
  if (!ws_plugin__s2member_user_has_wp_role ($user)) /* Non WP Roles. */
502
  {
503
+ $processing = $modifying = $during = true; /* Yes, we ARE processing this. */
504
  /**/
505
  $user->set_role ("s2member_level" . $paypal["level"]);
506
  update_usermeta ($user_id, "s2member_subscr_id", $paypal["subscr_id"]);
526
  /**/
527
  $paypal["s2member_log"][] = "Modification Confirmation Email sent to Customer, with a URL that provides them with a way to log back in.";
528
  /**/
529
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
530
  do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_modify", get_defined_vars ());
531
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
532
  }
540
  $paypal["s2member_log"][] = "Unable to modify Subscription. Could not get the existing User ID from the DB.";
541
  }
542
  /**/
543
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
544
  do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_modify", get_defined_vars ());
545
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
546
  }
555
  && ($paypal["item_name"] || ($paypal["item_name"] = $paypal["product_name"]))/**/
556
  && $paypal["payer_email"] && $paypal["txn_id"] && $paypal["mc_gross"]/**/)
557
  {
558
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
559
  do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_payment", get_defined_vars ());
560
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
561
  /**/
562
  $paypal["s2member_log"][] = "s2Member txn_type identified as subscr_payment|recurring_payment.";
563
  $paypal["s2member_log"][] = "Sleeping for 2 seconds. Waiting for a possible subscr_signup|subscr_modify|recurring_payment_profile_created.";
564
+ sleep (2); /* Sleep here for a moment. PayPal® sometimes sends a subscr_payment before the subscr_signup, subscr_modify.
565
+ It is NOT a big deal if they do. However, s2Member goes to sleep here, just to help keep the log files in a logical order. */
566
  $paypal["s2member_log"][] = "Awake. It's " . date ("D M j, Y g:i:s a T") . ". s2Member txn_type identified as subscr_payment|recurring_payment.";
567
  /**/
568
  list ($paypal["level"], $paypal["ccaps"]) = preg_split ("/\:/", $paypal["item_number"], 2);
587
  if (($url = preg_replace ("/%%payer_email%%/i", ws_plugin__s2member_esc_ds (urlencode ($paypal["payer_email"])), $url)))
588
  /**/
589
  if (($url = trim ($url))) /* Empty? */
590
+ ws_plugin__s2member_remote ($url);
591
  /**/
592
  $paypal["s2member_log"][] = "Payment Notification URLs have been processed.";
593
  }
594
  /**/
595
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
596
  do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_payment", get_defined_vars ());
597
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
598
  }
603
  set_transient (md5 ("s2member_transient_ipn_subscr_payment_" . $paypal["subscr_id"]), $_POST, 43200);
604
  }
605
  /**/
606
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
607
  do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_payment", get_defined_vars ());
608
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
609
  }
620
  && ($paypal["item_name"] || ($paypal["item_name"] = $paypal["product_name"]))/**/
621
  && $paypal["payer_email"]/**/)
622
  {
623
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
624
  do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_failed", get_defined_vars ());
625
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
626
  /**/
632
  $paypal["s2member_log"][] = "s2Member does NOT respond to individual failed payments, only multiple consecutive failed payments.";
633
  $paypal["s2member_log"][] = "When multiple consecutive payments fail, a special IPN response will be triggered.";
634
  /**/
635
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
636
  do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_failed", get_defined_vars ());
637
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
638
  /**/
639
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
640
  do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_failed", get_defined_vars ());
641
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
642
  }
655
  && ($paypal["period3"] || ($paypal["period3"] = ws_plugin__s2member_paypal_pro_period3 ($paypal)))/**/
656
  && $paypal["payer_email"]/**/)
657
  {
658
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
659
  do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_cancel", get_defined_vars ());
660
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
661
  /**/
675
  /**/
676
  $paypal["s2member_log"][] = "Auto-EOT Time for this account: " . date ("D M j, Y g:i a T", $auto_eot_time);
677
  /**/
678
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
679
  do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_cancel", get_defined_vars ());
680
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
681
  }
689
  $paypal["s2member_log"][] = "Unable to handle Cancellation. Could not get the existing User ID from the DB.";
690
  }
691
  /**/
692
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
693
  do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_cancel", get_defined_vars ());
694
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
695
  }
705
  && ($paypal["item_number"] || ($paypal["item_number"] = ws_plugin__s2member_paypal_pro_item_number ($paypal)))/**/
706
  && preg_match ("/^[1-4](\:|$)([a-z_0-9,]+)?(\:)?([0-9]+ [A-Z])?$/", $paypal["item_number"])/**/)
707
  {
708
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
709
  do_action ("ws_plugin__s2member_during_paypal_notify_before_subscr_eot", get_defined_vars ());
710
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
711
  /**/
752
  if (($url = preg_replace ("/%%user_email%%/i", ws_plugin__s2member_esc_ds (urlencode ($user->user_email)), $url)))
753
  /**/
754
  if (($url = trim ($url))) /* Empty? */
755
+ ws_plugin__s2member_remote ($url);
756
  /**/
757
  $paypal["s2member_log"][] = "EOT/Deletion Notification URLs have been processed.";
758
  }
759
  /**/
760
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
761
  do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_eot_demote", get_defined_vars ());
762
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
763
  }
765
  {
766
  $processing = $during = true; /* Yes, we ARE processing this. */
767
  /**/
768
+ wp_delete_user ($user_id); /* Triggers: `ws_plugin__s2member_handle_user_deletions()` */
769
  /* `ws_plugin__s2member_handle_user_deletions()` triggers `eot_del_notification_urls` */
770
  /**/
771
  $paypal["s2member_log"][] = "The Member's account has been deleted completely.";
772
  /**/
773
  $paypal["s2member_log"][] = "EOT/Deletion Notification URLs have been processed.";
774
  /**/
775
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
776
  do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_eot_delete", get_defined_vars ());
777
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
778
  }
779
  /**/
780
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
781
  do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_eot", get_defined_vars ());
782
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
783
  }
791
  $paypal["s2member_log"][] = "Auto-EOT is currently disabled. Skipping immediate EOT (demote|delete), for now.";
792
  $paypal["s2member_log"][] = "Recording the Auto-EOT Time for this Member's account: " . date ("D M j, Y g:i a T", $auto_eot_time);
793
  /**/
794
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
795
  do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_eot_disabled", get_defined_vars ());
796
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
797
  }
830
  if (($url = preg_replace ("/%%payer_email%%/i", ws_plugin__s2member_esc_ds (urlencode ($paypal["payer_email"])), $url)))
831
  /**/
832
  if (($url = trim ($url))) /* Empty? */
833
+ ws_plugin__s2member_remote ($url);
834
  /**/
835
  $paypal["s2member_log"][] = "Refund/Reversal Notification URLs have been processed.";
836
  }
837
  /**/
838
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
839
  do_action ("ws_plugin__s2member_during_paypal_notify_during_subscr_eot_refund_reversal", get_defined_vars ());
840
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
841
  }
842
  /**/
843
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
844
  do_action ("ws_plugin__s2member_during_paypal_notify_after_subscr_eot", get_defined_vars ());
845
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
846
  }
897
  if (is_writable ($logs_dir = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["logs_dir"]))
898
  file_put_contents ($logs_dir . "/paypal-ipn.log", var_export ($paypal, true) . "\n\n", FILE_APPEND);
899
  /**/
900
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
901
  do_action ("ws_plugin__s2member_during_paypal_notify", get_defined_vars ());
902
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
903
  /**/
904
+ exit ($paypal["proxy_return_url"]); /* Return, if/when applicable. */
905
  }
906
  /**/
907
+ eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
908
  do_action ("ws_plugin__s2member_after_paypal_notify", get_defined_vars ());
909
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
910
  }
includes/functions/register-access.inc.php CHANGED
@@ -12,7 +12,7 @@ If not, see: <http://www.gnu.org/licenses/>.
12
  Direct access denial.
13
  */
14
  if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
15
- exit ("Do not access this file directly.");
16
  /*
17
  Forces a default Role for new registrations not tied to an incoming payment.
18
  Attach to: add_filter("pre_option_default_role");
@@ -95,13 +95,13 @@ if (!function_exists ("ws_plugin__s2member_custom_registration_fields"))
95
  /**/
96
  $tabindex = 20; /* Incremented tabindex starting with 20. */
97
  /**/
98
- eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
99
  do_action ("ws_plugin__s2member_during_custom_registration_fields_before", get_defined_vars ());
100
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
101
  /**/
102
  if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_password"] && function_exists ("ws_plugin__s2member_generate_password"))
103
  {
104
- eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
105
  do_action ("ws_plugin__s2member_during_custom_registration_fields_before_user_pass", get_defined_vars ());
106
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
107
  /**/
@@ -112,12 +112,12 @@ if (!function_exists ("ws_plugin__s2member_custom_registration_fields"))
112
  echo '</label>' . "\n";
113
  echo '</p>';
114
  /**/
115
- eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
116
  do_action ("ws_plugin__s2member_during_custom_registration_fields_after_user_pass", get_defined_vars ());
117
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
118
  }
119
  /**/
120
- eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
121
  do_action ("ws_plugin__s2member_during_custom_registration_fields_before_first_name", get_defined_vars ());
122
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
123
  /**/
@@ -128,11 +128,11 @@ if (!function_exists ("ws_plugin__s2member_custom_registration_fields"))
128
  echo '</label>' . "\n";
129
  echo '</p>';
130
  /**/
131
- eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
132
  do_action ("ws_plugin__s2member_during_custom_registration_fields_after_first_name", get_defined_vars ());
133
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
134
  /**/
135
- eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
136
  do_action ("ws_plugin__s2member_during_custom_registration_fields_before_last_name", get_defined_vars ());
137
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
138
  /**/
@@ -143,7 +143,7 @@ if (!function_exists ("ws_plugin__s2member_custom_registration_fields"))
143
  echo '</label>' . "\n";
144
  echo '</p>';
145
  /**/
146
- eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
147
  do_action ("ws_plugin__s2member_during_custom_registration_fields_after_last_name", get_defined_vars ());
148
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
149
  /**/
@@ -154,7 +154,7 @@ if (!function_exists ("ws_plugin__s2member_custom_registration_fields"))
154
  /**/
155
  if ($field = trim ($field, "* \t\n\r\0\x0B")) /* Don't process empty fields. */
156
  {
157
- eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
158
  do_action ("ws_plugin__s2member_during_custom_registration_fields_before_custom_fields", get_defined_vars ());
159
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
160
  /**/
@@ -168,7 +168,7 @@ if (!function_exists ("ws_plugin__s2member_custom_registration_fields"))
168
  echo '</label>' . "\n";
169
  echo '</p>';
170
  /**/
171
- eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
172
  do_action ("ws_plugin__s2member_during_custom_registration_fields_after_custom_fields", get_defined_vars ());
173
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
174
  }
@@ -176,7 +176,7 @@ if (!function_exists ("ws_plugin__s2member_custom_registration_fields"))
176
  /**/
177
  if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_opt_in"] && ws_plugin__s2member_list_servers_integrated ())
178
  {
179
- eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
180
  do_action ("ws_plugin__s2member_during_custom_registration_fields_before_opt_in", get_defined_vars ());
181
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
182
  /**/
@@ -187,16 +187,16 @@ if (!function_exists ("ws_plugin__s2member_custom_registration_fields"))
187
  echo '</label>' . "\n";
188
  echo '</p>';
189
  /**/
190
- eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
191
  do_action ("ws_plugin__s2member_during_custom_registration_fields_after_opt_in", get_defined_vars ());
192
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
193
  }
194
  /**/
195
- eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
196
  do_action ("ws_plugin__s2member_during_custom_registration_fields_after", get_defined_vars ());
197
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
198
  /**/
199
- eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
200
  do_action ("ws_plugin__s2member_after_custom_registration_fields", get_defined_vars ());
201
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
202
  /**/
@@ -243,7 +243,7 @@ if (!function_exists ("ws_plugin__s2member_register_link_gen"))
243
  {
244
  function ws_plugin__s2member_register_link_gen ($subscr_id = FALSE, $custom = FALSE, $item_number = FALSE, $shrink = TRUE)
245
  {
246
- eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
247
  do_action ("ws_plugin__s2member_before_register_link_gen", get_defined_vars ());
248
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
249
  /**/
@@ -311,7 +311,7 @@ if (!function_exists ("ws_plugin__s2member_configure_user_registration"))
311
  global $wpdb; /* Global database object may be required for this routine. */
312
  static $processed; /* Prevents duplicate processing. */
313
  /**/
314
- eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
315
  do_action ("ws_plugin__s2member_before_configure_user_registration", get_defined_vars ());
316
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
317
  /**/
@@ -364,12 +364,12 @@ if (!function_exists ("ws_plugin__s2member_configure_user_registration"))
364
  {
365
  $proxy = array ("s2member_paypal_notify" => "1", "s2member_paypal_proxy" => "s2member_transient_ipn_subscr_payment");
366
  ws_plugin__s2member_remote (add_query_arg ($proxy, get_bloginfo ("url")), stripslashes_deep ($subscr_payment));
367
- delete_transient ($transient);
368
  }
369
  /**/
370
  setcookie ("s2member_signup_tracking", ws_plugin__s2member_encrypt ($subscr_id), time () + 31556926, "/");
371
  /**/
372
- eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
373
  do_action ("ws_plugin__s2member_during_configure_user_registration_front_side", get_defined_vars ());
374
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
375
  }
@@ -399,7 +399,7 @@ if (!function_exists ("ws_plugin__s2member_configure_user_registration"))
399
  /**/
400
  $opt_in = (!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_opt_in"] || $_POST["ws_plugin__s2member_custom_reg_field_opt_in"]) ? true : false;
401
  /**/
402
- eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
403
  do_action ("ws_plugin__s2member_during_configure_user_registration_front_side", get_defined_vars ());
404
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
405
  }
@@ -429,7 +429,7 @@ if (!function_exists ("ws_plugin__s2member_configure_user_registration"))
429
  /**/
430
  $opt_in = (!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_opt_in"] || $_POST["ws_plugin__s2member_custom_reg_field_opt_in"]) ? true : false;
431
  /**/
432
- eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
433
  do_action ("ws_plugin__s2member_during_configure_user_registration_admin_side", get_defined_vars ());
434
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
435
  }
@@ -470,19 +470,31 @@ if (!function_exists ("ws_plugin__s2member_configure_user_registration"))
470
  if (($url = preg_replace ("/%%user_login%%/i", ws_plugin__s2member_esc_ds (urlencode ($login)), $url)))
471
  if (($url = preg_replace ("/%%user_pass%%/i", ws_plugin__s2member_esc_ds (urlencode ($pass)), $url)))
472
  if (($url = trim ($url))) /* Empty? */
473
- ws_plugin__s2member_remote ($url);
 
 
 
 
 
 
 
 
 
 
 
 
474
  /**/
475
  setcookie ("s2member_subscr_id", "", time () + 31556926, "/");
476
  setcookie ("s2member_custom", "", time () + 31556926, "/");
477
  setcookie ("s2member_level", "", time () + 31556926, "/");
478
  /**/
479
- eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
480
  do_action ("ws_plugin__s2member_during_configure_user_registration", get_defined_vars ());
481
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
482
  }
483
  }
484
  /**/
485
- eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
486
  do_action ("ws_plugin__s2member_after_configure_user_registration", get_defined_vars ());
487
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
488
  /**/
@@ -506,7 +518,7 @@ if (!function_exists ("wp_generate_password"))
506
  {
507
  $password = ws_plugin__s2member_random_str_gen ($length, $special_chars);
508
  /**/
509
- eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
510
  do_action ("ws_plugin__s2member_before_generate_password", get_defined_vars ());
511
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
512
  /**/
@@ -542,7 +554,7 @@ if (!function_exists ("ws_plugin__s2member_demo_hide_password_fields"))
542
  {
543
  function ws_plugin__s2member_demo_hide_password_fields ($show = TRUE, $profileuser = FALSE)
544
  {
545
- eval ('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
546
  do_action ("ws_plugin__s2member_before_demo_hide_password_fields", get_defined_vars ());
547
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
548
  /**/
12
  Direct access denial.
13
  */
14
  if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
15
+ exit("Do not access this file directly.");
16
  /*
17
  Forces a default Role for new registrations not tied to an incoming payment.
18
  Attach to: add_filter("pre_option_default_role");
95
  /**/
96
  $tabindex = 20; /* Incremented tabindex starting with 20. */
97
  /**/
98
+ eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
99
  do_action ("ws_plugin__s2member_during_custom_registration_fields_before", get_defined_vars ());
100
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
101
  /**/
102
  if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_password"] && function_exists ("ws_plugin__s2member_generate_password"))
103
  {
104
+ eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
105
  do_action ("ws_plugin__s2member_during_custom_registration_fields_before_user_pass", get_defined_vars ());
106
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
107
  /**/
112
  echo '</label>' . "\n";
113
  echo '</p>';
114
  /**/
115
+ eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
116
  do_action ("ws_plugin__s2member_during_custom_registration_fields_after_user_pass", get_defined_vars ());
117
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
118
  }
119
  /**/
120
+ eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
121
  do_action ("ws_plugin__s2member_during_custom_registration_fields_before_first_name", get_defined_vars ());
122
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
123
  /**/
128
  echo '</label>' . "\n";
129
  echo '</p>';
130
  /**/
131
+ eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
132
  do_action ("ws_plugin__s2member_during_custom_registration_fields_after_first_name", get_defined_vars ());
133
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
134
  /**/
135
+ eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
136
  do_action ("ws_plugin__s2member_during_custom_registration_fields_before_last_name", get_defined_vars ());
137
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
138
  /**/
143
  echo '</label>' . "\n";
144
  echo '</p>';
145
  /**/
146
+ eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
147
  do_action ("ws_plugin__s2member_during_custom_registration_fields_after_last_name", get_defined_vars ());
148
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
149
  /**/
154
  /**/
155
  if ($field = trim ($field, "* \t\n\r\0\x0B")) /* Don't process empty fields. */
156
  {
157
+ eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
158
  do_action ("ws_plugin__s2member_during_custom_registration_fields_before_custom_fields", get_defined_vars ());
159
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
160
  /**/
168
  echo '</label>' . "\n";
169
  echo '</p>';
170
  /**/
171
+ eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
172
  do_action ("ws_plugin__s2member_during_custom_registration_fields_after_custom_fields", get_defined_vars ());
173
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
174
  }
176
  /**/
177
  if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_opt_in"] && ws_plugin__s2member_list_servers_integrated ())
178
  {
179
+ eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
180
  do_action ("ws_plugin__s2member_during_custom_registration_fields_before_opt_in", get_defined_vars ());
181
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
182
  /**/
187
  echo '</label>' . "\n";
188
  echo '</p>';
189
  /**/
190
+ eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
191
  do_action ("ws_plugin__s2member_during_custom_registration_fields_after_opt_in", get_defined_vars ());
192
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
193
  }
194
  /**/
195
+ eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
196
  do_action ("ws_plugin__s2member_during_custom_registration_fields_after", get_defined_vars ());
197
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
198
  /**/
199
+ eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
200
  do_action ("ws_plugin__s2member_after_custom_registration_fields", get_defined_vars ());
201
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
202
  /**/
243
  {
244
  function ws_plugin__s2member_register_link_gen ($subscr_id = FALSE, $custom = FALSE, $item_number = FALSE, $shrink = TRUE)
245
  {
246
+ eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
247
  do_action ("ws_plugin__s2member_before_register_link_gen", get_defined_vars ());
248
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
249
  /**/
311
  global $wpdb; /* Global database object may be required for this routine. */
312
  static $processed; /* Prevents duplicate processing. */
313
  /**/
314
+ eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
315
  do_action ("ws_plugin__s2member_before_configure_user_registration", get_defined_vars ());
316
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
317
  /**/
364
  {
365
  $proxy = array ("s2member_paypal_notify" => "1", "s2member_paypal_proxy" => "s2member_transient_ipn_subscr_payment");
366
  ws_plugin__s2member_remote (add_query_arg ($proxy, get_bloginfo ("url")), stripslashes_deep ($subscr_payment));
367
+ delete_transient($transient);
368
  }
369
  /**/
370
  setcookie ("s2member_signup_tracking", ws_plugin__s2member_encrypt ($subscr_id), time () + 31556926, "/");
371
  /**/
372
+ eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
373
  do_action ("ws_plugin__s2member_during_configure_user_registration_front_side", get_defined_vars ());
374
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
375
  }
399
  /**/
400
  $opt_in = (!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_opt_in"] || $_POST["ws_plugin__s2member_custom_reg_field_opt_in"]) ? true : false;
401
  /**/
402
+ eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
403
  do_action ("ws_plugin__s2member_during_configure_user_registration_front_side", get_defined_vars ());
404
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
405
  }
429
  /**/
430
  $opt_in = (!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["custom_reg_opt_in"] || $_POST["ws_plugin__s2member_custom_reg_field_opt_in"]) ? true : false;
431
  /**/
432
+ eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
433
  do_action ("ws_plugin__s2member_during_configure_user_registration_admin_side", get_defined_vars ());
434
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
435
  }
470
  if (($url = preg_replace ("/%%user_login%%/i", ws_plugin__s2member_esc_ds (urlencode ($login)), $url)))
471
  if (($url = preg_replace ("/%%user_pass%%/i", ws_plugin__s2member_esc_ds (urlencode ($pass)), $url)))
472
  if (($url = trim ($url))) /* Empty? */
473
+ ws_plugin__s2member_remote($url);
474
+ /**/
475
+ if ($url = $GLOBALS["ws_plugin__s2member_registration_return_url"])
476
+ if (($url = preg_replace ("/%%cv([0-9]+)%%/ei", 'urlencode(trim($cv[$1]))', $url)))
477
+ if (($url = preg_replace ("/%%level%%/i", ws_plugin__s2member_esc_ds (urlencode ($level)), $url)))
478
+ if (($url = preg_replace ("/%%user_first_name%%/i", ws_plugin__s2member_esc_ds (urlencode ($fname)), $url)))
479
+ if (($url = preg_replace ("/%%user_last_name%%/i", ws_plugin__s2member_esc_ds (urlencode ($lname)), $url)))
480
+ if (($url = preg_replace ("/%%user_full_name%%/i", ws_plugin__s2member_esc_ds (urlencode ($name)), $url)))
481
+ if (($url = preg_replace ("/%%user_email%%/i", ws_plugin__s2member_esc_ds (urlencode ($email)), $url)))
482
+ if (($url = preg_replace ("/%%user_login%%/i", ws_plugin__s2member_esc_ds (urlencode ($login)), $url)))
483
+ if (($url = preg_replace ("/%%user_pass%%/i", ws_plugin__s2member_esc_ds (urlencode ($pass)), $url)))
484
+ if (($url = trim ($url))) /* Empty? ... Otherwise, re-fill. */
485
+ $GLOBALS["ws_plugin__s2member_registration_return_url"] = $url;
486
  /**/
487
  setcookie ("s2member_subscr_id", "", time () + 31556926, "/");
488
  setcookie ("s2member_custom", "", time () + 31556926, "/");
489
  setcookie ("s2member_level", "", time () + 31556926, "/");
490
  /**/
491
+ eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
492
  do_action ("ws_plugin__s2member_during_configure_user_registration", get_defined_vars ());
493
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
494
  }
495
  }
496
  /**/
497
+ eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
498
  do_action ("ws_plugin__s2member_after_configure_user_registration", get_defined_vars ());
499
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
500
  /**/
518
  {
519
  $password = ws_plugin__s2member_random_str_gen ($length, $special_chars);
520
  /**/
521
+ eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
522
  do_action ("ws_plugin__s2member_before_generate_password", get_defined_vars ());
523
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
524
  /**/
554
  {
555
  function ws_plugin__s2member_demo_hide_password_fields ($show = TRUE, $profileuser = FALSE)
556
  {
557
+ eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
558
  do_action ("ws_plugin__s2member_before_demo_hide_password_fields", get_defined_vars ());
559
  unset ($__refs, $__v); /* Unset defined __refs, __v. */
560
  /**/
includes/menu-pages/api-ops.inc.php CHANGED
@@ -64,26 +64,26 @@ if (apply_filters ("ws_plugin__s2member_during_api_ops_page_during_left_sections
64
  echo 'Signup Notifications take place silently behind-the-scene, using an HTTP connection. Each URL will be notified every time a new user signs up successfully through PayPal.<br /><br />' . "\n";
65
  echo '<strong>You can also use these special Replacement Codes if you need them:</strong>' . "\n";
66
  echo '<ul>' . "\n";
67
- echo '<li><code>%%subscr_id%% = The PayPal® Subscription ID, which remains constant throughout any &amp; all future payments.</code> [ <a href="#" onclick="alert(\'There is one exception. If you are selling Lifetime or Fixed-Term ( non-recurring ) access, using a Buy It Now button; the %%subscr_id%% is actually set to the Transaction ID for the purchase.\\n\\nPayPal® does not provide a specific Subscription ID for Buy It Now purchases. Since Lifetime &amp; Fixed-Term Subscriptions are NOT recurring ( i.e. there is only ONE payment ), using the Transaction ID as the Subscription ID is a graceful way to deal with this minor conflict.\'); return false;">?</a> ]</li>' . "\n";
68
- echo '<li><code>%%initial%% = The Initial Fee charged during signup. If you offered a free trial, this will be 0.</code> [ <a href="#" onclick="alert(\'This will always represent the amount of money the Customer spent, whenever they initially signed up, no matter what. Even if that amount is 0.\\n\\nIf a Customer signs up, under the terms of a free trial period, this will be 0. So be careful using %%initial%% when you offer a free trial period, because a $0.00 sale amount could cause havoc with affiliate programs. If you\\\'re offering a free trial period, and you need to track sales through affiliate programs, you can either hard-code an amount; or use `Payment Notifications` instead.\'); return false;">?</a> ]</li>' . "\n";
69
- echo '<li><code>%%regular%% = The Regular Amount of the Subscription. This value is always > 0, no matter what.</code> [ <a href="#" onclick="alert(\'This is how much the Subscription costs after an initial period expires. The %%regular%% rate is always > 0. If you did not offer an initial period, %%initial%% and %%regular%% will be equal to the same thing.\'); return false;">?</a> ]</li>' . "\n";
70
- echo '<li><code>%%recurring%% = This is the amount that will be charged on a Recurring basis, or 0 if non-Recurring.</code> [ <a href="#" onclick="alert(\'If recurring payments have not been required, this will be equal to 0. That being said, %%regular%% &amp; %%recurring%% are usually the same value. This variable can be used in two different ways. You can use it to determine what the regular recurring rate is, or to determine whether the Subscription will recur or not. If it is going to recur, %%recurring%% will be > 0.\\n\\nThe only time this is NOT equal to the %%regular%% rate, is when recurring payments are not required; and only a one-time regular rate applies. If you have trouble, try using the %%regular%% amount, or use the `Payment` Notifications instead of the `Signup` Notifications.\'); return false;">?</a> ]</li>' . "\n";
71
- echo '<li><code>%%first_name%% = The First Name of the Customer who purchased the Membership Subscription through PayPal®.</code></li>' . "\n";
72
- echo '<li><code>%%last_name%% = The Last Name of the Customer who purchased the Membership Subscription through PayPal®.</code></li>' . "\n";
73
- echo '<li><code>%%full_name%% = The Full Name ( First & Last ) of the Customer who purchased the Membership Subscription.</code></li>' . "\n";
74
- echo '<li><code>%%payer_email%% = The Email Address of the Customer who purchased the Membership Subscription through PayPal®.</code></li>' . "\n";
75
- echo '<li><code>%%item_number%% = The Item Number ( colon separated <em>level:custom_capabilities:fixed term</em> ) for the Membership Subscription.</code></li>' . "\n";
76
- echo '<li><code>%%item_name%% = The Item Name ( in other words, the associated membership Level Label that briefly describes the Item Number ).</code></li>' . "\n";
77
- echo '<li><code>%%initial_term%% = This is the term length of the initial period. This will be a numeric value, followed by a space, then a single letter.</code> [ <a href="#" onclick="alert(\'Here are some examples:\\n\\n%%initial_term%% = 1 D ( this means 1 Day )\\n%%initial_term%% = 1 W ( this means 1 Week )\\n%%initial_term%% = 1 M ( this means 1 Month )\\n%%initial_term%% = 1 Y ( this means 1 Year )\\n\\nThe initial period never recurs, so this only lasts for the term length specified, then it is over. If no initial period was even offered, the value of %%initial_term%% will just be: 0 D, meaning zero days.\'); return false;">?</a> ]</li>' . "\n";
78
- echo '<li><code>%%regular_term%% = This is the term length of the regular period. This will be a numeric value, followed by a space, then a single letter.</code> [ <a href="#" onclick="alert(\'Here are some examples:\\n\\n%%regular_term%% = 1 D ( this means 1 Day )\\n%%regular_term%% = 1 W ( this means 1 Week )\\n%%regular_term%% = 1 M ( this means 1 Month )\\n%%regular_term%% = 1 Y ( this means 1 Year )\\n%%regular_term%% = 1 L ( this means 1 Lifetime )\\n\\nThe regular term is usually recurring. So the regular term value represents the period ( or duration ) of each recurring period. If %%recurring%% = 0, then the regular term only applies once, because it is not recurring. So if it is not recurring, the value of %%regular_term%% simply represents how long their membership privileges are going to last after the %%initial_term%% has expired, if there was an initial term. The value of this variable ( %%regular_term%% ) will never be empty, it will always be at least: 1 D, meaning 1 day. No exceptions.\'); return false;">?</a> ]</li>' . "\n";
79
  echo '</ul>' . "\n";
80
  echo '<strong>Custom Replacement Codes can also be inserted using these instructions:</strong>' . "\n";
81
  echo '<ul>' . "\n";
82
- echo '<li><code>%%cv0%% = The domain of your site, which is passed through to PayPal® using the `custom` attribute in your PayPal® Shortcode.</code></li>' . "\n";
83
- echo '<li><code>%%cv1%% = If you need to track additional custom variables, you can pipe delimit them into the `custom` attribute, inside your Shortcode, like this: custom="' . $_SERVER["HTTP_HOST"] . '|cv1|cv2|cv3". You can have an unlimited number of custom variables that track IP addresses, affiliate IDs, etc. In some cases you may need to use PHP code to insert a value into the custom field dynamically. Obviously this is for advanced webmasters, but the functionality has been made available for those who need it.</li>' . "\n";
84
  echo '</ul>' . "\n";
85
  echo '<strong>This example uses cv1 to track a User\'s IP address:</strong><br />' . "\n";
86
- echo '<em>( The IP address could be referenced in your Notification URL using %%cv1%% )</em><br />' . "\n";
87
  echo '<code>custom="' . $_SERVER["HTTP_HOST"] . '|&lt;?php echo $_SERVER["REMOTE_ADDR"]; ?&gt;"</code>' . "\n";
88
  echo '</td>' . "\n";
89
  /**/
@@ -125,21 +125,21 @@ if (apply_filters ("ws_plugin__s2member_during_api_ops_page_during_left_sections
125
  echo 'Registration Notifications take place silently behind-the-scene, using an HTTP connection. Each URL will be notified every time a new user registers a Username.<br /><br />' . "\n";
126
  echo '<strong>You can also use these special Replacement Codes if you need them:</strong>' . "\n";
127
  echo '<ul>' . "\n";
128
- echo '<li><code>%%level%% = The level number ( 0, 1, 2, 3, 4 ) 0 = Free Subscriber.</code></li>' . "\n";
129
- echo '<li><code>%%user_first_name%% = The First Name of the Member who registered their Username.</code></li>' . "\n";
130
- echo '<li><code>%%user_last_name%% = The Last Name of the Member who registered their Username.</code></li>' . "\n";
131
- echo '<li><code>%%user_full_name%% = The Full Name ( First & Last ) of the Member who registered their Username</code></li>' . "\n";
132
- echo '<li><code>%%user_email%% = The Email Address of the Member who registered their Username.</code></li>' . "\n";
133
- echo '<li><code>%%user_login%% = The Username the Member selected during registration.</code></li>' . "\n";
134
- echo '<li><code>%%user_pass%% = The Password selected or generated during registration.</code></li>' . "\n";
135
  echo '</ul>' . "\n";
136
  echo '<strong>Custom Replacement Codes can also be inserted using these instructions:</strong>' . "\n";
137
  echo '<ul>' . "\n";
138
- echo '<li><code>%%cv0%% = The domain of your site, which is passed through to PayPal® using the `custom` attribute in your PayPal® Shortcode.</code></li>' . "\n";
139
- echo '<li><code>%%cv1%% = If you need to track additional custom variables, you can pipe delimit them into the `custom` attribute, inside your Shortcode, like this: custom="' . $_SERVER["HTTP_HOST"] . '|cv1|cv2|cv3". You can have an unlimited number of custom variables that track IP addresses, affiliate IDs, etc. In some cases you may need to use PHP code to insert a value into the custom field dynamically. Obviously this is for advanced webmasters, but the functionality has been made available for those who need it.</li>' . "\n";
140
  echo '</ul>' . "\n";
141
  echo '<strong>This example uses cv1 to track a User\'s IP address:</strong><br />' . "\n";
142
- echo '<em>( The IP address could be referenced in your Notification URL using %%cv1%% )</em><br />' . "\n";
143
  echo '<code>custom="' . $_SERVER["HTTP_HOST"] . '|&lt;?php echo $_SERVER["REMOTE_ADDR"]; ?&gt;"</code>' . "\n";
144
  echo '</td>' . "\n";
145
  /**/
@@ -183,23 +183,23 @@ if (apply_filters ("ws_plugin__s2member_during_api_ops_page_during_left_sections
183
  echo 'Payment Notifications take place silently behind-the-scene, using an HTTP connection. Each URL will be notified every time an initial and/or recurring payment occurs.<br /><br />' . "\n";
184
  echo '<strong>You can also use these special Replacement Codes if you need them:</strong>' . "\n";
185
  echo '<ul>' . "\n";
186
- echo '<li><code>%%subscr_id%% = The PayPal® Subscription ID, which remains constant throughout any &amp; all future payments.</code> [ <a href="#" onclick="alert(\'There is one exception. If you are selling Lifetime or Fixed-Term ( non-recurring ) access, using a Buy It Now button; the %%subscr_id%% is actually set to the Transaction ID for the payment.\\n\\nPayPal® does not provide a specific Subscription ID for Buy It Now purchases. Since Lifetime &amp; Fixed-Term Subscriptions are NOT recurring ( i.e. there is only ONE payment ), using the Transaction ID as the Subscription ID is a graceful way to deal with this minor conflict.\'); return false;">?</a> ]</li>' . "\n";
187
- echo '<li><code>%%txn_id%% = The PayPal® unique Transaction ID, which is always unique for each payment received.</code></li>' . "\n";
188
- echo '<li><code>%%amount%% = The Amount of the payment. Most affiliate programs calculate commissions from this.</code></li>' . "\n";
189
- echo '<li><code>%%first_name%% = The First Name of the Customer who purchased the Membership Subscription through PayPal®.</code></li>' . "\n";
190
- echo '<li><code>%%last_name%% = The Last Name of the Customer who purchased the Membership Subscription through PayPal®.</code></li>' . "\n";
191
- echo '<li><code>%%full_name%% = The Full Name ( First & Last ) of the Customer who purchased the Membership Subscription.</code></li>' . "\n";
192
- echo '<li><code>%%payer_email%% = The Email Address of the Customer who purchased the Membership Subscription through PayPal®.</code></li>' . "\n";
193
- echo '<li><code>%%item_number%% = The Item Number ( colon separated <em>level:custom_capabilities:fixed term</em> ) that the payment is for.</code></li>' . "\n";
194
- echo '<li><code>%%item_name%% = The Item Name ( in other words, the associated membership Level Label that briefly describes the Item Number ).</code></li>' . "\n";
195
  echo '</ul>' . "\n";
196
  echo '<strong>Custom Replacement Codes can also be inserted using these instructions:</strong>' . "\n";
197
  echo '<ul>' . "\n";
198
- echo '<li><code>%%cv0%% = The domain of your site, which is passed through to PayPal® using the `custom` attribute in your PayPal® Shortcode.</code></li>' . "\n";
199
- echo '<li><code>%%cv1%% = If you need to track additional custom variables, you can pipe delimit them into the `custom` attribute, inside your Shortcode, like this: custom="' . $_SERVER["HTTP_HOST"] . '|cv1|cv2|cv3". You can have an unlimited number of custom variables that track IP addresses, affiliate IDs, etc. In some cases you may need to use PHP code to insert a value into the custom field dynamically. Obviously this is for advanced webmasters, but the functionality has been made available for those who need it.</li>' . "\n";
200
  echo '</ul>' . "\n";
201
  echo '<strong>This example uses cv1 to track a User\'s IP address:</strong><br />' . "\n";
202
- echo '<em>( The IP address could be referenced in your Notification URL using %%cv1%% )</em><br />' . "\n";
203
  echo '<code>custom="' . $_SERVER["HTTP_HOST"] . '|&lt;?php echo $_SERVER["REMOTE_ADDR"]; ?&gt;"</code>' . "\n";
204
  echo '</td>' . "\n";
205
  /**/
@@ -245,19 +245,19 @@ if (apply_filters ("ws_plugin__s2member_during_api_ops_page_during_left_sections
245
  echo 'EOT/Deletion Notifications take place silently behind-the-scene, using an HTTP connection. Each URL will be notified every time a Subscription hits an EOT, or is deleted.<br /><br />' . "\n";
246
  echo '<strong>You can also use these special Replacement Codes if you need them:</strong>' . "\n";
247
  echo '<ul>' . "\n";
248
- echo '<li><code>%%subscr_id%% = The PayPal® Subscription ID, which remained constant throughout the lifetime of the membership.</code> [ <a href="#" onclick="alert(\'There is one exception. If you are selling Lifetime or Fixed-Term ( non-recurring ) access, using a Buy It Now button; the %%subscr_id%% is actually set to the original Transaction ID for the purchase.\\n\\nPayPal® does not provide a specific Subscription ID for Buy It Now purchases. Since Lifetime &amp; Fixed-Term Subscriptions are NOT recurring ( i.e. there was only ONE payment ), using the Transaction ID as the Subscription ID is a graceful way to deal with this minor conflict.\'); return false;">?</a> ]</li>' . "\n";
249
- echo '<li><code>%%user_first_name%% = The First Name listed on their User account. This might be different than what is on file at PayPal®.</code></li>' . "\n";
250
- echo '<li><code>%%user_last_name%% = The Last Name listed on their User account. This might be different than what is on file at PayPal®.</code></li>' . "\n";
251
- echo '<li><code>%%user_full_name%% = The Full Name listed on their User account. This might be different than what is on file at PayPal®.</code></li>' . "\n";
252
- echo '<li><code>%%user_email%% = The Email Address associated with their User account. This might be different than what is on file at PayPal®.</code></li>' . "\n";
253
  echo '</ul>' . "\n";
254
  echo '<strong>Custom Replacement Codes can also be inserted using these instructions:</strong>' . "\n";
255
  echo '<ul>' . "\n";
256
- echo '<li><code>%%cv0%% = The domain of your site, which is passed through to PayPal® using the `custom` attribute in your PayPal® Shortcode.</code></li>' . "\n";
257
- echo '<li><code>%%cv1%% = If you need to track additional custom variables, you can pipe delimit them into the `custom` attribute, inside your Shortcode. like this: custom="' . $_SERVER["HTTP_HOST"] . '|cv1|cv2|cv3". You can have an unlimited number of custom variables that track IP addresses, affiliate IDs, etc. In some cases you may need to use PHP code to insert a value into the custom field dynamically. Obviously this is for advanced webmasters, but the functionality has been made available for those who need it.</li>' . "\n";
258
  echo '</ul>' . "\n";
259
  echo '<strong>This example uses cv1 to track a User\'s IP address:</strong><br />' . "\n";
260
- echo '<em>( The IP address could be referenced in your Notification URL using %%cv1%% )</em><br />' . "\n";
261
  echo '<code>custom="' . $_SERVER["HTTP_HOST"] . '|&lt;?php echo $_SERVER["REMOTE_ADDR"]; ?&gt;"</code>' . "\n";
262
  echo '</td>' . "\n";
263
  /**/
@@ -302,23 +302,23 @@ if (apply_filters ("ws_plugin__s2member_during_api_ops_page_during_left_sections
302
  echo 'Refund/Reversal Notifications take place silently behind-the-scene, using an HTTP connection. Each URL will be notified every time a payment is refunded through PayPal® or a chargeback occurs.<br /><br />' . "\n";
303
  echo '<strong>You can also use these special Replacement Codes if you need them:</strong>' . "\n";
304
  echo '<ul>' . "\n";
305
- echo '<li><code>%%subscr_id%% = The PayPal® Subscription ID, which remained constant throughout the lifetime of the membership.</code> [ <a href="#" onclick="alert(\'There is one exception. If you are selling Lifetime or Fixed-Term ( non-recurring ) access, using a Buy It Now button; the %%subscr_id%% is actually set to the original Transaction ID for the purchase.\\n\\nPayPal® does not provide a specific Subscription ID for Buy It Now purchases. Since Lifetime &amp; Fixed-Term Subscriptions are NOT recurring ( i.e. there was only ONE payment ), using the Transaction ID as the Subscription ID is a graceful way to deal with this minor conflict.\'); return false;">?</a> ]</li>' . "\n";
306
- echo '<li><code>%%parent_txn_id%% = The PayPal® Transaction ID, associated with the original payment that is being refunded/reversed.</code></li>' . "\n";
307
- echo '<li><code>%%-amount%% = The Negative Amount of the payment, that was refunded or reversed back to the Customer.</code></li>' . "\n";
308
- echo '<li><code>%%first_name%% = The First Name of the Customer who purchased the Membership Subscription through PayPal®.</code></li>' . "\n";
309
- echo '<li><code>%%last_name%% = The Last Name of the Customer who purchased the Membership Subscription through PayPal®.</code></li>' . "\n";
310
- echo '<li><code>%%full_name%% = The Full Name ( First & Last ) of the Customer who purchased the Membership Subscription.</code></li>' . "\n";
311
- echo '<li><code>%%payer_email%% = The Email Address of the Customer who purchased the Membership Subscription through PayPal®.</code></li>' . "\n";
312
- echo '<li><code>%%item_number%% = The Item Number ( colon separated <em>level:custom_capabilities:fixed term</em> ) that the payment was for.</code></li>' . "\n";
313
- echo '<li><code>%%item_name%% = The Item Name ( in other words, the associated membership Level Label that briefly describes the Item Number ).</code></li>' . "\n";
314
  echo '</ul>' . "\n";
315
  echo '<strong>Custom Replacement Codes can also be inserted using these instructions:</strong>' . "\n";
316
  echo '<ul>' . "\n";
317
- echo '<li><code>%%cv0%% = The domain of your site, which is passed through to PayPal® using the `custom` attribute in your PayPal® Shortcode.</code></li>' . "\n";
318
- echo '<li><code>%%cv1%% = If you need to track additional custom variables, you can pipe delimit them into the `custom` attribute, inside your Shortcode, like this: custom="' . $_SERVER["HTTP_HOST"] . '|cv1|cv2|cv3". You can have an unlimited number of custom variables that track IP addresses, affiliate IDs, etc. In some cases you may need to use PHP code to insert a value into the custom field dynamically. Obviously this is for advanced webmasters, but the functionality has been made available for those who need it.</li>' . "\n";
319
  echo '</ul>' . "\n";
320
  echo '<strong>This example uses cv1 to track a User\'s IP address:</strong><br />' . "\n";
321
- echo '<em>( The IP address could be referenced in your Notification URL using %%cv1%% )</em><br />' . "\n";
322
  echo '<code>custom="' . $_SERVER["HTTP_HOST"] . '|&lt;?php echo $_SERVER["REMOTE_ADDR"]; ?&gt;"</code>' . "\n";
323
  echo '</td>' . "\n";
324
  /**/
@@ -362,24 +362,24 @@ if (apply_filters ("ws_plugin__s2member_during_api_ops_page_during_left_sections
362
  echo 'Specific Post/Page Notifications take place silently behind-the-scene, using an HTTP connection. Each URL will be notified every time a sale occurs.<br /><br />' . "\n";
363
  echo '<strong>You can also use these special Replacement Codes if you need them:</strong>' . "\n";
364
  echo '<ul>' . "\n";
365
- echo '<li><code>%%sp_access_url%% = The full URL ( generated by s2Member ) where the Customer can gain access.</code></li>' . "\n";
366
- echo '<li><code>%%sp_access_exp%% = Human readable expiration for %%sp_access_url%%. Ex: <em>( link expires in %%sp_access_exp%% )</em>.</code></li>' . "\n";
367
- echo '<li><code>%%txn_id%% = The PayPal® Transaction ID. PayPal® assigns a unique identifier for every purchase.</code></li>' . "\n";
368
- echo '<li><code>%%amount%% = The full Amount of the sale. Most affiliate programs calculate commissions from this.</code></li>' . "\n";
369
- echo '<li><code>%%first_name%% = The First Name of the Customer who purchased Specific Post/Page Access through PayPal®.</code></li>' . "\n";
370
- echo '<li><code>%%last_name%% = The Last Name of the Customer who purchased Specific Post/Page Access through PayPal®.</code></li>' . "\n";
371
- echo '<li><code>%%full_name%% = The Full Name ( First & Last ) of the Customer who purchased Specific Post/Page Access.</code></li>' . "\n";
372
- echo '<li><code>%%payer_email%% = The Email Address of the Customer who purchased Specific Post/Page Access through PayPal®.</code></li>' . "\n";
373
- echo '<li><code>%%item_number%% = The Item Number. Ex: <em>sp:13,24,36:72</em> ( translates to: <em>sp:comma-delimited IDs:expiration hours</em> ).</code></li>' . "\n";
374
- echo '<li><code>%%item_name%% = The Item Name. In other words, a brief description, detailing what this purchase was for.</code></li>' . "\n";
375
  echo '</ul>' . "\n";
376
  echo '<strong>Custom Replacement Codes can also be inserted using these instructions:</strong>' . "\n";
377
  echo '<ul>' . "\n";
378
- echo '<li><code>%%cv0%% = The domain of your site, which is passed through to PayPal® using the `custom` attribute in your PayPal® Shortcode.</code></li>' . "\n";
379
- echo '<li><code>%%cv1%% = If you need to track additional custom variables, you can pipe delimit them into the `custom` attribute, inside your Shortcode, like this: custom="' . $_SERVER["HTTP_HOST"] . '|cv1|cv2|cv3". You can have an unlimited number of custom variables that track IP addresses, affiliate IDs, etc. In some cases you may need to use PHP code to insert a value into the custom field dynamically. Obviously this is for advanced webmasters, but the functionality has been made available for those who need it.</li>' . "\n";
380
  echo '</ul>' . "\n";
381
  echo '<strong>This example uses cv1 to track a User\'s IP address:</strong><br />' . "\n";
382
- echo '<em>( The IP address could be referenced in your Notification URL using %%cv1%% )</em><br />' . "\n";
383
  echo '<code>custom="' . $_SERVER["HTTP_HOST"] . '|&lt;?php echo $_SERVER["REMOTE_ADDR"]; ?&gt;"</code>' . "\n";
384
  echo '</td>' . "\n";
385
  /**/
64
  echo 'Signup Notifications take place silently behind-the-scene, using an HTTP connection. Each URL will be notified every time a new user signs up successfully through PayPal.<br /><br />' . "\n";
65
  echo '<strong>You can also use these special Replacement Codes if you need them:</strong>' . "\n";
66
  echo '<ul>' . "\n";
67
+ echo '<li><code>%%subscr_id%%</code> = The PayPal® Subscription ID, which remains constant throughout any &amp; all future payments. [ <a href="#" onclick="alert(\'There is one exception. If you are selling Lifetime or Fixed-Term ( non-recurring ) access, using Buy Now functionality; the %%subscr_id%% is actually set to the Transaction ID for the purchase.\\n\\nPayPal® does not provide a specific Subscription ID for Buy Now purchases. Since Lifetime &amp; Fixed-Term Subscriptions are NOT recurring ( i.e. there is only ONE payment ), using the Transaction ID as the Subscription ID is a graceful way to deal with this minor conflict.\'); return false;">?</a> ]</li>' . "\n";
68
+ echo '<li><code>%%initial%%</code> = The Initial Fee charged during signup. If you offered a free trial, this will be <code>0</code>. [ <a href="#" onclick="alert(\'This will always represent the amount of money the Customer spent, whenever they initially signed up, no matter what. Even if that amount is 0.\\n\\nIf a Customer signs up, under the terms of a free trial period, this will be 0. So be careful using %%initial%% when you offer a free trial period, because a $0.00 sale amount could cause havoc with affiliate programs.\\n\\nIf you\\\'re offering a free trial period, and you need to track sales through affiliate programs, you can either hard-code an amount; or use `Payment Notifications` instead.\'); return false;">?</a> ]</li>' . "\n";
69
+ echo '<li><code>%%regular%%</code> = The Regular Amount of the Subscription. This value is <code>always > 0</code>, no matter what. [ <a href="#" onclick="alert(\'This is how much the Subscription costs after an initial period expires. The %%regular%% rate is always > 0. If you did not offer an initial period, %%initial%% and %%regular%% will be equal to the same thing.\'); return false;">?</a> ]</li>' . "\n";
70
+ echo '<li><code>%%recurring%%</code> = This is the amount that will be charged on a Recurring basis, or <code>0</code> if non-Recurring. [ <a href="#" onclick="alert(\'If recurring payments have not been required, this will be equal to 0. That being said, %%regular%% &amp; %%recurring%% are usually the same value. This variable can be used in two different ways. You can use it to determine what the regular recurring rate is, or to determine whether the Subscription will recur or not. If it is going to recur, %%recurring%% will be > 0.\'); return false;">?</a> ]</li>' . "\n";
71
+ echo '<li><code>%%first_name%%</code> = The First Name of the Customer who purchased the Membership Subscription.</li>' . "\n";
72
+ echo '<li><code>%%last_name%%</code> = The Last Name of the Customer who purchased the Membership Subscription.</li>' . "\n";
73
+ echo '<li><code>%%full_name%%</code> = The Full Name ( First & Last ) of the Customer who purchased the Membership Subscription.</li>' . "\n";
74
+ echo '<li><code>%%payer_email%%</code> = The Email Address of the Customer who purchased the Membership Subscription.</li>' . "\n";
75
+ echo '<li><code>%%item_number%%</code> = The Item Number ( colon separated <code><em>level:custom_capabilities:fixed term</em></code> ) for the Membership Subscription.</li>' . "\n";
76
+ echo '<li><code>%%item_name%%</code> = The Item Name ( as provided by the <code>desc=""</code> attribute in your Shortcode, which briefly describes the Item Number ).</li>' . "\n";
77
+ echo '<li><code>%%initial_term%%</code> = This is the term length of the initial period. This will be a numeric value, followed by a space, then a single letter. [ <a href="#" onclick="alert(\'Here are some examples:\\n\\n%%initial_term%% = 1 D ( this means 1 Day )\\n%%initial_term%% = 1 W ( this means 1 Week )\\n%%initial_term%% = 1 M ( this means 1 Month )\\n%%initial_term%% = 1 Y ( this means 1 Year )\\n\\nThe initial period never recurs, so this only lasts for the term length specified, then it is over. If no initial period was even offered, the value of %%initial_term%% will just be: 0 D, meaning zero days.\'); return false;">?</a> ]</li>' . "\n";
78
+ echo '<li><code>%%regular_term%%</code> = This is the term length of the regular period. This will be a numeric value, followed by a space, then a single letter. [ <a href="#" onclick="alert(\'Here are some examples:\\n\\n%%regular_term%% = 1 D ( this means 1 Day )\\n%%regular_term%% = 1 W ( this means 1 Week )\\n%%regular_term%% = 1 M ( this means 1 Month )\\n%%regular_term%% = 1 Y ( this means 1 Year )\\n%%regular_term%% = 1 L ( this means 1 Lifetime )\\n\\nThe regular term is usually recurring. So the regular term value represents the period ( or duration ) of each recurring period. If %%recurring%% = 0, then the regular term only applies once, because it is not recurring. So if it is not recurring, the value of %%regular_term%% simply represents how long their membership privileges are going to last after the %%initial_term%% has expired, if there was an initial term. The value of this variable ( %%regular_term%% ) will never be empty, it will always be at least: 1 D, meaning 1 day. No exceptions.\'); return false;">?</a> ]</li>' . "\n";
79
  echo '</ul>' . "\n";
80
  echo '<strong>Custom Replacement Codes can also be inserted using these instructions:</strong>' . "\n";
81
  echo '<ul>' . "\n";
82
+ echo '<li><code>%%cv0%%</code> = The domain of your site, which is passed through the `custom` attribute in your Shortcode.</li>' . "\n";
83
+ echo '<li><code>%%cv1%%</code> = If you need to track additional custom variables, you can pipe delimit them into the `custom` attribute, inside your Shortcode, like this: <code>custom="' . $_SERVER["HTTP_HOST"] . '|cv1|cv2|cv3"</code>. You can have an unlimited number of custom variables that track IP addresses, affiliate IDs, etc. In some cases you may need to use PHP code to insert a value into the custom field dynamically. Obviously this is for advanced webmasters, but the functionality has been made available for those who need it.</li>' . "\n";
84
  echo '</ul>' . "\n";
85
  echo '<strong>This example uses cv1 to track a User\'s IP address:</strong><br />' . "\n";
86
+ echo '<em>( The IP address could be referenced using <code>%%cv1%%</code> )</em><br />' . "\n";
87
  echo '<code>custom="' . $_SERVER["HTTP_HOST"] . '|&lt;?php echo $_SERVER["REMOTE_ADDR"]; ?&gt;"</code>' . "\n";
88
  echo '</td>' . "\n";
89
  /**/
125
  echo 'Registration Notifications take place silently behind-the-scene, using an HTTP connection. Each URL will be notified every time a new user registers a Username.<br /><br />' . "\n";
126
  echo '<strong>You can also use these special Replacement Codes if you need them:</strong>' . "\n";
127
  echo '<ul>' . "\n";
128
+ echo '<li><code>%%level%%</code> = The Level number <code>( 0, 1, 2, 3, 4 )</code>, where <code>0 = Free Subscriber</code>.</li>' . "\n";
129
+ echo '<li><code>%%user_first_name%%</code> = The First Name of the Member who registered their Username.</li>' . "\n";
130
+ echo '<li><code>%%user_last_name%%</code> = The Last Name of the Member who registered their Username.</li>' . "\n";
131
+ echo '<li><code>%%user_full_name%%</code> = The Full Name ( First & Last ) of the Member who registered their Username.</li>' . "\n";
132
+ echo '<li><code>%%user_email%%</code> = The Email Address of the Member who registered their Username.</li>' . "\n";
133
+ echo '<li><code>%%user_login%%</code> = The Username the Member selected during registration.</li>' . "\n";
134
+ echo '<li><code>%%user_pass%%</code> = The Password selected or generated during registration.</li>' . "\n";
135
  echo '</ul>' . "\n";
136
  echo '<strong>Custom Replacement Codes can also be inserted using these instructions:</strong>' . "\n";
137
  echo '<ul>' . "\n";
138
+ echo '<li><code>%%cv0%%</code> = The domain of your site, which is passed through the `custom` attribute in your Shortcode.</li>' . "\n";
139
+ echo '<li><code>%%cv1%%</code> = If you need to track additional custom variables, you can pipe delimit them into the `custom` attribute, inside your Shortcode, like this: <code>custom="' . $_SERVER["HTTP_HOST"] . '|cv1|cv2|cv3"</code>. You can have an unlimited number of custom variables that track IP addresses, affiliate IDs, etc. In some cases you may need to use PHP code to insert a value into the custom field dynamically. Obviously this is for advanced webmasters, but the functionality has been made available for those who need it.</li>' . "\n";
140
  echo '</ul>' . "\n";
141
  echo '<strong>This example uses cv1 to track a User\'s IP address:</strong><br />' . "\n";
142
+ echo '<em>( The IP address could be referenced using <code>%%cv1%%</code> )</em><br />' . "\n";
143
  echo '<code>custom="' . $_SERVER["HTTP_HOST"] . '|&lt;?php echo $_SERVER["REMOTE_ADDR"]; ?&gt;"</code>' . "\n";
144
  echo '</td>' . "\n";
145
  /**/
183
  echo 'Payment Notifications take place silently behind-the-scene, using an HTTP connection. Each URL will be notified every time an initial and/or recurring payment occurs.<br /><br />' . "\n";
184
  echo '<strong>You can also use these special Replacement Codes if you need them:</strong>' . "\n";
185
  echo '<ul>' . "\n";
186
+ echo '<li><code>%%subscr_id%%</code> = The PayPal® Subscription ID, which remains constant throughout any &amp; all future payments. [ <a href="#" onclick="alert(\'There is one exception. If you are selling Lifetime or Fixed-Term ( non-recurring ) access, using Buy Now functionality; the %%subscr_id%% is actually set to the Transaction ID for the payment.\\n\\nPayPal® does not provide a specific Subscription ID for Buy Now purchases. Since Lifetime &amp; Fixed-Term Subscriptions are NOT recurring ( i.e. there is only ONE payment ), using the Transaction ID as the Subscription ID is a graceful way to deal with this minor conflict.\'); return false;">?</a> ]</li>' . "\n";
187
+ echo '<li><code>%%txn_id%%</code> = The PayPal® unique Transaction ID, which is always unique for each payment received.</li>' . "\n";
188
+ echo '<li><code>%%amount%%</code> = The Amount of the payment. Most affiliate programs calculate commissions from this.</li>' . "\n";
189
+ echo '<li><code>%%first_name%%</code> = The First Name of the Customer who purchased the Membership Subscription.</li>' . "\n";
190
+ echo '<li><code>%%last_name%%</code> = The Last Name of the Customer who purchased the Membership Subscription.</li>' . "\n";
191
+ echo '<li><code>%%full_name%%</code> = The Full Name ( First & Last ) of the Customer who purchased the Membership Subscription.</li>' . "\n";
192
+ echo '<li><code>%%payer_email%%</code> = The Email Address of the Customer who purchased the Membership Subscription.</li>' . "\n";
193
+ echo '<li><code>%%item_number%%</code> = The Item Number ( colon separated <code><em>level:custom_capabilities:fixed term</em></code> ) that the payment is for.</li>' . "\n";
194
+ echo '<li><code>%%item_name%%</code> = The Item Name ( as provided by the <code>desc=""</code> attribute in your Shortcode, which briefly describes the Item Number ).</li>' . "\n";
195
  echo '</ul>' . "\n";
196
  echo '<strong>Custom Replacement Codes can also be inserted using these instructions:</strong>' . "\n";
197
  echo '<ul>' . "\n";
198
+ echo '<li><code>%%cv0%%</code> = The domain of your site, which is passed through the `custom` attribute in your Shortcode.</li>' . "\n";
199
+ echo '<li><code>%%cv1%%</code> = If you need to track additional custom variables, you can pipe delimit them into the `custom` attribute, inside your Shortcode, like this: <code>custom="' . $_SERVER["HTTP_HOST"] . '|cv1|cv2|cv3"</code>. You can have an unlimited number of custom variables that track IP addresses, affiliate IDs, etc. In some cases you may need to use PHP code to insert a value into the custom field dynamically. Obviously this is for advanced webmasters, but the functionality has been made available for those who need it.</li>' . "\n";
200
  echo '</ul>' . "\n";
201
  echo '<strong>This example uses cv1 to track a User\'s IP address:</strong><br />' . "\n";
202
+ echo '<em>( The IP address could be referenced using <code>%%cv1%%</code> )</em><br />' . "\n";
203
  echo '<code>custom="' . $_SERVER["HTTP_HOST"] . '|&lt;?php echo $_SERVER["REMOTE_ADDR"]; ?&gt;"</code>' . "\n";
204
  echo '</td>' . "\n";
205
  /**/
245
  echo 'EOT/Deletion Notifications take place silently behind-the-scene, using an HTTP connection. Each URL will be notified every time a Subscription hits an EOT, or is deleted.<br /><br />' . "\n";
246
  echo '<strong>You can also use these special Replacement Codes if you need them:</strong>' . "\n";
247
  echo '<ul>' . "\n";
248
+ echo '<li><code>%%subscr_id%%</code> = The PayPal® Subscription ID, which remained constant throughout the lifetime of the membership. [ <a href="#" onclick="alert(\'There is one exception. If you are selling Lifetime or Fixed-Term ( non-recurring ) access, using Buy Now functionality; the %%subscr_id%% is actually set to the original Transaction ID for the purchase.\\n\\nPayPal® does not provide a specific Subscription ID for Buy Now purchases. Since Lifetime &amp; Fixed-Term Subscriptions are NOT recurring ( i.e. there was only ONE payment ), using the Transaction ID as the Subscription ID is a graceful way to deal with this minor conflict.\'); return false;">?</a> ]</li>' . "\n";
249
+ echo '<li><code>%%user_first_name%%</code> = The First Name listed on their User account. This might be different than what is on file at PayPal®.</li>' . "\n";
250
+ echo '<li><code>%%user_last_name%%</code> = The Last Name listed on their User account. This might be different than what is on file at PayPal®.</li>' . "\n";
251
+ echo '<li><code>%%user_full_name%%</code> = The Full Name listed on their User account. This might be different than what is on file at PayPal®.</li>' . "\n";
252
+ echo '<li><code>%%user_email%%</code> = The Email Address associated with their User account. This might be different than what is on file at PayPal®.</li>' . "\n";
253
  echo '</ul>' . "\n";
254
  echo '<strong>Custom Replacement Codes can also be inserted using these instructions:</strong>' . "\n";
255
  echo '<ul>' . "\n";
256
+ echo '<li><code>%%cv0%%</code> = The domain of your site, which is passed through the `custom` attribute in your Shortcode.</li>' . "\n";
257
+ echo '<li><code>%%cv1%%</code> = If you need to track additional custom variables, you can pipe delimit them into the `custom` attribute, inside your Shortcode. like this: <code>custom="' . $_SERVER["HTTP_HOST"] . '|cv1|cv2|cv3"</code>. You can have an unlimited number of custom variables that track IP addresses, affiliate IDs, etc. In some cases you may need to use PHP code to insert a value into the custom field dynamically. Obviously this is for advanced webmasters, but the functionality has been made available for those who need it.</li>' . "\n";
258
  echo '</ul>' . "\n";
259
  echo '<strong>This example uses cv1 to track a User\'s IP address:</strong><br />' . "\n";
260
+ echo '<em>( The IP address could be referenced using <code>%%cv1%%</code> )</em><br />' . "\n";
261
  echo '<code>custom="' . $_SERVER["HTTP_HOST"] . '|&lt;?php echo $_SERVER["REMOTE_ADDR"]; ?&gt;"</code>' . "\n";
262
  echo '</td>' . "\n";
263
  /**/
302
  echo 'Refund/Reversal Notifications take place silently behind-the-scene, using an HTTP connection. Each URL will be notified every time a payment is refunded through PayPal® or a chargeback occurs.<br /><br />' . "\n";
303
  echo '<strong>You can also use these special Replacement Codes if you need them:</strong>' . "\n";
304
  echo '<ul>' . "\n";
305
+ echo '<li><code>%%subscr_id%%</code> = The PayPal® Subscription ID, which remained constant throughout the lifetime of the membership. [ <a href="#" onclick="alert(\'There is one exception. If you are selling Lifetime or Fixed-Term ( non-recurring ) access, using Buy Now functionality; the %%subscr_id%% is actually set to the original Transaction ID for the purchase.\\n\\nPayPal® does not provide a specific Subscription ID for Buy Now purchases. Since Lifetime &amp; Fixed-Term Subscriptions are NOT recurring ( i.e. there was only ONE payment ), using the Transaction ID as the Subscription ID is a graceful way to deal with this minor conflict.\'); return false;">?</a> ]</li>' . "\n";
306
+ echo '<li><code>%%parent_txn_id%%</code> = The PayPal® Transaction ID, associated with the original payment that is being refunded/reversed.</li>' . "\n";
307
+ echo '<li><code>%%-amount%%</code> = The Negative Amount of the payment, that was refunded or reversed back to the Customer.</li>' . "\n";
308
+ echo '<li><code>%%first_name%%</code> = The First Name of the Customer who purchased the Membership Subscription.</li>' . "\n";
309
+ echo '<li><code>%%last_name%%</code> = The Last Name of the Customer who purchased the Membership Subscription.</li>' . "\n";
310
+ echo '<li><code>%%full_name%%</code> = The Full Name ( First & Last ) of the Customer who purchased the Membership Subscription.</li>' . "\n";
311
+ echo '<li><code>%%payer_email%%</code> = The Email Address of the Customer who purchased the Membership Subscription.</li>' . "\n";
312
+ echo '<li><code>%%item_number%%</code> = The Item Number ( colon separated <em>level:custom_capabilities:fixed term</em> ) that the payment was for.</li>' . "\n";
313
+ echo '<li><code>%%item_name%%</code> = The Item Name ( as provided by the <code>desc=""</code> attribute in your Shortcode, which briefly describes the Item Number ).</li>' . "\n";
314
  echo '</ul>' . "\n";
315
  echo '<strong>Custom Replacement Codes can also be inserted using these instructions:</strong>' . "\n";
316
  echo '<ul>' . "\n";
317
+ echo '<li><code>%%cv0%%</code> = The domain of your site, which is passed through the `custom` attribute in your Shortcode.</li>' . "\n";
318
+ echo '<li><code>%%cv1%%</code> = If you need to track additional custom variables, you can pipe delimit them into the `custom` attribute, inside your Shortcode, like this: <code>custom="' . $_SERVER["HTTP_HOST"] . '|cv1|cv2|cv3"</code>. You can have an unlimited number of custom variables that track IP addresses, affiliate IDs, etc. In some cases you may need to use PHP code to insert a value into the custom field dynamically. Obviously this is for advanced webmasters, but the functionality has been made available for those who need it.</li>' . "\n";
319
  echo '</ul>' . "\n";
320
  echo '<strong>This example uses cv1 to track a User\'s IP address:</strong><br />' . "\n";
321
+ echo '<em>( The IP address could be referenced using <code>%%cv1%%</code> )</em><br />' . "\n";
322
  echo '<code>custom="' . $_SERVER["HTTP_HOST"] . '|&lt;?php echo $_SERVER["REMOTE_ADDR"]; ?&gt;"</code>' . "\n";
323
  echo '</td>' . "\n";
324
  /**/
362
  echo 'Specific Post/Page Notifications take place silently behind-the-scene, using an HTTP connection. Each URL will be notified every time a sale occurs.<br /><br />' . "\n";
363
  echo '<strong>You can also use these special Replacement Codes if you need them:</strong>' . "\n";
364
  echo '<ul>' . "\n";
365
+ echo '<li><code>%%sp_access_url%%</code> = The full URL ( generated by s2Member ) where the Customer can gain access.</li>' . "\n";
366
+ echo '<li><code>%%sp_access_exp%%</code> = Human readable expiration for <code>%%sp_access_url%%</code>. Ex: <em>( link expires in <code>%%sp_access_exp%%</code> )</em>.</li>' . "\n";
367
+ echo '<li><code>%%txn_id%%</code> = The PayPal® Transaction ID. PayPal® assigns a unique identifier for every purchase.</li>' . "\n";
368
+ echo '<li><code>%%amount%%</code> = The full Amount of the sale. Most affiliate programs calculate commissions from this.</li>' . "\n";
369
+ echo '<li><code>%%first_name%%</code> = The First Name of the Customer who purchased Specific Post/Page Access.</li>' . "\n";
370
+ echo '<li><code>%%last_name%%</code> = The Last Name of the Customer who purchased Specific Post/Page Access.</li>' . "\n";
371
+ echo '<li><code>%%full_name%%</code> = The Full Name ( First & Last ) of the Customer who purchased Specific Post/Page Access.</li>' . "\n";
372
+ echo '<li><code>%%payer_email%%</code> = The Email Address of the Customer who purchased Specific Post/Page Access.</li>' . "\n";
373
+ echo '<li><code>%%item_number%%</code> = The Item Number. Ex: <code><em>sp:13,24,36:72</em></code> ( translates to: <code><em>sp:comma-delimited IDs:expiration hours</em></code> ).</li>' . "\n";
374
+ echo '<li><code>%%item_name%%</code> = The Item Name ( as provided by the <code>desc=""</code> attribute in your Shortcode, which briefly describes the Item Number ).</li>' . "\n";
375
  echo '</ul>' . "\n";
376
  echo '<strong>Custom Replacement Codes can also be inserted using these instructions:</strong>' . "\n";
377
  echo '<ul>' . "\n";
378
+ echo '<li><code>%%cv0%%</code> = The domain of your site, which is passed through the `custom` attribute in your Shortcode.</li>' . "\n";
379
+ echo '<li><code>%%cv1%%</code> = If you need to track additional custom variables, you can pipe delimit them into the `custom` attribute, inside your Shortcode, like this: <code>custom="' . $_SERVER["HTTP_HOST"] . '|cv1|cv2|cv3"</code>. You can have an unlimited number of custom variables that track IP addresses, affiliate IDs, etc. In some cases you may need to use PHP code to insert a value into the custom field dynamically. Obviously this is for advanced webmasters, but the functionality has been made available for those who need it.</li>' . "\n";
380
  echo '</ul>' . "\n";
381
  echo '<strong>This example uses cv1 to track a User\'s IP address:</strong><br />' . "\n";
382
+ echo '<em>( The IP address could be referenced using <code>%%cv1%%</code> )</em><br />' . "\n";
383
  echo '<code>custom="' . $_SERVER["HTTP_HOST"] . '|&lt;?php echo $_SERVER["REMOTE_ADDR"]; ?&gt;"</code>' . "\n";
384
  echo '</td>' . "\n";
385
  /**/
includes/menu-pages/paypal-ops.inc.php CHANGED
@@ -227,30 +227,30 @@ if (apply_filters ("ws_plugin__s2member_during_paypal_ops_page_during_left_secti
227
  echo 'Message Body used in the email sent to a Customer after a successful signup has occurred through PayPal®.<br /><br />' . "\n";
228
  echo '<strong>You can also use these special Replacement Codes if you need them:</strong>' . "\n";
229
  echo '<ul>' . "\n";
230
- echo '<li><code>%%registration_url%% = The full URL ( generated by s2Member ) where the Customer can get registered.</code></li>' . "\n";
231
- echo '<li><code>%%subscr_id%% = The PayPal® Subscription ID, which remains constant throughout any &amp; all future payments.</code> [ <a href="#" onclick="alert(\'There is one exception. If you are selling Lifetime or Fixed-Term ( non-recurring ) access, using a Buy It Now button; the %%subscr_id%% is actually set to the Transaction ID for the purchase.\\n\\nPayPal® does not provide a specific Subscription ID for Buy It Now purchases. Since Lifetime &amp; Fixed-Term Subscriptions are NOT recurring ( i.e. there is only ONE payment ), using the Transaction ID as the Subscription ID is a graceful way to deal with this minor conflict.\'); return false;">?</a> ]</li>' . "\n";
232
- echo '<li><code>%%initial%% = The Initial Fee charged during signup. If you offered a free trial, this will be 0.</code> [ <a href="#" onclick="alert(\'This will always represent the amount of money the Customer spent, whenever they initially signed up, no matter what. If a Customer signs up, under the terms of a free trial period, this will be 0.\'); return false;">?</a> ]</li>' . "\n";
233
- echo '<li><code>%%regular%% = The Regular Amount of the Subscription. This value is always > 0, no matter what.</code> [ <a href="#" onclick="alert(\'This is how much the Subscription costs after an initial period expires. The %%regular%% rate is always > 0. If you did not offer an initial period, %%initial%% and %%regular%% will be equal to the same thing.\'); return false;">?</a> ]</li>' . "\n";
234
- echo '<li><code>%%recurring%% = This is the amount that will be charged on a Recurring basis, or 0 if non-Recurring.</code> [ <a href="#" onclick="alert(\'If recurring payments have not been required, this will be equal to 0. That being said, %%regular%% &amp; %%recurring%% are usually the same value. This variable can be used in two different ways. You can use it to determine what the regular recurring rate is, or to determine whether the Subscription will recur or not. If it is going to recur, %%recurring%% will be > 0.\\n\\nThe only time this is NOT equal to the %%regular%% rate, is when recurring payments are not required; and only a one-time regular rate applies.\'); return false;">?</a> ]</li>' . "\n";
235
- echo '<li><code>%%first_name%% = The First Name of the Customer who purchased the Membership Subscription through PayPal®.</code></li>' . "\n";
236
- echo '<li><code>%%last_name%% = The Last Name of the Customer who purchased the Membership Subscription through PayPal®.</code></li>' . "\n";
237
- echo '<li><code>%%full_name%% = The Full Name ( First & Last ) of the Customer who purchased the Membership Subscription.</code></li>' . "\n";
238
- echo '<li><code>%%payer_email%% = The Email Address of the Customer who purchased the Membership Subscription through PayPal®.</code></li>' . "\n";
239
- echo '<li><code>%%item_number%% = The Item Number ( colon separated <em>level:custom_capabilities:fixed term</em> ) that the Subscription is for.</code></li>' . "\n";
240
- echo '<li><code>%%item_name%% = The Item Name ( in other words, the associated membership Level Label that briefly describes the item number ).</code></li>' . "\n";
241
- echo '<li><code>%%initial_term%% = This is the term length of the initial period. This will be a numeric value, followed by a space, then a single letter.</code> [ <a href="#" onclick="alert(\'Here are some examples:\\n\\n%%initial_term%% = 1 D ( this means 1 Day )\\n%%initial_term%% = 1 W ( this means 1 Week )\\n%%initial_term%% = 1 M ( this means 1 Month )\\n%%initial_term%% = 1 Y ( this means 1 Year )\\n\\nThe initial period never recurs, so this only lasts for the term length specified, then it is over. If no initial period was even offered, the value of %%initial_term%% will just be: 0 D, meaning zero days.\'); return false;">?</a> ]</li>' . "\n";
242
- echo '<li><code>%%initial_cycle%% = This is the %%initial_term%% from above, converted ( and reduced ) to just a cycle representation, of: <em>Daily, Weekly, Monthly, or Yearly</em>.</code></li>' . "\n";
243
- echo '<li><code>%%regular_term%% = This is the term length of the regular period. This will be a numeric value, followed by a space, then a single letter.</code> [ <a href="#" onclick="alert(\'Here are some examples:\\n\\n%%regular_term%% = 1 D ( this means 1 Day )\\n%%regular_term%% = 1 W ( this means 1 Week )\\n%%regular_term%% = 1 M ( this means 1 Month )\\n%%regular_term%% = 1 Y ( this means 1 Year )\\n%%regular_term%% = 1 L ( this means 1 Lifetime )\\n\\nThe regular term is usually recurring. So the regular term value represents the period ( or duration ) of each recurring period. If %%recurring%% = 0, then the regular term only applies once, because it is not recurring. So if it is not recurring, the value of %%regular_term%% simply represents how long their membership privileges are going to last after the %%initial_term%% has expired, if there was an initial term. The value of this variable ( %%regular_term%% ) will never be empty, it will always be at least: 1 D, meaning 1 day. No exceptions.\'); return false;">?</a> ]</li>' . "\n";
244
- echo '<li><code>%%regular_cycle%% = This is the %%regular_term%% from above, converted ( and reduced ) to just a cycle representation, of: <em>Daily, Weekly, Monthly, Yearly, or Lifetime</em>.</code></li>' . "\n";
245
- echo '<li><code>%%recurring/regular_cycle%% = Example ( 14.95 / Monthly ), or ... ( 0 / non-recurring ); depending on the value of %%recurring%%.</code></li>' . "\n";
246
  echo '</ul>' . "\n";
247
  echo '<strong>Custom Replacement Codes can also be inserted using these instructions:</strong>' . "\n";
248
  echo '<ul>' . "\n";
249
- echo '<li><code>%%cv0%% = The domain of your site, which is passed through to PayPal® using the `custom` attribute in your PayPal® Shortcode.</code></li>' . "\n";
250
- echo '<li><code>%%cv1%% = If you need to track additional custom variables, you can pipe delimit them into the `custom` attribute, inside your Shortcode, like this: custom="' . $_SERVER["HTTP_HOST"] . '|cv1|cv2|cv3". You can have an unlimited number of custom variables that track IP addresses, affiliate IDs, etc. In some cases you may need to use PHP code to insert a value into the custom field dynamically. Obviously this is for advanced webmasters, but the functionality has been made available for those who need it.</li>' . "\n";
251
  echo '</ul>' . "\n";
252
  echo '<strong>This example uses cv1 to track a User\'s IP address:</strong><br />' . "\n";
253
- echo '<em>( The IP address could be referenced in your Confirmation Email using %%cv1%% )</em><br />' . "\n";
254
  echo '<code>custom="' . $_SERVER["HTTP_HOST"] . '|&lt;?php echo $_SERVER["REMOTE_ADDR"]; ?&gt;"</code>' . "\n";
255
  echo '</td>' . "\n";
256
  /**/
@@ -310,24 +310,24 @@ if (apply_filters ("ws_plugin__s2member_during_paypal_ops_page_during_left_secti
310
  echo 'Message Body used in the email sent to a Customer after a successful purchase has occurred through PayPal®, for Specific Post/Page Access.<br /><br />' . "\n";
311
  echo '<strong>You can also use these special Replacement Codes if you need them:</strong>' . "\n";
312
  echo '<ul>' . "\n";
313
- echo '<li><code>%%sp_access_url%% = The full URL ( generated by s2Member ) where the Customer can gain access.</code></li>' . "\n";
314
- echo '<li><code>%%sp_access_exp%% = Human readable expiration for %%sp_access_url%%. Ex: <em>( link expires in %%sp_access_exp%% )</em>.</code></li>' . "\n";
315
- echo '<li><code>%%txn_id%% = The PayPal® Transaction ID. PayPal® assigns a unique identifier for every purchase.</code></li>' . "\n";
316
- echo '<li><code>%%amount%% = The full Amount that you charged for Specific Post/Page Access. This value will always be > 0.</code></li>' . "\n";
317
- echo '<li><code>%%first_name%% = The First Name of the Customer who purchased Specific Post/Page Access through PayPal®.</code></li>' . "\n";
318
- echo '<li><code>%%last_name%% = The Last Name of the Customer who purchased Specific Post/Page Access through PayPal®.</code></li>' . "\n";
319
- echo '<li><code>%%full_name%% = The Full Name ( First & Last ) of the Customer who purchased Specific Post/Page Access.</code></li>' . "\n";
320
- echo '<li><code>%%payer_email%% = The Email Address of the Customer who purchased Specific Post/Page Access through PayPal®.</code></li>' . "\n";
321
- echo '<li><code>%%item_number%% = The Item Number. Ex: <em>sp:13,24,36:72</em> ( translates to: <em>sp:comma-delimited IDs:expiration hours</em> ).</code></li>' . "\n";
322
- echo '<li><code>%%item_name%% = The Item Name. In other words, a brief description, detailing what this purchase was for.</code></li>' . "\n";
323
  echo '</ul>' . "\n";
324
  echo '<strong>Custom Replacement Codes can also be inserted using these instructions:</strong>' . "\n";
325
  echo '<ul>' . "\n";
326
- echo '<li><code>%%cv0%% = The domain of your site, which is passed through to PayPal® using the `custom` attribute in your PayPal® Shortcode.</code></li>' . "\n";
327
- echo '<li><code>%%cv1%% = If you need to track additional custom variables, you can pipe delimit them into the `custom` attribute, inside your Shortcode, like this: custom="' . $_SERVER["HTTP_HOST"] . '|cv1|cv2|cv3". You can have an unlimited number of custom variables that track IP addresses, affiliate IDs, etc. In some cases you may need to use PHP code to insert a value into the custom field dynamically. Obviously this is for advanced webmasters, but the functionality has been made available for those who need it.</li>' . "\n";
328
  echo '</ul>' . "\n";
329
  echo '<strong>This example uses cv1 to track a User\'s IP address:</strong><br />' . "\n";
330
- echo '<em>( The IP address could be referenced in your Confirmation Email using %%cv1%% )</em><br />' . "\n";
331
  echo '<code>custom="' . $_SERVER["HTTP_HOST"] . '|&lt;?php echo $_SERVER["REMOTE_ADDR"]; ?&gt;"</code>' . "\n";
332
  echo '</td>' . "\n";
333
  /**/
227
  echo 'Message Body used in the email sent to a Customer after a successful signup has occurred through PayPal®.<br /><br />' . "\n";
228
  echo '<strong>You can also use these special Replacement Codes if you need them:</strong>' . "\n";
229
  echo '<ul>' . "\n";
230
+ echo '<li><code>%%registration_url%%</code> = The full URL ( generated by s2Member ) where the Customer can get registered.</li>' . "\n";
231
+ echo '<li><code>%%subscr_id%%</code> = The PayPal® Subscription ID, which remains constant throughout any &amp; all future payments. [ <a href="#" onclick="alert(\'There is one exception. If you are selling Lifetime or Fixed-Term ( non-recurring ) access, using Buy Now functionality; the %%subscr_id%% is actually set to the Transaction ID for the purchase.\\n\\nPayPal® does not provide a specific Subscription ID for Buy Now purchases. Since Lifetime &amp; Fixed-Term Subscriptions are NOT recurring ( i.e. there is only ONE payment ), using the Transaction ID as the Subscription ID is a graceful way to deal with this minor conflict.\'); return false;">?</a> ]</li>' . "\n";
232
+ echo '<li><code>%%initial%%</code> = The Initial Fee charged during signup. If you offered a free trial, this will be <code>0</code>. [ <a href="#" onclick="alert(\'This will always represent the amount of money the Customer spent, whenever they initially signed up, no matter what. If a Customer signs up, under the terms of a free trial period, this will be 0.\'); return false;">?</a> ]</li>' . "\n";
233
+ echo '<li><code>%%regular%%</code> = The Regular Amount of the Subscription. This value is <code>always > 0</code>, no matter what. [ <a href="#" onclick="alert(\'This is how much the Subscription costs after an initial period expires. The %%regular%% rate is always > 0. If you did not offer an initial period, %%initial%% and %%regular%% will be equal to the same thing.\'); return false;">?</a> ]</li>' . "\n";
234
+ echo '<li><code>%%recurring%%</code> = This is the amount that will be charged on a Recurring basis, or <code>0</code> if non-Recurring. [ <a href="#" onclick="alert(\'If recurring payments have not been required, this will be equal to 0. That being said, %%regular%% &amp; %%recurring%% are usually the same value. This variable can be used in two different ways. You can use it to determine what the regular recurring rate is, or to determine whether the Subscription will recur or not. If it is going to recur, %%recurring%% will be > 0.\'); return false;">?</a> ]</li>' . "\n";
235
+ echo '<li><code>%%first_name%%</code> = The First Name of the Customer who purchased the Membership Subscription.</li>' . "\n";
236
+ echo '<li><code>%%last_name%%</code> = The Last Name of the Customer who purchased the Membership Subscription.</li>' . "\n";
237
+ echo '<li><code>%%full_name%%</code> = The Full Name ( First & Last ) of the Customer who purchased the Membership Subscription.</li>' . "\n";
238
+ echo '<li><code>%%payer_email%%</code> = The Email Address of the Customer who purchased the Membership Subscription.</li>' . "\n";
239
+ echo '<li><code>%%item_number%%</code> = The Item Number ( colon separated <code><em>level:custom_capabilities:fixed term</em></code> ) that the Subscription is for.</li>' . "\n";
240
+ echo '<li><code>%%item_name%%</code> = The Item Name ( as provided by the <code>desc=""</code> attribute in your Shortcode, which briefly describes the Item Number ).</li>' . "\n";
241
+ echo '<li><code>%%initial_term%%</code> = This is the term length of the initial period. This will be a numeric value, followed by a space, then a single letter. [ <a href="#" onclick="alert(\'Here are some examples:\\n\\n%%initial_term%% = 1 D ( this means 1 Day )\\n%%initial_term%% = 1 W ( this means 1 Week )\\n%%initial_term%% = 1 M ( this means 1 Month )\\n%%initial_term%% = 1 Y ( this means 1 Year )\\n\\nThe initial period never recurs, so this only lasts for the term length specified, then it is over. If no initial period was even offered, the value of %%initial_term%% will just be: 0 D, meaning zero days.\'); return false;">?</a> ]</li>' . "\n";
242
+ echo '<li><code>%%initial_cycle%%</code> = This is the <code>%%initial_term%%</code> from above, converted ( and reduced ) to just a cycle representation, of: <code><em>Daily, Weekly, Monthly, or Yearly</em></code>.</li>' . "\n";
243
+ echo '<li><code>%%regular_term%%</code> = This is the term length of the regular period. This will be a numeric value, followed by a space, then a single letter. [ <a href="#" onclick="alert(\'Here are some examples:\\n\\n%%regular_term%% = 1 D ( this means 1 Day )\\n%%regular_term%% = 1 W ( this means 1 Week )\\n%%regular_term%% = 1 M ( this means 1 Month )\\n%%regular_term%% = 1 Y ( this means 1 Year )\\n%%regular_term%% = 1 L ( this means 1 Lifetime )\\n\\nThe regular term is usually recurring. So the regular term value represents the period ( or duration ) of each recurring period. If %%recurring%% = 0, then the regular term only applies once, because it is not recurring. So if it is not recurring, the value of %%regular_term%% simply represents how long their membership privileges are going to last after the %%initial_term%% has expired, if there was an initial term. The value of this variable ( %%regular_term%% ) will never be empty, it will always be at least: 1 D, meaning 1 day. No exceptions.\'); return false;">?</a> ]</li>' . "\n";
244
+ echo '<li><code>%%regular_cycle%%</code> = This is the <code>%%regular_term%%</code> from above, converted ( and reduced ) to just a cycle representation, of: <code><em>Daily, Weekly, Monthly, Yearly, or Lifetime</em></code>.</li>' . "\n";
245
+ echo '<li><code>%%recurring/regular_cycle%%</code> = Example ( <code>14.95 / Monthly</code> ), or ... ( <code>0 / non-recurring</code> ); depending on the value of <code>%%recurring%%</code>.</li>' . "\n";
246
  echo '</ul>' . "\n";
247
  echo '<strong>Custom Replacement Codes can also be inserted using these instructions:</strong>' . "\n";
248
  echo '<ul>' . "\n";
249
+ echo '<li><code>%%cv0%%</code> = The domain of your site, which is passed through the `custom` attribute in your Shortcode.</li>' . "\n";
250
+ echo '<li><code>%%cv1%%</code> = If you need to track additional custom variables, you can pipe delimit them into the `custom` attribute, inside your Shortcode, like this: <code>custom="' . $_SERVER["HTTP_HOST"] . '|cv1|cv2|cv3"</code>. You can have an unlimited number of custom variables that track IP addresses, affiliate IDs, etc. In some cases you may need to use PHP code to insert a value into the custom field dynamically. Obviously this is for advanced webmasters, but the functionality has been made available for those who need it.</li>' . "\n";
251
  echo '</ul>' . "\n";
252
  echo '<strong>This example uses cv1 to track a User\'s IP address:</strong><br />' . "\n";
253
+ echo '<em>( The IP address could be referenced using <code>%%cv1%%</code> )</em><br />' . "\n";
254
  echo '<code>custom="' . $_SERVER["HTTP_HOST"] . '|&lt;?php echo $_SERVER["REMOTE_ADDR"]; ?&gt;"</code>' . "\n";
255
  echo '</td>' . "\n";
256
  /**/
310
  echo 'Message Body used in the email sent to a Customer after a successful purchase has occurred through PayPal®, for Specific Post/Page Access.<br /><br />' . "\n";
311
  echo '<strong>You can also use these special Replacement Codes if you need them:</strong>' . "\n";
312
  echo '<ul>' . "\n";
313
+ echo '<li><code>%%sp_access_url%%</code> = The full URL ( generated by s2Member ) where the Customer can gain access.</li>' . "\n";
314
+ echo '<li><code>%%sp_access_exp%%</code> = Human readable expiration for <code>%%sp_access_url%%</code>. Ex: <em>( link expires in <code>%%sp_access_exp%%</code> )</em>.</li>' . "\n";
315
+ echo '<li><code>%%txn_id%%</code> = The PayPal® Transaction ID. PayPal® assigns a unique identifier for every purchase.</li>' . "\n";
316
+ echo '<li><code>%%amount%%</code> = The full Amount that you charged for Specific Post/Page Access. This value will <code>always be > 0</code>.</li>' . "\n";
317
+ echo '<li><code>%%first_name%%</code> = The First Name of the Customer who purchased Specific Post/Page Access.</li>' . "\n";
318
+ echo '<li><code>%%last_name%%</code> = The Last Name of the Customer who purchased Specific Post/Page Access.</li>' . "\n";
319
+ echo '<li><code>%%full_name%%</code> = The Full Name ( First & Last ) of the Customer who purchased Specific Post/Page Access.</li>' . "\n";
320
+ echo '<li><code>%%payer_email%%</code> = The Email Address of the Customer who purchased Specific Post/Page Access.</li>' . "\n";
321
+ echo '<li><code>%%item_number%%</code> = The Item Number. Ex: <code><em>sp:13,24,36:72</em></code> ( translates to: <code><em>sp:comma-delimited IDs:expiration hours</em></code> ).</li>' . "\n";
322
+ echo '<li><code>%%item_name%%</code> = The Item Name ( as provided by the <code>desc=""</code> attribute in your Shortcode, which briefly describes the Item Number ).</li>' . "\n";
323
  echo '</ul>' . "\n";
324
  echo '<strong>Custom Replacement Codes can also be inserted using these instructions:</strong>' . "\n";
325
  echo '<ul>' . "\n";
326
+ echo '<li><code>%%cv0%%</code> = The domain of your site, which is passed through the `custom` attribute in your Shortcode.</li>' . "\n";
327
+ echo '<li><code>%%cv1%%</code> = If you need to track additional custom variables, you can pipe delimit them into the `custom` attribute, inside your Shortcode, like this: <code>custom="' . $_SERVER["HTTP_HOST"] . '|cv1|cv2|cv3"</code>. You can have an unlimited number of custom variables that track IP addresses, affiliate IDs, etc. In some cases you may need to use PHP code to insert a value into the custom field dynamically. Obviously this is for advanced webmasters, but the functionality has been made available for those who need it.</li>' . "\n";
328
  echo '</ul>' . "\n";
329
  echo '<strong>This example uses cv1 to track a User\'s IP address:</strong><br />' . "\n";
330
+ echo '<em>( The IP address could be referenced using <code>%%cv1%%</code> )</em><br />' . "\n";
331
  echo '<code>custom="' . $_SERVER["HTTP_HOST"] . '|&lt;?php echo $_SERVER["REMOTE_ADDR"]; ?&gt;"</code>' . "\n";
332
  echo '</td>' . "\n";
333
  /**/
includes/menu-pages/trk-ops.inc.php CHANGED
@@ -64,26 +64,26 @@ if (apply_filters ("ws_plugin__s2member_during_trk_ops_page_during_left_sections
64
  echo 'Any valid XHTML / JavaScript' . ((!$GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["is_multisite_farm"]) ? ' ( or even PHP )' : '') . ' code will work just fine here. Just try not to put anything here that would actually be visible to the Customer. Things like 1x1 pixel images that load up silently and/or JavaScript tracking routines will be fine. Google® Analytics code works just fine, AdSense® performance tracking, as well as Yahoo® tracking and other affiliate network codes are all OK here.<br /><br />' . "\n";
65
  echo '<strong>You can also use these special Replacement Codes if you need them:</strong>' . "\n";
66
  echo '<ul>' . "\n";
67
- echo '<li><code>%%subscr_id%% = The PayPal® Subscription ID, which remains constant throughout any &amp; all future payments.</code> [ <a href="#" onclick="alert(\'There is one exception. If you are selling Lifetime or Fixed-Term ( non-recurring ) access, using a Buy It Now button; the %%subscr_id%% is actually set to the Transaction ID for the purchase.\\n\\nPayPal® does not provide a specific Subscription ID for Buy It Now purchases. Since Lifetime &amp; Fixed-Term Subscriptions are NOT recurring ( i.e. there is only ONE payment ), using the Transaction ID as the Subscription ID is a graceful way to deal with this minor conflict.\'); return false;">?</a> ]</li>' . "\n";
68
- echo '<li><code>%%initial%% = The Initial Fee charged during signup. If you offered a free trial, this will be 0.</code> [ <a href="#" onclick="alert(\'This will always represent the amount of money the Customer spent, whenever they initially signed up, no matter what. If a Customer signs up, under the terms of a free trial period, this will be 0.\'); return false;">?</a> ]</li>' . "\n";
69
- echo '<li><code>%%regular%% = The Regular Amount of the Subscription. This value is always > 0, no matter what.</code> [ <a href="#" onclick="alert(\'This is how much the Subscription costs after an initial period expires. The %%regular%% rate is always > 0. If you did not offer an initial period, %%initial%% and %%regular%% will be equal to the same thing.\'); return false;">?</a> ]</li>' . "\n";
70
- echo '<li><code>%%recurring%% = This is the amount that will be charged on a Recurring basis, or 0 if non-Recurring.</code> [ <a href="#" onclick="alert(\'If recurring payments have not been required, this will be equal to 0. That being said, %%regular%% &amp; %%recurring%% are usually the same value. This variable can be used in two different ways. You can use it to determine what the regular recurring rate is, or to determine whether the Subscription will recur or not. If it is going to recur, %%recurring%% will be > 0.\\n\\nThe only time this is NOT equal to the %%regular%% rate, is when recurring payments are not required; and only a one-time regular rate applies.\'); return false;">?</a> ]</li>' . "\n";
71
- echo '<li><code>%%first_name%% = The First Name of the Customer who purchased the Membership Subscription through PayPal®.</code></li>' . "\n";
72
- echo '<li><code>%%last_name%% = The Last Name of the Customer who purchased the Membership Subscription through PayPal®.</code></li>' . "\n";
73
- echo '<li><code>%%full_name%% = The Full Name ( First & Last ) of the Customer who purchased the Membership Subscription.</code></li>' . "\n";
74
- echo '<li><code>%%payer_email%% = The Email Address of the Customer who purchased the Membership Subscription through PayPal®.</code></li>' . "\n";
75
- echo '<li><code>%%item_number%% = The Item Number ( colon separated <em>level:custom_capabilities:fixed term</em> ) that the Subscription is for.</code></li>' . "\n";
76
- echo '<li><code>%%item_name%% = The Item Name ( in other words, the associated membership Level Label that briefly describes the Item Number ).</code></li>' . "\n";
77
- echo '<li><code>%%initial_term%% = This is the term length of the initial period. This will be a numeric value, followed by a space, then a single letter.</code> [ <a href="#" onclick="alert(\'Here are some examples:\\n\\n%%initial_term%% = 1 D ( this means 1 Day )\\n%%initial_term%% = 1 W ( this means 1 Week )\\n%%initial_term%% = 1 M ( this means 1 Month )\\n%%initial_term%% = 1 Y ( this means 1 Year )\\n\\nThe initial period never recurs, so this only lasts for the term length specified, then it is over. If no initial period was even offered, the value of %%initial_term%% will just be: 0 D, meaning zero days.\'); return false;">?</a> ]</li>' . "\n";
78
- echo '<li><code>%%regular_term%% = This is the term length of the regular period. This will be a numeric value, followed by a space, then a single letter.</code> [ <a href="#" onclick="alert(\'Here are some examples:\\n\\n%%regular_term%% = 1 D ( this means 1 Day )\\n%%regular_term%% = 1 W ( this means 1 Week )\\n%%regular_term%% = 1 M ( this means 1 Month )\\n%%regular_term%% = 1 Y ( this means 1 Year )\\n%%regular_term%% = 1 L ( this means 1 Lifetime )\\n\\nThe regular term is usually recurring. So the regular term value represents the period ( or duration ) of each recurring period. If %%recurring%% = 0, then the regular term only applies once, because it is not recurring. So if it is not recurring, the value of %%regular_term%% simply represents how long their membership privileges are going to last after the %%initial_term%% has expired, if there was an initial term. The value of this variable ( %%regular_term%% ) will never be empty, it will always be at least: 1 D, meaning 1 day. No exceptions.\'); return false;">?</a> ]</li>' . "\n";
79
  echo '</ul>' . "\n";
80
  echo '<strong>Custom Replacement Codes can also be inserted using these instructions:</strong>' . "\n";
81
  echo '<ul>' . "\n";
82
- echo '<li><code>%%cv0%% = The domain of your site, which is passed through to PayPal® using the `custom` attribute in your PayPal® Shortcode.</code></li>' . "\n";
83
- echo '<li><code>%%cv1%% = If you need to track additional custom variables, you can pipe delimit them into the `custom` attribute, inside your Shortcode, like this: custom="' . $_SERVER["HTTP_HOST"] . '|cv1|cv2|cv3". You can have an unlimited number of custom variables that track IP addresses, affiliate IDs, etc. In some cases you may need to use PHP code to insert a value into the custom field dynamically. Obviously this is for advanced webmasters, but the functionality has been made available for those who need it.</code></li>' . "\n";
84
  echo '</ul>' . "\n";
85
  echo '<strong>This example uses cv1 to track a User\'s IP address:</strong><br />' . "\n";
86
- echo '<em>( The IP address could be referenced in your Tracking Code using %%cv1%% )</em><br />' . "\n";
87
  echo '<code>custom="' . $_SERVER["HTTP_HOST"] . '|&lt;?php echo $_SERVER["REMOTE_ADDR"]; ?&gt;"</code>' . "\n";
88
  echo '</td>' . "\n";
89
  /**/
@@ -126,22 +126,22 @@ if (apply_filters ("ws_plugin__s2member_during_trk_ops_page_during_left_sections
126
  echo 'Any valid XHTML / JavaScript' . ((!$GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["is_multisite_farm"]) ? ' ( or even PHP )' : '') . ' code will work just fine here. Just try not to put anything here that would actually be visible to the Customer. Things like 1x1 pixel images that load up silently and/or JavaScript tracking routines will be fine. Google® Analytics code works just fine, AdSense® performance tracking, as well as Yahoo® tracking and other affiliate network codes are all OK here.<br /><br />' . "\n";
127
  echo '<strong>You can also use these special Replacement Codes if you need them:</strong>' . "\n";
128
  echo '<ul>' . "\n";
129
- echo '<li><code>%%txn_id%% = The PayPal® Transaction ID. PayPal® assigns a unique identifier for every purchase.</code></li>' . "\n";
130
- echo '<li><code>%%amount%% = The full Amount that you charged for Specific Post/Page Access. This value will always be > 0.</code></li>' . "\n";
131
- echo '<li><code>%%first_name%% = The First Name of the Customer who purchased Specific Post/Page Access through PayPal®.</code></li>' . "\n";
132
- echo '<li><code>%%last_name%% = The Last Name of the Customer who purchased Specific Post/Page Access through PayPal®.</code></li>' . "\n";
133
- echo '<li><code>%%full_name%% = The Full Name ( First & Last ) of the Customer who purchased Specific Post/Page Access.</code></li>' . "\n";
134
- echo '<li><code>%%payer_email%% = The Email Address of the Customer who purchased Specific Post/Page Access through PayPal®.</code></li>' . "\n";
135
- echo '<li><code>%%item_number%% = The Item Number. Ex: <em>sp:13,24,36:72</em> ( translates to: <em>sp:comma-delimited IDs:expiration hours</em> ).</code></li>' . "\n";
136
- echo '<li><code>%%item_name%% = The Item Name. In other words, a brief description, detailing what this purchase was for.</code></li>' . "\n";
137
  echo '</ul>' . "\n";
138
  echo '<strong>Custom Replacement Codes can also be inserted using these instructions:</strong>' . "\n";
139
  echo '<ul>' . "\n";
140
- echo '<li><code>%%cv0%% = The domain of your site, which is passed through to PayPal® using the `custom` attribute in your PayPal® Shortcode.</code></li>' . "\n";
141
- echo '<li><code>%%cv1%% = If you need to track additional custom variables, you can pipe delimit them into the `custom` attribute, inside your Shortcode, like this: custom="' . $_SERVER["HTTP_HOST"] . '|cv1|cv2|cv3". You can have an unlimited number of custom variables that track IP addresses, affiliate IDs, etc. In some cases you may need to use PHP code to insert a value into the custom field dynamically. Obviously this is for advanced webmasters, but the functionality has been made available for those who need it.</code></li>' . "\n";
142
  echo '</ul>' . "\n";
143
  echo '<strong>This example uses cv1 to track a User\'s IP address:</strong><br />' . "\n";
144
- echo '<em>( The IP address could be referenced in your Tracking Code using %%cv1%% )</em><br />' . "\n";
145
  echo '<code>custom="' . $_SERVER["HTTP_HOST"] . '|&lt;?php echo $_SERVER["REMOTE_ADDR"]; ?&gt;"</code>' . "\n";
146
  echo '</td>' . "\n";
147
  /**/
64
  echo 'Any valid XHTML / JavaScript' . ((!$GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["is_multisite_farm"]) ? ' ( or even PHP )' : '') . ' code will work just fine here. Just try not to put anything here that would actually be visible to the Customer. Things like 1x1 pixel images that load up silently and/or JavaScript tracking routines will be fine. Google® Analytics code works just fine, AdSense® performance tracking, as well as Yahoo® tracking and other affiliate network codes are all OK here.<br /><br />' . "\n";
65
  echo '<strong>You can also use these special Replacement Codes if you need them:</strong>' . "\n";
66
  echo '<ul>' . "\n";
67
+ echo '<li><code>%%subscr_id%%</code> = The PayPal® Subscription ID, which remains constant throughout any &amp; all future payments. [ <a href="#" onclick="alert(\'There is one exception. If you are selling Lifetime or Fixed-Term ( non-recurring ) access, using Buy Now functionality; the %%subscr_id%% is actually set to the Transaction ID for the purchase.\\n\\nPayPal® does not provide a specific Subscription ID for Buy Now purchases. Since Lifetime &amp; Fixed-Term Subscriptions are NOT recurring ( i.e. there is only ONE payment ), using the Transaction ID as the Subscription ID is a graceful way to deal with this minor conflict.\'); return false;">?</a> ]</li>' . "\n";
68
+ echo '<li><code>%%initial%%</code> = The Initial Fee charged during signup. If you offered a free trial, this will be <code>0</code>. [ <a href="#" onclick="alert(\'This will always represent the amount of money the Customer spent, whenever they initially signed up, no matter what. If a Customer signs up, under the terms of a free trial period, this will be 0.\'); return false;">?</a> ]</li>' . "\n";
69
+ echo '<li><code>%%regular%%</code> = The Regular Amount of the Subscription. This value is <code>always > 0</code>, no matter what. [ <a href="#" onclick="alert(\'This is how much the Subscription costs after an initial period expires. The %%regular%% rate is always > 0. If you did not offer an initial period, %%initial%% and %%regular%% will be equal to the same thing.\'); return false;">?</a> ]</li>' . "\n";
70
+ echo '<li><code>%%recurring%%</code> = This is the amount that will be charged on a Recurring basis, or <code>0</code> if non-Recurring. [ <a href="#" onclick="alert(\'If recurring payments have not been required, this will be equal to 0. That being said, %%regular%% &amp; %%recurring%% are usually the same value. This variable can be used in two different ways. You can use it to determine what the regular recurring rate is, or to determine whether the Subscription will recur or not. If it is going to recur, %%recurring%% will be > 0.\'); return false;">?</a> ]</li>' . "\n";
71
+ echo '<li><code>%%first_name%%</code> = The First Name of the Customer who purchased the Membership Subscription.</li>' . "\n";
72
+ echo '<li><code>%%last_name%%</code> = The Last Name of the Customer who purchased the Membership Subscription.</li>' . "\n";
73
+ echo '<li><code>%%full_name%%</code> = The Full Name ( First & Last ) of the Customer who purchased the Membership Subscription.</li>' . "\n";
74
+ echo '<li><code>%%payer_email%%</code> = The Email Address of the Customer who purchased the Membership Subscription.</li>' . "\n";
75
+ echo '<li><code>%%item_number%%</code> = The Item Number ( colon separated <code><em>level:custom_capabilities:fixed term</em></code> ) that the Subscription is for.</li>' . "\n";
76
+ echo '<li><code>%%item_name%%</code> = The Item Name ( as provided by the <code>desc=""</code> attribute in your Shortcode, which briefly describes the Item Number ).</li>' . "\n";
77
+ echo '<li><code>%%initial_term%%</code> = This is the term length of the initial period. This will be a numeric value, followed by a space, then a single letter. [ <a href="#" onclick="alert(\'Here are some examples:\\n\\n%%initial_term%% = 1 D ( this means 1 Day )\\n%%initial_term%% = 1 W ( this means 1 Week )\\n%%initial_term%% = 1 M ( this means 1 Month )\\n%%initial_term%% = 1 Y ( this means 1 Year )\\n\\nThe initial period never recurs, so this only lasts for the term length specified, then it is over. If no initial period was even offered, the value of %%initial_term%% will just be: 0 D, meaning zero days.\'); return false;">?</a> ]</li>' . "\n";
78
+ echo '<li><code>%%regular_term%%</code> = This is the term length of the regular period. This will be a numeric value, followed by a space, then a single letter. [ <a href="#" onclick="alert(\'Here are some examples:\\n\\n%%regular_term%% = 1 D ( this means 1 Day )\\n%%regular_term%% = 1 W ( this means 1 Week )\\n%%regular_term%% = 1 M ( this means 1 Month )\\n%%regular_term%% = 1 Y ( this means 1 Year )\\n%%regular_term%% = 1 L ( this means 1 Lifetime )\\n\\nThe regular term is usually recurring. So the regular term value represents the period ( or duration ) of each recurring period. If %%recurring%% = 0, then the regular term only applies once, because it is not recurring. So if it is not recurring, the value of %%regular_term%% simply represents how long their membership privileges are going to last after the %%initial_term%% has expired, if there was an initial term. The value of this variable ( %%regular_term%% ) will never be empty, it will always be at least: 1 D, meaning 1 day. No exceptions.\'); return false;">?</a> ]</li>' . "\n";
79
  echo '</ul>' . "\n";
80
  echo '<strong>Custom Replacement Codes can also be inserted using these instructions:</strong>' . "\n";
81
  echo '<ul>' . "\n";
82
+ echo '<li><code>%%cv0%%</code> = The domain of your site, which is passed through the `custom` attribute in your Shortcode.</li>' . "\n";
83
+ echo '<li><code>%%cv1%%</code> = If you need to track additional custom variables, you can pipe delimit them into the `custom` attribute, inside your Shortcode, like this: <code>custom="' . $_SERVER["HTTP_HOST"] . '|cv1|cv2|cv3"</code>. You can have an unlimited number of custom variables that track IP addresses, affiliate IDs, etc. In some cases you may need to use PHP code to insert a value into the custom field dynamically. Obviously this is for advanced webmasters, but the functionality has been made available for those who need it.</li>' . "\n";
84
  echo '</ul>' . "\n";
85
  echo '<strong>This example uses cv1 to track a User\'s IP address:</strong><br />' . "\n";
86
+ echo '<em>( The IP address could be referenced using <code>%%cv1%%</code> )</em><br />' . "\n";
87
  echo '<code>custom="' . $_SERVER["HTTP_HOST"] . '|&lt;?php echo $_SERVER["REMOTE_ADDR"]; ?&gt;"</code>' . "\n";
88
  echo '</td>' . "\n";
89
  /**/
126
  echo 'Any valid XHTML / JavaScript' . ((!$GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["is_multisite_farm"]) ? ' ( or even PHP )' : '') . ' code will work just fine here. Just try not to put anything here that would actually be visible to the Customer. Things like 1x1 pixel images that load up silently and/or JavaScript tracking routines will be fine. Google® Analytics code works just fine, AdSense® performance tracking, as well as Yahoo® tracking and other affiliate network codes are all OK here.<br /><br />' . "\n";
127
  echo '<strong>You can also use these special Replacement Codes if you need them:</strong>' . "\n";
128
  echo '<ul>' . "\n";
129
+ echo '<li><code>%%txn_id%%</code> = The PayPal® Transaction ID. PayPal® assigns a unique identifier for every purchase.</li>' . "\n";
130
+ echo '<li><code>%%amount%%</code> = The full Amount that you charged for Specific Post/Page Access. This value will <code>always be > 0</code>.</li>' . "\n";
131
+ echo '<li><code>%%first_name%%</code> = The First Name of the Customer who purchased Specific Post/Page Access.</li>' . "\n";
132
+ echo '<li><code>%%last_name%%</code> = The Last Name of the Customer who purchased Specific Post/Page Access.</li>' . "\n";
133
+ echo '<li><code>%%full_name%%</code> = The Full Name ( First & Last ) of the Customer who purchased Specific Post/Page Access.</li>' . "\n";
134
+ echo '<li><code>%%payer_email%%</code> = The Email Address of the Customer who purchased Specific Post/Page Access.</li>' . "\n";
135
+ echo '<li><code>%%item_number%%</code> = The Item Number. Ex: <code><em>sp:13,24,36:72</em></code> ( translates to: <code><em>sp:comma-delimited IDs:expiration hours</em></code> ).</li>' . "\n";
136
+ echo '<li><code>%%item_name%%</code> = The Item Name ( as provided by the <code>desc=""</code> attribute in your Shortcode, which briefly describes the Item Number ).</li>' . "\n";
137
  echo '</ul>' . "\n";
138
  echo '<strong>Custom Replacement Codes can also be inserted using these instructions:</strong>' . "\n";
139
  echo '<ul>' . "\n";
140
+ echo '<li><code>%%cv0%%</code> = The domain of your site, which is passed through the `custom` attribute in your Shortcode.</li>' . "\n";
141
+ echo '<li><code>%%cv1%%</code> = If you need to track additional custom variables, you can pipe delimit them into the `custom` attribute, inside your Shortcode, like this: <code>custom="' . $_SERVER["HTTP_HOST"] . '|cv1|cv2|cv3"</code>. You can have an unlimited number of custom variables that track IP addresses, affiliate IDs, etc. In some cases you may need to use PHP code to insert a value into the custom field dynamically. Obviously this is for advanced webmasters, but the functionality has been made available for those who need it.</li>' . "\n";
142
  echo '</ul>' . "\n";
143
  echo '<strong>This example uses cv1 to track a User\'s IP address:</strong><br />' . "\n";
144
+ echo '<em>( The IP address could be referenced using <code>%%cv1%%</code> )</em><br />' . "\n";
145
  echo '<code>custom="' . $_SERVER["HTTP_HOST"] . '|&lt;?php echo $_SERVER["REMOTE_ADDR"]; ?&gt;"</code>' . "\n";
146
  echo '</td>' . "\n";
147
  /**/
readme.txt CHANGED
@@ -1,7 +1,7 @@
1
  === s2Member ( Membership w/ PayPal® Integration ) also works w/ BuddyPress ===
2
 
3
- Version: 3.0.6
4
- Stable tag: 3.0.6
5
  Framework: WS-P-3.0
6
 
7
  SSL Compatible: yes
@@ -145,13 +145,19 @@ Not yet. This is coming soon though. It will be included in a future release of
145
  == Upgrade Notice ==
146
 
147
  = 3.0.6 =
148
- * Upgrade highly recommended.
149
 
150
  = 3.0.5 =
151
  * Several bug fixes, improvements, and some new features.
152
 
153
  == Changelog ==
154
 
 
 
 
 
 
 
155
  = 3.0.6 =
156
  * Bug fix. The file `paypal-button.html` was renamed in s2Member v3.0.5, to `paypal-checkout-button.html`. The "missing file error" has been corrected in v3.0.6.
157
 
1
  === s2Member ( Membership w/ PayPal® Integration ) also works w/ BuddyPress ===
2
 
3
+ Version: 3.0.8
4
+ Stable tag: 3.0.8
5
  Framework: WS-P-3.0
6
 
7
  SSL Compatible: yes
145
  == Upgrade Notice ==
146
 
147
  = 3.0.6 =
148
+ * Upgrade highly recommended. Fixes a bug in v3.0.5.
149
 
150
  = 3.0.5 =
151
  * Several bug fixes, improvements, and some new features.
152
 
153
  == Changelog ==
154
 
155
+ = 3.0.8 =
156
+ * Framework updated to support a special %%modification%% Replacement Code in proxy IPN Return URLs; used by the s2Member Pro Module.
157
+
158
+ = 3.0.7 =
159
+ * Support for IPN Proxy Return URLs has been added to the s2Member Framework. This makes it possible for proxy IPN requests to receive variables back in a custom return URL. This is used by the s2Member Pro Module.
160
+
161
  = 3.0.6 =
162
  * Bug fix. The file `paypal-button.html` was renamed in s2Member v3.0.5, to `paypal-checkout-button.html`. The "missing file error" has been corrected in v3.0.6.
163
 
s2member.php CHANGED
@@ -9,8 +9,8 @@ along with this software. In the main directory, see: /licensing/
9
  If not, see: <http://www.gnu.org/licenses/>.
10
  */
11
  /*
12
- Version: 3.0.6
13
- Stable tag: 3.0.6
14
  Framework: WS-P-3.0
15
 
16
  SSL Compatible: yes
@@ -46,7 +46,7 @@ if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
46
  /*
47
  Define versions.
48
  */
49
- define ("WS_PLUGIN__S2MEMBER_VERSION", "3.0.5");
50
  define ("WS_PLUGIN__S2MEMBER_MIN_PHP_VERSION", "5.2");
51
  define ("WS_PLUGIN__S2MEMBER_MIN_WP_VERSION", "2.9.2");
52
  define ("WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION", "1.0");
9
  If not, see: <http://www.gnu.org/licenses/>.
10
  */
11
  /*
12
+ Version: 3.0.8
13
+ Stable tag: 3.0.8
14
  Framework: WS-P-3.0
15
 
16
  SSL Compatible: yes
46
  /*
47
  Define versions.
48
  */
49
+ define ("WS_PLUGIN__S2MEMBER_VERSION", "3.0.8");
50
  define ("WS_PLUGIN__S2MEMBER_MIN_PHP_VERSION", "5.2");
51
  define ("WS_PLUGIN__S2MEMBER_MIN_WP_VERSION", "2.9.2");
52
  define ("WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION", "1.0");