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

Version Description

= v130123 = Maintenance release. Upgrade immediately.

Download this release

Release Info

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

Code changes from version 130121 to 130123

checksum.txt CHANGED
@@ -1 +1 @@
1
- 1929917d1855921a8a385f7a1198bc7b
1
+ 2e812841193a58035113e349bc6a37c2
images/brand-kb.png ADDED
Binary file
images/brand-kb.pspimage ADDED
Binary file
includes/classes/menu-pages-rs.inc.php CHANGED
@@ -75,6 +75,13 @@ if (!class_exists ("c_ws_plugin__s2member_menu_pages_rs"))
75
echo '</div>' . "\n";
76
}
77
/**/
78
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["videos"])
79
{
80
echo '<div class="ws-menu-page-videos">' . "\n";
75
echo '</div>' . "\n";
76
}
77
/**/
78
+ if ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["kb"])
79
+ {
80
+ echo '<div class="ws-menu-page-kb">' . "\n";
81
+ echo '<a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Knowledge Base")) . '" target="_blank"><img src="' . esc_attr ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]) . '/images/brand-kb.png" alt="." /></a>' . "\n";
82
+ echo '</div>' . "\n";
83
+ }
84
+ /**/
85
if ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"]["videos"])
86
{
87
echo '<div class="ws-menu-page-videos">' . "\n";
includes/classes/sc-files-in.inc.php CHANGED
@@ -102,7 +102,7 @@ if(!class_exists("c_ws_plugin__s2member_sc_files_in"))
102
/**/
103
$attr = /* Force array; trim quote entities. */ c_ws_plugin__s2member_utils_strings::trim_qts_deep((array)$attr);
104
/**/
105
- $attr = shortcode_atts(array("download" => "", "download_key" => "", "stream" => "yes", "inline" => "yes", "storage" => "", "remote" => "", "ssl" => "", "rewrite" => "yes", "rewrite_base" => "", "skip_confirmation" => "", "url_to_storage_source" => "yes", "count_against_user" => "yes", "check_user" => "yes", /* Shortcode-specifics » */ "file_download" => "", "player" => "jwplayer-v6-rtmp", "player_id" => "s2-stream-".md5(uniqid("", TRUE)), "player_path" => "/jwplayer/jwplayer.js", "player_image" => "", "player_title" => "", /* Layout » */ "player_controls" => "yes", "player_height" => "270", "player_skin" => "", "player_stretching" => "uniform", "player_width" => "480", /* Playback » */ "player_autostart" => "no", "player_fallback" => "yes", "player_mute" => "no", "player_primary" => "flash", "player_repeat" => "no", "player_startparam" => ""), $attr);
106
$attr["download"] = (!empty($attr["file_download"])) ? $attr["file_download"] : $attr["download"];
107
/**/
108
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$__v;');
@@ -134,6 +134,7 @@ if(!class_exists("c_ws_plugin__s2member_sc_files_in"))
134
/**/
135
$get = preg_replace("/%%player_id%%/", $attr["player_id"], $get);
136
$get = preg_replace("/%%player_path%%/", $attr["player_path"], $get);
137
/**/
138
$get = preg_replace("/%%player_image%%/", $attr["player_image"], $get);
139
$get = preg_replace("/%%player_title%%/", $attr["player_title"], $get);
@@ -150,6 +151,8 @@ if(!class_exists("c_ws_plugin__s2member_sc_files_in"))
150
$get = preg_replace("/%%player_primary%%/", $attr["player_primary"], $get);
151
$get = preg_replace("/%%player_repeat%%/", ((filter_var($attr["player_repeat"], FILTER_VALIDATE_BOOLEAN)) ? "true" : "false"), $get);
152
$get = preg_replace("/%%player_startparam%%/", $attr["player_startparam"], $get);
153
}
154
}
155
}
102
/**/
103
$attr = /* Force array; trim quote entities. */ c_ws_plugin__s2member_utils_strings::trim_qts_deep((array)$attr);
104
/**/
105
+ $attr = shortcode_atts(array("download" => "", "download_key" => "", "stream" => "yes", "inline" => "yes", "storage" => "", "remote" => "", "ssl" => "", "rewrite" => "yes", "rewrite_base" => "", "skip_confirmation" => "", "url_to_storage_source" => "yes", "count_against_user" => "yes", "check_user" => "yes", /* Shortcode-specifics »» */ "file_download" => "", /* Configuration » */ "player" => "jwplayer-v6-rtmp", "player_id" => "s2-stream-".md5(uniqid("", TRUE)), "player_path" => "/jwplayer/jwplayer.js", "player_key" => "", "player_image" => "", "player_title" => "", /* Layout » */ "player_controls" => "yes", "player_height" => "270", "player_skin" => "", "player_stretching" => "uniform", "player_width" => "480", /* Playback » */ "player_autostart" => "no", "player_fallback" => "yes", "player_mute" => "no", "player_primary" => "flash", "player_repeat" => "no", "player_startparam" => "", /* Advanced option blocks » */ "player_option_blocks" => ""), $attr);
106
$attr["download"] = (!empty($attr["file_download"])) ? $attr["file_download"] : $attr["download"];
107
/**/
108
eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$__v;');
134
/**/
135
$get = preg_replace("/%%player_id%%/", $attr["player_id"], $get);
136
$get = preg_replace("/%%player_path%%/", $attr["player_path"], $get);
137
+ $get = preg_replace("/%%player_key%%/", $attr["player_key"], $get);
138
/**/
139
$get = preg_replace("/%%player_image%%/", $attr["player_image"], $get);
140
$get = preg_replace("/%%player_title%%/", $attr["player_title"], $get);
151
$get = preg_replace("/%%player_primary%%/", $attr["player_primary"], $get);
152
$get = preg_replace("/%%player_repeat%%/", ((filter_var($attr["player_repeat"], FILTER_VALIDATE_BOOLEAN)) ? "true" : "false"), $get);
153
$get = preg_replace("/%%player_startparam%%/", $attr["player_startparam"], $get);
154
+ /**/
155
+ $get = preg_replace("/%%player_option_blocks%%/", ((strpos($attr["player_option_blocks"], ":") !== false) ? $attr["player_option_blocks"] : base64_decode($attr["player_option_blocks"])), $get);
156
}
157
}
158
}
includes/menu-pages/api-ops.inc.php CHANGED
@@ -56,6 +56,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_api_ops"))
56
echo '<p>If you use affiliate software, or have back-office routines that need to be notified whenever a new Subscription is created, you\'ll want to read this section. This is marked `Signup`, because the URLs that you list below, will be notified each time a "new", "paying" Member, signs up. Depending on your fee structure, this may include a first Initial Payment that establishes their Subscription, or it may not. This Notification will only be triggered once for each Member. Signup Notifications are sent right after a "new", "paying" Member, signs up successfully through your Payment Gateway, regardless of whether any money has actually been transacted initially. In other words, this Notification is triggered anytime a "new", "paying" Member, signs up through your Payment Gateway, even if you provided them with a 100% Free Trial Period <em>( e.g. no money is being transacted intially )</em>.</p>' . "\n";
57
echo '<p>This Notification will NOT be processed for Free Subscribers that register without going through your Payment Gateway at all. This Notification will NOT be processed when an "existing" User/Member pays for a new Subscription <em>( see: Modification Notifications for that scenario )</em>.' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ()) ? '' : ' And, this Notification will NOT be processed on Buy Now transactions for Independent Custom Capabilities <em>( see: Payment Notifications for that scenario )</em>.') . '</p>' . "\n";
58
echo '<p>Please note, this feature is not to be confused with the PayPal® IPN service. PayPal® IPN <em>( and other service integrations )</em> are already built into s2Member. They remain active at all times. These Signup Notifications are an added layer of functionality, and they are completely optional.</p>' . "\n";
59
do_action ("ws_plugin__s2member_during_api_ops_page_during_left_sections_during_signup_notifications", get_defined_vars ());
60
/**/
61
echo '<table class="form-table">' . "\n";
@@ -147,6 +148,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_api_ops"))
147
echo '<p>If you use affiliate software, or have back-office routines that need to be notified whenever a "new" Member is created, you\'ll want to read this section. This is marked `Registration`, because the URLs that you list below, will be notified each time a "new" Member registers a Username. This is usually triggered right after a `Signup` Notification; at the point in which a "new" Member successfully completes the Registration form, and they are assigned a Username.</p>' . "\n";
148
echo '<p>This Notification is ALSO triggered whenever you create a "new" User inside your WordPress® Dashboard.</p>' . "\n";
149
echo '<p>Please note, this feature is not to be confused with the PayPal® IPN service. PayPal® IPN <em>( and other service integrations )</em> are already built into s2Member. They remain active at all times. These Registration Notifications are an added layer of functionality, and they are completely optional.</p>' . "\n";
150
do_action ("ws_plugin__s2member_during_api_ops_page_during_left_sections_during_registration_notifications", get_defined_vars ());
151
/**/
152
echo '<table class="form-table">' . "\n";
@@ -248,6 +250,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_api_ops"))
248
echo '<p>So, unlike the `Signup` Notification, `Payment` Notifications take place whenever actual payments are received, instead of just once after signup is completed. If a payment is required during signup <em>( i.e. no Free Trial is being offered )</em>, a Signup Notification will be triggered, and a Payment Notification will ALSO be triggered. In other words, a Payment Notification occurs anytime funds are received, no matter what.</p>' . "\n";
249
echo (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ? '<p>Payment Notifications are also triggered whenever a Buy Now purchase for Independent Custom Capabilities takes place.</p>' . "\n" : '';
250
echo '<p>Please note, this feature is not to be confused with the PayPal® IPN service. PayPal® IPN <em>( and other service integrations )</em> are already built into s2Member. They remain active at all times. These Payment Notifications are an added layer of functionality, and they are completely optional.</p>' . "\n";
251
do_action ("ws_plugin__s2member_during_api_ops_page_during_left_sections_during_payment_notifications", get_defined_vars ());
252
/**/
253
echo '<table class="form-table">' . "\n";
@@ -353,6 +356,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_api_ops"))
353
echo '<p>Modification Notifications are sent right after a Member signs up and/or modifies billing terms successfully through your Payment Gateway, regardless of whether any money has actually been transacted initially. In other words, this Notification is triggered, even if you provided them with a 100% Free Trial Period <em>( e.g. no money is being transacted intially )</em>.</p>' . "\n";
354
echo '<p>This Notification will NOT be processed for Free Subscribers that register without going through your Payment Gateway at all. This Notification will NOT be processed for "new" Users/Members <em>( see: Signup Notifications for that scenario )</em>.' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ()) ? '' : ' And, this Notification will NOT be processed for Independent Custom Capability purchases <em>( see: Payment Notifications for that scenario )</em>.') . '</p>' . "\n";
355
echo '<p>Please note, this feature is not to be confused with the PayPal® IPN service. PayPal® IPN <em>( and other service integrations )</em> are already built into s2Member. They remain active at all times. These Modification Notifications are an added layer of functionality, and they are completely optional.</p>' . "\n";
356
do_action ("ws_plugin__s2member_during_api_ops_page_during_left_sections_during_modification_notifications", get_defined_vars ());
357
/**/
358
echo '<table class="form-table">' . "\n";
@@ -460,6 +464,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_api_ops"))
460
echo '<p><em><strong>*Understanding Cancellations*</strong> It\'s important to realize that a Cancellation is not an EOT ( End Of Term ). All that happens during a Cancellation event, is that billing is stopped, and it\'s understood that the Customer is going to lose access, at some point in the future. This does NOT mean, that access will be revoked immediately. A separate EOT event will automatically handle a (demotion or deletion) later, at the appropriate time; which could be several days, or even a year after the Cancellation took place.</em></p>' . "\n";
461
echo '<p><em><strong>*Some Hairy Details*</strong> There might be times whenever you notice that a Member\'s Subscription has been cancelled through your Payment Gateway... but, s2Member continues allowing the User access to your site as a paid Member. Please don\'t be confused by this... in 99.9% of these cases, the reason for this is legitimate. s2Member will only remove the User\'s Membership privileges when an EOT ( End Of Term ) is processed, a refund occurs, a chargeback occurs, or when a cancellation occurs - which would later result in a delayed Auto-EOT by s2Member.</em></p>' . "\n";
462
echo '<p><em>s2Member will not process an EOT ( End Of Term ) until the User has completely used up the time they paid for. In other words, if a User signs up for a monthly Subscription on Jan 1st, and then cancels their Subscription on Jan 15th; technically, they should still be allowed to access the site for another 15 days, and then on Feb 1st, the time they paid for has completely elapsed. At that time, s2Member will remove their Membership privileges; by either demoting them to a Free Subscriber, or deleting their account from the system ( based on your configuration ). s2Member also calculates one extra day ( 24 hours ) into its equation, just to make sure access is not removed sooner than a Customer might expect.</em></p>' . "\n";
463
do_action ("ws_plugin__s2member_during_api_ops_page_during_left_sections_during_cancellation_notifications", get_defined_vars ());
464
/**/
465
echo '<table class="form-table">' . "\n";
@@ -561,6 +566,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_api_ops"))
561
echo '<p>Please note, this feature is not to be confused with the PayPal® IPN service. PayPal® IPN <em>( and other service integrations )</em> are already built into s2Member. They remain active at all times. These EOT/Deletion Notifications are an added layer of functionality, and they are completely optional.</p>' . "\n";
562
echo '<p><em><strong>*Some Hairy Details*</strong> There might be times whenever you notice that a Member\'s Subscription has been cancelled through your Payment Gateway... but, s2Member continues allowing the User access to your site as a paid Member. Please don\'t be confused by this... in 99.9% of these cases, the reason for this is legitimate. s2Member will only remove the User\'s Membership privileges when an EOT ( End Of Term ) is processed, a refund occurs, a chargeback occurs, or when a cancellation occurs - which would later result in a delayed Auto-EOT by s2Member.</em></p>' . "\n";
563
echo '<p><em>s2Member will not process an EOT ( End Of Term ) until the User has completely used up the time they paid for. In other words, if a User signs up for a monthly Subscription on Jan 1st, and then cancels their Subscription on Jan 15th; technically, they should still be allowed to access the site for another 15 days, and then on Feb 1st, the time they paid for has completely elapsed. At that time, s2Member will remove their Membership privileges; by either demoting them to a Free Subscriber, or deleting their account from the system ( based on your configuration ). s2Member also calculates one extra day ( 24 hours ) into its equation, just to make sure access is not removed sooner than a Customer might expect.</em></p>' . "\n";
564
do_action ("ws_plugin__s2member_during_api_ops_page_during_left_sections_during_eot_deletion_notifications", get_defined_vars ());
565
/**/
566
echo '<table class="form-table">' . "\n";
@@ -659,6 +665,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_api_ops"))
659
echo '<p>This is very similar to the EOT/Deletion Notification described above. However, there is an important distinction. The all-inclusive EOT/Deletion Notification includes cancellations, expirations, failed payments, refunds, chargebacks, and even manual deletions by the Administrator from within the Dashboard. In other words, EOT/Deletion Notifications are processed ANY time a deletion or End Of Term action takes place. This API Notification, that is, Refund/Reversal Notifications, do NOT include all of those scenarios.</p>' . "\n";
660
echo '<p>So the distinction is that Refund/Reversal Notifications are ONLY sent under two specific circumstances: 1. You log into your Payment Gateway and refund a payment that is associated with a Subscription. 2. The Customer complains to your Payment Gateway and a chargeback occurs, forcing a Reversal. In both of these cases, an EOT/Deletion Notification will be sent <em>( as described in the previous section )</em>, but since EOT/Deletion is a broader Notification, these Refund/Reversal Notifications are here so you can nail down specific back-office operations in these two specific scenarios.</p>' . "\n";
661
echo '<p>Please note, this feature is not to be confused with the PayPal® IPN service. PayPal® IPN <em>( and other service integrations )</em> are already built into s2Member. They remain active at all times. These Refund/Reversal Notifications are an added layer of functionality, and they are completely optional.</p>' . "\n";
662
do_action ("ws_plugin__s2member_during_api_ops_page_during_left_sections_during_refund_reversal_notifications", get_defined_vars ());
663
/**/
664
echo '<table class="form-table">' . "\n";
@@ -759,6 +766,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_api_ops"))
759
echo '<p>If you use affiliate software, or have back-office routines that need to be notified whenever Specific Post/Page sales take place, you\'ll want to read this section. This is marked `Specific Post/Page`, because the URLs that you list below, will be notified each time a payment occurs, on a sale providing access to a Specific Post/Page.</p>' . "\n";
760
echo '<p>This is one of only two API Notifications that are sent for Specific Post/Page Access <em>( i.e. this one, and another below, for Refunds/Reversals )</em>. All of the other API Notifications are designed for Membership Level Access' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ()) ? '' : ' and Independent Custom Capabilities') . '. None of the other API Notifications will ever be processed for Specific Post/Page Access. If you intend to respond to events related to Specific Post/Page Access, you MUST use one of the two API Notifications specifically geared to Post/Page Access.</p>' . "\n";
761
echo '<p>Please note, this feature is not to be confused with the PayPal® IPN service. PayPal® IPN <em>( and other service integrations )</em> are already built into s2Member. They remain active at all times. These Sale Notifications are an added layer of functionality, and they are completely optional.</p>' . "\n";
762
do_action ("ws_plugin__s2member_during_api_ops_page_during_left_sections_during_sp_sale_notifications", get_defined_vars ());
763
/**/
764
echo '<table class="form-table">' . "\n";
@@ -850,6 +858,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_api_ops"))
850
echo '<p>If you use affiliate software, or have back-office routines that need to be notified whenever sales have been refunded or reversed <em>( i.e. charged back to you )</em>, you\'ll want to read this section. This is marked `Specific Post/Page`, because the URLs that you list below, will be notified each time a Refund or Reversal occurs, on a sale that provided access to a Specific Post/Page.</p>' . "\n";
851
echo '<p>This is one of only two Notifications that are sent for Specific Post/Page Access <em>( i.e. this one, and another above, for Sales )</em>. All of the other API Notifications are designed for Membership Level Access' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ()) ? '' : ' and Independent Custom Capabilities') . '. None of the other API Notifications will ever be processed for Specific Post/Page Access. If you intend to respond to events related to Specific Post/Page Access, you MUST use one of the two API Notifications specifically geared to Post/Page Access.</p>' . "\n";
852
echo '<p>Please note, this feature is not to be confused with the PayPal® IPN service. PayPal® IPN <em>( and other service integrations )</em> are already built into s2Member. They remain active at all times. These Refund/Reversal Notifications are an added layer of functionality, and they are completely optional.</p>' . "\n";
853
do_action ("ws_plugin__s2member_during_api_ops_page_during_left_sections_during_sp_refund_reversal_notifications", get_defined_vars ());
854
/**/
855
echo '<table class="form-table">' . "\n";
56
echo '<p>If you use affiliate software, or have back-office routines that need to be notified whenever a new Subscription is created, you\'ll want to read this section. This is marked `Signup`, because the URLs that you list below, will be notified each time a "new", "paying" Member, signs up. Depending on your fee structure, this may include a first Initial Payment that establishes their Subscription, or it may not. This Notification will only be triggered once for each Member. Signup Notifications are sent right after a "new", "paying" Member, signs up successfully through your Payment Gateway, regardless of whether any money has actually been transacted initially. In other words, this Notification is triggered anytime a "new", "paying" Member, signs up through your Payment Gateway, even if you provided them with a 100% Free Trial Period <em>( e.g. no money is being transacted intially )</em>.</p>' . "\n";
57
echo '<p>This Notification will NOT be processed for Free Subscribers that register without going through your Payment Gateway at all. This Notification will NOT be processed when an "existing" User/Member pays for a new Subscription <em>( see: Modification Notifications for that scenario )</em>.' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ()) ? '' : ' And, this Notification will NOT be processed on Buy Now transactions for Independent Custom Capabilities <em>( see: Payment Notifications for that scenario )</em>.') . '</p>' . "\n";
58
echo '<p>Please note, this feature is not to be confused with the PayPal® IPN service. PayPal® IPN <em>( and other service integrations )</em> are already built into s2Member. They remain active at all times. These Signup Notifications are an added layer of functionality, and they are completely optional.</p>' . "\n";
59
+ echo '<p><strong>See also:</strong> This KB article: <a href="http://www.s2member.com/kb/building-an-api-notification-handler/" target="_blank" rel="external">Building An API Notification Handler</a>.</p>'."\n";
60
do_action ("ws_plugin__s2member_during_api_ops_page_during_left_sections_during_signup_notifications", get_defined_vars ());
61
/**/
62
echo '<table class="form-table">' . "\n";
148
echo '<p>If you use affiliate software, or have back-office routines that need to be notified whenever a "new" Member is created, you\'ll want to read this section. This is marked `Registration`, because the URLs that you list below, will be notified each time a "new" Member registers a Username. This is usually triggered right after a `Signup` Notification; at the point in which a "new" Member successfully completes the Registration form, and they are assigned a Username.</p>' . "\n";
149
echo '<p>This Notification is ALSO triggered whenever you create a "new" User inside your WordPress® Dashboard.</p>' . "\n";
150
echo '<p>Please note, this feature is not to be confused with the PayPal® IPN service. PayPal® IPN <em>( and other service integrations )</em> are already built into s2Member. They remain active at all times. These Registration Notifications are an added layer of functionality, and they are completely optional.</p>' . "\n";
151
+ echo '<p><strong>See also:</strong> This KB article: <a href="http://www.s2member.com/kb/building-an-api-notification-handler/" target="_blank" rel="external">Building An API Notification Handler</a>.</p>'."\n";
152
do_action ("ws_plugin__s2member_during_api_ops_page_during_left_sections_during_registration_notifications", get_defined_vars ());
153
/**/
154
echo '<table class="form-table">' . "\n";
250
echo '<p>So, unlike the `Signup` Notification, `Payment` Notifications take place whenever actual payments are received, instead of just once after signup is completed. If a payment is required during signup <em>( i.e. no Free Trial is being offered )</em>, a Signup Notification will be triggered, and a Payment Notification will ALSO be triggered. In other words, a Payment Notification occurs anytime funds are received, no matter what.</p>' . "\n";
251
echo (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) ? '<p>Payment Notifications are also triggered whenever a Buy Now purchase for Independent Custom Capabilities takes place.</p>' . "\n" : '';
252
echo '<p>Please note, this feature is not to be confused with the PayPal® IPN service. PayPal® IPN <em>( and other service integrations )</em> are already built into s2Member. They remain active at all times. These Payment Notifications are an added layer of functionality, and they are completely optional.</p>' . "\n";
253
+ echo '<p><strong>See also:</strong> This KB article: <a href="http://www.s2member.com/kb/building-an-api-notification-handler/" target="_blank" rel="external">Building An API Notification Handler</a>.</p>'."\n";
254
do_action ("ws_plugin__s2member_during_api_ops_page_during_left_sections_during_payment_notifications", get_defined_vars ());
255
/**/
256
echo '<table class="form-table">' . "\n";
356
echo '<p>Modification Notifications are sent right after a Member signs up and/or modifies billing terms successfully through your Payment Gateway, regardless of whether any money has actually been transacted initially. In other words, this Notification is triggered, even if you provided them with a 100% Free Trial Period <em>( e.g. no money is being transacted intially )</em>.</p>' . "\n";
357
echo '<p>This Notification will NOT be processed for Free Subscribers that register without going through your Payment Gateway at all. This Notification will NOT be processed for "new" Users/Members <em>( see: Signup Notifications for that scenario )</em>.' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ()) ? '' : ' And, this Notification will NOT be processed for Independent Custom Capability purchases <em>( see: Payment Notifications for that scenario )</em>.') . '</p>' . "\n";
358
echo '<p>Please note, this feature is not to be confused with the PayPal® IPN service. PayPal® IPN <em>( and other service integrations )</em> are already built into s2Member. They remain active at all times. These Modification Notifications are an added layer of functionality, and they are completely optional.</p>' . "\n";
359
+ echo '<p><strong>See also:</strong> This KB article: <a href="http://www.s2member.com/kb/building-an-api-notification-handler/" target="_blank" rel="external">Building An API Notification Handler</a>.</p>'."\n";
360
do_action ("ws_plugin__s2member_during_api_ops_page_during_left_sections_during_modification_notifications", get_defined_vars ());
361
/**/
362
echo '<table class="form-table">' . "\n";
464
echo '<p><em><strong>*Understanding Cancellations*</strong> It\'s important to realize that a Cancellation is not an EOT ( End Of Term ). All that happens during a Cancellation event, is that billing is stopped, and it\'s understood that the Customer is going to lose access, at some point in the future. This does NOT mean, that access will be revoked immediately. A separate EOT event will automatically handle a (demotion or deletion) later, at the appropriate time; which could be several days, or even a year after the Cancellation took place.</em></p>' . "\n";
465
echo '<p><em><strong>*Some Hairy Details*</strong> There might be times whenever you notice that a Member\'s Subscription has been cancelled through your Payment Gateway... but, s2Member continues allowing the User access to your site as a paid Member. Please don\'t be confused by this... in 99.9% of these cases, the reason for this is legitimate. s2Member will only remove the User\'s Membership privileges when an EOT ( End Of Term ) is processed, a refund occurs, a chargeback occurs, or when a cancellation occurs - which would later result in a delayed Auto-EOT by s2Member.</em></p>' . "\n";
466
echo '<p><em>s2Member will not process an EOT ( End Of Term ) until the User has completely used up the time they paid for. In other words, if a User signs up for a monthly Subscription on Jan 1st, and then cancels their Subscription on Jan 15th; technically, they should still be allowed to access the site for another 15 days, and then on Feb 1st, the time they paid for has completely elapsed. At that time, s2Member will remove their Membership privileges; by either demoting them to a Free Subscriber, or deleting their account from the system ( based on your configuration ). s2Member also calculates one extra day ( 24 hours ) into its equation, just to make sure access is not removed sooner than a Customer might expect.</em></p>' . "\n";
467
+ echo '<p><strong>See also:</strong> This KB article: <a href="http://www.s2member.com/kb/building-an-api-notification-handler/" target="_blank" rel="external">Building An API Notification Handler</a>.</p>'."\n";
468
do_action ("ws_plugin__s2member_during_api_ops_page_during_left_sections_during_cancellation_notifications", get_defined_vars ());
469
/**/
470
echo '<table class="form-table">' . "\n";
566
echo '<p>Please note, this feature is not to be confused with the PayPal® IPN service. PayPal® IPN <em>( and other service integrations )</em> are already built into s2Member. They remain active at all times. These EOT/Deletion Notifications are an added layer of functionality, and they are completely optional.</p>' . "\n";
567
echo '<p><em><strong>*Some Hairy Details*</strong> There might be times whenever you notice that a Member\'s Subscription has been cancelled through your Payment Gateway... but, s2Member continues allowing the User access to your site as a paid Member. Please don\'t be confused by this... in 99.9% of these cases, the reason for this is legitimate. s2Member will only remove the User\'s Membership privileges when an EOT ( End Of Term ) is processed, a refund occurs, a chargeback occurs, or when a cancellation occurs - which would later result in a delayed Auto-EOT by s2Member.</em></p>' . "\n";
568
echo '<p><em>s2Member will not process an EOT ( End Of Term ) until the User has completely used up the time they paid for. In other words, if a User signs up for a monthly Subscription on Jan 1st, and then cancels their Subscription on Jan 15th; technically, they should still be allowed to access the site for another 15 days, and then on Feb 1st, the time they paid for has completely elapsed. At that time, s2Member will remove their Membership privileges; by either demoting them to a Free Subscriber, or deleting their account from the system ( based on your configuration ). s2Member also calculates one extra day ( 24 hours ) into its equation, just to make sure access is not removed sooner than a Customer might expect.</em></p>' . "\n";
569
+ echo '<p><strong>See also:</strong> This KB article: <a href="http://www.s2member.com/kb/building-an-api-notification-handler/" target="_blank" rel="external">Building An API Notification Handler</a>.</p>'."\n";
570
do_action ("ws_plugin__s2member_during_api_ops_page_during_left_sections_during_eot_deletion_notifications", get_defined_vars ());
571
/**/
572
echo '<table class="form-table">' . "\n";
665
echo '<p>This is very similar to the EOT/Deletion Notification described above. However, there is an important distinction. The all-inclusive EOT/Deletion Notification includes cancellations, expirations, failed payments, refunds, chargebacks, and even manual deletions by the Administrator from within the Dashboard. In other words, EOT/Deletion Notifications are processed ANY time a deletion or End Of Term action takes place. This API Notification, that is, Refund/Reversal Notifications, do NOT include all of those scenarios.</p>' . "\n";
666
echo '<p>So the distinction is that Refund/Reversal Notifications are ONLY sent under two specific circumstances: 1. You log into your Payment Gateway and refund a payment that is associated with a Subscription. 2. The Customer complains to your Payment Gateway and a chargeback occurs, forcing a Reversal. In both of these cases, an EOT/Deletion Notification will be sent <em>( as described in the previous section )</em>, but since EOT/Deletion is a broader Notification, these Refund/Reversal Notifications are here so you can nail down specific back-office operations in these two specific scenarios.</p>' . "\n";
667
echo '<p>Please note, this feature is not to be confused with the PayPal® IPN service. PayPal® IPN <em>( and other service integrations )</em> are already built into s2Member. They remain active at all times. These Refund/Reversal Notifications are an added layer of functionality, and they are completely optional.</p>' . "\n";
668
+ echo '<p><strong>See also:</strong> This KB article: <a href="http://www.s2member.com/kb/building-an-api-notification-handler/" target="_blank" rel="external">Building An API Notification Handler</a>.</p>'."\n";
669
do_action ("ws_plugin__s2member_during_api_ops_page_during_left_sections_during_refund_reversal_notifications", get_defined_vars ());
670
/**/
671
echo '<table class="form-table">' . "\n";
766
echo '<p>If you use affiliate software, or have back-office routines that need to be notified whenever Specific Post/Page sales take place, you\'ll want to read this section. This is marked `Specific Post/Page`, because the URLs that you list below, will be notified each time a payment occurs, on a sale providing access to a Specific Post/Page.</p>' . "\n";
767
echo '<p>This is one of only two API Notifications that are sent for Specific Post/Page Access <em>( i.e. this one, and another below, for Refunds/Reversals )</em>. All of the other API Notifications are designed for Membership Level Access' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ()) ? '' : ' and Independent Custom Capabilities') . '. None of the other API Notifications will ever be processed for Specific Post/Page Access. If you intend to respond to events related to Specific Post/Page Access, you MUST use one of the two API Notifications specifically geared to Post/Page Access.</p>' . "\n";
768
echo '<p>Please note, this feature is not to be confused with the PayPal® IPN service. PayPal® IPN <em>( and other service integrations )</em> are already built into s2Member. They remain active at all times. These Sale Notifications are an added layer of functionality, and they are completely optional.</p>' . "\n";
769
+ echo '<p><strong>See also:</strong> This KB article: <a href="http://www.s2member.com/kb/building-an-api-notification-handler/" target="_blank" rel="external">Building An API Notification Handler</a>.</p>'."\n";
770
do_action ("ws_plugin__s2member_during_api_ops_page_during_left_sections_during_sp_sale_notifications", get_defined_vars ());
771
/**/
772
echo '<table class="form-table">' . "\n";
858
echo '<p>If you use affiliate software, or have back-office routines that need to be notified whenever sales have been refunded or reversed <em>( i.e. charged back to you )</em>, you\'ll want to read this section. This is marked `Specific Post/Page`, because the URLs that you list below, will be notified each time a Refund or Reversal occurs, on a sale that provided access to a Specific Post/Page.</p>' . "\n";
859
echo '<p>This is one of only two Notifications that are sent for Specific Post/Page Access <em>( i.e. this one, and another above, for Sales )</em>. All of the other API Notifications are designed for Membership Level Access' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ()) ? '' : ' and Independent Custom Capabilities') . '. None of the other API Notifications will ever be processed for Specific Post/Page Access. If you intend to respond to events related to Specific Post/Page Access, you MUST use one of the two API Notifications specifically geared to Post/Page Access.</p>' . "\n";
860
echo '<p>Please note, this feature is not to be confused with the PayPal® IPN service. PayPal® IPN <em>( and other service integrations )</em> are already built into s2Member. They remain active at all times. These Refund/Reversal Notifications are an added layer of functionality, and they are completely optional.</p>' . "\n";
861
+ echo '<p><strong>See also:</strong> This KB article: <a href="http://www.s2member.com/kb/building-an-api-notification-handler/" target="_blank" rel="external">Building An API Notification Handler</a>.</p>'."\n";
862
do_action ("ws_plugin__s2member_during_api_ops_page_during_left_sections_during_sp_refund_reversal_notifications", get_defined_vars ());
863
/**/
864
echo '<table class="form-table">' . "\n";
includes/menu-pages/down-ops.inc.php CHANGED
@@ -488,6 +488,7 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_down_ops"))
488
echo '<a href="http://www.longtailvideo.com/players/" target="_blank"><img src="'.esc_attr($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]).'/images/jwplayer-logo.png" class="ws-menu-page-right" style="width:179px; height:58px; border:0;" alt="." /></a>'."\n";
489
echo '<p>While it is possible to serve audio/video files protected by s2Member, without needing to integrate Amazon® S3 or CloudFront; we DO highly recommend that you integrate both Amazon® S3 and Amazon® CloudFront in order to maximize speed and compatibility across various viewing platforms. That being said, there are code samples below that will serve audio/video files both with and without Amazon® S3/CloudFront. You can also check the <a href="'.esc_attr(c_ws_plugin__s2member_readmes::parse_readme_value("Forum URI")).'" target="_blank" rel="external">s2Member Support Forums</a> for tips/tricks if you like.</p>'."\n";
490
echo '<p><strong>One of the great things about Amazon® CloudFront</strong>, is its ability to <strong>stream/seek media files</strong> in the truest sense of the word. For sites delivering protected <em>FLV/MP4/OGG/WEBM</em> and other streaming audio/video file types over the <em>RTMP</em> protocol, Amazon® CloudFront is our recommendation. Once you\'ve successfully configured s2Member to use both Amazon® S3 and Amazon® CloudFront together, please review the code samples below. s2Member can automatically serve your protected files over the <em>RTMP</em> protocol using an Amazon® CloudFront Streaming Distribution.</p>'."\n";
491
do_action("ws_plugin__s2member_during_down_ops_page_during_left_sections_during_rtmp_streaming", get_defined_vars());
492
/**/
493
echo '<div class="ws-menu-page-hr"></div>'."\n";
@@ -647,6 +648,7 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_down_ops"))
647
echo '<div class="ws-menu-page-hr"></div>'."\n";
648
/**/
649
echo '<h4 style="margin:0;">Additional <code>[s2Stream /]</code> Shortcode Attributes:</h4>'."\n";
650
echo '<p style="margin:0;"><strong>See also:</strong> API Function <a href="http://www.s2member.com/codex/stable/s2member/api_functions/package-functions/#src_doc_s2member_file_download_url()" target="_blank" rel="external">s2member_file_download_url()</a> for PHP integration.</p>'."\n";
651
echo '<table class="form-table" style="margin-top:0;">'."\n";
652
echo '<tbody>'."\n";
@@ -658,7 +660,8 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_down_ops"))
658
echo '<li><code>player="jwplayer-v6-rtmp"</code> Required. Current supported players in this Shortcode include: <code>jwplayer-v6</code> (works with any audio/video file, and you do NOT need to have Amazon® S3 or CloudFront™ integrated for this to work), <code>jwplayer-v6-rtmp</code> (streams with the RTMP protocol, plus there is a full download fallback of the source file if streaming is not possible on a particular device; this requires both Amazon® S3 and CloudFront™ integration), <code>jwplayer-v6-rtmp-only</code> (streams with the RTMP protocol only, with no access to the source file, only to the RTMP stream; this requires both Amazon® S3 and CloudFront™ integration).</li>'."\n";
659
echo '<li><code>player_id=""</code> Optional. HTML div ID for the audio/video player. Defaults to a unique ID generated by s2Member® for each instance of your Shortcode.</li>'."\n";
660
echo '<li><code>player_path="/jwplayer/jwplayer.js"</code> Required. Path to the player\'s JavaScript file (ex: <code>/jwplayer/jwplayer.js</code> — you should upload the <a href="http://www.longtailvideo.com/players/" target="_blank" rel="external">/jwplayer</a> folder to the root of your web directory).</li>'."\n";
661
- echo '<li><code>player_[setting]=""</code> Optional. Any additional attributes supported by your audio/video player, prefixed with <code>player_</code>. For JW Player™ v6, see <a href="http://www.longtailvideo.com/support/jw-player/28839/embedding-the-player" target="_blank" rel="external">this article please</a>. Examples: <code>player_width="480"</code>, <code>player_height="270"</code>, <code>player_image="http://www.example.com/wp-content/uploads/video-preview.jpg"</code>, <code>player_autostart="true"</code>, <code>player_skin="/jwplayer/my-skin.xml"</code>. Please note that "Advanced Options Blocks" listed on <a href="http://www.longtailvideo.com/support/jw-player/28839/embedding-the-player" target="_blank" rel="external">this page</a> are currently NOT supported here. All others are.</li>'."\n";
662
do_action("ws_plugin__s2member_during_down_ops_page_during_left_sections_during_shortcode_attrs_s2stream_lis", get_defined_vars());
663
echo '</ul>'."\n";
664
echo '</td>'."\n";
488
echo '<a href="http://www.longtailvideo.com/players/" target="_blank"><img src="'.esc_attr($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]).'/images/jwplayer-logo.png" class="ws-menu-page-right" style="width:179px; height:58px; border:0;" alt="." /></a>'."\n";
489
echo '<p>While it is possible to serve audio/video files protected by s2Member, without needing to integrate Amazon® S3 or CloudFront; we DO highly recommend that you integrate both Amazon® S3 and Amazon® CloudFront in order to maximize speed and compatibility across various viewing platforms. That being said, there are code samples below that will serve audio/video files both with and without Amazon® S3/CloudFront. You can also check the <a href="'.esc_attr(c_ws_plugin__s2member_readmes::parse_readme_value("Forum URI")).'" target="_blank" rel="external">s2Member Support Forums</a> for tips/tricks if you like.</p>'."\n";
490
echo '<p><strong>One of the great things about Amazon® CloudFront</strong>, is its ability to <strong>stream/seek media files</strong> in the truest sense of the word. For sites delivering protected <em>FLV/MP4/OGG/WEBM</em> and other streaming audio/video file types over the <em>RTMP</em> protocol, Amazon® CloudFront is our recommendation. Once you\'ve successfully configured s2Member to use both Amazon® S3 and Amazon® CloudFront together, please review the code samples below. s2Member can automatically serve your protected files over the <em>RTMP</em> protocol using an Amazon® CloudFront Streaming Distribution.</p>'."\n";
491
+ echo '<p><strong>See also:</strong> This KB article: <a href="http://www.s2member.com/kb/jwplayer-s2stream-shortcodes/" target="_blank" rel="external">JW Player® w/ <code>[s2Stream /]</code> Shortcodes</a>.</p>'."\n";
492
do_action("ws_plugin__s2member_during_down_ops_page_during_left_sections_during_rtmp_streaming", get_defined_vars());
493
/**/
494
echo '<div class="ws-menu-page-hr"></div>'."\n";
648
echo '<div class="ws-menu-page-hr"></div>'."\n";
649
/**/
650
echo '<h4 style="margin:0;">Additional <code>[s2Stream /]</code> Shortcode Attributes:</h4>'."\n";
651
+ echo '<p style="margin:0;"><strong>See also:</strong> This KB article: <a href="http://www.s2member.com/kb/jwplayer-s2stream-shortcodes/" target="_blank" rel="external">JW Player® w/ <code>[s2Stream /]</code> Shortcodes</a>.</p>'."\n";
652
echo '<p style="margin:0;"><strong>See also:</strong> API Function <a href="http://www.s2member.com/codex/stable/s2member/api_functions/package-functions/#src_doc_s2member_file_download_url()" target="_blank" rel="external">s2member_file_download_url()</a> for PHP integration.</p>'."\n";
653
echo '<table class="form-table" style="margin-top:0;">'."\n";
654
echo '<tbody>'."\n";
660
echo '<li><code>player="jwplayer-v6-rtmp"</code> Required. Current supported players in this Shortcode include: <code>jwplayer-v6</code> (works with any audio/video file, and you do NOT need to have Amazon® S3 or CloudFront™ integrated for this to work), <code>jwplayer-v6-rtmp</code> (streams with the RTMP protocol, plus there is a full download fallback of the source file if streaming is not possible on a particular device; this requires both Amazon® S3 and CloudFront™ integration), <code>jwplayer-v6-rtmp-only</code> (streams with the RTMP protocol only, with no access to the source file, only to the RTMP stream; this requires both Amazon® S3 and CloudFront™ integration).</li>'."\n";
661
echo '<li><code>player_id=""</code> Optional. HTML div ID for the audio/video player. Defaults to a unique ID generated by s2Member® for each instance of your Shortcode.</li>'."\n";
662
echo '<li><code>player_path="/jwplayer/jwplayer.js"</code> Required. Path to the player\'s JavaScript file (ex: <code>/jwplayer/jwplayer.js</code> — you should upload the <a href="http://www.longtailvideo.com/players/" target="_blank" rel="external">/jwplayer</a> folder to the root of your web directory).</li>'."\n";
663
+ echo '<li><code>player_[setting]=""</code> Optional. Any additional configuration attributes supported by your audio/video player, prefixed with <code>player_</code>. For JW Player™ v6, see <a href="http://www.longtailvideo.com/support/jw-player/28839/embedding-the-player" target="_blank" rel="external">this article please</a>. Examples: <code>player_width="480"</code>, <code>player_height="270"</code>, <code>player_image="http://www.example.com/wp-content/uploads/video-preview.jpg"</code>, <code>player_autostart="true"</code>, <code>player_skin="/jwplayer/my-skin.xml"</code>, <code>player_key="my-license-key"</code>. Please note that "Advanced Options Blocks" listed on <a href="http://www.longtailvideo.com/support/jw-player/28839/embedding-the-player" target="_blank" rel="external">this page</a> are NOT supported here. For those, please use: <code>player_option_blocks=""</code>.</li>'."\n";
664
+ echo '<li><code>player_option_blocks=""</code> Optional. Any "Advanced Option Blocks" supported by your audio/video player. For JW Player™ v6, see <a href="http://www.longtailvideo.com/support/jw-player/28839/embedding-the-player" target="_blank" rel="external">this article please</a>. Here are some examples: <code>player_option_blocks="sharing:{}"</code>, <code>player_option_blocks="sharing:{}, logo: {file: \'/logo.png\', link: \'http://example.com\'}"</code>. Or: <code>player_option_blocks="c2hhcmluZzoge30="</code> (base64 encoded version of <code>sharing: {}</code>). Please note that "Advanced Options Blocks" can be defined in plain text or with a <a href="http://www.base64encode.org/" target="_blank" rel="external">base64 encoded string</a>. Advanced Option Blocks are JavaScript objects with properties. If you have trouble defining JavaScript object properties inside a Shortcode Attribute, please use <a href="http://www.base64encode.org/" target="_blank" rel="external">this tool</a> to base64 encode your Advanced Option Blocks, so that you end up with a string that\'s compatible with Shortcode Attributes.</li>'."\n";
665
do_action("ws_plugin__s2member_during_down_ops_page_during_left_sections_during_shortcode_attrs_s2stream_lis", get_defined_vars());
666
echo '</ul>'."\n";
667
echo '</td>'."\n";
includes/menu-pages/gen-ops.inc.php CHANGED
@@ -1122,6 +1122,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_gen_ops"))
1122
echo '<p>Please create and/or choose an existing Page to use as the first page Members will see after logging in.</p>' . "\n";
1123
echo (c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '<p><em><strong>BuddyPress:</strong> s2Member integrates with BuddyPress. Your Login Welcome Page affects BuddyPress too.</em></p>' . "\n" : '';
1124
echo '<p><em><strong>*Tip*</strong> This special Page will be protected from public access ( automatically ) by s2Member.</em></p>' . "\n";
1125
do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_login_welcome_page", get_defined_vars ());
1126
/**/
1127
echo '<table class="form-table">' . "\n";
1122
echo '<p>Please create and/or choose an existing Page to use as the first page Members will see after logging in.</p>' . "\n";
1123
echo (c_ws_plugin__s2member_utils_conds::bp_is_installed ()) ? '<p><em><strong>BuddyPress:</strong> s2Member integrates with BuddyPress. Your Login Welcome Page affects BuddyPress too.</em></p>' . "\n" : '';
1124
echo '<p><em><strong>*Tip*</strong> This special Page will be protected from public access ( automatically ) by s2Member.</em></p>' . "\n";
1125
+ echo '<p><strong>See also:</strong> This KB article: <a href="http://www.s2member.com/kb/customizing-your-lwp/" target="_blank" rel="external">Customizing Your Login Welcome Page</a>.</p>'."\n";
1126
do_action ("ws_plugin__s2member_during_gen_ops_page_during_left_sections_during_login_welcome_page", get_defined_vars ());
1127
/**/
1128
echo '<table class="form-table">' . "\n";
includes/menu-pages/menu-pages-min.css ADDED
@@ -0,0 +1 @@
1
+ div.ws-menu-page{min-width:800px;margin-bottom:20px;background:url('<?php echo $i;?>/brand-bg.png') no-repeat top right;}div.ws-menu-page a.ws-dotted-link{text-decoration:none;border-bottom:1px dotted;}div.ws-menu-page>h2{margin-bottom:15px;}div.ws-menu-page .ws-menu-page-right{float:right;margin-left:25px;}div.ws-menu-page .ws-menu-page-left{float:left;margin-right:25px;}div.ws-menu-page .ws-menu-page-center{display:block;margin-left:auto;margin-right:auto;}div.ws-menu-page div.ws-menu-page-hr{height:1px;line-height:1px;background:#DDD;margin:20px 0 20px 0;}div.ws-menu-page .ws-menu-page-hilite{font-size:102%;background:#FAF9BB;}div.ws-menu-page .ws-menu-page-error{color:#C00;}div.ws-menu-page .ws-menu-page-error-hilite{color:#FFF;background:#F00;}div.ws-menu-page img.ws-menu-page-img-16{border:0;width:16px;height:16px;}div.ws-menu-page img.ws-menu-page-img-24{border:0;width:24px;height:24px;}div.ws-menu-page img.ws-menu-page-img-32{border:0;width:32px;height:32px;}div.ws-menu-page img.ws-menu-page-img-48{border:0;width:48px;height:48px;}div.ws-menu-page img.ws-menu-page-img-64{border:0;width:64px;height:64px;}div.ws-menu-page img.ws-menu-page-img-128{border:0;width:128px;height:128px;}div.ws-menu-page img.ws-menu-page-img-200{border:0;width:200px;height:200px;}div.ws-menu-page img.ws-menu-page-img-256{border:0;width:256px;height:256px;}div.ws-menu-page img.ws-menu-page-img-200-auto{border:0;width:200px;height:auto;}div.ws-menu-page img.ws-menu-page-img-256-auto{border:0;width:256px;height:auto;}table.ws-menu-page-table{border:0;width:100%;}table.ws-menu-page-table ul,table.ws-menu-page-table ol{margin:10px 0 10px 20px;}table.ws-menu-page-table ul>li{list-style:disc outside;}table.ws-menu-page-table ol>li{list-style:decimal outside;}table.ws-menu-page-table>tbody>tr{vertical-align:top;}table.ws-menu-page-table td.ws-menu-page-table-l{padding:0;width:100%;}table.ws-menu-page-table td.ws-menu-page-table-r{padding:0;width:auto;}table.ws-menu-page-table img.ws-menu-page-brand-icon{border:0;float:right;width:128px;height:128px;margin:0 0 0 25px;vertical-align:middle;}table.ws-menu-page-table img.ws-menu-page-brand-updates{border:0;float:right;width:155px;height:40px;margin:0 -153px 0 25px;vertical-align:middle;}table.ws-menu-page-table p.submit{margin:0;padding:0;}table.ws-menu-page-table a[rel ~= "external"]{padding-right:18px;background:url('<?php echo $i;?>/brand-xlink.png') no-repeat center right;}table.ws-menu-page-table div.ws-menu-page-groups-show,table.ws-menu-page-table div.ws-menu-page-groups-hide{float:right;height:24px;width:24px;color:#333;padding:10px;cursor:pointer;font-size:28px;font-weight:bold;line-height:24px;text-align:center;background:#FFF;margin:0 0 0 20px;vertical-align:middle;font-family:monospace;border:1px solid #666;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-moz-user-select:none;-webkit-user-select:none;user-select:none;}table.ws-menu-page-table div.ws-menu-page-groups-hide{color:#999;border-color:#999;}table.ws-menu-page-table div.ws-menu-page-group-header,table.ws-menu-page-table div.ws-menu-page-r-group-header{height:24px;color:#666;padding:10px;cursor:pointer;font-size:19px;line-height:24px;position:relative;background:#FFF;margin:30px 0 30px 0;vertical-align:middle;font-family:'Georgia',serif;border:1px solid #CCC;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-moz-user-select:none;-webkit-user-select:none;user-select:none;}table.ws-menu-page-table div.ws-menu-page-group-header>ins,table.ws-menu-page-table div.ws-menu-page-r-group-header>ins{padding:0;width:22px;height:22px;color:#CCC;font-size:22px;line-height:22px;font-weight:bold;text-align:center;margin:0 10px 0 0;background:#666;text-decoration:none;font-family:monospace;vertical-align:text-top;border:1px solid transparent;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;display:inline-block;zoom:1!ie<8;display:inline!ie<8;margin-top:0!ie<8;}table.ws-menu-page-table div.ws-menu-page-group-header:hover,table.ws-menu-page-table div.ws-menu-page-group-header.open,table.ws-menu-page-table div.ws-menu-page-r-group-header:hover,table.ws-menu-page-table div.ws-menu-page-r-group-header.open{color:#164A61;border-color:#666;}table.ws-menu-page-table div.ws-menu-page-group-header:hover>ins,table.ws-menu-page-table div.ws-menu-page-group-header.open>ins,table.ws-menu-page-table div.ws-menu-page-r-group-header:hover>ins,table.ws-menu-page-table div.ws-menu-page-r-group-header.open>ins{color:#FFF;background:#164A61;}table.ws-menu-page-table div.ws-menu-page-group,table.ws-menu-page-table div.ws-menu-page-r-group{display:none;margin:-35px 5px 0 5px;padding:20px 10px 10px 10px;border:1px solid #CCC;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;background:#FFF url('<?php echo $i;?>/brand-gradient-bg.png') repeat-x;}table.ws-menu-page-table div.ws-menu-page-group>div.ws-menu-page-hr,table.ws-menu-page-table div.ws-menu-page-r-group>div.ws-menu-page-hr{background:#666;margin:15px 0 15px 0;}table.ws-menu-page-table div.ws-menu-page-group table.form-table>tbody>tr{vertical-align:top;}table.ws-menu-page-table div.ws-menu-page-group table.form-table>tbody>tr>th{width:auto;color:#164A61;font-size:115%;padding:10px 10px 0 0;font-family:'Georgia',serif;}table.ws-menu-page-table div.ws-menu-page-group table.form-table>tbody>tr>td{width:auto;padding:8px 10px 8px 0;}table.ws-menu-page-table div.ws-menu-page-group table.form-table>tbody>tr>th.ws-menu-page-th-side{width:200px;}table.ws-menu-page-table div.ws-menu-page-group table.form-table>tbody>tr>td>input[type = "text"],table.ws-menu-page-table div.ws-menu-page-group table.form-table>tbody>tr>td>input[type = "password"],table.ws-menu-page-table div.ws-menu-page-group table.form-table>tbody>tr>td>textarea,table.ws-menu-page-table div.ws-menu-page-group table.form-table>tbody>tr>td>select{width:100%;width:98%!ie<8;box-sizing:border-box;-ms-box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;}table.ws-menu-page-table div.ws-menu-page-group table.form-table>tbody>tr>td>select{width:99.5%!ie<8;}table.ws-menu-page-table div.ws-menu-page-group table.form-table>tbody>tr>td>textarea{font-family:'Courier New',monospace;}table.ws-menu-page-table div.ws-menu-page-group table.form-table>tbody>tr>td>input[type = "checkbox"],table.ws-menu-page-table div.ws-menu-page-group table.form-table>tbody>tr>td>input[type = "radio"]{margin-right:3px;vertical-align:middle;}table.ws-menu-page-table div.ws-menu-page-group table.form-table>tbody>tr>td>input[type = "button"].ws-menu-page-media-btn{float:left;margin:5px 25px 0 0;}table.ws-menu-page-table div.ws-menu-page-group table.form-table>tbody>tr>td>div.ws-menu-page-scrollbox{margin:1px;padding:5px;height:150px;overflow-y:scroll;overflow-x:visible;background:#FFF;border:1px solid #CCC;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;}div.ws-menu-page-readme>div.readme>div.section{margin:0 0 20px 0;padding:0 0 20px 0;border:0 solid #DDD;border-width:0 0 1px 0;}div.ws-menu-page-readme>div.readme>div.section>h2{margin-top:0;padding-top:0;font-size:150%;}div.ws-menu-page-readme>div.readme>div.section>div.content ul,div.ws-menu-page-readme>div.readme>div.section>div.content ol{padding:0;margin:10px 0 0 25px;}div.ws-menu-page-readme>div.readme>div.section>div.content ul>li{list-style:disc outside;}div.ws-menu-page-readme>div.readme>div.section>div.content ol>li{list-style:decimal outside;}td.ws-menu-page-table-r div.ws-menu-page-js-c-w,td.ws-menu-page-table-r div.ws-menu-page-updates,td.ws-menu-page-table-r div.ws-menu-page-installation,td.ws-menu-page-table-r div.ws-menu-page-tools,td.ws-menu-page-table-r div.ws-menu-page-kb,td.ws-menu-page-table-r div.ws-menu-page-videos,td.ws-menu-page-table-r div.ws-menu-page-support,td.ws-menu-page-table-r div.ws-menu-page-donations,td.ws-menu-page-table-r div.ws-menu-page-others{width:200px;margin:0 0 25px 25px;}td.ws-menu-page-table-r div.ws-menu-page-installation img,td.ws-menu-page-table-r div.ws-menu-page-tools img,td.ws-menu-page-table-r div.ws-menu-page-kb img,td.ws-menu-page-table-r div.ws-menu-page-videos img,td.ws-menu-page-table-r div.ws-menu-page-support img,td.ws-menu-page-table-r div.ws-menu-page-donations img,td.ws-menu-page-table-r div.ws-menu-page-others img{border:0;width:200px;height:auto;}td.ws-menu-page-table-r div.ws-menu-page-js-c-w{width:178px;padding:10px;background:#FFF5F7;text-align:justify;border:1px solid #FA4D4D;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;}div.ws-menu-page-updates ul{padding:0;margin:0 0 0 12px;}div.ws-menu-page-updates ul>li{padding:0;margin:5px 0 5px 0;list-style:square outside;-moz-user-select:none;-webkit-user-select:none;user-select:none;}div.ws-menu-page-updates ul>li:first-child{margin-top:0;}div.ws-menu-page-updates a[target = "_blank"]{padding-right:18px;background:url('<?php echo $i;?>/brand-xlink.png') no-repeat center right;}div.ws-menu-page-updates div#creditfooter{display:none;}div.ws-menu-page-updates div#ws-updates-div-fname,div.ws-menu-page-updates div#ws-updates-div-lname,div.ws-menu-page-updates div#ws-updates-div-email,div.ws-menu-page-updates div#ws-updates-div-subs,div.ws-menu-page-updates div#ws-updates-div-priv{margin:0 0 10px 0;}div.ws-menu-page-updates div#ws-updates-div-subs{margin:15px 0 0 0;}div.ws-menu-page-updates div#ws-updates-div-priv{font-size:80%;margin:0 0 5px 0;}div.ws-menu-page-updates input[type = "text"],div.ws-menu-page-updates input[type = "password"],div.ws-menu-page-updates input[type = "submit"],div.ws-menu-page-updates textarea,div.ws-menu-page-updates select{width:100%;width:98%!ie<8;box-sizing:border-box;-ms-box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;}div.ws-menu-page-updates input[type = "checkbox"],div.ws-menu-page-updates input[type = "radio"]{margin-right:3px;vertical-align:middle;}div.ws-menu-page-updates input[type = "submit"]{width:100%!ie<8;}div.ws-menu-page-updates select{width:99.5%!ie<8;}
includes/menu-pages/menu-pages.css CHANGED
@@ -409,6 +409,7 @@ td.ws-menu-page-table-r div.ws-menu-page-js-c-w,
409
td.ws-menu-page-table-r div.ws-menu-page-updates,
410
td.ws-menu-page-table-r div.ws-menu-page-installation,
411
td.ws-menu-page-table-r div.ws-menu-page-tools,
412
td.ws-menu-page-table-r div.ws-menu-page-videos,
413
td.ws-menu-page-table-r div.ws-menu-page-support,
414
td.ws-menu-page-table-r div.ws-menu-page-donations,
@@ -419,6 +420,7 @@ td.ws-menu-page-table-r div.ws-menu-page-others
419
}
420
td.ws-menu-page-table-r div.ws-menu-page-installation img,
421
td.ws-menu-page-table-r div.ws-menu-page-tools img,
422
td.ws-menu-page-table-r div.ws-menu-page-videos img,
423
td.ws-menu-page-table-r div.ws-menu-page-support img,
424
td.ws-menu-page-table-r div.ws-menu-page-donations img,
409
td.ws-menu-page-table-r div.ws-menu-page-updates,
410
td.ws-menu-page-table-r div.ws-menu-page-installation,
411
td.ws-menu-page-table-r div.ws-menu-page-tools,
412
+ td.ws-menu-page-table-r div.ws-menu-page-kb,
413
td.ws-menu-page-table-r div.ws-menu-page-videos,
414
td.ws-menu-page-table-r div.ws-menu-page-support,
415
td.ws-menu-page-table-r div.ws-menu-page-donations,
420
}
421
td.ws-menu-page-table-r div.ws-menu-page-installation img,
422
td.ws-menu-page-table-r div.ws-menu-page-tools img,
423
+ td.ws-menu-page-table-r div.ws-menu-page-kb img,
424
td.ws-menu-page-table-r div.ws-menu-page-videos img,
425
td.ws-menu-page-table-r div.ws-menu-page-support img,
426
td.ws-menu-page-table-r div.ws-menu-page-donations img,
includes/menu-pages/paypal-ops.inc.php CHANGED
@@ -54,7 +54,7 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_paypal_ops"))
54
echo '<div class="ws-menu-page-section ws-plugin--s2member-paypal-account-details-section">'."\n";
55
echo '<a href="http://www.s2member.com/paypal" target="_blank"><img src="'.esc_attr($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]).'/images/paypal-logo.png" class="ws-menu-page-right" style="width:125px; height:125px; border:0;" alt="." /></a>'."\n";
56
echo '<h3>PayPal® Account Details ( required, if using PayPal® )</h3>'."\n";
57
- echo '<p>This plugin works in conjunction with <a href="http://www.s2member.com/paypal" 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";
58
echo '<p><em><strong>*PayPal® API Credentials*</strong> Once you have a PayPal® Business account, you\'ll need access to your <a href="http://www.s2member.com/paypal-profile-api-access" target="_blank" rel="external">PayPal® API Credentials</a>. Log into your PayPal® account, and navigate to <code>Profile -> API Access (or Request API Credentials)</code>. You\'ll choose <code>( PayPal® / Request API Signature )</code>.</em></p>'."\n";
59
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_paypal_account_details", get_defined_vars());
60
/**/
@@ -218,6 +218,7 @@ if(!class_exists("c_ws_plugin__s2member_menu_page_paypal_ops"))
218
echo '<p>Newer PayPal® Pro accounts come with the Payflow® API for Recurring Billing service. If you have a newer PayPal® Pro account, and you wish to integrate PayPal\'s Recurring Billing service with s2Member® Pro Forms, you will need to fill in the details here. Providing Payflow® API Credentials here, automatically puts s2Member\'s Recurring Billing integration through Pro Forms, into Payflow® mode. Just fill in the details below, and you\'re ready to generate Pro Forms that charge customers on a recurring basis. s2Member® will use the Payflow® API instead of the standard PayPal® Pro API, which is being slowly phased out in favor of Payflow®.</p>'."\n";
219
echo '<p><em><strong>*Payflow® API Credentials*</strong> Once you have a PayPal® Pro account, you\'ll need access to your <a href="http://www.s2member.com/paypal-profile-api-access" target="_blank" rel="external">Payflow® API Credentials</a>. Log into your PayPal® account, and navigate to <code>Profile -> API Access (or Request API Credentials)</code>. You\'ll choose <code>( Payflow® / API Access )</code>.</em></p>'."\n";
220
echo '<p><em><strong>*Important Note*</strong> s2Member® always uses the PayPal® Pro API. It can also use the Payflow® API (if details are supplied here). But please note... supplying Payflow® API Credentials here, does NOT mean you can bypass other sections. Please supply s2Member® with ALL of your PayPal® account details.</em></p>'."\n";
221
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_paypal_payflow_account_details", get_defined_vars());
222
/**/
223
echo '<table class="form-table">'."\n";
54
echo '<div class="ws-menu-page-section ws-plugin--s2member-paypal-account-details-section">'."\n";
55
echo '<a href="http://www.s2member.com/paypal" target="_blank"><img src="'.esc_attr($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]).'/images/paypal-logo.png" class="ws-menu-page-right" style="width:125px; height:125px; border:0;" alt="." /></a>'."\n";
56
echo '<h3>PayPal® Account Details ( required, if using PayPal® )</h3>'."\n";
57
+ echo '<p>This plugin works in conjunction with <a href="http://www.s2member.com/paypal" 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. <strong>See also:</strong> This KB article: <a href="http://www.s2member.com/kb/paypal-account-types/" target="_blank" rel="external">PayPal® Compatibility (Account Types)</a>.</p>'."\n";
58
echo '<p><em><strong>*PayPal® API Credentials*</strong> Once you have a PayPal® Business account, you\'ll need access to your <a href="http://www.s2member.com/paypal-profile-api-access" target="_blank" rel="external">PayPal® API Credentials</a>. Log into your PayPal® account, and navigate to <code>Profile -> API Access (or Request API Credentials)</code>. You\'ll choose <code>( PayPal® / Request API Signature )</code>.</em></p>'."\n";
59
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_paypal_account_details", get_defined_vars());
60
/**/
218
echo '<p>Newer PayPal® Pro accounts come with the Payflow® API for Recurring Billing service. If you have a newer PayPal® Pro account, and you wish to integrate PayPal\'s Recurring Billing service with s2Member® Pro Forms, you will need to fill in the details here. Providing Payflow® API Credentials here, automatically puts s2Member\'s Recurring Billing integration through Pro Forms, into Payflow® mode. Just fill in the details below, and you\'re ready to generate Pro Forms that charge customers on a recurring basis. s2Member® will use the Payflow® API instead of the standard PayPal® Pro API, which is being slowly phased out in favor of Payflow®.</p>'."\n";
219
echo '<p><em><strong>*Payflow® API Credentials*</strong> Once you have a PayPal® Pro account, you\'ll need access to your <a href="http://www.s2member.com/paypal-profile-api-access" target="_blank" rel="external">Payflow® API Credentials</a>. Log into your PayPal® account, and navigate to <code>Profile -> API Access (or Request API Credentials)</code>. You\'ll choose <code>( Payflow® / API Access )</code>.</em></p>'."\n";
220
echo '<p><em><strong>*Important Note*</strong> s2Member® always uses the PayPal® Pro API. It can also use the Payflow® API (if details are supplied here). But please note... supplying Payflow® API Credentials here, does NOT mean you can bypass other sections. Please supply s2Member® with ALL of your PayPal® account details.</em></p>'."\n";
221
+ echo '<p><strong>See also:</strong> This KB article: <a href="http://www.s2member.com/kb/paypal-pro-payflow-edition/" target="_blank" rel="external">PayPal® Pro (PayFlow Edition)</a>.</p>'."\n";
222
do_action("ws_plugin__s2member_during_paypal_ops_page_during_left_sections_during_paypal_payflow_account_details", get_defined_vars());
223
/**/
224
echo '<table class="form-table">'."\n";
includes/syscon.inc.php CHANGED
@@ -83,7 +83,7 @@ $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["recaptcha"] = array("public_key" => "6
83
/*
84
Configure the right menu options panel for s2Member.
85
*/
86
- $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"] = array("updates" => true, "upsell-pro" => true, "installation" => false, "tools" => false, "videos" => true, "support" => true, "donations" => true);
87
/*
88
Check if s2Member has been configured *should be set after the first config via options panel*.
89
*/
83
/*
84
Configure the right menu options panel for s2Member.
85
*/
86
+ $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"] = array("updates" => true, "upsell-pro" => true, "installation" => false, "tools" => false, "kb" => true, "videos" => true, "support" => true, "donations" => true);
87
/*
88
Check if s2Member has been configured *should be set after the first config via options panel*.
89
*/
includes/templates/players/jwplayer-v6-rtmp-only.php CHANGED
@@ -6,7 +6,7 @@ if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
6
<div id="%%player_id%%"></div>
7
<script type="text/javascript" src="%%player_path%%"></script>
8
<script type="text/javascript">
9
- jwplayer('%%player_id%%').setup({
10
11
playlist:
12
[{
@@ -30,6 +30,8 @@ if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
30
mute: %%player_mute%%,
31
primary: '%%player_primary%%',
32
repeat: %%player_repeat%%,
33
- startparam: '%%player_startparam%%'
34
});
35
</script>
6
<div id="%%player_id%%"></div>
7
<script type="text/javascript" src="%%player_path%%"></script>
8
<script type="text/javascript">
9
+ jwplayer.key = '%%player_key%%', jwplayer('%%player_id%%').setup({
10
11
playlist:
12
[{
30
mute: %%player_mute%%,
31
primary: '%%player_primary%%',
32
repeat: %%player_repeat%%,
33
+ startparam: '%%player_startparam%%',
34
+
35
+ %%player_option_blocks%%
36
});
37
</script>
includes/templates/players/jwplayer-v6-rtmp.php CHANGED
@@ -6,7 +6,7 @@ if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
6
<div id="%%player_id%%"></div>
7
<script type="text/javascript" src="%%player_path%%"></script>
8
<script type="text/javascript">
9
- jwplayer('%%player_id%%').setup({
10
11
playlist:
12
[{
@@ -31,6 +31,8 @@ if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
31
mute: %%player_mute%%,
32
primary: '%%player_primary%%',
33
repeat: %%player_repeat%%,
34
- startparam: '%%player_startparam%%'
35
});
36
</script>
6
<div id="%%player_id%%"></div>
7
<script type="text/javascript" src="%%player_path%%"></script>
8
<script type="text/javascript">
9
+ jwplayer.key = '%%player_key%%', jwplayer('%%player_id%%').setup({
10
11
playlist:
12
[{
31
mute: %%player_mute%%,
32
primary: '%%player_primary%%',
33
repeat: %%player_repeat%%,
34
+ startparam: '%%player_startparam%%',
35
+
36
+ %%player_option_blocks%%
37
});
38
</script>
includes/templates/players/jwplayer-v6.php CHANGED
@@ -6,7 +6,7 @@ if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
6
<div id="%%player_id%%"></div>
7
<script type="text/javascript" src="%%player_path%%"></script>
8
<script type="text/javascript">
9
- jwplayer('%%player_id%%').setup({
10
11
playlist:
12
[{
@@ -30,6 +30,8 @@ if (realpath (__FILE__) === realpath ($_SERVER["SCRIPT_FILENAME"]))
30
mute: %%player_mute%%,
31
primary: '%%player_primary%%',
32
repeat: %%player_repeat%%,
33
- startparam: '%%player_startparam%%'
34
});
35
</script>
6
<div id="%%player_id%%"></div>
7
<script type="text/javascript" src="%%player_path%%"></script>
8
<script type="text/javascript">
9
+ jwplayer.key = '%%player_key%%', jwplayer('%%player_id%%').setup({
10
11
playlist:
12
[{
30
mute: %%player_mute%%,
31
primary: '%%player_primary%%',
32
repeat: %%player_repeat%%,
33
+ startparam: '%%player_startparam%%',
34
+
35
+ %%player_option_blocks%%
36
});
37
</script>
includes/translations/s2member.pot CHANGED
@@ -4,7 +4,7 @@ msgid ""
4
msgstr ""
5
"Project-Id-Version: s2Member® Framework 130116\n"
6
"Report-Msgid-Bugs-To: http://wordpress.org/tag/___s2member\n"
7
- "POT-Creation-Date: 2013-01-21 09:34:11+00:00\n"
8
"MIME-Version: 1.0\n"
9
"Content-Type: text/plain; charset=UTF-8\n"
10
"Content-Transfer-Encoding: 8bit\n"
4
msgstr ""
5
"Project-Id-Version: s2Member® Framework 130116\n"
6
"Report-Msgid-Bugs-To: http://wordpress.org/tag/___s2member\n"
7
+ "POT-Creation-Date: 2013-01-24 00:54:01+00:00\n"
8
"MIME-Version: 1.0\n"
9
"Content-Type: text/plain; charset=UTF-8\n"
10
"Content-Transfer-Encoding: 8bit\n"
readme.txt CHANGED
@@ -1,7 +1,7 @@
1
=== s2Member® Framework (Member Roles, Capabilities, Membership, PayPal Members) ===
2
3
- Version: 130121
4
- Stable tag: 130121
5
6
SSL Compatible: yes
7
bbPress® Compatible: yes
@@ -35,6 +35,7 @@ Forum URI: http://www.s2member.com/forums/
35
Plugin URI: http://www.s2member.com/framework/
36
Privacy URI: http://www.s2member.com/privacy/
37
Video Tutorials: http://www.s2member.com/videos/
38
Pro Module / Home Page: http://www.s2member.com/
39
Pro Module / Prices: http://www.s2member.com/prices/
40
Pro Module / Auto-Update URL: http://www.s2member.com/
@@ -91,16 +92,25 @@ Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
91
92
== Upgrade Notice ==
93
94
- = v130121 =
95
Maintenance release. Upgrade immediately.
96
97
== Changelog ==
98
99
= v130121 =
100
* **(Maintenance Release) Upgrade immediately.**
101
* **New Feature** s2Member® now comes with a new Shortcode `[s2Stream file_download="video.mp4" player="jwplayer-v6" ... /]`, making it MUCH easier for site owners to implemement RTMP streams of audio/video content. For further details, please check your Dashboard under: `s2Member® -> Download Options -> JW Player® v6 and RTMP Protocol Examples`. See also: `s2Member® -> Download Options -> Shortcode Attributes (Explained)`.
102
* **Compatibility (Issue #75)** Updated s2Member's local file storage engine (for File Downloads via s2Member®), to support special characters in file names. Discussed in [this thread](http://www.s2member.com/forums/topic/problem-with-quotes-in-filename-downloads/#post-38395).
103
* **Bug Fix (Issue #71)** A bug first introduced in the previous release of v130116, where we added support for byte-range requests to s2Member's File Download functionality, was causing multiple byte-range requests (processed by s2Member) to count against each User/Member as multiple File Downloads. Fixed in this release.
104
105
= v130116 =
106
* **(Maintenance Release) Upgrade immediately.**
1
=== s2Member® Framework (Member Roles, Capabilities, Membership, PayPal Members) ===
2
3
+ Version: 130123
4
+ Stable tag: 130123
5
6
SSL Compatible: yes
7
bbPress® Compatible: yes
35
Plugin URI: http://www.s2member.com/framework/
36
Privacy URI: http://www.s2member.com/privacy/
37
Video Tutorials: http://www.s2member.com/videos/
38
+ Knowledge Base: http://www.s2member.com/kb/
39
Pro Module / Home Page: http://www.s2member.com/
40
Pro Module / Prices: http://www.s2member.com/prices/
41
Pro Module / Auto-Update URL: http://www.s2member.com/
92
93
== Upgrade Notice ==
94
95
+ = v130123 =
96
Maintenance release. Upgrade immediately.
97
98
== Changelog ==
99
100
+ = v130123 =
101
+ * **(Maintenance Release) Upgrade immediately.**
102
+ * (s2Member/s2Member Pro) **s2Stream Shortcode (Issue #78)** s2Member® now supports JW Player® license keys using Shortcode Attribute `player_key=""`. See [this KB article](http://www.s2member.com/kb/jwplayer-s2stream-shortcodes/) please. Also discussed in [this thread](http://www.s2member.com/forums/topic/new-jw-player-6-s2-video-audio-shortcodes/#post-38768).
103
+ * (s2Member/s2Member Pro) **s2Stream Shortcode (Issue #79)** s2Member® now supports JW Player® [Advanced Option Blocks](http://www.longtailvideo.com/support/jw-player/28839/embedding-the-player) using Shortcode Attribute `player_option_blocks=""`. Example: `player_option_blocks="sharing:{}"`. See [this KB article](http://www.s2member.com/kb/jwplayer-s2stream-shortcodes/) please. Also discussed in [this thread](http://www.s2member.com/forums/topic/new-jw-player-6-s2-video-audio-shortcodes/#post-38768).
104
+ * (s2Member Pro) **User Exportation (Issue #80)** s2Member® Pro User Exportation now occurs with MySQL `ORDER BY ID`, instead of no `ORDER BY` at all. This helps to prevent confusion and buggy behavior. Discussed in [this thread](http://www.s2member.com/forums/topic/user-export-not-working-properly/#post-39123).
105
+ * (s2Member Pro) **User Exportation (Issue #81)** s2Member Pro's User Exportation now supports the exporation of up to `1000` User/Member table rows at once. Of course it remains possible to export ALL of your Users/Members with s2Member® Pro. All we've done here is bump the default limit from `250` up to `1000` at a time. In addition, there is a new Filter making it possible to extend this limit further on servers that can handle it. Use Filter: `ws_plugin__s2member_pro_export_users_limit` if you would like to export more Users all at once. See also: `Dashboard -› s2Member® Pro -> User/Member Exportation`.
106
+ * (s2Member/s2Member Pro) **KB Articles** Inline documentation updated in some areas, with a few links pointing to helpful/related KB articles.
107
+
108
= v130121 =
109
* **(Maintenance Release) Upgrade immediately.**
110
* **New Feature** s2Member® now comes with a new Shortcode `[s2Stream file_download="video.mp4" player="jwplayer-v6" ... /]`, making it MUCH easier for site owners to implemement RTMP streams of audio/video content. For further details, please check your Dashboard under: `s2Member® -> Download Options -> JW Player® v6 and RTMP Protocol Examples`. See also: `s2Member® -> Download Options -> Shortcode Attributes (Explained)`.
111
* **Compatibility (Issue #75)** Updated s2Member's local file storage engine (for File Downloads via s2Member®), to support special characters in file names. Discussed in [this thread](http://www.s2member.com/forums/topic/problem-with-quotes-in-filename-downloads/#post-38395).
112
* **Bug Fix (Issue #71)** A bug first introduced in the previous release of v130116, where we added support for byte-range requests to s2Member's File Download functionality, was causing multiple byte-range requests (processed by s2Member) to count against each User/Member as multiple File Downloads. Fixed in this release.
113
+ * **Compatibility** Updated s2Member's integration with Amazon® S3 to extend the default 30 second connection timeout (which was too conservative for many integrations) up to 24 hours by default, making it match the same as s2Member's Amazon® CloudFront connection timeout. For further details, please check your Dashboard under: `s2Member® -> Download Options -> Amazon® S3/CDN Storage -> Dev Note w/Technical Details`. It is possible to modify this connection timeout through a Filter discussed there.
114
115
= v130116 =
116
* **(Maintenance Release) Upgrade immediately.**
s2member.php CHANGED
@@ -19,8 +19,8 @@
19
*/
20
/* -- This section for WordPress® parsing. ------------------------------------------------------------------------------
21
22
- Version: 130121
23
- Stable tag: 130121
24
25
SSL Compatible: yes
26
bbPress® Compatible: yes
@@ -75,7 +75,7 @@ if(realpath(__FILE__) === realpath($_SERVER["SCRIPT_FILENAME"]))
75
* @var str
76
*/
77
if(!defined("WS_PLUGIN__S2MEMBER_VERSION"))
78
- define("WS_PLUGIN__S2MEMBER_VERSION", "130121" /* !#distro-version#! */);
79
/**
80
* Minimum PHP version required to run s2Member.
81
*
@@ -105,7 +105,7 @@ if(!defined("WS_PLUGIN__S2MEMBER_MIN_WP_VERSION"))
105
* @var str
106
*/
107
if(!defined("WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION"))
108
- define("WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION", "130121" /* !#distro-version#! */);
109
/*
110
Several compatibility checks.
111
If all pass, load the s2Member plugin.
19
*/
20
/* -- This section for WordPress® parsing. ------------------------------------------------------------------------------
21
22
+ Version: 130123
23
+ Stable tag: 130123
24
25
SSL Compatible: yes
26
bbPress® Compatible: yes
75
* @var str
76
*/
77
if(!defined("WS_PLUGIN__S2MEMBER_VERSION"))
78
+ define("WS_PLUGIN__S2MEMBER_VERSION", "130123" /* !#distro-version#! */);
79
/**
80
* Minimum PHP version required to run s2Member.
81
*
105
* @var str
106
*/
107
if(!defined("WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION"))
108
+ define("WS_PLUGIN__S2MEMBER_MIN_PRO_VERSION", "130123" /* !#distro-version#! */);
109
/*
110
Several compatibility checks.
111
If all pass, load the s2Member plugin.