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

Version Description

  • Bug fix. A bug in the PayPal Auto-Return routine for PDT ( Payment Data Transfer ) has been resolved. This bug was generating a message that read: Unable to verify POST vars. This was actually not a bug, but rather, a limitation in PDT transmissions from PayPal. s2Member has been updated, with a work-around for this limitation. This bug was very elusive, because it was not affecting all PayPal accounts. In some cases, it was only affecting PayPal accounts opened after October 2009.
Download this release

Release Info

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

Code changes from version 2.9 to 2.9.2

includes/functions/paypal-notify.inc.php CHANGED
@@ -70,7 +70,7 @@ function ws_plugin__s2member_paypal_notify ()
70
  {
71
  @mail ($paypal["payer_email"], $sbj, $msg, "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8", "-f " . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"]);
72
  /**/
73
- $paypal["s2member_log"][] = "Email sent after purchase, with a URL that provides the Customer with Single-Page Access.";
74
  }
75
  /**/
76
  if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sp_notification_urls"])
@@ -141,6 +141,10 @@ function ws_plugin__s2member_paypal_notify ()
141
  /**/
142
  $paypal["s2member_log"][] = "s2Member Level/Capabilities updated w/ advanced update routines.";
143
  /**/
 
 
 
 
144
  do_action ("s2member_during_paypal_notify_during_subscr_signup_w_update_vars");
145
  }
146
  else
@@ -201,7 +205,7 @@ function ws_plugin__s2member_paypal_notify ()
201
  {
202
  @mail ($paypal["payer_email"], $sbj, $msg, "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8", "-f " . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"]);
203
  /**/
204
- $paypal["s2member_log"][] = "Email sent after signup, with a URL to assist Customer w/ registration.";
205
  }
206
  /**/
207
  do_action ("s2member_during_paypal_notify_during_subscr_signup_wo_update_vars");
@@ -275,6 +279,10 @@ function ws_plugin__s2member_paypal_notify ()
275
  /**/
276
  $paypal["s2member_log"][] = "s2Member Level/Capabilities updated on subscription modification.";
277
  /**/
 
 
 
 
278
  do_action ("s2member_during_paypal_notify_during_subscr_modify");
279
  }
280
  else
70
  {
71
  @mail ($paypal["payer_email"], $sbj, $msg, "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8", "-f " . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"]);
72
  /**/
73
+ $paypal["s2member_log"][] = "Single-Page Confirmation Email sent to Customer, with a URL that provides Single-Page Access.";
74
  }
75
  /**/
76
  if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sp_notification_urls"])
141
  /**/
142
  $paypal["s2member_log"][] = "s2Member Level/Capabilities updated w/ advanced update routines.";
143
  /**/
144
+ @mail ($paypal["payer_email"], "Thank You! Your membership has been updated.", "Thank You! Your membership has been updated to:\n" . $paypal["item_name"] . "\n\nYou\\'ll need to log back in now.\n" . wp_login_url (), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8", "-f " . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"]);
145
+ /**/
146
+ $paypal["s2member_log"][] = "Modification Confirmation Email sent to Customer, with a URL that provides them with a way to log back in.";
147
+ /**/
148
  do_action ("s2member_during_paypal_notify_during_subscr_signup_w_update_vars");
149
  }
150
  else
