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

Version Description

= v151218 =

(Maintenance Release) Upgrade immediately.

Download this release

Release Info

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

Code changes from version 151210 to 151218

changelog.md CHANGED
@@ -1,3 +1,13 @@
1
= v151210 =
2
3
- (s2Member/s2Member Pro) **WP/PHP Compat:** Updated for compatibility with WordPress 4.4 and PHP v7.0. Note that s2Member and s2Member Pro also remain compatible with WordPress 4.3 and PHP 5.2. However, PHP 5.5+ is strongly recommended.
1
+ = v151218 =
2
+
3
+ - (s2Member Pro) **Reminder Email Notification Exclusions:** It is now possible to enable/disable EOT Renewal/Reminder Email notifications on a per-user basis. You can edit a user's profile in the WP Dashboard and check "_No (exclude)_" to prevent specific users from receiving any reminder emails that you configured. Props at @patdumond @luisrock. See also [this GitHub issue](https://github.com/websharks/s2member/issues/816).
4
+
5
+ - (s2Member) **PHP v7 Compat.:** This release addresses one remaining issue with the `preg_replace` `/e` modifier as reported in [this GitHub issue](https://github.com/websharks/s2member/issues/811). Props @nerdworker for reporting. Thanks!
6
+
7
+ - (s2Member/s2Member Pro) **WP v4.4 Compat.:** This release corrects an issue that impacted sites attempting to run s2Member on a Multisite Network; i.e., it corrects a problem with the `load.php` patch against the latest release of WordPress. Props @crazycoolcam for reporting! See also [this GitHub issue](https://github.com/websharks/s2member/issues/812).
8
+
9
+ - (s2Member/s2Member Pro) **Getting Help:** This release adds a new menu page titled, "Getting Help w/ s2Member". This new section of your Dashboard provides quick & easy access to s2Member KB articles, suggestions, and our tech support department (for pro customers). Props @patdumond @raamdev. See also [this GitHub issue](https://github.com/websharks/s2member/issues/814).
10
+
11
= v151210 =
12
13
- (s2Member/s2Member Pro) **WP/PHP Compat:** Updated for compatibility with WordPress 4.4 and PHP v7.0. Note that s2Member and s2Member Pro also remain compatible with WordPress 4.3 and PHP 5.2. However, PHP 5.5+ is strongly recommended.
checksum.txt CHANGED
@@ -1 +1 @@
1
- 95ca15ddfbbd89600e1ac81f5ac3e577
1
+ 35a15209842402cdccb9dd5222d6bd47
includes/classes/menu-pages.inc.php CHANGED
@@ -154,6 +154,9 @@ if(!class_exists('c_ws_plugin__s2member_menu_pages'))
154
if(apply_filters('ws_plugin__s2member_during_add_admin_options_add_start_page', TRUE, get_defined_vars()))
155
add_submenu_page($menu, 'Getting Started w/ s2Member', 'Getting Started', 'create_users', 'ws-plugin--s2member-start', 'c_ws_plugin__s2member_menu_pages::start_page');
156
157
if(apply_filters('ws_plugin__s2member_during_add_admin_options_add_divider_1', TRUE, get_defined_vars()))
158
add_submenu_page($menu, '', '<span style="display:block; margin:1px 0 1px -5px; padding:0; height:1px; line-height:1px; background:#CCCCCC;"></span>', 'create_users', '#');
159
@@ -510,6 +513,21 @@ if(!class_exists('c_ws_plugin__s2member_menu_pages'))
510
do_action('ws_plugin__s2member_after_start_page', get_defined_vars());
511
}
512
513
/**
514
* Builds and handles the Main Multisite Options page.
515
*
154
if(apply_filters('ws_plugin__s2member_during_add_admin_options_add_start_page', TRUE, get_defined_vars()))
155
add_submenu_page($menu, 'Getting Started w/ s2Member', 'Getting Started', 'create_users', 'ws-plugin--s2member-start', 'c_ws_plugin__s2member_menu_pages::start_page');
156
157
+ if(apply_filters('ws_plugin__s2member_during_add_admin_options_add_help_page', !is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site (), get_defined_vars()))
158
+ add_submenu_page($menu, 'Getting Help w/ s2Member', 'Getting Help', 'create_users', 'ws-plugin--s2member-help', 'c_ws_plugin__s2member_menu_pages::help_page');
159
+
160
if(apply_filters('ws_plugin__s2member_during_add_admin_options_add_divider_1', TRUE, get_defined_vars()))
161
add_submenu_page($menu, '', '<span style="display:block; margin:1px 0 1px -5px; padding:0; height:1px; line-height:1px; background:#CCCCCC;"></span>', 'create_users', '#');
162
513
do_action('ws_plugin__s2member_after_start_page', get_defined_vars());
514
}
515
516
+ /**
517
+ * Builds and handles the Getting Help page.
518
+ *
519
+ * @package s2Member\Menu_Pages
520
+ * @since 151218
521
+ */
522
+ public static function help_page()
523
+ {
524
+ do_action('ws_plugin__s2member_before_help_page', get_defined_vars());
525
+
526
+ include_once dirname(dirname(__FILE__)).'/menu-pages/help.inc.php';
527
+
528
+ do_action('ws_plugin__s2member_after_help_page', get_defined_vars());
529
+ }
530
+
531
/**
532
* Builds and handles the Main Multisite Options page.
533
*
includes/classes/mms-patches.inc.php CHANGED
@@ -88,9 +88,9 @@ if (!class_exists ("c_ws_plugin__s2member_mms_patches"))
88
else // Otherwise, we need to report that /wp-login.php could NOT be updated. Possibly a permissions error.
89
($display_notices) ? c_ws_plugin__s2member_admin_notices::display_admin_notice ('Your <code>/wp-login.php</code> file could NOT be patched. File NOT writable.', true) : null;
90
91
- $load_file = ABSPATH . WPINC . "/load.php";
92
- $load_section = "/([\r\n\t\s ]+)(if( *?)\(( *?)empty( *?)\(( *?)\\\$active_plugins( *?)\)( *?)\|\|( *?)defined( *?)\(( *?)['\"]WP_INSTALLING['\"]( *?)\)( *?)\))/";
93
- $load_replace = "\n\n\t// Modified for full plugin compatiblity.\n\t//if ( empty( \$active_plugins ) || defined( 'WP_INSTALLING' ) )\n\tif ( empty( \$active_plugins ) || ( defined( 'WP_INSTALLING' ) && !preg_match(\"/\/wp-activate\.php/\", \$_SERVER[\"REQUEST_URI\"]) ) )";
94
95
if (file_exists ($load_file) && ($load = file_get_contents ($load_file)) && is_writable ($load_file))
96
{
88
else // Otherwise, we need to report that /wp-login.php could NOT be updated. Possibly a permissions error.
89
($display_notices) ? c_ws_plugin__s2member_admin_notices::display_admin_notice ('Your <code>/wp-login.php</code> file could NOT be patched. File NOT writable.', true) : null;
90
91
+ $load_file = ABSPATH . WPINC . "/load.php"; // WordPress v4.4 uses `wp_installing()` instead of `defined( 'WP_INSTALLING' )`
92
+ $load_section = "/([\r\n\t\s ]+)(if( *?)\(( *?)empty( *?)\(( *?)\\\$active_plugins( *?)\)( *?)\|\|( *?)(wp_installing\s*\(\s*\)|defined( *?)\(( *?)['\"]WP_INSTALLING['\"]( *?)\))( *?)\))/";
93
+ $load_replace = "\n\n\t// Modified for full plugin compatiblity.\n\t//if ( empty( \$active_plugins ) || wp_installing() )\n\tif ( empty( \$active_plugins ) || ( wp_installing() && !preg_match(\"/\/wp-activate\.php/\", \$_SERVER[\"REQUEST_URI\"]) ) )";
94
95
if (file_exists ($load_file) && ($load = file_get_contents ($load_file)) && is_writable ($load_file))
96
{
includes/classes/sc-paypal-button-e.inc.php CHANGED
@@ -77,7 +77,7 @@ if (!class_exists ("c_ws_plugin__s2member_sc_paypal_button_e"))
77
$default_image = "https://www.paypal.com/" . (($attr["lang"]) ? $attr["lang"] : _x ("en_US", "s2member-front paypal-button-lang-code", "s2member")) . "/i/btn/btn_xpressCheckout.gif";
78
79
$code = preg_replace ("/\<img[^\>]+\>/i", "", $code); // Remove 1x1 pixel tracking image that PayPal sticks in there.
80
- $code = preg_replace ("/(\<input)([^\>]+)(\>)/ie", "'\\1'.rtrim(stripslashes('\\2'),'/').' /\\3'", $code); // Use XHTML!
81
82
$code = ($attr["image"] && $attr["image"] !== "default") ? preg_replace ('/ src\="(.*?)"/', ' src="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["image"])) . '"', $code) : preg_replace ('/ src\="(.*?)"/', ' src="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($default_image)) . '"', $code);
83
@@ -92,5 +92,10 @@ if (!class_exists ("c_ws_plugin__s2member_sc_paypal_button_e"))
92
// Instead, use: `ws_plugin__s2member_sc_paypal_button`.
93
return $code; // Button Code. Possibly w/ API encryption now.
94
}
95
}
96
}
77
$default_image = "https://www.paypal.com/" . (($attr["lang"]) ? $attr["lang"] : _x ("en_US", "s2member-front paypal-button-lang-code", "s2member")) . "/i/btn/btn_xpressCheckout.gif";
78
79
$code = preg_replace ("/\<img[^\>]+\>/i", "", $code); // Remove 1x1 pixel tracking image that PayPal sticks in there.
80
+ $code = preg_replace_callback ("/(\<input)([^\>]+)(\>)/i", "c_ws_plugin__s2member_sc_paypal_button_e::_sc_paypal_button_encryption_preg_replace_xhtml_callback", $code);
81
82
$code = ($attr["image"] && $attr["image"] !== "default") ? preg_replace ('/ src\="(.*?)"/', ' src="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($attr["image"])) . '"', $code) : preg_replace ('/ src\="(.*?)"/', ' src="' . c_ws_plugin__s2member_utils_strings::esc_refs (esc_attr ($default_image)) . '"', $code);
83
92
// Instead, use: `ws_plugin__s2member_sc_paypal_button`.
93
return $code; // Button Code. Possibly w/ API encryption now.
94
}
95
+
96
+ public static function _sc_paypal_button_encryption_preg_replace_xhtml_callback($m)
97
+ {
98
+ return $m[1].rtrim($m[2], " /\t\n\r\0\x0B").' /'.$m[3];
99
+ }
100
}
101
}
includes/classes/user-deletions.inc.php CHANGED
@@ -125,6 +125,7 @@ if(!class_exists('c_ws_plugin__s2member_user_deletions'))
125
delete_user_option($user_id, 's2member_first_payment_txn_id');
126
delete_user_option($user_id, 's2member_last_payment_time');
127
delete_user_option($user_id, 's2member_auto_eot_time');
128
129
delete_user_option($user_id, 's2member_file_download_access_arc');
130
delete_user_option($user_id, 's2member_file_download_access_log');
125
delete_user_option($user_id, 's2member_first_payment_txn_id');
126
delete_user_option($user_id, 's2member_last_payment_time');
127
delete_user_option($user_id, 's2member_auto_eot_time');
128
+ delete_user_option($user_id, 's2member_reminders_enable');
129
130
delete_user_option($user_id, 's2member_file_download_access_arc');
131
delete_user_option($user_id, 's2member_file_download_access_log');
includes/classes/users-list-in.inc.php CHANGED
@@ -205,6 +205,19 @@ if(!class_exists("c_ws_plugin__s2member_users_list_in"))
205
206
if(c_ws_plugin__s2member_utils_conds::pro_is_installed())
207
{
208
foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $__v;
209
do_action("ws_plugin__s2member_during_users_list_edit_cols_before_reset_pass_resend", get_defined_vars());
210
unset($__refs, $__v);
@@ -478,6 +491,9 @@ if(!class_exists("c_ws_plugin__s2member_users_list_in"))
478
if(isset($_p["ws_plugin__s2member_profile_s2member_auto_eot_time"]) && isset($auto_eot_time))
479
update_user_option($user_id, "s2member_auto_eot_time", $auto_eot_time);
480
481
if(isset($_p["ws_plugin__s2member_profile_s2member_ccaps"]))
482
{
483
foreach($user->allcaps as $cap => $cap_enabled)
205
206
if(c_ws_plugin__s2member_utils_conds::pro_is_installed())
207
{
208
+ foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $__v;
209
+ do_action("ws_plugin__s2member_during_users_list_edit_cols_before_reminders_enable", get_defined_vars());
210
+ unset($__refs, $__v);
211
+
212
+ echo '<tr>'."\n";
213
+ echo '<th><label for="ws-plugin--s2member-profile-s2member-reminders-enable-yes">Enable Reminder Emails?</label> <a href="#" onclick="alert(\'This setting applies only if you have configured reminder email notifications in s2Member; e.g., EOT Renewal/Reminder Emails or NPT Renewal/Reminder Emails.\'); return false;" tabindex="-1">[?]</a></th>'."\n";
214
+ echo '<td><label><input type="radio" name="ws_plugin__s2member_profile_s2member_reminders_enable" id="ws-plugin--s2member-profile-s2member-reminders-enable-yes" value="1"'.((string)get_user_option('s2member_reminders_enable', $user_id) !== '0' ? ' checked' : '').' /> Yes</label> &nbsp;&nbsp;&nbsp; <label><input type="radio" name="ws_plugin__s2member_profile_s2member_reminders_enable" id="ws-plugin--s2member-profile-s2member-reminders-enable-no" value="0"'.((string)get_user_option('s2member_reminders_enable', $user_id) === '0' ? ' checked' : '').' /> No (exclude)</label></td>'."\n";
215
+ echo '</tr>'."\n";
216
+
217
+ foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $__v;
218
+ do_action("ws_plugin__s2member_during_users_list_edit_cols_after_reminders_enable", get_defined_vars());
219
+ unset($__refs, $__v);
220
+
221
foreach(array_keys(get_defined_vars()) as $__v) $__refs[$__v] =& $__v;
222
do_action("ws_plugin__s2member_during_users_list_edit_cols_before_reset_pass_resend", get_defined_vars());
223
unset($__refs, $__v);
491
if(isset($_p["ws_plugin__s2member_profile_s2member_auto_eot_time"]) && isset($auto_eot_time))
492
update_user_option($user_id, "s2member_auto_eot_time", $auto_eot_time);
493
494
+ if(isset($_p["ws_plugin__s2member_profile_s2member_reminders_enable"]))
495
+ update_user_option($user_id, "s2member_reminders_enable", (string)(int)$_p["ws_plugin__s2member_profile_s2member_reminders_enable"]);
496
+
497
if(isset($_p["ws_plugin__s2member_profile_s2member_ccaps"]))
498
{
499
foreach($user->allcaps as $cap => $cap_enabled)
includes/menu-pages/code-samples/mms-patch-load.x-php CHANGED
@@ -1,4 +1,4 @@
1
// Modified for full plugin compatiblity.
2
- //if ( empty( $active_plugins ) || defined( 'WP_INSTALLING' ) )
3
- if ( empty( $active_plugins ) || ( defined( 'WP_INSTALLING' ) && !preg_match("/\/wp-activate\.php/", $_SERVER["REQUEST_URI"]) ) )
4
- return $plugins;
1
// Modified for full plugin compatiblity.
2
+ //if ( empty( $active_plugins ) || wp_installing() )
3
+ if ( empty( $active_plugins ) || ( wp_installing() && !preg_match("/\/wp-activate\.php/", $_SERVER["REQUEST_URI"]) ) )
4
+ return $plugins;
includes/menu-pages/help.inc.php ADDED
@@ -0,0 +1,135 @@
1
+ <?php
2
+ /**
3
+ * Getting Help.
4
+ *
5
+ * Copyright: © 2009-2011
6
+ * {@link http://websharks-inc.com/ WebSharks, Inc.}
7
+ * (coded in the USA)
8
+ *
9
+ * Released under the terms of the GNU General Public License.
10
+ * You should have received a copy of the GNU General Public License,
11
+ * along with this software. In the main directory, see: /licensing/
12
+ * If not, see: {@link http://www.gnu.org/licenses/}.
13
+ *
14
+ * @package s2Member\Menu_Pages
15
+ * @since 151218
16
+ */
17
+ if(!defined('WPINC')) // MUST have WordPress.
18
+ exit ("Do not access this file directly.");
19
+
20
+ if (!class_exists ("c_ws_plugin__s2member_menu_page_help"))
21
+ {
22
+ /**
23
+ * Getting Help.
24
+ *
25
+ * @package s2Member\Menu_Pages
26
+ * @since 151218
27
+ */
28
+ class c_ws_plugin__s2member_menu_page_help
29
+ {
30
+ public function __construct ()
31
+ {
32
+ echo '<div class="wrap ws-menu-page">' . "\n";
33
+
34
+ echo '<div class="ws-menu-page-toolbox">'."\n";
35
+ c_ws_plugin__s2member_menu_pages_tb::display ();
36
+ echo '</div>'."\n";
37
+
38
+ echo '<h2>Getting Help w/ s2Member®</h2>' . "\n";
39
+
40
+ echo '<table class="ws-menu-page-table">' . "\n";
41
+ echo '<tbody class="ws-menu-page-table-tbody">' . "\n";
42
+ echo '<tr class="ws-menu-page-table-tr">' . "\n";
43
+ echo '<td class="ws-menu-page-table-l">' . "\n";
44
+
45
+ do_action("ws_plugin__s2member_during_help_page_before_left_sections", get_defined_vars ());
46
+ do_action("ws_plugin__s2member_during_help_page_during_left_sections_before_help", get_defined_vars ());
47
+
48
+ echo '<div class="ws-menu-page-group" title="Getting Help w/ s2Member" default-state="open">' . "\n";
49
+
50
+ echo '<div class="ws-menu-page-section ws-plugin--s2member-help">' . "\n";
51
+ echo '<p>s2Member is pretty easy to setup and install initially. Most of the official documentation is right here in your Dashboard (i.e., there is a lot of inline documentation built into the software). That being said, it can take some time to master everything there is to know about s2Member\'s advanced features. If you need assistance with s2Member, please search the <a href="http://s2member.com/kb/" target="_blank" rel="external">s2Member Knowledge Base</a>, <a href="http://s2member.com/videos/" target="_blank" rel="external">Video Tutorials</a>, <a href="http://s2member.com/forums/" target="_blank" rel="external">Forums</a> and <a href="http://s2member.com/r/codex/" target="_blank" rel="external">Codex</a>. If you are planning to do something creative with s2Member, you might want to <a href="http://jobs.wordpress.net" target="_blank" rel="external">hire a freelance developer</a> to assist you.</p>' . "\n";
52
+ echo '<p><strong>See also:</strong> <a href="http://s2member.com/r/common-troubleshooting-tips/" target="_blank" rel="external">s2Member Troubleshooting Guide</a> (please read this first if you\'re having trouble).</p>'."\n";
53
+
54
+ echo '<div class="ws-menu-page-hr"></div>' . "\n";
55
+
56
+ echo '<h3 style="margin-bottom:0;">Testing Server Compatibility</h3>'."\n";
57
+ echo '<p>Please download the <a href="http://s2member.com/r/server-scanner-info/">s2Member Server Scanner</a>. Unzip, upload via FTP; then open in a browser for a full report.</p>'."\n";
58
+
59
+ echo '<div class="ws-menu-page-hr"></div>' . "\n";
60
+
61
+ echo '<h3 style="margin-bottom:0;">Troubleshooting Payment Gateway Integrations</h3>'."\n";
62
+ echo '<p>Please use s2Member\'s <a href="'.esc_attr(admin_url("/admin.php?page=ws-plugin--s2member-logs")).'">Log Viewer</a>. Log files can be very helpful.</p>'."\n";
63
+
64
+ echo '<div class="ws-menu-page-hr"></div>' . "\n";
65
+
66
+ echo '<h3 style="margin-bottom:0;">Search s2Member KB Articles<em>!</em></h3>'."\n";
67
+ echo '<form method="get" action="http://s2member.com/kb/" target="_blank" onsubmit="if(this.q.value === \'enter search terms...\') this.q.value = \'\';" autocomplete="off">'."\n";
68
+ echo '<p><input type="text" name="kb_q" value="enter search terms..." style="width:60%;" onfocus="if(this.value === \'enter search terms...\') this.value = \'\';" onblur="if(this.value === \'\') this.value = \'enter search terms...\';" /> <input type="submit" value="Search" style="font-size:120%; font-weight:normal;" /></p>'."\n";
69
+ echo '</form>'."\n";
70
+
71
+ do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_help", get_defined_vars ());
72
+
73
+ echo '</div>' . "\n";
74
+
75
+ echo '</div>' . "\n";
76
+
77
+ do_action("ws_plugin__s2member_during_help_page_during_left_sections_after_help", get_defined_vars ());
78
+
79
+ do_action("ws_plugin__s2member_during_help_page_during_left_sections_before_support", get_defined_vars ());
80
+
81
+ echo '<div class="ws-menu-page-group" title="s2Member Tech. Support (for Pro Customers)" default-state="open">' . "\n";
82
+
83
+ echo '<div class="ws-menu-page-section ws-plugin--s2member-support">' . "\n";
84
+ echo '<p style="max-width:900px;">Support for s2Member® is provided by WebSharks, Inc. Our customer support representatives are available Monday through Friday, excluding all major holidays. Or, you can discuss problems/solutions with others in our <a href="https://wordpress.org/support/plugin/s2member" target="_blank" rel="external">public community forum</a>.</p>'."\n";
85
+
86
+ echo '<ul>'."\n";
87
+ echo '<li>For pre-sale questions please see: <a href="http://s2member.com/kb/kb-tag/pre-sale-faqs/" target="_blank" rel="external">Pre-Sale FAQs</a>.</li>'."\n";
88
+ echo '<li>For installation instructions, please see: <a href="http://s2member.com/installation/" target="_blank" rel="external">Installing/Updating s2Member & s2Member Pro</a>.</li>'."\n";
89
+ echo '<li>For troubleshooting (and documentation) please <a href="http://s2member.com/kb/" target="_blank" rel="external">search our Knowledge Base</a>.</li>'."\n";
90
+ echo '<li>Paying customers in need of assistance may <a href="http://s2member.com/r/new-trouble-ticket/" target="_blank" rel="external">submit a trouble ticket</a>.</li>'."\n";
91
+ echo '<li>If you have other questions, please <a href="http://s2member.com/r/new-pre-sale-inquiry/" target="_blank" rel="external">contact our sales dept</a>.</li>'."\n";
92
+ echo '</ul>'."\n";
93
+
94
+ do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_support", get_defined_vars ());
95
+
96
+ echo '</div>' . "\n";
97
+
98
+ echo '</div>' . "\n";
99
+
100
+ do_action("ws_plugin__s2member_during_help_page_during_left_sections_after_support", get_defined_vars ());
101
+
102
+ if (apply_filters("ws_plugin__s2member_during_help_page_during_left_sections_display_pro", !c_ws_plugin__s2member_utils_conds::pro_is_installed(), get_defined_vars ()))
103
+ {
104
+ do_action("ws_plugin__s2member_during_help_page_during_left_sections_before_pro", get_defined_vars ());
105
+
106
+ echo '<div class="ws-menu-page-group" title="Upgrading to s2Member Pro<em>!</em>" default-state="open">' . "\n";
107
+
108
+ echo '<div class="ws-menu-page-section ws-plugin--s2member-pro">' . "\n";
109
+ echo '<p>Among many other features/enhancements, <a href="http://s2member.com/" target="_blank" rel="external">s2Member Pro</a> comes pre-integrated with additional payment gateways that work with s2Member Pro-Forms (a powerful s2Member Pro feature). For instance, Stripe (most popular; also supports Bitcoin), PayPal Payments Pro, and Authorize.Net. Each of these payment gateways allow you to accept most major credit cards on-site; i.e., customers never leave your site! s2Member Pro-Forms also support PayPal Express Checkout (if you integrate with PayPal Pro); for customers who actually prefer to pay with PayPal.</p>' . "\n";
110
+ echo '<p><strong>Learn more here:</strong> <a href="http://s2member.com/features/" target="_blank" rel="external">s2Member Pro Features</a></p>'."\n";
111
+ do_action("ws_plugin__s2member_during_help_page_during_left_sections_during_pro", get_defined_vars ());
112
+ echo '</div>' . "\n";
113
+
114
+ echo '</div>' . "\n";
115
+
116
+ do_action("ws_plugin__s2member_during_start_page_during_left_sections_after_pro", get_defined_vars ());
117
+ }
118
+ do_action("ws_plugin__s2member_during_help_page_after_left_sections", get_defined_vars ());
119
+
120
+ echo '</td>' . "\n";
121
+
122
+ echo '<td class="ws-menu-page-table-r">' . "\n";
123
+ c_ws_plugin__s2member_menu_pages_rs::display ();
124
+ echo '</td>' . "\n";
125
+
126
+ echo '</tr>' . "\n";
127
+ echo '</tbody>' . "\n";
128
+ echo '</table>' . "\n";
129
+
130
+ echo '</div>' . "\n";
131
+ }
132
+ }
133
+ }
134
+
135
+ new c_ws_plugin__s2member_menu_page_help ();
includes/menu-pages/logs.inc.php CHANGED
@@ -44,40 +44,6 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_logs"))
44
45
do_action("ws_plugin__s2member_during_logs_page_before_left_sections", get_defined_vars());
46
47
- if(apply_filters("ws_plugin__s2member_during_logs_page_during_left_sections_display_help", TRUE, get_defined_vars()))
48
- {
49
- do_action("ws_plugin__s2member_during_logs_page_during_left_sections_before_help", get_defined_vars());
50
-
51
- echo '<div class="ws-menu-page-group" title="Getting Help">'."\n";
52
-
53
- echo '<div class="ws-menu-page-section ws-plugin--s2member-help">'."\n";
54
- echo '<h3>Getting Help w/ s2Member (Troubleshooting)</h3>'."\n";
55
- echo '<p>s2Member is pretty easy to setup and install initially. Most of the official documentation is right here in your Dashboard (i.e., there is a lot of inline documentation built into the software). That being said, it can take some time to master everything there is to know about s2Member\'s advanced features. If you need assistance with s2Member, please search the <a href="http://s2member.com/kb/" target="_blank" rel="external">s2Member Knowledge Base</a>, <a href="http://www.s2member.com/videos/" target="_blank" rel="external">Video Tutorials</a>, <a href="http://www.s2member.com/forums/" target="_blank" rel="external">Forums</a> and <a href="http://www.s2member.com/codex/" target="_blank" rel="external">Codex</a>. If you are planning to do something creative with s2Member, you might want to <a href="http://jobs.wordpress.net" target="_blank" rel="external">hire a freelance developer</a> to assist you.</p>'."\n";
56
- echo '<p><strong>See also:</strong> <a href="http://www.s2member.com/kb/common-troubleshooting-tips/" target="_blank" rel="external">s2Member Troubleshooting Guide</a> (please read this first if you\'re having trouble).</p>'."\n";
57
-
58
- echo '<div class="ws-menu-page-hr"></div>'."\n";
59
-
60
- echo '<h3 style="margin-bottom:0;">Testing Server Compatibility</h3>'."\n";
61
- echo '<p>Please download the <a href="http://www.s2member.com/r/server-check-tool/">s2Member Server Scanner</a>. Unzip, upload via FTP; then open in a browser for a full report.</p>'."\n";
62
-
63
- echo '<div class="ws-menu-page-hr"></div>'."\n";
64
-
65
- echo '<h3 style="margin-bottom:0;">Troubleshooting Payment Gateway Integrations</h3>'."\n";
66
- echo '<p>Please use the s2Member Log Viewer (below). Log files can be very helpful.</p>'."\n";
67
-
68
- echo '<div class="ws-menu-page-hr"></div>'."\n";
69
-
70
- echo '<h3 style="margin-bottom:0;">Search s2Member KB Articles<em>!</em></h3>'."\n";
71
- echo '<form method="get" action="http://s2member.com/kb/" target="_blank" onsubmit="if(this.q.value === \'enter search terms...\') this.q.value = \'\';" autocomplete="off">'."\n";
72
- echo '<p><input type="text" name="kb_q" value="enter search terms..." style="width:60%;" onfocus="if(this.value === \'enter search terms...\') this.value = \'\';" onblur="if(this.value === \'\') this.value = \'enter search terms...\';" /> <input type="submit" value="Search" style="font-size:120%; font-weight:normal;" /></p>'."\n";
73
- echo '</form>'."\n";
74
-
75
- do_action("ws_plugin__s2member_during_logs_page_during_left_sections_during_help", get_defined_vars());
76
- echo '</div>'."\n";
77
- echo '</div>'."\n";
78
-
79
- do_action("ws_plugin__s2member_during_logs_page_during_left_sections_after_help", get_defined_vars());
80
- }
81
if(apply_filters("ws_plugin__s2member_during_logs_page_during_left_sections_display_log_settings", TRUE, get_defined_vars()))
82
{
83
do_action("ws_plugin__s2member_during_logs_page_during_left_sections_before_log_settings", get_defined_vars());
44
45
do_action("ws_plugin__s2member_during_logs_page_before_left_sections", get_defined_vars());
46
47
if(apply_filters("ws_plugin__s2member_during_logs_page_during_left_sections_display_log_settings", TRUE, get_defined_vars()))
48
{
49
do_action("ws_plugin__s2member_during_logs_page_during_left_sections_before_log_settings", get_defined_vars());
includes/menu-pages/start.inc.php CHANGED
@@ -246,7 +246,6 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_start"))
246
echo '<div class="ws-menu-page-group" title="Upgrading to s2Member Pro<em>!</em>" default-state="open">' . "\n";
247
248
echo '<div class="ws-menu-page-section ws-plugin--s2member-pro">' . "\n";
249
- echo '<h3>s2Member Pro—A Recommended Upgrade</h3>' . "\n";
250
echo '<p>Among many other features/enhancements, <a href="http://s2member.com/" target="_blank" rel="external">s2Member Pro</a> comes pre-integrated with additional payment gateways that work with s2Member Pro-Forms (a powerful s2Member Pro feature). For instance, Stripe (most popular; also supports Bitcoin), PayPal Payments Pro, and Authorize.Net. Each of these payment gateways allow you to accept most major credit cards on-site; i.e., customers never leave your site! s2Member Pro-Forms also support PayPal Express Checkout (if you integrate with PayPal Pro); for customers who actually prefer to pay with PayPal.</p>' . "\n";
251
echo '<p><strong>Learn more here:</strong> <a href="http://s2member.com/features/" target="_blank" rel="external">s2Member Pro Features</a></p>'."\n";
252
do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_pro", get_defined_vars ());
@@ -257,40 +256,6 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_start"))
257
do_action("ws_plugin__s2member_during_start_page_during_left_sections_after_pro", get_defined_vars ());
258
}
259
260
- if (apply_filters("ws_plugin__s2member_during_start_page_during_left_sections_display_help", (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()), get_defined_vars ()))
261
- {
262
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_before_help", get_defined_vars ());
263
-
264
- echo '<div class="ws-menu-page-group" title="Getting Help w/ s2Member" default-state="open">' . "\n";
265
-
266
- echo '<div class="ws-menu-page-section ws-plugin--s2member-help">' . "\n";
267
- echo '<p>s2Member is pretty easy to setup and install initially. Most of the official documentation is right here in your Dashboard (i.e., there is a lot of inline documentation built into the software). That being said, it can take some time to master everything there is to know about s2Member\'s advanced features. If you need assistance with s2Member, please search the <a href="http://s2member.com/kb/" target="_blank" rel="external">s2Member Knowledge Base</a>, <a href="http://s2member.com/videos/" target="_blank" rel="external">Video Tutorials</a>, <a href="http://s2member.com/forums/" target="_blank" rel="external">Forums</a> and <a href="http://s2member.com/r/codex/" target="_blank" rel="external">Codex</a>. If you are planning to do something creative with s2Member, you might want to <a href="http://jobs.wordpress.net" target="_blank" rel="external">hire a freelance developer</a> to assist you.</p>' . "\n";
268
- echo '<p><strong>See also:</strong> <a href="http://s2member.com/r/common-troubleshooting-tips/" target="_blank" rel="external">s2Member Troubleshooting Guide</a> (please read this first if you\'re having trouble).</p>'."\n";
269
-
270
- echo '<div class="ws-menu-page-hr"></div>' . "\n";
271
-
272
- echo '<h3 style="margin-bottom:0;">Testing Server Compatibility</h3>'."\n";
273
- echo '<p>Please download the <a href="http://s2member.com/r/server-scanner-info/">s2Member Server Scanner</a>. Unzip, upload via FTP; then open in a browser for a full report.</p>'."\n";
274
-
275
- echo '<div class="ws-menu-page-hr"></div>' . "\n";
276
-
277
- echo '<h3 style="margin-bottom:0;">Troubleshooting Payment Gateway Integrations</h3>'."\n";
278
- echo '<p>Please use s2Member\'s <a href="'.esc_attr(admin_url("/admin.php?page=ws-plugin--s2member-logs")).'">Log Viewer</a>. Log files can be very helpful.</p>'."\n";
279
-
280
- echo '<div class="ws-menu-page-hr"></div>' . "\n";
281
-
282
- echo '<h3 style="margin-bottom:0;">Search s2Member KB Articles<em>!</em></h3>'."\n";
283
- echo '<form method="get" action="http://s2member.com/kb/" target="_blank" onsubmit="if(this.q.value === \'enter search terms...\') this.q.value = \'\';" autocomplete="off">'."\n";
284
- echo '<p><input type="text" name="kb_q" value="enter search terms..." style="width:60%;" onfocus="if(this.value === \'enter search terms...\') this.value = \'\';" onblur="if(this.value === \'\') this.value = \'enter search terms...\';" /> <input type="submit" value="Search" style="font-size:120%; font-weight:normal;" /></p>'."\n";
285
- echo '</form>'."\n";
286
-
287
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_help", get_defined_vars ());
288
- echo '</div>' . "\n";
289
- echo '</div>' . "\n";
290
-
291
- do_action("ws_plugin__s2member_during_start_page_during_left_sections_after_help", get_defined_vars ());
292
- }
293
-
294
do_action("ws_plugin__s2member_during_start_page_after_left_sections", get_defined_vars ());
295
296
echo '</td>' . "\n";
246
echo '<div class="ws-menu-page-group" title="Upgrading to s2Member Pro<em>!</em>" default-state="open">' . "\n";
247
248
echo '<div class="ws-menu-page-section ws-plugin--s2member-pro">' . "\n";
249
echo '<p>Among many other features/enhancements, <a href="http://s2member.com/" target="_blank" rel="external">s2Member Pro</a> comes pre-integrated with additional payment gateways that work with s2Member Pro-Forms (a powerful s2Member Pro feature). For instance, Stripe (most popular; also supports Bitcoin), PayPal Payments Pro, and Authorize.Net. Each of these payment gateways allow you to accept most major credit cards on-site; i.e., customers never leave your site! s2Member Pro-Forms also support PayPal Express Checkout (if you integrate with PayPal Pro); for customers who actually prefer to pay with PayPal.</p>' . "\n";
250
echo '<p><strong>Learn more here:</strong> <a href="http://s2member.com/features/" target="_blank" rel="external">s2Member Pro Features</a></p>'."\n";
251
do_action("ws_plugin__s2member_during_start_page_during_left_sections_during_pro", get_defined_vars ());
256
do_action("ws_plugin__s2member_during_start_page_during_left_sections_after_pro", get_defined_vars ());
257
}
258
259
do_action("ws_plugin__s2member_during_start_page_after_left_sections", get_defined_vars ());
260
261
echo '</td>' . "\n";
includes/translations/s2member.pot CHANGED
@@ -2,9 +2,9 @@
2
# This file is distributed under the same license as the package.
3
msgid ""
4
msgstr ""
5
- "Project-Id-Version: 151210\n"
6
"Report-Msgid-Bugs-To: http://wordpress.org/tag/s2member\n"
7
- "POT-Creation-Date: 2015-12-10 11:40:46+00:00\n"
8
"MIME-Version: 1.0\n"
9
"Content-Type: text/plain; charset=UTF-8\n"
10
"Content-Transfer-Encoding: 8bit\n"
@@ -1128,12 +1128,12 @@ msgctxt "s2member-front"
1128
msgid "`strong` (i.e., use numbers, letters, mixed caSe, and punctuation)"
1129
msgstr ""
1130
1131
- #: s2member/includes/classes/users-list-in.inc.php:349
1132
msgctxt "s2member-front"
1133
msgid "Additional Profile Fields"
1134
msgstr ""
1135
1136
- #: s2member/includes/classes/users-list-in.inc.php:349
1137
msgctxt "s2member-front"
1138
msgid "(for this site)"
1139
msgstr ""
@@ -4265,7 +4265,7 @@ msgctxt "s2member-front"
4265
msgid "My Profile Summary"
4266
msgstr ""
4267
4268
- #: s2member-pro/s2member-pro/includes/classes/reminders.inc.php:232
4269
msgid "0 / non-recurring"
4270
msgstr ""
4271
2
# This file is distributed under the same license as the package.
3
msgid ""
4
msgstr ""
5
+ "Project-Id-Version: 151218\n"
6
"Report-Msgid-Bugs-To: http://wordpress.org/tag/s2member\n"
7
+ "POT-Creation-Date: 2015-12-18 16:43:20+00:00\n"
8
"MIME-Version: 1.0\n"
9
"Content-Type: text/plain; charset=UTF-8\n"
10
"Content-Transfer-Encoding: 8bit\n"
1128
msgid "`strong` (i.e., use numbers, letters, mixed caSe, and punctuation)"
1129
msgstr ""
1130
1131
+ #: s2member/includes/classes/users-list-in.inc.php:362
1132
msgctxt "s2member-front"
1133
msgid "Additional Profile Fields"
1134
msgstr ""
1135
1136
+ #: s2member/includes/classes/users-list-in.inc.php:362
1137
msgctxt "s2member-front"
1138
msgid "(for this site)"
1139
msgstr ""
4265
msgid "My Profile Summary"
4266
msgstr ""
4267
4268
+ #: s2member-pro/s2member-pro/includes/classes/reminders.inc.php:239
4269
msgid "0 / non-recurring"
4270
msgstr ""
4271
readme.txt CHANGED
@@ -1,7 +1,7 @@
1
=== s2Member Framework (Member Roles, Capabilities, Membership, PayPal Members) ===
2
3
- Version: 151210
4
- Stable tag: 151210
5
6
SSL Compatible: yes
7
bbPress® Compatible: yes
@@ -25,7 +25,7 @@ Tested up to PHP: 7.0
25
26
Copyright: © 2009 WebSharks, Inc.
27
License: GNU General Public License v2 or later.
28
- Contributors: WebSharks, JasWSInc, anguz, raamdev, sitegeek, kristineds
29
30
Author: s2Member® / WebSharks, Inc.
31
Author URI: http://s2member.com/
@@ -169,12 +169,22 @@ Released under the terms of the [GNU General Public License](http://www.gnu.org/
169
170
== Upgrade Notice ==
171
172
- = v151210 =
173
174
(Maintenance Release) Upgrade immediately.
175
176
== Changelog ==
177
178
= v151210 =
179
180
- (s2Member/s2Member Pro) **WP/PHP Compat:** Updated for compatibility with WordPress 4.4 and PHP v7.0. Note that s2Member and s2Member Pro also remain compatible with WordPress 4.3 and PHP 5.2. However, PHP 5.5+ is strongly recommended.
1
=== s2Member Framework (Member Roles, Capabilities, Membership, PayPal Members) ===
2
3
+ Version: 151218
4
+ Stable tag: 151218
5
6
SSL Compatible: yes
7
bbPress® Compatible: yes
25
26
Copyright: © 2009 WebSharks, Inc.
27
License: GNU General Public License v2 or later.
28
+ Contributors: WebSharks, JasWSInc, anguz, raamdev, sitegeek, KristineDS
29
30
Author: s2Member® / WebSharks, Inc.
31
Author URI: http://s2member.com/
169
170
== Upgrade Notice ==
171
172
+ = v151218 =
173
174
(Maintenance Release) Upgrade immediately.
175
176
== Changelog ==
177
178
+ = v151218 =
179
+
180
+ - (s2Member Pro) **Reminder Email Notification Exclusions:** It is now possible to enable/disable EOT Renewal/Reminder Email notifications on a per-user basis. You can edit a user's profile in the WP Dashboard and check "_No (exclude)_" to prevent specific users from receiving any reminder emails that you configured. Props at @patdumond @luisrock. See also [this GitHub issue](https://github.com/websharks/s2member/issues/816).
181
+
182
+ - (s2Member) **PHP v7 Compat.:** This release addresses one remaining issue with the `preg_replace` `/e` modifier as reported in [this GitHub issue](https://github.com/websharks/s2member/issues/811). Props @nerdworker for reporting. Thanks!
183
+
184
+ - (s2Member/s2Member Pro) **WP v4.4 Compat.:** This release corrects an issue that impacted sites attempting to run s2Member on a Multisite Network; i.e., it corrects a problem with the `load.php` patch against the latest release of WordPress. Props @crazycoolcam for reporting! See also [this GitHub issue](https://github.com/websharks/s2member/issues/812).
185
+
186
+ - (s2Member/s2Member Pro) **Getting Help:** This release adds a new menu page titled, "Getting Help w/ s2Member". This new section of your Dashboard provides quick & easy access to s2Member KB articles, suggestions, and our tech support department (for pro customers). Props @patdumond @raamdev. See also [this GitHub issue](https://github.com/websharks/s2member/issues/814).
187
+
188
= v151210 =
189
190
- (s2Member/s2Member Pro) **WP/PHP Compat:** Updated for compatibility with WordPress 4.4 and PHP v7.0. Note that s2Member and s2Member Pro also remain compatible with WordPress 4.3 and PHP 5.2. However, PHP 5.5+ is strongly recommended.
s2member.php CHANGED
@@ -19,8 +19,8 @@
19
*/
20
/* -- This section for WordPress parsing. ------------------------------------------------------------------------------
21
22
- Version: 151210
23
- Stable tag: 151210
24
25
SSL Compatible: yes
26
bbPress Compatible: yes
@@ -81,7 +81,7 @@ if(!defined('WPINC')) // MUST have WordPress.
81
* @var string
82
*/
83
if(!defined('WS_PLUGIN__S2MEMBER_VERSION'))
84
- define('WS_PLUGIN__S2MEMBER_VERSION', '151210' /* !#distro-version#! */);
85
/**
86
* Minimum PHP version required to run s2Member.
87
*
@@ -111,7 +111,7 @@ if(!defined('WS_PLUGIN__S2MEMBER_MIN_WP_VERSION'))
111
* @var string
112
*/
113
if(!defined('WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION'))
114
- define('WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION', '151210' /* !#distro-version#! */);
115
/*
116
Several compatibility checks.
117
If all pass, load the s2Member plugin.
19
*/
20
/* -- This section for WordPress parsing. ------------------------------------------------------------------------------
21
22
+ Version: 151218
23
+ Stable tag: 151218
24
25
SSL Compatible: yes
26
bbPress Compatible: yes
81
* @var string
82
*/
83
if(!defined('WS_PLUGIN__S2MEMBER_VERSION'))
84
+ define('WS_PLUGIN__S2MEMBER_VERSION', '151218' /* !#distro-version#! */);
85
/**
86
* Minimum PHP version required to run s2Member.
87
*
111
* @var string
112
*/
113
if(!defined('WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION'))
114
+ define('WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION', '151218' /* !#distro-version#! */);
115
/*
116
Several compatibility checks.
117
If all pass, load the s2Member plugin.