205
  {
206
  @mail ($paypal["payer_email"], $sbj, $msg, "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8", "-f " . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"]);
207
  /**/
208
+ $paypal["s2member_log"][] = "Signup Confirmation Email sent to Customer, with a URL to assist w/ registration.";
209
  }
210
  /**/
211
  do_action ("s2member_during_paypal_notify_during_subscr_signup_wo_update_vars");
279
  /**/
280
  $paypal["s2member_log"][] = "s2Member Level/Capabilities updated on subscription modification.";
281
  /**/
282
+ @mail ($paypal["payer_email"], "Thank You! Your membership has been updated.", "Thank You! Your membership has been updated to:\n" . $paypal["item_name"] . "\n\nYou\\'ll need to log back in now.\n" . wp_login_url (), "From: \"" . preg_replace ('/"/', "'", $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_name"]) . "\" <" . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"] . ">\r\nContent-Type: text/plain; charset=utf-8", "-f " . $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["reg_email_from_email"]);
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
  do_action ("s2member_during_paypal_notify_during_subscr_modify");
287
  }
288
  else
includes/functions/paypal-return.inc.php CHANGED
@@ -21,9 +21,6 @@ function ws_plugin__s2member_paypal_return ()
21
  {
22
  do_action ("s2member_before_paypal_return");
23
  /**/
24
- /* Note: Auto-Return with PDT does not send anything when subscriptions are modified.
25
- Therefore, we need to be sure that we always send a thank you message here by default,
26
- and then we'll just leave the rest of the modification up to the IPN handler instead. */
27
  if ($_GET["s2member_paypal_return"] && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_business"])
28
  {
29
  global $wpdb; /* Need this global variable as a reference to the database object. */
@@ -358,12 +355,25 @@ function ws_plugin__s2member_paypal_return ()
358
  $paypal["s2member_log"][] = "Redirecting Customer to the Login Page, due to an error that occurred.";
359
  }
360
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
361
  else
362
  {
363
- $paypal["s2member_log"][] = "Unable to verify POST vars. This is most likely related to an invalid PayPal® configuration. Please check: s2Member -> PayPal® Options -> PDT/Auto-Return.";
364
  /**/
365
  echo '<script type="text/javascript">' . "\n";
366
- echo "alert('ERROR: Unable to verify POST vars. Please contact Support for assistance.\\n\\nThis is most likely related to an invalid PayPal® configuration. If you are the site owner, please check: s2Member -> PayPal® Options -> PDT/Auto-Return.');" . "\n";
367
  echo "window.location = '" . esc_js (wp_login_url ()) . "';";
368
  echo '</script>' . "\n";
369
  /**/
21
  {
22
  do_action ("s2member_before_paypal_return");
23
  /**/
 
 
 
24
  if ($_GET["s2member_paypal_return"] && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_business"])
25
  {
26
  global $wpdb; /* Need this global variable as a reference to the database object. */
355
  $paypal["s2member_log"][] = "Redirecting Customer to the Login Page, due to an error that occurred.";
356
  }
357
  }
358
+ else if (!isset ($_GET["tx"]) && (empty ($_POST) || $_POST["auth"]))
359
+ {
360
+ $paypal["s2member_log"][] = "No Return-Data from PayPal®. Customer must wait for Email Confirmation.";
361
+ /**/
362
+ echo '<script type="text/javascript">' . "\n";
363
+ echo "alert('Thank You! ( please check your email ).\\n\\n* Note: It can take ( up to 15 minutes ) for Email Confirmation. If you don\'t receive email confirmation in the next 15 minutes, please contact Support.');" . "\n";
364
+ if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_sandbox"])
365
+ echo "alert('** Sandbox Mode ** You will probably NOT receive this Email Confirmation in Sandbox Mode. Sandbox addresses are usually bogus ( for testing ).');" . "\n";
366
+ echo "window.location = '" . esc_js (get_bloginfo ("url")) . "';";
367
+ echo '</script>' . "\n";
368
+ /**/
369
+ $paypal["s2member_log"][] = "Redirecting Customer to the Home Page.";
370
+ }
371
  else
372
  {
373
+ $paypal["s2member_log"][] = "Unable to verify POST vars. This is most likely related to an invalid PayPal® configuration. Please check: s2Member -> PayPal® Options.";
374
  /**/
375
  echo '<script type="text/javascript">' . "\n";
376
+ echo "alert('ERROR: Unable to verify POST vars. Please contact Support for assistance.\\n\\nThis is most likely related to an invalid PayPal® configuration. If you are the site owner, please check: s2Member -> PayPal® Options.');" . "\n";
377
  echo "window.location = '" . esc_js (wp_login_url ()) . "';";
378
  echo '</script>' . "\n";
379
  /**/
includes/functions/readme-parsing.inc.php CHANGED
@@ -22,6 +22,9 @@ function ws_plugin__s2member_parse_readme ()
22
  /**/
23
  if (file_exists (dirname (dirname (dirname (__FILE__))) . "/readme.txt"))
24
  {
 
 
 
25
  if (!function_exists ("NC_Markdown"))
26
  include_once dirname (dirname (__FILE__)) . "/markdown/nc-markdown.inc.php";
27
  /**/
@@ -38,11 +41,15 @@ function ws_plugin__s2member_parse_readme ()
38
  $r2 = "/(\<\/div\>)(\<h2\>)(.+?)(\<\/h2\>)(.+?)(\<div class\=\"section\"\>\<h2\>|$)/si";
39
  $r3 = "/(\<div class\=\"section\"\>)(\<h2\>)(Specifications)(\<\/h2\>)(\<div class\=\"content\"\>)(.+?)(\<\/div\>\<\/div\>)/sei";
40
  $r4 = "/(\<div class\=\"section\"\>)(\<h2\>)(Screenshots)(\<\/h2\>)(\<div class\=\"content\"\>)(.+?)(\<\/div\>\<\/div\>)/si";
 
41
  /**/
42
  $rm = preg_replace ($r1, '<div class="section">' . "$1$2$3" . '<div class="content">' . "$4" . '</div></div>' . "$5", $rm);
43
  $rm = preg_replace ($r2, "$1" . '<div class="section">' . "$2$3$4" . '<div class="content">' . "$5" . '</div></div>' . "$6", $rm);
44
  $rm = stripslashes (preg_replace ($r3, "'\\1\\2\\3\\4\\5'._ws_plugin__s2member_parse_readme_specs('\\6').'\\7'", $rm, 1));
45
  $rm = stripslashes (preg_replace ($r4, "", $rm, 1)); /* Here we just remove the screenshots completely. */
 
 
 
46
  /**/
47
  $readme = '<div class="readme">' . "\n";
48
  $readme .= $rm . "\n"; /* Content. */
22
  /**/
23
  if (file_exists (dirname (dirname (dirname (__FILE__))) . "/readme.txt"))
24
  {
25
+ $o_pcre = ini_get ("pcre.backtrack_limit");
26
+ ini_set ("pcre.backtrack_limit", 10000000);
27
+ /**/
28
  if (!function_exists ("NC_Markdown"))
29
  include_once dirname (dirname (__FILE__)) . "/markdown/nc-markdown.inc.php";
30
  /**/
41
  $r2 = "/(\<\/div\>)(\<h2\>)(.+?)(\<\/h2\>)(.+?)(\<div class\=\"section\"\>\<h2\>|$)/si";
42
  $r3 = "/(\<div class\=\"section\"\>)(\<h2\>)(Specifications)(\<\/h2\>)(\<div class\=\"content\"\>)(.+?)(\<\/div\>\<\/div\>)/sei";
43
  $r4 = "/(\<div class\=\"section\"\>)(\<h2\>)(Screenshots)(\<\/h2\>)(\<div class\=\"content\"\>)(.+?)(\<\/div\>\<\/div\>)/si";
44
+ $r5 = "/(\<a)( href)/i"; /* Modify all links. Assume a nofollow relationship since destinations are unknown. */
45
  /**/
46
  $rm = preg_replace ($r1, '<div class="section">' . "$1$2$3" . '<div class="content">' . "$4" . '</div></div>' . "$5", $rm);
47
  $rm = preg_replace ($r2, "$1" . '<div class="section">' . "$2$3$4" . '<div class="content">' . "$5" . '</div></div>' . "$6", $rm);
48
  $rm = stripslashes (preg_replace ($r3, "'\\1\\2\\3\\4\\5'._ws_plugin__s2member_parse_readme_specs('\\6').'\\7'", $rm, 1));
49
  $rm = stripslashes (preg_replace ($r4, "", $rm, 1)); /* Here we just remove the screenshots completely. */
50
+ $rm = preg_replace ($r5, "$1" . ' target="_blank" rel="nofollow external"' . "$2", $rm);
51
+ /**/
52
+ ini_set ("pcre.backtrack_limit", $o_pcre);
53
  /**/
54
  $readme = '<div class="readme">' . "\n";
55
  $readme .= $rm . "\n"; /* Content. */
includes/menu-pages/api-ops.inc.php CHANGED
@@ -19,7 +19,7 @@ API Notifications page.
19
  echo '<div class="wrap ws-menu-page">' . "\n";
20
  /**/
21
  echo '<div id="icon-plugins" class="icon32"><br /></div>' . "\n";
22
- echo '<h2><div>Developed by <a href="' . ws_plugin__s2member_parse_readme_value ("Plugin URI") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-light.png" alt="." /></a></div>s2Member API / Notifications</h2>' . "\n";
23
  /**/
24
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
25
  /**/
@@ -356,13 +356,13 @@ echo '</td>' . "\n";
356
  /**/
357
  echo '<td class="ws-menu-page-table-r">' . "\n";
358
  /**/
359
- echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . ws_plugin__s2member_parse_readme_value ("Professional Installation URI") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-installation.png" alt="." title="Contact PriMoThemes!" /></a></div>' . "\n" : '';
360
  /**/
361
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
362
  /**/
363
- echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . ws_plugin__s2member_parse_readme_value ("Forum URI") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
364
  /**/
365
- echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . ws_plugin__s2member_parse_readme_value ("Donate link") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
366
  /**/
367
  echo '</td>' . "\n";
368
  /**/
19
  echo '<div class="wrap ws-menu-page">' . "\n";
20
  /**/
21
  echo '<div id="icon-plugins" class="icon32"><br /></div>' . "\n";
22
+ echo '<h2><div>Developed by <a href="' . ws_plugin__s2member_parse_readme_value ("Plugin URI") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-light.png" alt="." /></a></div>s2Member API / Notifications</h2>' . "\n";
23
  /**/
24
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
25
  /**/
356
  /**/
357
  echo '<td class="ws-menu-page-table-r">' . "\n";
358
  /**/
359
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . ws_plugin__s2member_parse_readme_value ("Professional Installation URI") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-installation.png" alt="." title="Contact PriMoThemes!" /></a></div>' . "\n" : '';
360
  /**/
361
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
362
  /**/
363
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . ws_plugin__s2member_parse_readme_value ("Forum URI") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
364
  /**/
365
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . ws_plugin__s2member_parse_readme_value ("Donate link") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
366
  /**/
367
  echo '</td>' . "\n";
368
  /**/
includes/menu-pages/buttons.inc.php CHANGED
@@ -19,7 +19,7 @@ PayPal® Button Generating page.
19
  echo '<div class="wrap ws-menu-page">' . "\n";
20
  /**/
21
  echo '<div id="icon-plugins" class="icon32"><br /></div>' . "\n";
22
- echo '<h2><div>Developed by <a href="' . ws_plugin__s2member_parse_readme_value ("Plugin URI") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-light.png" alt="." /></a></div>s2Member / PayPal® Button Codes</h2>' . "\n";
23
  /**/
24
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
25
  /**/
@@ -492,13 +492,13 @@ echo '</td>' . "\n";
492
  /**/
493
  echo '<td class="ws-menu-page-table-r">' . "\n";
494
  /**/
495
- echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . ws_plugin__s2member_parse_readme_value ("Professional Installation URI") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-installation.png" alt="." title="Contact PriMoThemes!" /></a></div>' . "\n" : '';
496
  /**/
497
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
498
  /**/
499
- echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . ws_plugin__s2member_parse_readme_value ("Forum URI") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
500
  /**/
501
- echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . ws_plugin__s2member_parse_readme_value ("Donate link") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
502
  /**/
503
  echo '</td>' . "\n";
504
  /**/
19
  echo '<div class="wrap ws-menu-page">' . "\n";
20
  /**/
21
  echo '<div id="icon-plugins" class="icon32"><br /></div>' . "\n";
22
+ echo '<h2><div>Developed by <a href="' . ws_plugin__s2member_parse_readme_value ("Plugin URI") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-light.png" alt="." /></a></div>s2Member / PayPal® Button Codes</h2>' . "\n";
23
  /**/
24
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
25
  /**/
492
  /**/
493
  echo '<td class="ws-menu-page-table-r">' . "\n";
494
  /**/
495
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . ws_plugin__s2member_parse_readme_value ("Professional Installation URI") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-installation.png" alt="." title="Contact PriMoThemes!" /></a></div>' . "\n" : '';
496
  /**/
497
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
498
  /**/
499
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . ws_plugin__s2member_parse_readme_value ("Forum URI") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
500
  /**/
501
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . ws_plugin__s2member_parse_readme_value ("Donate link") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
502
  /**/
503
  echo '</td>' . "\n";
504
  /**/
includes/menu-pages/code-samples/paypal-return-url.php CHANGED
@@ -1,3 +1,3 @@
1
  <?php echo S2MEMBER_PAYPAL_RETURN_URL; ?>
2
  This will output something like: http://www.example.com/?s2member_paypal_return=1
3
- ( this is used as the Signup Confirmation Page, and also handles PDT w/ Auto-Return )
1
  <?php echo S2MEMBER_PAYPAL_RETURN_URL; ?>
2
  This will output something like: http://www.example.com/?s2member_paypal_return=1
3
+ ( this is used as the Signup Confirmation Page, and also handles PDT/Auto-Return )
includes/menu-pages/down-ops.inc.php CHANGED
@@ -19,7 +19,7 @@ Download Options page.
19
  echo '<div class="wrap ws-menu-page">' . "\n";
20
  /**/
21
  echo '<div id="icon-plugins" class="icon32"><br /></div>' . "\n";
22
- echo '<h2><div>Developed by <a href="' . ws_plugin__s2member_parse_readme_value ("Plugin URI") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-light.png" alt="." /></a></div>s2Member File Download Options</h2>' . "\n";
23
  /**/
24
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
25
  /**/
@@ -173,13 +173,13 @@ echo '</td>' . "\n";
173
  /**/
174
  echo '<td class="ws-menu-page-table-r">' . "\n";
175
  /**/
176
- echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . ws_plugin__s2member_parse_readme_value ("Professional Installation URI") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-installation.png" alt="." title="Contact PriMoThemes!" /></a></div>' . "\n" : '';
177
  /**/
178
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
179
  /**/
180
- echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . ws_plugin__s2member_parse_readme_value ("Forum URI") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
181
  /**/
182
- echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . ws_plugin__s2member_parse_readme_value ("Donate link") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
183
  /**/
184
  echo '</td>' . "\n";
185
  /**/
19
  echo '<div class="wrap ws-menu-page">' . "\n";
20
  /**/
21
  echo '<div id="icon-plugins" class="icon32"><br /></div>' . "\n";
22
+ echo '<h2><div>Developed by <a href="' . ws_plugin__s2member_parse_readme_value ("Plugin URI") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-light.png" alt="." /></a></div>s2Member File Download Options</h2>' . "\n";
23
  /**/
24
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
25
  /**/
173
  /**/
174
  echo '<td class="ws-menu-page-table-r">' . "\n";
175
  /**/
176
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . ws_plugin__s2member_parse_readme_value ("Professional Installation URI") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-installation.png" alt="." title="Contact PriMoThemes!" /></a></div>' . "\n" : '';
177
  /**/
178
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
179
  /**/
180
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . ws_plugin__s2member_parse_readme_value ("Forum URI") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
181
  /**/
182
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . ws_plugin__s2member_parse_readme_value ("Donate link") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
183
  /**/
184
  echo '</td>' . "\n";
185
  /**/
includes/menu-pages/els-ops.inc.php CHANGED
@@ -19,7 +19,7 @@ PayPal® Options page.
19
  echo '<div class="wrap ws-menu-page">' . "\n";
20
  /**/
21
  echo '<div id="icon-plugins" class="icon32"><br /></div>' . "\n";
22
- echo '<h2><div>Developed by <a href="' . ws_plugin__s2member_parse_readme_value ("Plugin URI") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-light.png" alt="." /></a></div>s2Member API / List Servers</h2>' . "\n";
23
  /**/
24
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
25
  /**/
@@ -36,8 +36,8 @@ echo '<div class="ws-menu-page-group" title="MailChimp® List Server Integration
36
  echo '<div class="ws-menu-page-section ws-plugin--s2member-mailchimp-section">' . "\n";
37
  echo '<a href="http://www.mailchimp.com/signup/?aid=8f347da54d66b5298d13237d9&afl=1" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/mailchimp-stamp.png" class="ws-menu-page-right" style="width:125px; height:125px; border:0;" alt="." /></a>' . "\n";
38
  echo '<h3>MailChimp® List Server Integration ( optional )</h3>' . "\n";
39
- echo '<p>s2Member can be integrated with MailChimp®. MailChimp® is an email marketing service. MailChimp® makes it easy to send email newsletters to your Customers, manage your MailChimp® subscriber lists, and track campaign performance. Although s2Member can be integrated with almost ANY list server, we highly recommend MailChimp®; because of their <a href="http://www.mailchimp.com/api/?aid=8f347da54d66b5298d13237d9&afl=1" target="_blank" rel="xlink">powerful API for MailChimp® services</a>. In future versions of s2Member, we plan to build additional features into s2Member that work with, and extend, MailChimp® services.</p>' . "\n";
40
- echo '<p>For now, we\'ve covered the basics. You can have your Members automatically subscribed to your MailChimp® marketing lists ( e.g. newsletters / auto-responders ). You\'ll need a <a href="http://www.mailchimp.com/signup/?aid=8f347da54d66b5298d13237d9&afl=1" target="_blank" rel="xlink">MailChimp® account</a>, a <a href="http://admin.mailchimp.com/account/api-key-popup" target="_blank" rel="xlink">MailChimp® API Key</a>, and your <a href="#" onclick="alert(\'To obtain your MailChimp® List ID(s), log into your MailChimp® account, click on the Lists tab. Click the (View) button, for the list(s) you want to integrate with s2Member. Then, click the (settings) link at the top. On the main (settings) page, for each list, you\\\'ll find a Unique List ID.\'); return false;">MailChimp® List IDs</a>.</p>' . "\n";
41
  /**/
42
  echo '<table class="form-table">' . "\n";
43
  echo '<tbody>' . "\n";
@@ -54,7 +54,7 @@ echo '<tr>' . "\n";
54
  /**/
55
  echo '<td>' . "\n";
56
  echo '<input type="text" name="ws_plugin__s2member_mailchimp_api_key" id="ws-plugin--s2member-mailchimp-api-key" value="' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["mailchimp_api_key"]) . '" /><br />' . "\n";
57
- echo 'Once you have a MailChimp® account, you\'ll need to <a href="http://admin.mailchimp.com/account/api-key-popup" target="_blank" rel="xlink">add an API Key</a>.' . "\n";
58
  echo '</td>' . "\n";
59
  /**/
60
  echo '</tr>' . "\n";
@@ -157,7 +157,7 @@ echo '<div class="ws-menu-page-section ws-plugin--s2member-aweber-section">' . "
157
  echo '<a href="http://aweber.com/?348037" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/aweber-logo.png" class="ws-menu-page-right" style="width:125px; height:125px; border:0;" alt="." /></a>' . "\n";
158
  echo '<h3>AWeber® List Server Integration ( optional )</h3>' . "\n";
159
  echo '<p>s2Member can be integrated with AWeber®. AWeber® is an email marketing service. Whether you\'re looking to get your first email campaign off the ground, or you\'re a seasoned veteran who wants to dig into advanced tools like detailed email web analytics, activity based segmentation, geo-targeting and broadcast split-testing, AWeber\'s got just what you need to make email marketing work for you.</p>' . "\n";
160
- echo '<p>You can have your Members automatically subscribed to your AWeber® marketing lists ( e.g. newsletters / auto-responders ). You\'ll need an <a href="http://aweber.com/?348037" target="_blank" rel="xlink">AWeber® account</a> and your <a href="#" onclick="alert(\'To obtain your AWeber® List ID(s), log into your AWeber® account. Click on the Lists tab. On that page you\\\'ll find a Unique List ID associated with each of your lists. AWeber® sometimes refers to this as a List Name instead of a List ID.\'); return false;">AWeber® List IDs</a>. You will ALSO need to configure a Custom Email Parser inside your AWeber® account. Log into AWeber®, and go to <em>My Lists -> Email Parser</em>. Choose the PayPal® Parser. You can safely ignore the additional instructions they provide. s2Member just needs the PayPal® box checked, and that\'s all. At some point, we\'ll get in contact with AWeber® about integrating a Custom Parser that is specifically designed for s2Member. Until then, you can just use the PayPal® Parser that is already available in your AWeber® account.</p>' . "\n";
161
  /**/
162
  echo '<table class="form-table">' . "\n";
163
  echo '<tbody>' . "\n";
@@ -273,13 +273,13 @@ echo '</td>' . "\n";
273
  /**/
274
  echo '<td class="ws-menu-page-table-r">' . "\n";
275
  /**/
276
- echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . ws_plugin__s2member_parse_readme_value ("Professional Installation URI") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-installation.png" alt="." title="Contact PriMoThemes!" /></a></div>' . "\n" : '';
277
  /**/
278
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
279
  /**/
280
- echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . ws_plugin__s2member_parse_readme_value ("Forum URI") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
281
  /**/
282
- echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . ws_plugin__s2member_parse_readme_value ("Donate link") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
283
  /**/
284
  echo '</td>' . "\n";
285
  /**/
19
  echo '<div class="wrap ws-menu-page">' . "\n";
20
  /**/
21
  echo '<div id="icon-plugins" class="icon32"><br /></div>' . "\n";
22
+ echo '<h2><div>Developed by <a href="' . ws_plugin__s2member_parse_readme_value ("Plugin URI") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-light.png" alt="." /></a></div>s2Member API / List Servers</h2>' . "\n";
23
  /**/
24
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
25
  /**/
36
  echo '<div class="ws-menu-page-section ws-plugin--s2member-mailchimp-section">' . "\n";
37
  echo '<a href="http://www.mailchimp.com/signup/?aid=8f347da54d66b5298d13237d9&afl=1" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/mailchimp-stamp.png" class="ws-menu-page-right" style="width:125px; height:125px; border:0;" alt="." /></a>' . "\n";
38
  echo '<h3>MailChimp® List Server Integration ( optional )</h3>' . "\n";
39
+ echo '<p>s2Member can be integrated with MailChimp®. MailChimp® is an email marketing service. MailChimp® makes it easy to send email newsletters to your Customers, manage your MailChimp® subscriber lists, and track campaign performance. Although s2Member can be integrated with almost ANY list server, we highly recommend MailChimp®; because of their <a href="http://www.mailchimp.com/api/?aid=8f347da54d66b5298d13237d9&afl=1" target="_blank" rel="external">powerful API for MailChimp® services</a>. In future versions of s2Member, we plan to build additional features into s2Member that work with, and extend, MailChimp® services.</p>' . "\n";
40
+ echo '<p>For now, we\'ve covered the basics. You can have your Members automatically subscribed to your MailChimp® marketing lists ( e.g. newsletters / auto-responders ). You\'ll need a <a href="http://www.mailchimp.com/signup/?aid=8f347da54d66b5298d13237d9&afl=1" target="_blank" rel="external">MailChimp® account</a>, a <a href="http://admin.mailchimp.com/account/api-key-popup" target="_blank" rel="external">MailChimp® API Key</a>, and your <a href="#" onclick="alert(\'To obtain your MailChimp® List ID(s), log into your MailChimp® account, click on the Lists tab. Click the (View) button, for the list(s) you want to integrate with s2Member. Then, click the (settings) link at the top. On the main (settings) page, for each list, you\\\'ll find a Unique List ID.\'); return false;">MailChimp® List IDs</a>.</p>' . "\n";
41
  /**/
42
  echo '<table class="form-table">' . "\n";
43
  echo '<tbody>' . "\n";
54
  /**/
55
  echo '<td>' . "\n";
56
  echo '<input type="text" name="ws_plugin__s2member_mailchimp_api_key" id="ws-plugin--s2member-mailchimp-api-key" value="' . format_to_edit ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["mailchimp_api_key"]) . '" /><br />' . "\n";
57
+ echo 'Once you have a MailChimp® account, you\'ll need to <a href="http://admin.mailchimp.com/account/api-key-popup" target="_blank" rel="external">add an API Key</a>.' . "\n";
58
  echo '</td>' . "\n";
59
  /**/
60
  echo '</tr>' . "\n";
157
  echo '<a href="http://aweber.com/?348037" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/aweber-logo.png" class="ws-menu-page-right" style="width:125px; height:125px; border:0;" alt="." /></a>' . "\n";
158
  echo '<h3>AWeber® List Server Integration ( optional )</h3>' . "\n";
159
  echo '<p>s2Member can be integrated with AWeber®. AWeber® is an email marketing service. Whether you\'re looking to get your first email campaign off the ground, or you\'re a seasoned veteran who wants to dig into advanced tools like detailed email web analytics, activity based segmentation, geo-targeting and broadcast split-testing, AWeber\'s got just what you need to make email marketing work for you.</p>' . "\n";
160
+ echo '<p>You can have your Members automatically subscribed to your AWeber® marketing lists ( e.g. newsletters / auto-responders ). You\'ll need an <a href="http://aweber.com/?348037" target="_blank" rel="external">AWeber® account</a> and your <a href="#" onclick="alert(\'To obtain your AWeber® List ID(s), log into your AWeber® account. Click on the Lists tab. On that page you\\\'ll find a Unique List ID associated with each of your lists. AWeber® sometimes refers to this as a List Name instead of a List ID.\'); return false;">AWeber® List IDs</a>. You will ALSO need to configure a Custom Email Parser inside your AWeber® account. Log into AWeber®, and go to <em>My Lists -> Email Parser</em>. Choose the PayPal® Parser. You can safely ignore the additional instructions they provide. s2Member just needs the PayPal® box checked, and that\'s all. At some point, we\'ll get in contact with AWeber® about integrating a Custom Parser that is specifically designed for s2Member. Until then, you can just use the PayPal® Parser that is already available in your AWeber® account.</p>' . "\n";
161
  /**/
162
  echo '<table class="form-table">' . "\n";
163
  echo '<tbody>' . "\n";
273
  /**/
274
  echo '<td class="ws-menu-page-table-r">' . "\n";
275
  /**/
276
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . ws_plugin__s2member_parse_readme_value ("Professional Installation URI") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-installation.png" alt="." title="Contact PriMoThemes!" /></a></div>' . "\n" : '';
277
  /**/
278
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
279
  /**/
280
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . ws_plugin__s2member_parse_readme_value ("Forum URI") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
281
  /**/
282
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . ws_plugin__s2member_parse_readme_value ("Donate link") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
283
  /**/
284
  echo '</td>' . "\n";
285
  /**/
includes/menu-pages/info.inc.php CHANGED
@@ -19,7 +19,7 @@ s2Member Info page.
19
  echo '<div class="wrap ws-menu-page">' . "\n";
20
  /**/
21
  echo '<div id="icon-plugins" class="icon32"><br /></div>' . "\n";
22
- echo '<h2><div>Developed by <a href="' . ws_plugin__s2member_parse_readme_value("Plugin URI") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-light.png" alt="." /></a></div>s2Member Information</h2>' . "\n";
23
  /**/
24
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
25
  /**/
@@ -30,7 +30,7 @@ echo '<td class="ws-menu-page-table-l">' . "\n";
30
  /**/
31
  echo '<img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-icon.png" class="ws-menu-page-brand-icon" alt="." />' . "\n";
32
  /**/
33
- echo '<a href="' . ws_plugin__s2member_parse_readme_value("Plugin URI") . '?check_ver=' . urlencode(ws_plugin__s2member_parse_readme_value("Version")) . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-updates.png" class="ws-menu-page-brand-updates" alt="." /></a>' . "\n";
34
  /**/
35
  echo '<div class="ws-menu-page-readme">' . "\n";
36
  echo ws_plugin__s2member_parse_readme() . "\n";
@@ -40,13 +40,13 @@ echo '</td>' . "\n";
40
  /**/
41
  echo '<td class="ws-menu-page-table-r">' . "\n";
42
  /**/
43
- echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . ws_plugin__s2member_parse_readme_value ("Professional Installation URI") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-installation.png" alt="." title="Contact PriMoThemes!" /></a></div>' . "\n" : '';
44
  /**/
45
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
46
  /**/
47
- echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . ws_plugin__s2member_parse_readme_value("Forum URI") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
48
  /**/
49
- echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . ws_plugin__s2member_parse_readme_value("Donate link") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
50
  /**/
51
  echo '</td>' . "\n";
52
  /**/
19
  echo '<div class="wrap ws-menu-page">' . "\n";
20
  /**/
21
  echo '<div id="icon-plugins" class="icon32"><br /></div>' . "\n";
22
+ echo '<h2><div>Developed by <a href="' . ws_plugin__s2member_parse_readme_value("Plugin URI") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-light.png" alt="." /></a></div>s2Member Information</h2>' . "\n";
23
  /**/
24
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
25
  /**/
30
  /**/
31
  echo '<img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-icon.png" class="ws-menu-page-brand-icon" alt="." />' . "\n";
32
  /**/
33
+ echo '<a href="' . ws_plugin__s2member_parse_readme_value("Plugin URI") . '?check_ver=' . urlencode(ws_plugin__s2member_parse_readme_value("Version")) . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-updates.png" class="ws-menu-page-brand-updates" alt="." /></a>' . "\n";
34
  /**/
35
  echo '<div class="ws-menu-page-readme">' . "\n";
36
  echo ws_plugin__s2member_parse_readme() . "\n";
40
  /**/
41
  echo '<td class="ws-menu-page-table-r">' . "\n";
42
  /**/
43
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . ws_plugin__s2member_parse_readme_value ("Professional Installation URI") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-installation.png" alt="." title="Contact PriMoThemes!" /></a></div>' . "\n" : '';
44
  /**/
45
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
46
  /**/
47
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . ws_plugin__s2member_parse_readme_value("Forum URI") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
48
  /**/
49
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . ws_plugin__s2member_parse_readme_value("Donate link") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
50
  /**/
51
  echo '</td>' . "\n";
52
  /**/
includes/menu-pages/menu-pages.css CHANGED
@@ -177,7 +177,7 @@ div.ws-menu-page > table.ws-menu-page-table > tbody > tr > td.ws-menu-page-table
177
  margin: 0;
178
  padding: 0;
179
  }
180
- div.ws-menu-page > table.ws-menu-page-table > tbody > tr > td.ws-menu-page-table-l a[rel = "xlink"]
181
  {
182
  padding-right: 18px;
183
  background: url('<?php echo $i; ?>/brand-xlink.png') no-repeat center right;
177
  margin: 0;
178
  padding: 0;
179
  }
180
+ div.ws-menu-page > table.ws-menu-page-table > tbody > tr > td.ws-menu-page-table-l a[rel ~= "external"]
181
  {
182
  padding-right: 18px;
183
  background: url('<?php echo $i; ?>/brand-xlink.png') no-repeat center right;
includes/menu-pages/menu-pages.js CHANGED
@@ -83,7 +83,7 @@ jQuery(document).ready (function($)
83
  /**/
84
  $('input.ws-menu-page-media-btn').filter (function() /* Only those that have a rel attribute. */
85
  {
86
- return ($(this).attr ('rel')) ? true : false; /* Must have rel targeting an input id. */
87
  })/**/
88
  .click (function() /* Attach click events to media buttons with send_to_editor(). */
89
  {
@@ -241,7 +241,7 @@ jQuery(document).ready (function($)
241
  code.val (code.val ().replace (/ name\="p3" value\="(.*?)"/, ' name="p3" value="' + regPeriod + '"'));
242
  code.val (code.val ().replace (/ name\="t3" value\="(.*?)"/, ' name="t3" value="' + regTerm + '"'));
243
  /**/
244
- $('div#ws-plugin--s2member-' + button + '-button-prev').html (code.val ().replace (/\<form/, '<form target="_blank"').replace (/\<\?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_(ON0|OS0); \?\>/, ''));
245
  /**/
246
  if (button === 'modification')
247
  alert('Your Modification Button has been generated.\nPlease copy/paste the Shortcode Format into your Login Welcome Page, or wherever you feel it would be most appropriate.');
@@ -319,7 +319,7 @@ jQuery(document).ready (function($)
319
  /**/
320
  $link.hide (), $loading.show (), $.post (ajaxurl, {action: 's2member_sp_access_link', s2member_sp_access_link: '<?php echo ws_plugin__s2member_esc_sq (wp_create_nonce ("ws-plugin--s2member-sp-access-link")); ?>', s2member_sp_access_link_page: page, s2member_sp_access_link_hours: hours}, function(response)
321
  {
322
- $link.show ().html ('<a href="' + response + '" target="_blank" rel="xlink">' + response + '</a>'), $loading.hide ();
323
  });
324
  /**/
325
  return false;
83
  /**/
84
  $('input.ws-menu-page-media-btn').filter (function() /* Only those that have a rel attribute. */
85
  {
86
+ return($(this).attr ('rel')) ? true : false; /* Must have rel targeting an input id. */
87
  })/**/
88
  .click (function() /* Attach click events to media buttons with send_to_editor(). */
89
  {
241
  code.val (code.val ().replace (/ name\="p3" value\="(.*?)"/, ' name="p3" value="' + regPeriod + '"'));
242
  code.val (code.val ().replace (/ name\="t3" value\="(.*?)"/, ' name="t3" value="' + regTerm + '"'));
243
  /**/
244
+ $('div#ws-plugin--s2member-' + button + '-button-prev').html (code.val ().replace (/\<form/, '<form target="_blank"').replace (/\<\?php echo S2MEMBER_CURRENT_USER_VALUE_FOR_PP_(ON0|OS0); \?\>/g, ''));
245
  /**/
246
  if (button === 'modification')
247
  alert('Your Modification Button has been generated.\nPlease copy/paste the Shortcode Format into your Login Welcome Page, or wherever you feel it would be most appropriate.');
319
  /**/
320
  $link.hide (), $loading.show (), $.post (ajaxurl, {action: 's2member_sp_access_link', s2member_sp_access_link: '<?php echo ws_plugin__s2member_esc_sq (wp_create_nonce ("ws-plugin--s2member-sp-access-link")); ?>', s2member_sp_access_link_page: page, s2member_sp_access_link_hours: hours}, function(response)
321
  {
322
+ $link.show ().html ('<a href="' + response + '" target="_blank" rel="external">' + response + '</a>'), $loading.hide ();
323
  });
324
  /**/
325
  return false;
includes/menu-pages/options.inc.php CHANGED
@@ -19,7 +19,7 @@ General Options page.
19
  echo '<div class="wrap ws-menu-page">' . "\n";
20
  /**/
21
  echo '<div id="icon-plugins" class="icon32"><br /></div>' . "\n";
22
- echo '<h2><div>Developed by <a href="' . ws_plugin__s2member_parse_readme_value ("Plugin URI") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-light.png" alt="." /></a></div>s2Member General Options</h2>' . "\n";
23
  /**/
24
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
25
  /**/
@@ -171,7 +171,7 @@ echo '<div class="ws-menu-page-group" title="Login/Registration Design">' . "\n"
171
  /**/
172
  echo '<div class="ws-menu-page-section ws-plugin--s2member-login-registration-section">' . "\n";
173
  echo '<h3>Login/Registration Page Customization ( required )</h3>' . "\n";
174
- echo '<p>These settings allow you to customize the user interface for your Login / Registration Pages:<br />( <a href="' . wp_login_url () . '" target="_blank" rel="xlink">' . esc_html (wp_login_url ()) . '</a> )</p>' . "\n";
175
  /**/
176
  echo '<table class="form-table">' . "\n";
177
  echo '<tbody>' . "\n";
@@ -418,7 +418,7 @@ echo '<select name="ws_plugin__s2member_allow_subscribers_in" id="ws-plugin--s2m
418
  echo '<option value="0"' . ((!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["allow_subscribers_in"]) ? ' selected="selected"' : '') . '>No ( only Members can access their Login Welcome Page )</option>' . "\n";
419
  echo '<option value="1"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["allow_subscribers_in"]) ? ' selected="selected"' : '') . '>Yes ( if a Free Subscriber is logged in, they can also access this Page )</option>' . "\n";
420
  echo '</select><br />' . "\n";
421
- echo 'If you set this to <code>Yes</code>, it means that you\'re giving Free Subscribers the ability to access this special Page that is normally intended only for Members. If you set this to <code>Yes</code>, you\'re also turning on the `Anyone Can Register` option that is built into WordPress®. So what this means, is that you\'re allowing people to signup for free, as a Free Subscriber, who will then have access to the Login Welcome Page, even though they\'re NOT a paid Member. This is only useful if you plan to let Users signup for free ( <a href="' . add_query_arg ("action", "register", wp_login_url ()) . '" target="_blank" rel="xlink">' . esc_html (add_query_arg ("action", "register", wp_login_url ())) . '</a> ). See <code>s2Member -> API Scripting -> Advanced Conditionals</code>, for details on how to customize your Login Welcome Page with Conditionals; based on Membership Level.' . "\n";
422
  echo '</td>' . "\n";
423
  /**/
424
  echo '</tr>' . "\n";
@@ -994,13 +994,13 @@ echo '<div class="ws-menu-page-group" title="Member Profile Modifications">' . "
994
  /**/
995
  echo '<div class="ws-menu-page-section ws-plugin--s2member-profile-modifications-section">' . "\n";
996
  echo '<h3>Giving Members The Ability To Modify Their Profile</h3>' . "\n";
997
- echo '<p>s2Member can be configured to redirect Members away from the <a href="profile.php" target="_blank" rel="xlink">default Profile Editing Panel</a> that is built into WordPress®. When/if a Member attempts to access the default Profile Editing Panel, they\'ll instead, be redirected to the Login Welcome Page that you\'ve configured through s2Member. <strong>Why would I redirect?</strong> Unless you\'ve made some drastic modifications to your WordPress® installation, the default Profile Editing Panel that ships with WordPress®, is NOT really suited for public access, even by a Member.</p>' . "\n";
998
- echo '<p>So instead of using this default Profile Editing Panel; s2Member creates an added layer of functionality, on top of WordPress®. It does this by providing you ( as the site owner ), with the ability to send your Members to a <a href="' . get_bloginfo ("url") . '/?s2member_profile=1" target="_blank" rel="xlink">special Stand-Alone page</a>, where your Members can modify their entire Profile, including all Custom Fields, and their Password. This special Stand-Alone Editing Panel, has been designed ( with a bare-bones format ), intentionally. This makes it possible for you to <a href="#" onclick="if(!window.open(\'' . get_bloginfo ("url") . '/?s2member_profile=1\', \'_popup\', \'height=350,width=400,left=100,screenX=100,top=100,screenY=100, location=0,menubar=0,toolbar=0,status=0,scrollbars=1,resizable=1\')) alert(\'Please disable popup blockers and try again!\'); return false;" rel="xlink">open it up in a popup window</a>, or embed it into your Login Welcome Page using an IFRAME. Code samples are provided below.</p>' . "\n";
999
  /**/
1000
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
1001
  /**/
1002
  echo '<p>Stand-Alone page where Members can modify their Profile:<br />' . "\n";
1003
- echo '<code><a href="' . get_bloginfo ("url") . '/?s2member_profile=1" target="_blank" rel="xlink">' . get_bloginfo ("url") . '/?s2member_profile=1</a></code></p>' . "\n";
1004
  /**/
1005
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
1006
  /**/
@@ -1084,13 +1084,13 @@ echo '</td>' . "\n";
1084
  /**/
1085
  echo '<td class="ws-menu-page-table-r">' . "\n";
1086
  /**/
1087
- echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . ws_plugin__s2member_parse_readme_value ("Professional Installation URI") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-installation.png" alt="." title="Contact PriMoThemes!" /></a></div>' . "\n" : '';
1088
  /**/
1089
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
1090
  /**/
1091
- echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . ws_plugin__s2member_parse_readme_value ("Forum URI") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
1092
  /**/
1093
- echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . ws_plugin__s2member_parse_readme_value ("Donate link") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
1094
  /**/
1095
  echo '</td>' . "\n";
1096
  /**/
19
  echo '<div class="wrap ws-menu-page">' . "\n";
20
  /**/
21
  echo '<div id="icon-plugins" class="icon32"><br /></div>' . "\n";
22
+ echo '<h2><div>Developed by <a href="' . ws_plugin__s2member_parse_readme_value ("Plugin URI") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-light.png" alt="." /></a></div>s2Member General Options</h2>' . "\n";
23
  /**/
24
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
25
  /**/
171
  /**/
172
  echo '<div class="ws-menu-page-section ws-plugin--s2member-login-registration-section">' . "\n";
173
  echo '<h3>Login/Registration Page Customization ( required )</h3>' . "\n";
174
+ echo '<p>These settings allow you to customize the user interface for your Login / Registration Pages:<br />( <a href="' . wp_login_url () . '" target="_blank" rel="external">' . esc_html (wp_login_url ()) . '</a> )</p>' . "\n";
175
  /**/
176
  echo '<table class="form-table">' . "\n";
177
  echo '<tbody>' . "\n";
418
  echo '<option value="0"' . ((!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["allow_subscribers_in"]) ? ' selected="selected"' : '') . '>No ( only Members can access their Login Welcome Page )</option>' . "\n";
419
  echo '<option value="1"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["allow_subscribers_in"]) ? ' selected="selected"' : '') . '>Yes ( if a Free Subscriber is logged in, they can also access this Page )</option>' . "\n";
420
  echo '</select><br />' . "\n";
421
+ echo 'If you set this to <code>Yes</code>, it means that you\'re giving Free Subscribers the ability to access this special Page that is normally intended only for Members. If you set this to <code>Yes</code>, you\'re also turning on the `Anyone Can Register` option that is built into WordPress®. So what this means, is that you\'re allowing people to signup for free, as a Free Subscriber, who will then have access to the Login Welcome Page, even though they\'re NOT a paid Member. This is only useful if you plan to let Users signup for free ( <a href="' . add_query_arg ("action", "register", wp_login_url ()) . '" target="_blank" rel="external">' . esc_html (add_query_arg ("action", "register", wp_login_url ())) . '</a> ). See <code>s2Member -> API Scripting -> Advanced Conditionals</code>, for details on how to customize your Login Welcome Page with Conditionals; based on Membership Level.' . "\n";
422
  echo '</td>' . "\n";
423
  /**/
424
  echo '</tr>' . "\n";
994
  /**/
995
  echo '<div class="ws-menu-page-section ws-plugin--s2member-profile-modifications-section">' . "\n";
996
  echo '<h3>Giving Members The Ability To Modify Their Profile</h3>' . "\n";
997
+ echo '<p>s2Member can be configured to redirect Members away from the <a href="profile.php" target="_blank" rel="external">default Profile Editing Panel</a> that is built into WordPress®. When/if a Member attempts to access the default Profile Editing Panel, they\'ll instead, be redirected to the Login Welcome Page that you\'ve configured through s2Member. <strong>Why would I redirect?</strong> Unless you\'ve made some drastic modifications to your WordPress® installation, the default Profile Editing Panel that ships with WordPress®, is NOT really suited for public access, even by a Member.</p>' . "\n";
998
+ echo '<p>So instead of using this default Profile Editing Panel; s2Member creates an added layer of functionality, on top of WordPress®. It does this by providing you ( as the site owner ), with the ability to send your Members to a <a href="' . get_bloginfo ("url") . '/?s2member_profile=1" target="_blank" rel="external">special Stand-Alone page</a>, where your Members can modify their entire Profile, including all Custom Fields, and their Password. This special Stand-Alone Editing Panel, has been designed ( with a bare-bones format ), intentionally. This makes it possible for you to <a href="#" onclick="if(!window.open(\'' . get_bloginfo ("url") . '/?s2member_profile=1\', \'_popup\', \'height=350,width=400,left=100,screenX=100,top=100,screenY=100, location=0,menubar=0,toolbar=0,status=0,scrollbars=1,resizable=1\')) alert(\'Please disable popup blockers and try again!\'); return false;" rel="external">open it up in a popup window</a>, or embed it into your Login Welcome Page using an IFRAME. Code samples are provided below.</p>' . "\n";
999
  /**/
1000
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
1001
  /**/
1002
  echo '<p>Stand-Alone page where Members can modify their Profile:<br />' . "\n";
1003
+ echo '<code><a href="' . get_bloginfo ("url") . '/?s2member_profile=1" target="_blank" rel="external">' . get_bloginfo ("url") . '/?s2member_profile=1</a></code></p>' . "\n";
1004
  /**/
1005
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
1006
  /**/
1084
  /**/
1085
  echo '<td class="ws-menu-page-table-r">' . "\n";
1086
  /**/
1087
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . ws_plugin__s2member_parse_readme_value ("Professional Installation URI") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-installation.png" alt="." title="Contact PriMoThemes!" /></a></div>' . "\n" : '';
1088
  /**/
1089
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
1090
  /**/
1091
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . ws_plugin__s2member_parse_readme_value ("Forum URI") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
1092
  /**/
1093
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . ws_plugin__s2member_parse_readme_value ("Donate link") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
1094
  /**/
1095
  echo '</td>' . "\n";
1096
  /**/
includes/menu-pages/paypal-ops.inc.php CHANGED
@@ -19,7 +19,7 @@ PayPal® Options page.
19
  echo '<div class="wrap ws-menu-page">' . "\n";
20
  /**/
21
  echo '<div id="icon-plugins" class="icon32"><br /></div>' . "\n";
22
- echo '<h2><div>Developed by <a href="' . ws_plugin__s2member_parse_readme_value ("Plugin URI") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-light.png" alt="." /></a></div>s2Member PayPal® Options</h2>' . "\n";
23
  /**/
24
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
25
  /**/
@@ -36,7 +36,7 @@ echo '<div class="ws-menu-page-group" title="PayPal® Account Details">' . "\n";
36
  /**/
37
  echo '<div class="ws-menu-page-section ws-plugin--s2member-paypal-email-section">' . "\n";
38
  echo '<h3>PayPal® EMail Address ( required, please customize this )</h3>' . "\n";
39
- echo '<p>This plugin works in conjunction with <a href="https://www.paypal.com/us/mrb/pal=K8S5Y97AKWYY8" target="_blank" rel="xlink">PayPal® Website Payments Standard</a>, for businesses. You do NOT need a PayPal® Pro account. You just need to upgrade your Personal PayPal® account to a Business status, which is free. A PayPal® account can be <a href="http://pages.ebay.com/help/buy/questions/upgrade-paypal-account.html" target="_blank" rel="xlink">upgraded</a> from a Personal account to a Business account, simply by going to the `Profile` button under the `My Account` tab, selecting the `Personal Business Information` button, and then clicking the `Upgrade Your Account` button.</p>' . "\n";
40
  /**/
41
  echo '<table class="form-table">' . "\n";
42
  echo '<tbody>' . "\n";
@@ -70,7 +70,7 @@ echo '<tr>' . "\n";
70
  /**/
71
  echo '<td>' . "\n";
72
  echo '<input type="radio" name="ws_plugin__s2member_paypal_sandbox" id="ws-plugin--s2member-paypal-sandbox-0" value="0"' . ((!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_sandbox"]) ? ' checked="checked"' : '') . ' /> <label for="ws-plugin--s2member-paypal-sandbox-0">No</label> &nbsp;&nbsp;&nbsp; <input type="radio" name="ws_plugin__s2member_paypal_sandbox" id="ws-plugin--s2member-paypal-sandbox-1" value="1"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_sandbox"]) ? ' checked="checked"' : '') . ' /> <label for="ws-plugin--s2member-paypal-sandbox-1">Yes, enable support for Sandbox testing.</label><br />' . "\n";
73
- echo '<em>Only enable this if you\'ve provided a Sandbox email address above.<br />This puts the IPN, PDT and Button Generator into Sandbox mode.<br />See: <a href="https://developer.paypal.com/" target="_blank" rel="xlink">https://developer.paypal.com</a></em>' . "\n";
74
  echo '</td>' . "\n";
75
  /**/
76
  echo '</tr>' . "\n";
@@ -106,8 +106,8 @@ echo '<h3>PayPal® IPN / Instant Payment Notifications ( required, please enable
106
  echo '<p>Log into your PayPal® account and navigate to this section:<br /><code>Account Profile -> Instant Payment Notification Preferences</code></p>' . "\n";
107
  echo '<p>Edit your IPN settings &amp; turn IPN Notifications: <strong><code>On</code></strong></p>' . "\n";
108
  echo '<p>You\'ll need your IPN URL, which is:<br /><code>' . get_bloginfo ("url") . '/?s2member_paypal_notify=1</code></p>' . "\n";
109
- echo '<p><strong>Quick tip:</strong> In addition to the default IPN Settings inside your PayPal® account, the IPN URL is also set on a per-transaction basis by the special PayPal® Button Code that s2Member provides you with. In other words, if you have multiple sites operating on one PayPal® account, that\'s OK. s2Member dynamically sets the IPN URL for each transaction. The result is that the IPN URL configured from within your PayPal® account, becomes the default, which is then overwritten on a per transaction basis. In fact, PayPal® recently updated their system to support IPN URL preservation. One PayPal® account can handle multiple sites, all using different IPN URLs.' . "\n";
110
- echo '<p><strong>More information:</strong> You\'ll be happy to know that s2Member handles cancellations, expirations, failed payments ( more than 2 in a row ), terminations ( e.g. refunds &amp; chargebacks ) for you automatically. If you log into your PayPal® account and cancel a Member\'s subscription, or, if the Member logs into their PayPal® account and cancels their own subscription, s2Member will be notified of these important changes and react accordingly through the PayPal® IPN service that runs silently behind-the-scene. The PayPal® IPN service will notify s2Member whenever a Member\'s payments have been failing ( more than 2 times in a row ), and/or whenever a Member\'s subscription has expired for any reason. Even refunds &amp; chargeback reversals are supported through the IPN service. If you issue a refund to an unhappy Customer through PayPal®, s2Member will be notified, and the account for that Customer will either be demoted to a Free Subscriber, or deleted automatically ( based on your configuration ). The communication from PayPal® -> s2Member is seamless.</p>' . "\n";
111
  echo '</div>' . "\n";
112
  /**/
113
  echo '</div>' . "\n";
@@ -120,7 +120,7 @@ echo '<p>Log into your PayPal® account and navigate to this section:<br /><code
120
  echo '<p>Turn the Auto-Return feature: <strong><code>On</code></strong></p>' . "\n";
121
  echo '<p>You\'ll need your Auto-Return URL, which is:<br /><code>' . get_bloginfo ("url") . '/?s2member_paypal_return=1</code></p>' . "\n";
122
  echo '<p>You MUST also enable PDT ( Payment Data Transfer ): <strong><code>On</code></strong><br /><em>You\'ll be issued an Identity Token that you MUST enter below.</em></p>' . "\n";
123
- echo '<p><strong>Quick tip:</strong> In addition to your default PayPal® account configuration, the Auto-Return URL is also set on a per-transaction basis from within the special PayPal® Button Code that s2Member provides you with. In other words, if you have multiple sites operating on one PayPal® account, that\'s OK. s2Member dynamically sets the Auto-Return URL for each transaction. The result is that the Auto-Return URL configured from within your PayPal® account, becomes the default, which is then overwritten on a per transaction basis.' . "\n";
124
  /**/
125
  echo '<table class="form-table">' . "\n";
126
  echo '<tbody>' . "\n";
@@ -330,13 +330,13 @@ echo '</td>' . "\n";
330
  /**/
331
  echo '<td class="ws-menu-page-table-r">' . "\n";
332
  /**/
333
- echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . ws_plugin__s2member_parse_readme_value ("Professional Installation URI") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-installation.png" alt="." title="Contact PriMoThemes!" /></a></div>' . "\n" : '';
334
  /**/
335
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
336
  /**/
337
- echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . ws_plugin__s2member_parse_readme_value ("Forum URI") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
338
  /**/
339
- echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . ws_plugin__s2member_parse_readme_value ("Donate link") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
340
  /**/
341
  echo '</td>' . "\n";
342
  /**/
19
  echo '<div class="wrap ws-menu-page">' . "\n";
20
  /**/
21
  echo '<div id="icon-plugins" class="icon32"><br /></div>' . "\n";
22
+ echo '<h2><div>Developed by <a href="' . ws_plugin__s2member_parse_readme_value ("Plugin URI") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-light.png" alt="." /></a></div>s2Member PayPal® Options</h2>' . "\n";
23
  /**/
24
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
25
  /**/
36
  /**/
37
  echo '<div class="ws-menu-page-section ws-plugin--s2member-paypal-email-section">' . "\n";
38
  echo '<h3>PayPal® EMail Address ( required, please customize this )</h3>' . "\n";
39
+ echo '<p>This plugin works in conjunction with <a href="https://www.paypal.com/us/mrb/pal=K8S5Y97AKWYY8" target="_blank" rel="external">PayPal® Website Payments Standard</a>, for businesses. You do NOT need a PayPal® Pro account. You just need to upgrade your Personal PayPal® account to a Business status, which is free. A PayPal® account can be <a href="http://pages.ebay.com/help/buy/questions/upgrade-paypal-account.html" target="_blank" rel="external">upgraded</a> from a Personal account to a Business account, simply by going to the `Profile` button under the `My Account` tab, selecting the `Personal Business Information` button, and then clicking the `Upgrade Your Account` button.</p>' . "\n";
40
  /**/
41
  echo '<table class="form-table">' . "\n";
42
  echo '<tbody>' . "\n";
70
  /**/
71
  echo '<td>' . "\n";
72
  echo '<input type="radio" name="ws_plugin__s2member_paypal_sandbox" id="ws-plugin--s2member-paypal-sandbox-0" value="0"' . ((!$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_sandbox"]) ? ' checked="checked"' : '') . ' /> <label for="ws-plugin--s2member-paypal-sandbox-0">No</label> &nbsp;&nbsp;&nbsp; <input type="radio" name="ws_plugin__s2member_paypal_sandbox" id="ws-plugin--s2member-paypal-sandbox-1" value="1"' . (($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_sandbox"]) ? ' checked="checked"' : '') . ' /> <label for="ws-plugin--s2member-paypal-sandbox-1">Yes, enable support for Sandbox testing.</label><br />' . "\n";
73
+ echo '<em>Only enable this if you\'ve provided a Sandbox email address above.<br />This puts the IPN, PDT and Button Generator into Sandbox mode.<br />See: <a href="https://developer.paypal.com/" target="_blank" rel="external">https://developer.paypal.com</a></em>' . "\n";
74
  echo '</td>' . "\n";
75
  /**/
76
  echo '</tr>' . "\n";
106
  echo '<p>Log into your PayPal® account and navigate to this section:<br /><code>Account Profile -> Instant Payment Notification Preferences</code></p>' . "\n";
107
  echo '<p>Edit your IPN settings &amp; turn IPN Notifications: <strong><code>On</code></strong></p>' . "\n";
108
  echo '<p>You\'ll need your IPN URL, which is:<br /><code>' . get_bloginfo ("url") . '/?s2member_paypal_notify=1</code></p>' . "\n";
109
+ echo '<p><em><strong>*Quick tip*</strong> In addition to the default IPN Settings inside your PayPal® account, the IPN URL is also set on a per-transaction basis by the special PayPal® Button Code that s2Member provides you with. In other words, if you have multiple sites operating on one PayPal® account, that\'s OK. s2Member dynamically sets the IPN URL for each transaction. The result is that the IPN URL configured from within your PayPal® account, becomes the default, which is then overwritten on a per transaction basis. In fact, PayPal® recently updated their system to support IPN URL preservation. One PayPal® account can handle multiple sites, all using different IPN URLs.</em></p>' . "\n";
110
+ echo '<p><em><strong>*More information*</strong> You\'ll be happy to know that s2Member handles cancellations, expirations, failed payments ( more than 2 in a row ), terminations ( e.g. refunds &amp; chargebacks ) for you automatically. If you log into your PayPal® account and cancel a Member\'s subscription, or, if the Member logs into their PayPal® account and cancels their own subscription, s2Member will be notified of these important changes and react accordingly through the PayPal® IPN service that runs silently behind-the-scene. The PayPal® IPN service will notify s2Member whenever a Member\'s payments have been failing ( more than 2 times in a row ), and/or whenever a Member\'s subscription has expired for any reason. Even refunds &amp; chargeback reversals are supported through the IPN service. If you issue a refund to an unhappy Customer through PayPal®, s2Member will be notified, and the account for that Customer will either be demoted to a Free Subscriber, or deleted automatically ( based on your configuration ). The communication from PayPal® -> s2Member is seamless.</em></p>' . "\n";
111
  echo '</div>' . "\n";
112
  /**/
113
  echo '</div>' . "\n";
120
  echo '<p>Turn the Auto-Return feature: <strong><code>On</code></strong></p>' . "\n";
121
  echo '<p>You\'ll need your Auto-Return URL, which is:<br /><code>' . get_bloginfo ("url") . '/?s2member_paypal_return=1</code></p>' . "\n";
122
  echo '<p>You MUST also enable PDT ( Payment Data Transfer ): <strong><code>On</code></strong><br /><em>You\'ll be issued an Identity Token that you MUST enter below.</em></p>' . "\n";
123
+ echo '<p><em><strong>*Quick tip*</strong> In addition to your default PayPal® account configuration, the Auto-Return URL is also set on a per-transaction basis from within the special PayPal® Button Code that s2Member provides you with. In other words, if you have multiple sites operating on one PayPal® account, that\'s OK. s2Member dynamically sets the Auto-Return URL for each transaction. The result is that the Auto-Return URL configured from within your PayPal® account, becomes the default, which is then overwritten on a per transaction basis.</em></p>' . "\n";
124
  /**/
125
  echo '<table class="form-table">' . "\n";
126
  echo '<tbody>' . "\n";
330
  /**/
331
  echo '<td class="ws-menu-page-table-r">' . "\n";
332
  /**/
333
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . ws_plugin__s2member_parse_readme_value ("Professional Installation URI") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-installation.png" alt="." title="Contact PriMoThemes!" /></a></div>' . "\n" : '';
334
  /**/
335
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
336
  /**/
337
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . ws_plugin__s2member_parse_readme_value ("Forum URI") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
338
  /**/
339
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . ws_plugin__s2member_parse_readme_value ("Donate link") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
340
  /**/
341
  echo '</td>' . "\n";
342
  /**/
includes/menu-pages/scripting.inc.php CHANGED
@@ -19,7 +19,7 @@ API Scripting page.
19
  echo '<div class="wrap ws-menu-page">' . "\n";
20
  /**/
21
  echo '<div id="icon-plugins" class="icon32"><br /></div>' . "\n";
22
- echo '<h2><div>Developed by <a href="' . ws_plugin__s2member_parse_readme_value ("Plugin URI") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-light.png" alt="." /></a></div>s2Member API / Scripting</h2>' . "\n";
23
  /**/
24
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
25
  /**/
@@ -41,7 +41,7 @@ echo '<div class="ws-menu-page-group" title="Using Advanced Conditionals">' . "\
41
  /**/
42
  echo '<div class="ws-menu-page-section ws-plugin--s2member-api-advanced-way-section">' . "\n";
43
  echo '<h3>The Advanced Way ( some PHP scripting required )</h3>' . "\n";
44
- echo '<p>In an effort to give you even more control over access restrictions, s2Member makes some PHP functions, and also some PHP Constants, available to you from within WordPress®. In this section, we\'ll demonstrate two functions: <strong><code>is_user_logged_in()</code></strong> &amp; <strong><code>current_user_can()</code></strong>. To make use of these functions, please follow our PHP code samples below. Using PHP, you can control access to certain portions of your content, and even build Advanced Conditionals within your content, based on a Members\'s Level. In order to use PHP scripting inside your Posts/Pages, you\'ll need to install this handy plugin ( <a href="http://wordpress.org/extend/plugins/exec-php/" target="_blank" rel="xlink">Exec-PHP</a> ).</p>' . "\n";
45
  echo '<p><strong>Example #1:</strong> Full access for anyone that is logged in.</strong></p>' . "\n";
46
  echo '<p>' . highlight_string (file_get_contents (dirname (__FILE__) . "/code-samples/is-user-logged-in.php"), true) . '</p>' . "\n";
47
  echo '<p><strong>Example #2:</strong> Full access for any Member with a Level >= 1.</strong></p>' . "\n";
@@ -77,7 +77,7 @@ echo '<p><strong>Custom Capabilities:</strong> ( ebooks,reports,tips ):</p>' . "
77
  echo '<p>' . highlight_string (file_get_contents (dirname (__FILE__) . "/code-samples/current-user-can-ccaps-2.php"), true) . '</p>' . "\n";
78
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
79
  /**/
80
- echo '<p>The important thing to realize, is that Custom Capabilities, are just that. They\'re custom. s2Member only deals with the default Capabilities that it uses. If you start using Custom Capabilities, you MUST use Advanced Conditionals ( <em>i.e. the <code>current_user_can()</code> function</em> ) to test for them. Either in your theme files, or in Posts/Pages using the <a href="http://wordpress.org/extend/plugins/exec-php/" target="_blank" rel="xlink">Exec-PHP</a> plugin.</p>' . "\n";
81
  echo '</div>' . "\n";
82
  /**/
83
  echo '</div>' . "\n";
@@ -86,7 +86,7 @@ echo '<div class="ws-menu-page-group" title="s2Member Content Dripping">' . "\n"
86
  /**/
87
  echo '<div class="ws-menu-page-section ws-plugin--s2member-api-advanced-dripping-section">' . "\n";
88
  echo '<h3>Dripping Content ( some PHP scripting required )</h3>' . "\n";
89
- echo '<p>Content Dripping is the gradual, pre-scheduled release of premium website content to paying Members. This has become increasingly popular, because it allows older Members; those who have paid you more, due to recurring charges; to acquire access to more content progressively; based on their original registration date. It also gives you ( as the site owner ), the ability to launch multiple membership site portals, operating on autopilot, without any direct day-to-day involvement in a content release process. This requires some PHP scripting. In order to use PHP scripting inside your Posts/Pages, you\'ll need to install this handy plugin ( <a href="http://wordpress.org/extend/plugins/exec-php/" target="_blank" rel="xlink">Exec-PHP</a> ).</p>' . "\n";
90
  echo '<p><strong>To drip content, use <code>S2MEMBER_CURRENT_USER_REGISTRATION_DAYS</code>:</strong></p>' . "\n";
91
  echo '<p>' . highlight_string (file_get_contents (dirname (__FILE__) . "/code-samples/current-user-registration-days-dripping.php"), true) . '</p>' . "\n";
92
  echo '</div>' . "\n";
@@ -97,13 +97,13 @@ echo '<div class="ws-menu-page-group" title="Member Profile Modifications">' . "
97
  /**/
98
  echo '<div class="ws-menu-page-section ws-plugin--s2member-profile-modifications-section">' . "\n";
99
  echo '<h3>Giving Members The Ability To Modify Their Profile</h3>' . "\n";
100
- echo '<p>s2Member can be configured to redirect Members away from the <a href="profile.php" target="_blank" rel="xlink">default Profile Editing Panel</a> that is built into WordPress®. <em>See: <code>s2Member -> General Options -> Profile Modifications</code>.</em> When/if a Member attempts to access the default Profile Editing Panel, they\'ll instead, be redirected to the Login Welcome Page that you\'ve configured through s2Member. <strong>Why would I redirect?</strong> Unless you\'ve made some drastic modifications to your WordPress® installation, the default Profile Editing Panel that ships with WordPress®, is NOT really suited for public access, even by a Member.</p>' . "\n";
101
- echo '<p>So instead of using this default Profile Editing Panel; s2Member creates an added layer of functionality, on top of WordPress®. It does this by providing you ( as the site owner ), with the ability to send your Members to a <a href="' . get_bloginfo ("url") . '/?s2member_profile=1" target="_blank" rel="xlink">special Stand-Alone page</a>, where your Members can modify their entire Profile, including all Custom Fields, and their Password. This special Stand-Alone Editing Panel, has been designed ( with a bare-bones format ), intentionally. This makes it possible for you to <a href="#" onclick="if(!window.open(\'' . get_bloginfo ("url") . '/?s2member_profile=1\', \'_popup\', \'height=350,width=400,left=100,screenX=100,top=100,screenY=100, location=0,menubar=0,toolbar=0,status=0,scrollbars=1,resizable=1\')) alert(\'Please disable popup blockers and try again!\'); return false;" rel="xlink">open it up in a popup window</a>, or embed it into your Login Welcome Page using an IFRAME. Code samples are provided below.</p>' . "\n";
102
  /**/
103
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
104
  /**/
105
  echo '<p><strong>S2MEMBER_CURRENT_USER_PROFILE_MODIFICATION_PAGE_URL</strong> = URL to a Stand-Alone Profile Editing Panel.</p>' . "\n";
106
- echo '<p>Copy &amp; Paste one of the code snippets below, into your Login Welcome Page, so Members can click a link to Edit their Profile. This requires some PHP scripting. In order to use PHP scripting inside your Posts/Pages, you\'ll need to install this handy plugin ( <a href="http://wordpress.org/extend/plugins/exec-php/" target="_blank" rel="xlink">Exec-PHP</a> ).</p>' . "\n";
107
  /**/
108
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
109
  /**/
@@ -128,7 +128,7 @@ echo '<p>For example, you might use `S2MEMBER_CURRENT_USER_ACCESS_LABEL` to disp
128
  /**/
129
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
130
  /**/
131
- echo '<p>Before you read any further, you should install this handy plugin: <a href="http://wordpress.org/extend/plugins/exec-php/" target="_blank" rel="xlink">Exec-PHP</a>.<br />' . "\n";
132
  echo 'You\'ll need to have this plugin installed to use PHP code in Posts/Pages.</p>' . "\n";
133
  /**/
134
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
@@ -407,13 +407,13 @@ echo '</td>' . "\n";
407
  /**/
408
  echo '<td class="ws-menu-page-table-r">' . "\n";
409
  /**/
410
- echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . ws_plugin__s2member_parse_readme_value ("Professional Installation URI") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-installation.png" alt="." title="Contact PriMoThemes!" /></a></div>' . "\n" : '';
411
  /**/
412
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
413
  /**/
414
- echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . ws_plugin__s2member_parse_readme_value ("Forum URI") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
415
  /**/
416
- echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . ws_plugin__s2member_parse_readme_value ("Donate link") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
417
  /**/
418
  echo '</td>' . "\n";
419
  /**/
19
  echo '<div class="wrap ws-menu-page">' . "\n";
20
  /**/
21
  echo '<div id="icon-plugins" class="icon32"><br /></div>' . "\n";
22
+ echo '<h2><div>Developed by <a href="' . ws_plugin__s2member_parse_readme_value ("Plugin URI") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-light.png" alt="." /></a></div>s2Member API / Scripting</h2>' . "\n";
23
  /**/
24
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
25
  /**/
41
  /**/
42
  echo '<div class="ws-menu-page-section ws-plugin--s2member-api-advanced-way-section">' . "\n";
43
  echo '<h3>The Advanced Way ( some PHP scripting required )</h3>' . "\n";
44
+ echo '<p>In an effort to give you even more control over access restrictions, s2Member makes some PHP functions, and also some PHP Constants, available to you from within WordPress®. In this section, we\'ll demonstrate two functions: <strong><code>is_user_logged_in()</code></strong> &amp; <strong><code>current_user_can()</code></strong>. To make use of these functions, please follow our PHP code samples below. Using PHP, you can control access to certain portions of your content, and even build Advanced Conditionals within your content, based on a Members\'s Level. In order to use PHP scripting inside your Posts/Pages, you\'ll need to install this handy plugin ( <a href="http://wordpress.org/extend/plugins/exec-php/" target="_blank" rel="external">Exec-PHP</a> ).</p>' . "\n";
45
  echo '<p><strong>Example #1:</strong> Full access for anyone that is logged in.</strong></p>' . "\n";
46
  echo '<p>' . highlight_string (file_get_contents (dirname (__FILE__) . "/code-samples/is-user-logged-in.php"), true) . '</p>' . "\n";
47
  echo '<p><strong>Example #2:</strong> Full access for any Member with a Level >= 1.</strong></p>' . "\n";
77
  echo '<p>' . highlight_string (file_get_contents (dirname (__FILE__) . "/code-samples/current-user-can-ccaps-2.php"), true) . '</p>' . "\n";
78
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
79
  /**/
80
+ echo '<p>The important thing to realize, is that Custom Capabilities, are just that. They\'re custom. s2Member only deals with the default Capabilities that it uses. If you start using Custom Capabilities, you MUST use Advanced Conditionals ( <em>i.e. the <code>current_user_can()</code> function</em> ) to test for them. Either in your theme files, or in Posts/Pages using the <a href="http://wordpress.org/extend/plugins/exec-php/" target="_blank" rel="external">Exec-PHP</a> plugin.</p>' . "\n";
81
  echo '</div>' . "\n";
82
  /**/
83
  echo '</div>' . "\n";
86
  /**/
87
  echo '<div class="ws-menu-page-section ws-plugin--s2member-api-advanced-dripping-section">' . "\n";
88
  echo '<h3>Dripping Content ( some PHP scripting required )</h3>' . "\n";
89
+ echo '<p>Content Dripping is the gradual, pre-scheduled release of premium website content to paying Members. This has become increasingly popular, because it allows older Members; those who have paid you more, due to recurring charges; to acquire access to more content progressively; based on their original registration date. It also gives you ( as the site owner ), the ability to launch multiple membership site portals, operating on autopilot, without any direct day-to-day involvement in a content release process. This requires some PHP scripting. In order to use PHP scripting inside your Posts/Pages, you\'ll need to install this handy plugin ( <a href="http://wordpress.org/extend/plugins/exec-php/" target="_blank" rel="external">Exec-PHP</a> ).</p>' . "\n";
90
  echo '<p><strong>To drip content, use <code>S2MEMBER_CURRENT_USER_REGISTRATION_DAYS</code>:</strong></p>' . "\n";
91
  echo '<p>' . highlight_string (file_get_contents (dirname (__FILE__) . "/code-samples/current-user-registration-days-dripping.php"), true) . '</p>' . "\n";
92
  echo '</div>' . "\n";
97
  /**/
98
  echo '<div class="ws-menu-page-section ws-plugin--s2member-profile-modifications-section">' . "\n";
99
  echo '<h3>Giving Members The Ability To Modify Their Profile</h3>' . "\n";
100
+ echo '<p>s2Member can be configured to redirect Members away from the <a href="profile.php" target="_blank" rel="external">default Profile Editing Panel</a> that is built into WordPress®. <em>See: <code>s2Member -> General Options -> Profile Modifications</code>.</em> When/if a Member attempts to access the default Profile Editing Panel, they\'ll instead, be redirected to the Login Welcome Page that you\'ve configured through s2Member. <strong>Why would I redirect?</strong> Unless you\'ve made some drastic modifications to your WordPress® installation, the default Profile Editing Panel that ships with WordPress®, is NOT really suited for public access, even by a Member.</p>' . "\n";
101
+ echo '<p>So instead of using this default Profile Editing Panel; s2Member creates an added layer of functionality, on top of WordPress®. It does this by providing you ( as the site owner ), with the ability to send your Members to a <a href="' . get_bloginfo ("url") . '/?s2member_profile=1" target="_blank" rel="external">special Stand-Alone page</a>, where your Members can modify their entire Profile, including all Custom Fields, and their Password. This special Stand-Alone Editing Panel, has been designed ( with a bare-bones format ), intentionally. This makes it possible for you to <a href="#" onclick="if(!window.open(\'' . get_bloginfo ("url") . '/?s2member_profile=1\', \'_popup\', \'height=350,width=400,left=100,screenX=100,top=100,screenY=100, location=0,menubar=0,toolbar=0,status=0,scrollbars=1,resizable=1\')) alert(\'Please disable popup blockers and try again!\'); return false;" rel="external">open it up in a popup window</a>, or embed it into your Login Welcome Page using an IFRAME. Code samples are provided below.</p>' . "\n";
102
  /**/
103
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
104
  /**/
105
  echo '<p><strong>S2MEMBER_CURRENT_USER_PROFILE_MODIFICATION_PAGE_URL</strong> = URL to a Stand-Alone Profile Editing Panel.</p>' . "\n";
106
+ echo '<p>Copy &amp; Paste one of the code snippets below, into your Login Welcome Page, so Members can click a link to Edit their Profile. This requires some PHP scripting. In order to use PHP scripting inside your Posts/Pages, you\'ll need to install this handy plugin ( <a href="http://wordpress.org/extend/plugins/exec-php/" target="_blank" rel="external">Exec-PHP</a> ).</p>' . "\n";
107
  /**/
108
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
109
  /**/
128
  /**/
129
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
130
  /**/
131
+ echo '<p>Before you read any further, you should install this handy plugin: <a href="http://wordpress.org/extend/plugins/exec-php/" target="_blank" rel="external">Exec-PHP</a>.<br />' . "\n";
132
  echo 'You\'ll need to have this plugin installed to use PHP code in Posts/Pages.</p>' . "\n";
133
  /**/
134
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
407
  /**/
408
  echo '<td class="ws-menu-page-table-r">' . "\n";
409
  /**/
410
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . ws_plugin__s2member_parse_readme_value ("Professional Installation URI") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-installation.png" alt="." title="Contact PriMoThemes!" /></a></div>' . "\n" : '';
411
  /**/
412
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
413
  /**/
414
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . ws_plugin__s2member_parse_readme_value ("Forum URI") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
415
  /**/
416
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . ws_plugin__s2member_parse_readme_value ("Donate link") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
417
  /**/
418
  echo '</td>' . "\n";
419
  /**/
includes/menu-pages/start.inc.php CHANGED
@@ -19,7 +19,7 @@ Flow Of Events page.
19
  echo '<div class="wrap ws-menu-page">' . "\n";
20
  /**/
21
  echo '<div id="icon-plugins" class="icon32"><br /></div>' . "\n";
22
- echo '<h2><div>Developed by <a href="' . ws_plugin__s2member_parse_readme_value ("Plugin URI") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-light.png" alt="." /></a></div>s2Member / Quick Start Guide</h2>' . "\n";
23
  /**/
24
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
25
  /**/
@@ -129,13 +129,13 @@ echo '</td>' . "\n";
129
  /**/
130
  echo '<td class="ws-menu-page-table-r">' . "\n";
131
  /**/
132
- echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . ws_plugin__s2member_parse_readme_value ("Professional Installation URI") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-installation.png" alt="." title="Contact PriMoThemes!" /></a></div>' . "\n" : '';
133
  /**/
134
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
135
  /**/
136
- echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . ws_plugin__s2member_parse_readme_value ("Forum URI") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
137
  /**/
138
- echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . ws_plugin__s2member_parse_readme_value ("Donate link") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
139
  /**/
140
  echo '</td>' . "\n";
141
  /**/
19
  echo '<div class="wrap ws-menu-page">' . "\n";
20
  /**/
21
  echo '<div id="icon-plugins" class="icon32"><br /></div>' . "\n";
22
+ echo '<h2><div>Developed by <a href="' . ws_plugin__s2member_parse_readme_value ("Plugin URI") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-light.png" alt="." /></a></div>s2Member / Quick Start Guide</h2>' . "\n";
23
  /**/
24
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
25
  /**/
129
  /**/
130
  echo '<td class="ws-menu-page-table-r">' . "\n";
131
  /**/
132
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . ws_plugin__s2member_parse_readme_value ("Professional Installation URI") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-installation.png" alt="." title="Contact PriMoThemes!" /></a></div>' . "\n" : '';
133
  /**/
134
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
135
  /**/
136
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . ws_plugin__s2member_parse_readme_value ("Forum URI") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
137
  /**/
138
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . ws_plugin__s2member_parse_readme_value ("Donate link") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
139
  /**/
140
  echo '</td>' . "\n";
141
  /**/
includes/menu-pages/trk-ops.inc.php CHANGED
@@ -19,7 +19,7 @@ API Tracking page.
19
  echo '<div class="wrap ws-menu-page">' . "\n";
20
  /**/
21
  echo '<div id="icon-plugins" class="icon32"><br /></div>' . "\n";
22
- echo '<h2><div>Developed by <a href="' . ws_plugin__s2member_parse_readme_value ("Plugin URI") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-light.png" alt="." /></a></div>s2Member API / Tracking</h2>' . "\n";
23
  /**/
24
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
25
  /**/
@@ -88,8 +88,8 @@ echo '<div class="ws-menu-page-group" title="Integrating iDevAffiliate® Softwar
88
  echo '<div class="ws-menu-page-section ws-plugin--s2member-idev-section">' . "\n";
89
  echo '<h3>Integrating iDevAffiliate® ( affiliate program management )</h3>' . "\n";
90
  echo '<a href="http://www.idevdirect.com/14200.html" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/idev-logo.gif" class="ws-menu-page-right" style="width:125px; height:125px; border:0;" alt="." /></a>' . "\n";
91
- echo '<p>Adding affiliate tracking software to your site is one of the most effective ways to achieve more sales, more traffic, and more search engine ranking. <a href="http://www.idevdirect.com/14200.html" target="_blank" rel="xlink">iDevAffiliate®</a> ( an affiliate management portal ), installs in just minutes, and can be integrated seamlessly with s2Member. We recommend <a href="http://www.idevdirect.com/14200.html" target="_blank" rel="xlink">iDevAffiliate® Standard</a> ( $99 ) because of its proven track record, and its ability to integrate with s2Member using a variety of techniques. The most popular being a Hidden Image Tag.</p>' . "\n";
92
- echo '<p>If you choose to <a href="http://www.idevdirect.com/14200.html" target="_blank" rel="xlink">install iDevAffiliate®</a>, you will need to configure your <code>iDevAffiliate® -> Shopping Cart Integration</code>. Please choose <code>Generic Tracking Pixel</code>. Then, grab your Hidden Image Tag, and pop the code provided by iDevAffiliate® into the Custom Tracking field at the top of this page. You MUST also add replacement codes to your Hidden Image Tag. To save you some trouble, we\'ve provided an example below. These are the two variables that iDevAffiliate® needs.</p>' . "\n";
93
  echo '<p>' . highlight_string (file_get_contents (dirname (__FILE__) . "/code-samples/idev-signup-tracking-code.php"), true) . '</p>' . "\n";
94
  echo '<p>Your <code>profile</code> ID will be assigned by iDevAffiliate®. Be sure to replace <code>profile=123</code> with your own profile ID.</p>' . "\n";
95
  echo '<p><em><strong>*Tip*</strong> iDevAffiliate® also provides an alternative method, using a 3rd-party call. The alternative 3rd-party call, could be used with <code>s2Member -> API Notifications.</code> A 3rd-party call, is essentially an HTTP connection that runs silently behind-the-scene, as opposed to being loaded in a browser. It\'s a bit more powerful, but also more advanced.</em></p>' . "\n";
@@ -102,8 +102,8 @@ echo '<div class="ws-menu-page-group" title="Integrating ShareASale® Tracking">
102
  echo '<div class="ws-menu-page-section ws-plugin--s2member-shareasale-section">' . "\n";
103
  echo '<h3>Integrating ShareASale® ( affiliate program management )</h3>' . "\n";
104
  echo '<a href="http://www.shareasale.com/merchantsignup.cfm" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/sas-logo.png" class="ws-menu-page-right" style="width:125px; height:125px; border:0;" alt="." /></a>' . "\n";
105
- echo '<p>Established in 2000, <a href="http://www.shareasale.com/merchantsignup.cfm" target="_blank" rel="xlink">ShareASale®</a> provides award winning technology and service; which will enable you to connect with a network of established affiliates, as well as recruit new ones. Joining ShareASale®, maximizes your ability to reach the greatest number of affiliates, with the least amount of work. At ShareASale®, you\'ll have access to an existing affiliate-base. You place your site on the market, and let their existing affiliates promote your products/services.</p>' . "\n";
106
- echo '<p>If you <a href="http://www.shareasale.com/merchantsignup.cfm" target="_blank" rel="xlink">become a Merchant at ShareASale®</a>, you will need to configure your <code>ShareASale® -> Sale Tracking</code>. Grab your Hidden Image Tag, and pop the code provided by ShareASale® into the Custom Tracking field at the top of this page. You MUST also add replacement codes to your Hidden Image Tag. To save you some trouble, we\'ve provided an example below. These are the two variables that ShareASale® needs.</p>' . "\n";
107
  echo '<p>' . highlight_string (file_get_contents (dirname (__FILE__) . "/code-samples/sas-signup-tracking-code.php"), true) . '</p>' . "\n";
108
  echo '<p>Your <code>merchantID</code> will be assigned by ShareASale®. Be sure to replace <code>merchantID=123</code> with the one they assign you.</p>' . "\n";
109
  echo '<p><em><strong>*Tip*</strong> ShareASale® also provides an alternative method, using a 3rd-party call. The alternative 3rd-party call, could be used with <code>s2Member -> API Notifications.</code> A 3rd-party call, is essentially an HTTP connection that runs silently behind-the-scene, as opposed to being loaded in a browser. It\'s a bit more powerful, but also more advanced.</em></p>' . "\n";
@@ -139,13 +139,13 @@ echo '</td>' . "\n";
139
  /**/
140
  echo '<td class="ws-menu-page-table-r">' . "\n";
141
  /**/
142
- echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . ws_plugin__s2member_parse_readme_value ("Professional Installation URI") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-installation.png" alt="." title="Contact PriMoThemes!" /></a></div>' . "\n" : '';
143
  /**/
144
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
145
  /**/
146
- echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . ws_plugin__s2member_parse_readme_value ("Forum URI") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
147
  /**/
148
- echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . ws_plugin__s2member_parse_readme_value ("Donate link") . '"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
149
  /**/
150
  echo '</td>' . "\n";
151
  /**/
19
  echo '<div class="wrap ws-menu-page">' . "\n";
20
  /**/
21
  echo '<div id="icon-plugins" class="icon32"><br /></div>' . "\n";
22
+ echo '<h2><div>Developed by <a href="' . ws_plugin__s2member_parse_readme_value ("Plugin URI") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-light.png" alt="." /></a></div>s2Member API / Tracking</h2>' . "\n";
23
  /**/
24
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
25
  /**/
88
  echo '<div class="ws-menu-page-section ws-plugin--s2member-idev-section">' . "\n";
89
  echo '<h3>Integrating iDevAffiliate® ( affiliate program management )</h3>' . "\n";
90
  echo '<a href="http://www.idevdirect.com/14200.html" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/idev-logo.gif" class="ws-menu-page-right" style="width:125px; height:125px; border:0;" alt="." /></a>' . "\n";
91
+ echo '<p>Adding affiliate tracking software to your site is one of the most effective ways to achieve more sales, more traffic, and more search engine ranking. <a href="http://www.idevdirect.com/14200.html" target="_blank" rel="external">iDevAffiliate®</a> ( an affiliate management portal ), installs in just minutes, and can be integrated seamlessly with s2Member. We recommend <a href="http://www.idevdirect.com/14200.html" target="_blank" rel="external">iDevAffiliate® Standard</a> ( $99 ) because of its proven track record, and its ability to integrate with s2Member using a variety of techniques. The most popular being a Hidden Image Tag.</p>' . "\n";
92
+ echo '<p>If you choose to <a href="http://www.idevdirect.com/14200.html" target="_blank" rel="external">install iDevAffiliate®</a>, you will need to configure your <code>iDevAffiliate® -> Shopping Cart Integration</code>. Please choose <code>Generic Tracking Pixel</code>. Then, grab your Hidden Image Tag, and pop the code provided by iDevAffiliate® into the Custom Tracking field at the top of this page. You MUST also add replacement codes to your Hidden Image Tag. To save you some trouble, we\'ve provided an example below. These are the two variables that iDevAffiliate® needs.</p>' . "\n";
93
  echo '<p>' . highlight_string (file_get_contents (dirname (__FILE__) . "/code-samples/idev-signup-tracking-code.php"), true) . '</p>' . "\n";
94
  echo '<p>Your <code>profile</code> ID will be assigned by iDevAffiliate®. Be sure to replace <code>profile=123</code> with your own profile ID.</p>' . "\n";
95
  echo '<p><em><strong>*Tip*</strong> iDevAffiliate® also provides an alternative method, using a 3rd-party call. The alternative 3rd-party call, could be used with <code>s2Member -> API Notifications.</code> A 3rd-party call, is essentially an HTTP connection that runs silently behind-the-scene, as opposed to being loaded in a browser. It\'s a bit more powerful, but also more advanced.</em></p>' . "\n";
102
  echo '<div class="ws-menu-page-section ws-plugin--s2member-shareasale-section">' . "\n";
103
  echo '<h3>Integrating ShareASale® ( affiliate program management )</h3>' . "\n";
104
  echo '<a href="http://www.shareasale.com/merchantsignup.cfm" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/sas-logo.png" class="ws-menu-page-right" style="width:125px; height:125px; border:0;" alt="." /></a>' . "\n";
105
+ echo '<p>Established in 2000, <a href="http://www.shareasale.com/merchantsignup.cfm" target="_blank" rel="external">ShareASale®</a> provides award winning technology and service; which will enable you to connect with a network of established affiliates, as well as recruit new ones. Joining ShareASale®, maximizes your ability to reach the greatest number of affiliates, with the least amount of work. At ShareASale®, you\'ll have access to an existing affiliate-base. You place your site on the market, and let their existing affiliates promote your products/services.</p>' . "\n";
106
+ echo '<p>If you <a href="http://www.shareasale.com/merchantsignup.cfm" target="_blank" rel="external">become a Merchant at ShareASale®</a>, you will need to configure your <code>ShareASale® -> Sale Tracking</code>. Grab your Hidden Image Tag, and pop the code provided by ShareASale® into the Custom Tracking field at the top of this page. You MUST also add replacement codes to your Hidden Image Tag. To save you some trouble, we\'ve provided an example below. These are the two variables that ShareASale® needs.</p>' . "\n";
107
  echo '<p>' . highlight_string (file_get_contents (dirname (__FILE__) . "/code-samples/sas-signup-tracking-code.php"), true) . '</p>' . "\n";
108
  echo '<p>Your <code>merchantID</code> will be assigned by ShareASale®. Be sure to replace <code>merchantID=123</code> with the one they assign you.</p>' . "\n";
109
  echo '<p><em><strong>*Tip*</strong> ShareASale® also provides an alternative method, using a 3rd-party call. The alternative 3rd-party call, could be used with <code>s2Member -> API Notifications.</code> A 3rd-party call, is essentially an HTTP connection that runs silently behind-the-scene, as opposed to being loaded in a browser. It\'s a bit more powerful, but also more advanced.</em></p>' . "\n";
139
  /**/
140
  echo '<td class="ws-menu-page-table-r">' . "\n";
141
  /**/
142
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["installation"]) ? '<div class="ws-menu-page-installation"><a href="' . ws_plugin__s2member_parse_readme_value ("Professional Installation URI") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-installation.png" alt="." title="Contact PriMoThemes!" /></a></div>' . "\n" : '';
143
  /**/
144
  echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["tools"]) ? '<div class="ws-menu-page-tools"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-tools.png" alt="." /></div>' . "\n" : '';
145
  /**/
146
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["support"]) ? '<div class="ws-menu-page-support"><a href="' . ws_plugin__s2member_parse_readme_value ("Forum URI") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-support.png" alt="." /></a></div>' . "\n" : '';
147
  /**/
148
+ echo ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu-r"]["donations"]) ? '<div class="ws-menu-page-donations"><a href="' . ws_plugin__s2member_parse_readme_value ("Donate link") . '" target="_blank"><img src="' . $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] . '/images/brand-donations.jpg" alt="." /></a></div>' . "\n" : '';
149
  /**/
150
  echo '</td>' . "\n";
151
  /**/
readme.txt CHANGED
@@ -1,7 +1,7 @@
1
  === s2Member ( Membership w/ PayPal® Integration ) also works w/ BuddyPress ===
2
 
3
- Version: 2.9
4
- Stable tag: 2.9
5
  Framework: WS-P-2.1
6
 
7
  WordPress Compatible: yes
@@ -78,8 +78,8 @@ s2Member supports up to 4 Primary Membership Levels, and unlimited Custom Capabi
78
  = Does s2Member utilize the PayPal® IPN system? =
79
  Yes, s2Member supports automation of account activation, welcome emails, confirmations, renewals, de-activation, refunds, etc. The integration with PayPal® is seamless. s2Member even provides API Notifications, which are an added layer of functionality. These are not to be confused with the IPN service. s2Member API Notifications make it easier to integrate back-office routines, affiliate programs, list servers, or any other 3rd-party application that should react to certain events.
80
 
81
- = Does s2Member support PayPal Auto-Return w/Payment Data Transfer? =
82
- Yes, s2Member will work with PayPal® Auto-Return/PDT (Payment Data Transfer) `On`, and also with Auto-Return/PDT `Off`. If you enable Auto-Return, you MUST also enable PDT and enter your Identity Token. If one is enabled, the other must also be enabled. There is a place to enter your PayPal® Identity Token for PDT under `s2Member -> PayPal® Options`. You'll also find some additional instructions there.
83
 
84
  = Does s2Member install any new database tables? =
85
  No, s2Member has been fully integrated with the Roles &amp; Capabilities that are already built into WordPress®. It is designed to be completely seamless, without code bloat. We've carefully structured the entire framework, in order to maximize s2Member's ability to operate with other plugins installed. For instance, s2Member is compatible with BuddyPress!
@@ -101,6 +101,9 @@ Archived releases of s2Member are maintained [here](http://wordpress.org/extend/
101
 
102
  == Changelog ==
103
 
 
 
 
104
  = 2.9 =
105
  * This release is all about security and bug fixes, with very few feature additions.
106
  * Bug fix, `%%registration_url%%` in the Signup Confirmation Email was being replaced with `1`, instead of the full URL. This bug was first introduced in s2Member v2.8.7. This has been corrected in v2.9.
1
  === s2Member ( Membership w/ PayPal® Integration ) also works w/ BuddyPress ===
2
 
3
+ Version: 2.9.2
4
+ Stable tag: 2.9.2
5
  Framework: WS-P-2.1
6
 
7
  WordPress Compatible: yes
78
  = Does s2Member utilize the PayPal® IPN system? =
79
  Yes, s2Member supports automation of account activation, welcome emails, confirmations, renewals, de-activation, refunds, etc. The integration with PayPal® is seamless. s2Member even provides API Notifications, which are an added layer of functionality. These are not to be confused with the IPN service. s2Member API Notifications make it easier to integrate back-office routines, affiliate programs, list servers, or any other 3rd-party application that should react to certain events.
80
 
81
+ = Does s2Member support PayPal® PDT/Auto-Return? =
82
+ Yes, s2Member will work with PayPal® Auto-Return/PDT (Payment Data Transfer) `On`, and also with Auto-Return/PDT `Off`. If you enable Auto-Return, you MUST also enable PDT and supply s2Member with your Identity Token. If one is enabled, the other must also be enabled; and vice-versa. There is a place to enter your PayPal® Identity Token for PDT under `s2Member -> PayPal® Options`.
83
 
84
  = Does s2Member install any new database tables? =
85
  No, s2Member has been fully integrated with the Roles &amp; Capabilities that are already built into WordPress®. It is designed to be completely seamless, without code bloat. We've carefully structured the entire framework, in order to maximize s2Member's ability to operate with other plugins installed. For instance, s2Member is compatible with BuddyPress!
101
 
102
  == Changelog ==
103
 
104
+ = 2.9.2 =
105
+ * Bug fix. A bug in the PayPal® Auto-Return routine for PDT ( Payment Data Transfer ) has been resolved. This bug was generating a message that read: `Unable to verify POST vars`. This was actually not a bug, but rather, a [limitation in PDT transmissions](https://www.x.com/message/34450#34450) from PayPal®. s2Member has been updated, with a work-around for this limitation. This bug was very elusive, because it was not affecting all PayPal® accounts. In some cases, it was only affecting PayPal® accounts opened after October 2009.
106
+
107
  = 2.9 =
108
  * This release is all about security and bug fixes, with very few feature additions.
109
  * Bug fix, `%%registration_url%%` in the Signup Confirmation Email was being replaced with `1`, instead of the full URL. This bug was first introduced in s2Member v2.8.7. This has been corrected in v2.9.
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: 2.9
13
- Stable tag: 2.9
14
  Framework: WS-P-2.1
15
 
16
  WordPress Compatible: yes
9
  If not, see: <http://www.gnu.org/licenses/>.
10
  */
11
  /*
12
+ Version: 2.9.2
13
+ Stable tag: 2.9.2
14
  Framework: WS-P-2.1
15
 
16
  WordPress Compatible: yes