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

Version Description

= v130116 = Maintenance release. Upgrade immediately.

Download this release

Release Info

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

Code changes from version 121213 to 130116

checksum.txt CHANGED
@@ -1 +1 @@
1
- afc37ccab81c6d39df41e3f6c7737e5c
1
+ 655f768491a988742a812294fc044a66
includes/classes/admin-notices.inc.php CHANGED
@@ -82,13 +82,13 @@ if (!class_exists ("c_ws_plugin__s2member_admin_notices"))
82
  /**/
83
  if (is_string ($notice) && $notice && $error) /* Slightly different/special format for errors. */
84
  {
85
- $notice .= ($dismiss) ? ' [ <a href="' . add_query_arg ("ws-plugin--s2member-dismiss-admin-notice", urlencode (md5 ($notice)), $_SERVER["REQUEST_URI"]) . '">dismiss message</a> ]' : '';
86
  /**/
87
  echo '<div class="error fade"><p>' . $notice . '</p></div>'; /* Error. */
88
  }
89
  else if (is_string ($notice) && $notice)
90
  {
91
- $notice .= ($dismiss) ? ' [ <a href="' . add_query_arg ("ws-plugin--s2member-dismiss-admin-notice", urlencode (md5 ($notice)), $_SERVER["REQUEST_URI"]) . '">dismiss message</a> ]' : '';
92
  /**/
93
  echo '<div class="updated fade"><p>' . $notice . '</p></div>';
94
  }
82
  /**/
83
  if (is_string ($notice) && $notice && $error) /* Slightly different/special format for errors. */
84
  {
85
+ $notice .= ($dismiss) ? ' [ <a href="' . esc_attr(add_query_arg ("ws-plugin--s2member-dismiss-admin-notice", urlencode (md5 ($notice)), $_SERVER["REQUEST_URI"])) . '">dismiss message</a> ]' : '';
86
  /**/
87
  echo '<div class="error fade"><p>' . $notice . '</p></div>'; /* Error. */
88
  }
89
  else if (is_string ($notice) && $notice)
90
  {
91
+ $notice .= ($dismiss) ? ' [ <a href="' . esc_attr(add_query_arg ("ws-plugin--s2member-dismiss-admin-notice", urlencode (md5 ($notice)), $_SERVER["REQUEST_URI"])) . '">dismiss message</a> ]' : '';
92
  /**/
93
  echo '<div class="updated fade"><p>' . $notice . '</p></div>';
94
  }
includes/classes/files-in.inc.php CHANGED
@@ -271,6 +271,7 @@ if(!class_exists("c_ws_plugin__s2member_files_in"))
271
  /**/
272
  $pathinfo = (!$using_amazon_storage) ? pathinfo(($file = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["files_dir"]."/".$req["file_download"])) : array();
273
  $mimetype = ($mimetypes[$extension]) ? $mimetypes[$extension] : "application/octet-stream";
 
274
  $length = (!$using_amazon_storage && $file) ? filesize($file) : -1;
275
  /**/
276
  eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
@@ -330,71 +331,141 @@ if(!class_exists("c_ws_plugin__s2member_files_in"))
330
  return apply_filters("ws_plugin__s2member_file_download_access_url", $url, get_defined_vars());
331
  }
332
  /**/
333
- else /* Else, ``if ($serving)``, use local storage option. */
334
  {
335
- @set_time_limit /* Allow time. */(0);
336
  /**/
337
- @ini_set /* Disable GZIP compression. */("zlib.output_compression", 0);
338
- ((function_exists("apache_setenv")) ? @apache_setenv("no-gzip", "1") : "");
339
- /*
340
- Note: ``apache_setenv()`` only works when PHP is running as an Apache module.
341
- It's also a good idea to put this at the top of your `/.htaccess` file.
342
-
343
- <IfModule mod_rewrite.c>
344
- RewriteEngine On
345
- RewriteCond %{QUERY_STRING} (?:^|\?|&)s2member_file_download\=.+
346
- RewriteRule .* - [E=no-gzip:1]
347
- </IfModule>
348
-
349
- */
350
- status_header /* 200 OK status header. */(200);
351
  /**/
352
- header("Content-Encoding:");
353
- header("Accept-Ranges: none");
354
- header("Content-Type: ".$mimetype);
355
- header("Expires: ".gmdate("D, d M Y H:i:s", strtotime("-1 week"))." GMT");
356
- header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
357
- header("Cache-Control: no-cache, must-revalidate, max-age=0");
358
- header("Cache-Control: post-check=0, pre-check=0", false);
359
- header("Pragma: no-cache");
360
  /**/
361
- header('Content-Disposition: '.(($inline) ? "inline" : "attachment").'; filename="'.$basename.'"');
362
- /**/
363
- eval /* End/clean any output buffers that may exist already. Prep for content delivery. */('while (@ob_end_clean ());');
364
- /**/
365
- if($length && apply_filters("ws_plugin__s2member_chunk_file_downloads", false, get_defined_vars()) && is_resource($resource = fopen($file, "rb")))
366
  {
367
- $_chunk_size = apply_filters("ws_plugin__s2member_chunk_file_downloads_w_chunk_size", 2097152, get_defined_vars());
 
 
 
 
 
 
 
 
 
 
 
368
  /**/
369
- if(apply_filters("ws_plugin__s2member_chunk_file_downloads_w_content_length", false, get_defined_vars()))
370
- header("Content-Length: ".$length);
371
  /**/
372
- header /* `Transfer-Encoding: chunked` conserves memory. */("Transfer-Encoding: chunked");
 
 
 
 
 
 
 
 
 
 
 
373
  /**/
374
- while(!feof($resource) && ($chunk_size = strlen($data = fread($resource, $_chunk_size))))
375
- eval('echo dechex ($chunk_size) . "\r\n". $data . "\r\n"; @flush ();');
 
 
 
 
 
 
 
 
 
 
 
376
  /**/
377
- fclose($resource).exit("0\r\n\r\n");
378
- }
379
- else if($length && apply_filters("ws_plugin__s2member_flush_file_downloads", true, get_defined_vars()) && is_resource($resource = fopen($file, "rb")))
380
- {
381
- $_flush_size = apply_filters("ws_plugin__s2member_flush_file_downloads_w_flush_size", 2097152, get_defined_vars());
382
  /**/
383
- if(apply_filters("ws_plugin__s2member_flush_file_downloads_w_content_length", true, get_defined_vars()))
384
- header("Content-Length: ".$length);
385
  /**/
386
- while(!feof($resource) && ($flush_size = strlen($data = fread($resource, $_flush_size))))
387
- eval /* Conserves memory. */('echo $data; @flush ();');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
388
  }
389
- else if /* Else, use: ``file_get_contents()``. */($length)
390
  {
391
- @ini_set("memory_limit", WP_MAX_MEMORY_LIMIT);
392
- header("Content-Length: ".$length).exit(file_get_contents($file));
 
 
 
 
 
393
  }
394
- else /* Else, we have an empty file with no length. */
395
  {
396
- header("Content-Length: 0").exit();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
397
  }
 
398
  }
399
  }
400
  }
271
  /**/
272
  $pathinfo = (!$using_amazon_storage) ? pathinfo(($file = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["files_dir"]."/".$req["file_download"])) : array();
273
  $mimetype = ($mimetypes[$extension]) ? $mimetypes[$extension] : "application/octet-stream";
274
+ $disposition = (($inline) ? "inline" : "attachment")."; filename=\"".$basename."\"";
275
  $length = (!$using_amazon_storage && $file) ? filesize($file) : -1;
276
  /**/
277
  eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
331
  return apply_filters("ws_plugin__s2member_file_download_access_url", $url, get_defined_vars());
332
  }
333
  /**/
334
+ else /* Else, ``if ($serving)``, use local storage. */
335
  {
336
+ @set_time_limit(0);
337
  /**/
338
+ @ini_set("zlib.output_compression", 0);
339
+ if(function_exists("apache_setenv"))
340
+ @apache_setenv("no-gzip", "1");
341
+ while /* Cleans existing output buffers. */(@ob_end_clean())
342
+ ;
 
 
 
 
 
 
 
 
 
343
  /**/
344
+ $range = (string)@$_SERVER["HTTP_RANGE"];
345
+ if(!$range && function_exists("apache_request_headers"))
346
+ /* Note: ``apache_request_headers()`` works in FastCGI too, starting w/ PHP v5.4. */
347
+ foreach((array)apache_request_headers() as $_header => $_value)
348
+ if(is_string($_header) && strcasecmp($_header, "range") === 0)
349
+ $range = $_value;
350
+ unset($_header, $_value);
 
351
  /**/
352
+ if /* Requesting a specific byte range? */($range)
 
 
 
 
353
  {
354
+ if /* Invalid range? */(strpos($range, "=") === FALSE)
355
+ {
356
+ status_header(416);
357
+ nocache_headers();
358
+ header("Content-Encoding:");
359
+ header("Accept-Ranges: bytes");
360
+ header("Content-Type: ".$mimetype);
361
+ header("Content-Length: ".$length);
362
+ header("Content-Disposition: ".$disposition);
363
+ exit /* Stop here (invalid). */();
364
+ }
365
+ list($range_type, $byte_range) = preg_split("/\s*\=\s*/", $range, 2);
366
  /**/
367
+ $range_type = strtolower(trim($range_type));
368
+ $byte_range = trim($byte_range);
369
  /**/
370
+ if /* Invalid range type? */($range_type !== "bytes")
371
+ {
372
+ status_header(416);
373
+ nocache_headers();
374
+ header("Content-Encoding:");
375
+ header("Accept-Ranges: bytes");
376
+ header("Content-Type: ".$mimetype);
377
+ header("Content-Length: ".$length);
378
+ header("Content-Disposition: ".$disposition);
379
+ exit /* Stop here (invalid). */();
380
+ }
381
+ $byte_ranges = preg_split("/\s*,\s*/", $byte_range);
382
  /**/
383
+ if /* Invalid byte range? */(strpos($byte_ranges[0], "-") === FALSE)
384
+ {
385
+ status_header(416);
386
+ nocache_headers();
387
+ header("Content-Encoding:");
388
+ header("Accept-Ranges: bytes");
389
+ header("Content-Type: ".$mimetype);
390
+ header("Content-Length: ".$length);
391
+ header("Content-Disposition: ".$disposition);
392
+ exit /* Stop here (invalid). */();
393
+ }
394
+ /* Only dealing with the first byte range. Others are simply ignored here. */
395
+ list($byte_range_start, $byte_range_stops) = preg_split("/\s*\-\s*/", $byte_ranges[0], 2);
396
  /**/
397
+ $byte_range_start = trim($byte_range_start);
398
+ $byte_range_stops = trim($byte_range_stops);
 
 
 
399
  /**/
400
+ $byte_range_start = ($byte_range_start === "") ? NULL : (integer)$byte_range_start;
401
+ $byte_range_stops = ($byte_range_stops === "") ? NULL : (integer)$byte_range_stops;
402
  /**/
403
+ if(!isset($byte_range_start) && $byte_range_stops > 0 && $byte_range_stops <= $length)
404
+ {
405
+ $byte_range_start = $length - $byte_range_stops;
406
+ $byte_range_stops = /* The last X number of bytes. */ $length - 1;
407
+ }
408
+ else if(!isset($byte_range_stops) && $byte_range_start >= 0 && $byte_range_start < $length - 1)
409
+ {
410
+ $byte_range_stops = /* To the end of the file in this case. */ $length - 1;
411
+ }
412
+ else if(isset($byte_range_start, $byte_range_stops) && $byte_range_start >= 0 && $byte_range_start < $length - 1 && $byte_range_stops > $byte_range_start && $byte_range_stops <= $length - 1) {
413
+ /* Nothing to do in this case, starts/stops already defined properly. */
414
+ }
415
+ else /* We have an invalid byte range. */
416
+ {
417
+ status_header(416);
418
+ nocache_headers();
419
+ header("Content-Encoding:");
420
+ header("Accept-Ranges: bytes");
421
+ header("Content-Type: ".$mimetype);
422
+ header("Content-Length: ".$length);
423
+ header("Content-Disposition: ".$disposition);
424
+ exit /* Stop here (invalid). */();
425
+ }
426
+ /* Range. */
427
+ status_header(206);
428
+ nocache_headers();
429
+ header("Content-Encoding:");
430
+ header("Accept-Ranges: bytes");
431
+ header("Content-Type: ".$mimetype);
432
+ header("Content-Range: bytes ".$byte_range_start."-".$byte_range_stops."/".$length);
433
+ $byte_range_size = $byte_range_stops - $byte_range_start + 1;
434
+ header("Content-Length: ".$byte_range_size);
435
+ header("Content-Disposition: ".$disposition);
436
  }
437
+ else /* A normal request (NOT a specific byte range). */
438
  {
439
+ status_header(200);
440
+ nocache_headers();
441
+ header("Content-Encoding:");
442
+ header("Accept-Ranges: bytes");
443
+ header("Content-Type: ".$mimetype);
444
+ header("Content-Length: ".$length);
445
+ header("Content-Disposition: ".$disposition);
446
  }
447
+ if(is_resource($resource = fopen($file, "rb")))
448
  {
449
+ if($range)
450
+ {
451
+ $_bytes_to_read = $byte_range_size;
452
+ fseek($resource, $byte_range_start);
453
+ }
454
+ else /* Entire file. */
455
+ $_bytes_to_read = $length;
456
+ /**/
457
+ $chunk_size = apply_filters("ws_plugin__s2member_file_downloads_chunk_size", 2097152, get_defined_vars());
458
+ /**/
459
+ while /* We have bytes to read here. */($_bytes_to_read)
460
+ {
461
+ $_bytes_to_read -= ($_reading = ($_bytes_to_read > $chunk_size) ? $chunk_size : $_bytes_to_read);
462
+ echo /* Serve file in chunks (default chunk size is 2MB). */ fread($resource, $_reading);
463
+ flush /* Flush each chunk to the browser as it is served (avoids high memory consumption). */();
464
+ }
465
+ fclose /* Close file resource handle. */($resource);
466
+ unset /* Housekeeping. */($_bytes_to_read, $_reading);
467
  }
468
+ exit /* Stop execution now (the file has been served). */();
469
  }
470
  }
471
  }
includes/classes/paypal-utilities.inc.php CHANGED
@@ -429,7 +429,7 @@ if(!class_exists("c_ws_plugin__s2member_paypal_utilities"))
429
  *
430
  * @param str $term Expects one of `D|W|M|Y`.
431
  * @param str $period Expects a numeric value.
432
- * @return bool|str A full singular description of the term *( i.e. `DAY|WEEK|BIWK|MONT|QTER|YEAR` )*, else false.
433
  *
434
  * @note Payflow® unfortunately does NOT support daily and/or bi-monthly billing.
435
  */
@@ -449,6 +449,9 @@ if(!class_exists("c_ws_plugin__s2member_paypal_utilities"))
449
  else if($payflow_term === "MONT" && $period === "3")
450
  $payflow_term = "QTER";
451
  /**/
 
 
 
452
  return apply_filters("ws_plugin__s2member_paypal_payflow_term", $payflow_term, get_defined_vars());
453
  }
454
  /**
429
  *
430
  * @param str $term Expects one of `D|W|M|Y`.
431
  * @param str $period Expects a numeric value.
432
+ * @return bool|str A full singular description of the term *( i.e. `DAY|WEEK|BIWK|MONT|QTER|SMYR|YEAR` )*, else false.
433
  *
434
  * @note Payflow® unfortunately does NOT support daily and/or bi-monthly billing.
435
  */
449
  else if($payflow_term === "MONT" && $period === "3")
450
  $payflow_term = "QTER";
451
  /**/
452
+ else if($payflow_term === "MONT" && $period === "6")
453
+ $payflow_term = "SMYR";
454
+ /**/
455
  return apply_filters("ws_plugin__s2member_paypal_payflow_term", $payflow_term, get_defined_vars());
456
  }
457
  /**
includes/menu-pages/code-samples/idev-ccap-tracking-code.x-php CHANGED
@@ -1,3 +1 @@
1
- <img
2
- src="http://www.example.com/idevaffiliate/sale.php?profile=123&idev_saleamt=%%amount%%&idev_ordernum=%%txn_id%%"
3
- width="1" height="1" border="0" />
1
+ <img src="http://www.example.com/idevaffiliate/sale.php?profile=123&idev_saleamt=%%amount%%&idev_ordernum=%%txn_id%%" width="1" height="1" />
 
 
includes/menu-pages/code-samples/idev-modification-tracking-code.x-php CHANGED
@@ -1,3 +1 @@
1
- <img
2
- src="http://www.example.com/idevaffiliate/sale.php?profile=123&idev_saleamt=%%initial%%&idev_ordernum=%%subscr_id%%"
3
- width="1" height="1" border="0" />
1
+ <img src="http://www.example.com/idevaffiliate/sale.php?profile=123&idev_saleamt=%%initial%%&idev_ordernum=%%subscr_id%%" width="1" height="1" />
 
 
includes/menu-pages/code-samples/idev-signup-tracking-code.x-php CHANGED
@@ -1,3 +1 @@
1
- <img
2
- src="http://www.example.com/idevaffiliate/sale.php?profile=123&idev_saleamt=%%initial%%&idev_ordernum=%%subscr_id%%"
3
- width="1" height="1" border="0" />
1
+ <img src="http://www.example.com/idevaffiliate/sale.php?profile=123&idev_saleamt=%%initial%%&idev_ordernum=%%subscr_id%%" width="1" height="1" />
 
 
includes/menu-pages/code-samples/idev-sp-tracking-code.x-php CHANGED
@@ -1,3 +1 @@
1
- <img
2
- src="http://www.example.com/idevaffiliate/sale.php?profile=123&idev_saleamt=%%amount%%&idev_ordernum=%%txn_id%%"
3
- width="1" height="1" border="0" />
1
+ <img src="http://www.example.com/idevaffiliate/sale.php?profile=123&idev_saleamt=%%amount%%&idev_ordernum=%%txn_id%%" width="1" height="1" />
 
 
includes/menu-pages/code-samples/jwplayer-streaming-mp4-sca.x-php CHANGED
@@ -23,7 +23,7 @@ $s2_jw_config["mp4_video_file_name"] = "video.mp4"; // Name of your MP4 test fil
23
  [{
24
  sources: /* List all available sources. */
25
  [
26
- {type: 'rtmp', file: mp4['streamer'] + '/' + mp4['file']},
27
  {type: 'mp4', file: mp4['url']}
28
  ]
29
  }],
23
  [{
24
  sources: /* List all available sources. */
25
  [
26
+ {type: 'rtmp', file: mp4['streamer'] + '/mp4:' + mp4['file']},
27
  {type: 'mp4', file: mp4['url']}
28
  ]
29
  }],
includes/menu-pages/code-samples/jwplayer-streaming-mp4-webm.x-php CHANGED
@@ -23,7 +23,7 @@ if (($mp4 = s2member_file_download_url ($mp4_cfg, "get-streamer-array"))
23
  [{
24
  sources: /* List all available sources. */
25
  [
26
- {type: 'rtmp', file: '<?php echo $mp4["streamer"]; ?>/<?php echo $mp4["file"]; ?>'},
27
  {type: 'mp4', file: '<?php echo $mp4["url"]; ?>'},
28
  {type: 'webm', file: '<?php echo $webm["url"]; ?>'}
29
  ]
23
  [{
24
  sources: /* List all available sources. */
25
  [
26
+ {type: 'rtmp', file: '<?php echo $mp4["streamer"]; ?>/mp4:<?php echo $mp4["file"]; ?>'},
27
  {type: 'mp4', file: '<?php echo $mp4["url"]; ?>'},
28
  {type: 'webm', file: '<?php echo $webm["url"]; ?>'}
29
  ]
includes/menu-pages/code-samples/jwplayer-streaming-mp4.x-php CHANGED
@@ -20,7 +20,7 @@ if (($mp4 = s2member_file_download_url ($cfg, "get-streamer-array"))) { ?>
20
  [{
21
  sources: /* List all available sources. */
22
  [
23
- {type: 'rtmp', file: '<?php echo $mp4["streamer"]; ?>/<?php echo $mp4["file"]; ?>'},
24
  {type: 'mp4', file: '<?php echo $mp4["url"]; ?>'}
25
  ]
26
  }],
20
  [{
21
  sources: /* List all available sources. */
22
  [
23
+ {type: 'rtmp', file: '<?php echo $mp4["streamer"]; ?>/mp4:<?php echo $mp4["file"]; ?>'},
24
  {type: 'mp4', file: '<?php echo $mp4["url"]; ?>'}
25
  ]
26
  }],
includes/menu-pages/code-samples/sas-ccap-tracking-code.x-php CHANGED
@@ -1,3 +1 @@
1
- <img
2
- src="https://shareasale.com/sale.cfm?amount=%%amount%%&tracking=%%txn_id%%&transtype=SALE&merchantID=123"
3
- width="1" height="1" border="0" />
1
+ <img src="https://shareasale.com/sale.cfm?amount=%%amount%%&tracking=%%txn_id%%&transtype=SALE&merchantID=123" width="1" height="1" />
 
 
includes/menu-pages/code-samples/sas-modification-tracking-code.x-php CHANGED
@@ -1,3 +1 @@
1
- <img
2
- src="https://shareasale.com/sale.cfm?amount=%%initial%%&tracking=%%subscr_id%%&transtype=SALE&merchantID=123"
3
- width="1" height="1" border="0" />
1
+ <img src="https://shareasale.com/sale.cfm?amount=%%initial%%&tracking=%%subscr_id%%&transtype=SALE&merchantID=123" width="1" height="1" />
 
 
includes/menu-pages/code-samples/sas-signup-tracking-code.x-php CHANGED
@@ -1,3 +1 @@
1
- <img
2
- src="https://shareasale.com/sale.cfm?amount=%%initial%%&tracking=%%subscr_id%%&transtype=SALE&merchantID=123"
3
- width="1" height="1" border="0" />
1
+ <img src="https://shareasale.com/sale.cfm?amount=%%initial%%&tracking=%%subscr_id%%&transtype=SALE&merchantID=123" width="1" height="1" />
 
 
includes/menu-pages/code-samples/sas-sp-tracking-code.x-php CHANGED
@@ -1,3 +1 @@
1
- <img
2
- src="https://shareasale.com/sale.cfm?amount=%%amount%%&tracking=%%txn_id%%&transtype=SALE&merchantID=123"
3
- width="1" height="1" border="0" />
1
+ <img src="https://shareasale.com/sale.cfm?amount=%%amount%%&tracking=%%txn_id%%&transtype=SALE&merchantID=123" width="1" height="1" />
 
 
includes/menu-pages/trk-ops.inc.php CHANGED
@@ -58,6 +58,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_trk_ops"))
58
  echo '<p>s2Member will display your Signup Tracking Codes in one of four possible locations... <strong>1.</strong> If possible, on the Thank-You Return Page, after returning from your Payment Gateway. <strong>2.</strong> Otherwise, if possible, on the Registration Form, after returning from your Payment Gateway. <em>Note. If you offer a 100% free Trial Period, Tracking Codes will be displayed in location #2 when using PayPal® Standard Button integration.</em> <strong>3.</strong> Otherwise, if possible, on the Login Form after Registration is completed. <strong>4.</strong> Otherwise, in the footer of your WordPress® theme, as soon as possible <em>( immediately with s2Member Pro Form integration )</em>; or after the Customer\'s very first login.</p>' . "\n";
59
  echo '<p>Signup Tracking Codes are displayed for all types of Membership Level Access. Including Recurring Subscriptions <em>( with or without a Free Trial Period )</em>, Non-Recurring Subscriptions <em>( with or without a Free Trial Period )</em>, Lifetime Subscriptions, and even Fixed-Term Subscriptions. All of these are supported by s2Member\'s Button/Form Generators.</p>' . "\n";
60
  echo '<p>Signup Tracking Codes will NOT be processed for Free Subscribers that register without going through your Payment Gateway at all. Signup Tracking Codes will NOT be processed when an "existing" User/Member pays for a new Subscription <em>( see: Modification Tracking Codes for that scenario )</em>.' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ()) ? '' : ' And, Signup Tracking Codes will NOT be processed on Buy Now transactions for Independent Custom Capabilities <em>( see: Capability Tracking Codes for that scenario )</em>.') . '</p>' . "\n";
 
61
  do_action ("ws_plugin__s2member_during_trk_ops_page_during_left_sections_during_signup_tracking", get_defined_vars ());
62
  /**/
63
  echo '<table class="form-table">' . "\n";
@@ -130,6 +131,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_trk_ops"))
130
  echo '<p>s2Member will display your Modification Tracking Codes in one of three possible locations... <strong>1.</strong> If possible, on the Thank-You Return Page, after returning from your Payment Gateway. <strong>2.</strong> Otherwise, if possible, on the Login Form after returning from your Payment Gateway <em>( i.e. when the Customer is asked to log back in )</em>. <strong>3.</strong> Otherwise, in the footer of your WordPress® theme, as soon as possible <em>( immediately with s2Member Pro Form integration )</em>; or after the Customer\'s next login.</p>' . "\n";
131
  echo '<p>Modification Tracking Codes are displayed for all types of Membership Level Access. Including Recurring Subscriptions <em>( with or without a Free Trial Period )</em>, Non-Recurring Subscriptions <em>( with or without a Free Trial Period )</em>, Lifetime Subscriptions, and even Fixed-Term Subscriptions. All of these are supported by s2Member\'s Button/Form Generators.</p>' . "\n";
132
  echo '<p>Modification Tracking Codes will NOT be processed for Free Subscribers that register without going through your Payment Gateway at all. Modification Tracking Codes will NOT be processed when a "new" User/Member signs up <em>( see: Signup Tracking Codes for that scenario )</em>.' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ()) ? '' : ' And, Modification Tracking Codes will NOT be processed on Buy Now transactions for Independent Custom Capabilities <em>( see: Capability Tracking Codes for that scenario )</em>.') . '</p>' . "\n";
 
133
  do_action ("ws_plugin__s2member_during_trk_ops_page_during_left_sections_during_modification_tracking", get_defined_vars ());
134
  /**/
135
  echo '<table class="form-table">' . "\n";
@@ -213,6 +215,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_trk_ops"))
213
  echo '<h3>Capability Tracking Codes ( optional )</h3>' . "\n";
214
  echo '<p>If you use affiliate software, a list server, tracking codes from advertising networks, or the like; you\'ll want to read this section. The HTML' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ()) ? '' : ' and/or PHP') . ' code that you enter below, will be loaded up in a web browser, each time Independent Custom Capabilities are purchased. This is marked `Capability`, because Capability Tracking Codes are displayed each time an "existing" User/Member <em>( even if they are/were a Free Subscriber )</em> pays you for Independent Custom Capabilities through a Buy Now transaction. This is the only circumstance in which your Capability Tracking Codes will be displayed.</p>' . "\n";
215
  echo '<p>s2Member will display your Capability Tracking Codes in one of three possible locations... <strong>1.</strong> If possible, on the Thank-You Return Page, after returning from your Payment Gateway. <strong>2.</strong> Otherwise, if possible, on the Login Form after returning from your Payment Gateway <em>( i.e. when the Customer is asked to log back in )</em>. <strong>3.</strong> Otherwise, in the footer of your WordPress® theme, as soon as possible <em>( immediately with s2Member Pro Form integration )</em>; or after the Customer\'s next login.</p>' . "\n";
 
216
  do_action ("ws_plugin__s2member_during_trk_ops_page_during_left_sections_during_ccap_tracking", get_defined_vars ());
217
  /**/
218
  echo '<table class="form-table">' . "\n";
@@ -291,6 +294,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_trk_ops"))
291
  echo '<div class="ws-menu-page-section ws-plugin--s2member-sp-tracking-section">' . "\n";
292
  echo '<h3>Tracking Codes For Specific Post/Page Access ( optional )</h3>' . "\n";
293
  echo '<p>If you use affiliate software, a list server, tracking codes from advertising networks, or the like; you\'ll want to read this section. The HTML' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ()) ? '' : ' and/or PHP') . ' code that you enter below, will be loaded up in a web browser, after a Customer completes a successful transaction through your Payment Gateway; specifically for Post/Page Access. These Codes are NOT injected for any type of Membership Level Access' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ()) ? '' : ' or Independent Custom Capabilities') . '. These are only for Specific Post/Page transactions. The Tracking Codes that you enter below, will be displayed in one of two possible locations... <strong>1.</strong> If possible, on the Thank-You Return Page, after returning from your Payment Gateway. <strong>2.</strong> Otherwise, in the footer of your WordPress® theme, as soon as possible <em>( immediately with s2Member Pro Form integration )</em>.</p>' . "\n";
 
294
  do_action ("ws_plugin__s2member_during_trk_ops_page_during_left_sections_during_sp_tracking", get_defined_vars ());
295
  /**/
296
  echo '<table class="form-table">' . "\n";
@@ -395,7 +399,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_trk_ops"))
395
  /**/
396
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
397
  echo '<p>Your <code>profile</code> ID will be assigned by iDevAffiliate®. Be sure to replace <code>profile=123</code> with your own profile ID.</p>' . "\n";
398
- echo '<p><em><strong>*Tip*</strong> iDevAffiliate® also provides an alternative method, using a 3rd-party call. The alternative 3rd-party call, could be used with <code>s2Member -> API Notifications.</code> A 3rd-party call, is essentially an HTTP connection that runs silently behind-the-scene, as opposed to being loaded in a browser. It\'s a bit more powerful, but also more advanced.</em></p>' . "\n";
399
  /**/
400
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
401
  echo '<p><em><strong>*Tip*</strong> With <a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank" rel="external">s2Member Pro Forms</a>, it\'s possible to integrate Affiliate Coupon Codes with iDevAffiliate®. Each of your affiliates can add their affiliate ID onto the end of any valid Coupon Code that you\'ve configured with s2Member Pro. Please check your Dashboard here: <code>s2Member -> Pro Coupon Codes -> Affiliate Coupon Codes</code>. This is a VERY powerful feature.</em></p>' . "\n";
@@ -444,7 +448,7 @@ if (!class_exists ("c_ws_plugin__s2member_menu_page_trk_ops"))
444
  /**/
445
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
446
  echo '<p>Your <code>merchantID</code> will be assigned by ShareASale®. Be sure to replace <code>merchantID=123</code> with the one they assign you.</p>' . "\n";
447
- echo '<p><em><strong>*Tip*</strong> ShareASale® also provides an alternative method, using a 3rd-party call. The alternative 3rd-party call, could be used with <code>s2Member -> API Notifications.</code> A 3rd-party call, is essentially an HTTP connection that runs silently behind-the-scene, as opposed to being loaded in a browser. It\'s a bit more powerful, but also more advanced.</em></p>' . "\n";
448
  /**/
449
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
450
  echo '<p><em><strong>*Tip*</strong> With <a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank" rel="external">s2Member Pro Forms</a>, it\'s possible to integrate Affiliate Coupon Codes with ShareASale®. Each of your affiliates can add their affiliate ID onto the end of any valid Coupon Code that you\'ve configured with s2Member Pro. Please check your Dashboard here: <code>s2Member -> Pro Coupon Codes -> Affiliate Coupon Codes</code>. This is a VERY powerful feature.</em></p>' . "\n";
58
  echo '<p>s2Member will display your Signup Tracking Codes in one of four possible locations... <strong>1.</strong> If possible, on the Thank-You Return Page, after returning from your Payment Gateway. <strong>2.</strong> Otherwise, if possible, on the Registration Form, after returning from your Payment Gateway. <em>Note. If you offer a 100% free Trial Period, Tracking Codes will be displayed in location #2 when using PayPal® Standard Button integration.</em> <strong>3.</strong> Otherwise, if possible, on the Login Form after Registration is completed. <strong>4.</strong> Otherwise, in the footer of your WordPress® theme, as soon as possible <em>( immediately with s2Member Pro Form integration )</em>; or after the Customer\'s very first login.</p>' . "\n";
59
  echo '<p>Signup Tracking Codes are displayed for all types of Membership Level Access. Including Recurring Subscriptions <em>( with or without a Free Trial Period )</em>, Non-Recurring Subscriptions <em>( with or without a Free Trial Period )</em>, Lifetime Subscriptions, and even Fixed-Term Subscriptions. All of these are supported by s2Member\'s Button/Form Generators.</p>' . "\n";
60
  echo '<p>Signup Tracking Codes will NOT be processed for Free Subscribers that register without going through your Payment Gateway at all. Signup Tracking Codes will NOT be processed when an "existing" User/Member pays for a new Subscription <em>( see: Modification Tracking Codes for that scenario )</em>.' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ()) ? '' : ' And, Signup Tracking Codes will NOT be processed on Buy Now transactions for Independent Custom Capabilities <em>( see: Capability Tracking Codes for that scenario )</em>.') . '</p>' . "\n";
61
+ echo '<p><em><strong>AD BLOCKERS:</strong> If a web browser has ad blockers enabled (i.e. the web browser has an ad blocking extension or add-on), Tracking Codes from popular online advertising companies (including many affiliate networks) may NOT be shown. Ad blockers can prevent your Tracking Codes from being loaded in a customer\'s browser. If you\'d like to avoid this problem, consider integrating with s2Member\'s API Notifications instead of with Tracking Codes. API Notifications occur silently behind-the-scene (more reliably), whereas Tracking Codes are loaded in a customer\'s browser. For more information, please see: <code>s2Member -> API / Notifications</code>.</em></p>' . "\n";
62
  do_action ("ws_plugin__s2member_during_trk_ops_page_during_left_sections_during_signup_tracking", get_defined_vars ());
63
  /**/
64
  echo '<table class="form-table">' . "\n";
131
  echo '<p>s2Member will display your Modification Tracking Codes in one of three possible locations... <strong>1.</strong> If possible, on the Thank-You Return Page, after returning from your Payment Gateway. <strong>2.</strong> Otherwise, if possible, on the Login Form after returning from your Payment Gateway <em>( i.e. when the Customer is asked to log back in )</em>. <strong>3.</strong> Otherwise, in the footer of your WordPress® theme, as soon as possible <em>( immediately with s2Member Pro Form integration )</em>; or after the Customer\'s next login.</p>' . "\n";
132
  echo '<p>Modification Tracking Codes are displayed for all types of Membership Level Access. Including Recurring Subscriptions <em>( with or without a Free Trial Period )</em>, Non-Recurring Subscriptions <em>( with or without a Free Trial Period )</em>, Lifetime Subscriptions, and even Fixed-Term Subscriptions. All of these are supported by s2Member\'s Button/Form Generators.</p>' . "\n";
133
  echo '<p>Modification Tracking Codes will NOT be processed for Free Subscribers that register without going through your Payment Gateway at all. Modification Tracking Codes will NOT be processed when a "new" User/Member signs up <em>( see: Signup Tracking Codes for that scenario )</em>.' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ()) ? '' : ' And, Modification Tracking Codes will NOT be processed on Buy Now transactions for Independent Custom Capabilities <em>( see: Capability Tracking Codes for that scenario )</em>.') . '</p>' . "\n";
134
+ echo '<p><em><strong>AD BLOCKERS:</strong> If a web browser has ad blockers enabled (i.e. the web browser has an ad blocking extension or add-on), Tracking Codes from popular online advertising companies (including many affiliate networks) may NOT be shown. Ad blockers can prevent your Tracking Codes from being loaded in a customer\'s browser. If you\'d like to avoid this problem, consider integrating with s2Member\'s API Notifications instead of with Tracking Codes. API Notifications occur silently behind-the-scene (more reliably), whereas Tracking Codes are loaded in a customer\'s browser. For more information, please see: <code>s2Member -> API / Notifications</code>.</em></p>' . "\n";
135
  do_action ("ws_plugin__s2member_during_trk_ops_page_during_left_sections_during_modification_tracking", get_defined_vars ());
136
  /**/
137
  echo '<table class="form-table">' . "\n";
215
  echo '<h3>Capability Tracking Codes ( optional )</h3>' . "\n";
216
  echo '<p>If you use affiliate software, a list server, tracking codes from advertising networks, or the like; you\'ll want to read this section. The HTML' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ()) ? '' : ' and/or PHP') . ' code that you enter below, will be loaded up in a web browser, each time Independent Custom Capabilities are purchased. This is marked `Capability`, because Capability Tracking Codes are displayed each time an "existing" User/Member <em>( even if they are/were a Free Subscriber )</em> pays you for Independent Custom Capabilities through a Buy Now transaction. This is the only circumstance in which your Capability Tracking Codes will be displayed.</p>' . "\n";
217
  echo '<p>s2Member will display your Capability Tracking Codes in one of three possible locations... <strong>1.</strong> If possible, on the Thank-You Return Page, after returning from your Payment Gateway. <strong>2.</strong> Otherwise, if possible, on the Login Form after returning from your Payment Gateway <em>( i.e. when the Customer is asked to log back in )</em>. <strong>3.</strong> Otherwise, in the footer of your WordPress® theme, as soon as possible <em>( immediately with s2Member Pro Form integration )</em>; or after the Customer\'s next login.</p>' . "\n";
218
+ echo '<p><em><strong>AD BLOCKERS:</strong> If a web browser has ad blockers enabled (i.e. the web browser has an ad blocking extension or add-on), Tracking Codes from popular online advertising companies (including many affiliate networks) may NOT be shown. Ad blockers can prevent your Tracking Codes from being loaded in a customer\'s browser. If you\'d like to avoid this problem, consider integrating with s2Member\'s API Notifications instead of with Tracking Codes. API Notifications occur silently behind-the-scene (more reliably), whereas Tracking Codes are loaded in a customer\'s browser. For more information, please see: <code>s2Member -> API / Notifications</code>.</em></p>' . "\n";
219
  do_action ("ws_plugin__s2member_during_trk_ops_page_during_left_sections_during_ccap_tracking", get_defined_vars ());
220
  /**/
221
  echo '<table class="form-table">' . "\n";
294
  echo '<div class="ws-menu-page-section ws-plugin--s2member-sp-tracking-section">' . "\n";
295
  echo '<h3>Tracking Codes For Specific Post/Page Access ( optional )</h3>' . "\n";
296
  echo '<p>If you use affiliate software, a list server, tracking codes from advertising networks, or the like; you\'ll want to read this section. The HTML' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ()) ? '' : ' and/or PHP') . ' code that you enter below, will be loaded up in a web browser, after a Customer completes a successful transaction through your Payment Gateway; specifically for Post/Page Access. These Codes are NOT injected for any type of Membership Level Access' . ((is_multisite () && c_ws_plugin__s2member_utils_conds::is_multisite_farm () && !is_main_site ()) ? '' : ' or Independent Custom Capabilities') . '. These are only for Specific Post/Page transactions. The Tracking Codes that you enter below, will be displayed in one of two possible locations... <strong>1.</strong> If possible, on the Thank-You Return Page, after returning from your Payment Gateway. <strong>2.</strong> Otherwise, in the footer of your WordPress® theme, as soon as possible <em>( immediately with s2Member Pro Form integration )</em>.</p>' . "\n";
297
+ echo '<p><em><strong>AD BLOCKERS:</strong> If a web browser has ad blockers enabled (i.e. the web browser has an ad blocking extension or add-on), Tracking Codes from popular online advertising companies (including many affiliate networks) may NOT be shown. Ad blockers can prevent your Tracking Codes from being loaded in a customer\'s browser. If you\'d like to avoid this problem, consider integrating with s2Member\'s API Notifications instead of with Tracking Codes. API Notifications occur silently behind-the-scene (more reliably), whereas Tracking Codes are loaded in a customer\'s browser. For more information, please see: <code>s2Member -> API / Notifications</code>.</em></p>' . "\n";
298
  do_action ("ws_plugin__s2member_during_trk_ops_page_during_left_sections_during_sp_tracking", get_defined_vars ());
299
  /**/
300
  echo '<table class="form-table">' . "\n";
399
  /**/
400
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
401
  echo '<p>Your <code>profile</code> ID will be assigned by iDevAffiliate®. Be sure to replace <code>profile=123</code> with your own profile ID.</p>' . "\n";
402
+ echo '<p><em><strong>*Tip*</strong> iDevAffiliate® also provides an alternative method, using a 3rd-party call. The alternative 3rd-party call, could be used with <code>s2Member -> API Notifications.</code> A 3rd-party call, is essentially an HTTP connection that runs silently behind-the-scene, as opposed to being loaded in a browser. It\'s a bit more powerful (and reliable), but also more advanced.</em></p>' . "\n";
403
  /**/
404
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
405
  echo '<p><em><strong>*Tip*</strong> With <a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank" rel="external">s2Member Pro Forms</a>, it\'s possible to integrate Affiliate Coupon Codes with iDevAffiliate®. Each of your affiliates can add their affiliate ID onto the end of any valid Coupon Code that you\'ve configured with s2Member Pro. Please check your Dashboard here: <code>s2Member -> Pro Coupon Codes -> Affiliate Coupon Codes</code>. This is a VERY powerful feature.</em></p>' . "\n";
448
  /**/
449
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
450
  echo '<p>Your <code>merchantID</code> will be assigned by ShareASale®. Be sure to replace <code>merchantID=123</code> with the one they assign you.</p>' . "\n";
451
+ echo '<p><em><strong>*Tip*</strong> ShareASale® also provides an alternative method, using a 3rd-party call. The alternative 3rd-party call, could be used with <code>s2Member -> API Notifications.</code> A 3rd-party call, is essentially an HTTP connection that runs silently behind-the-scene, as opposed to being loaded in a browser. It\'s a bit more powerful (and reliable), but also more advanced.</em></p>' . "\n";
452
  /**/
453
  echo '<div class="ws-menu-page-hr"></div>' . "\n";
454
  echo '<p><em><strong>*Tip*</strong> With <a href="' . esc_attr (c_ws_plugin__s2member_readmes::parse_readme_value ("Pro Module / Prices")) . '" target="_blank" rel="external">s2Member Pro Forms</a>, it\'s possible to integrate Affiliate Coupon Codes with ShareASale®. Each of your affiliates can add their affiliate ID onto the end of any valid Coupon Code that you\'ve configured with s2Member Pro. Please check your Dashboard here: <code>s2Member -> Pro Coupon Codes -> Affiliate Coupon Codes</code>. This is a VERY powerful feature.</em></p>' . "\n";
includes/syscon.inc.php CHANGED
@@ -79,7 +79,7 @@ $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["logs_dir_htaccess"] = dirname(__FILE__
79
  /*
80
  Configure the global reCaptcha ( www.websharks-inc.net / or any domain ). These public/private keys work on any installation.
81
  */
82
- $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["recaptcha"] = array("public_key" => "6LeEOsoSAAAAALTKvUpMQMONdBOwG1UVXiFon96F", "private_key" => "6LeEOsoSAAAAAF8gycva4_0cpVr2KHlnnGzAfocd", "lang" => _x("en", "s2member-front recaptcha-lang-code", "s2member"));
83
  /*
84
  Configure the right menu options panel for s2Member.
85
  */
79
  /*
80
  Configure the global reCaptcha ( www.websharks-inc.net / or any domain ). These public/private keys work on any installation.
81
  */
82
+ $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["recaptcha"] = array("public_key" => "6LeCANsSAAAAAIIrlB3FrXe42mr0OSSZpT0pkpFK", "private_key" => "6LeCANsSAAAAAGBXMIKAirv6G4PmaGa-ORxdD-oZ", "lang" => _x("en", "s2member-front recaptcha-lang-code", "s2member"));
83
  /*
84
  Configure the right menu options panel for s2Member.
85
  */
includes/translations/s2member.pot CHANGED
@@ -4,7 +4,7 @@ msgid ""
4
  msgstr ""
5
  "Project-Id-Version: s2Member® Framework 121213\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/___s2member\n"
7
- "POT-Creation-Date: 2012-12-14 07:43:30+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -92,17 +92,17 @@ msgctxt "s2member-front"
92
  msgid "<strong>503: Basic File Downloads are NOT enabled yet.</strong> Please contact Support for assistance. If you are the site owner, please configure: <code>s2Member -> Download Options -> Basic Download Restrictions</code>."
93
  msgstr ""
94
 
95
- #: s2member/includes/classes/files-in.inc.php:404
96
  msgctxt "s2member-front"
97
  msgid "<strong>503: Access denied.</strong> Invalid File Download specs."
98
  msgstr ""
99
 
100
- #: s2member/includes/classes/files-in.inc.php:490
101
  msgctxt "s2member-front"
102
  msgid "Members Only"
103
  msgstr ""
104
 
105
- #: s2member/includes/classes/files-in.inc.php:496
106
  msgctxt "s2member-front"
107
  msgid "<strong>401:</strong> Sorry, access denied."
108
  msgstr ""
@@ -111,12 +111,12 @@ msgstr ""
111
  #. message, which comes from the Amazon® S3 API call. Feel free to exclude
112
  #. `%s` if you like.
113
 
114
- #: s2member/includes/classes/files-in.inc.php:634
115
  msgctxt "s2member-admin"
116
  msgid "Unable to update existing Amazon® S3 Cross-Domain Policy. %s"
117
  msgstr ""
118
 
119
- #: s2member/includes/classes/files-in.inc.php:637
120
  msgctxt "s2member-admin"
121
  msgid "Unable to update existing Amazon® S3 Cross-Domain Policy. Connection failed."
122
  msgstr ""
@@ -125,12 +125,12 @@ msgstr ""
125
  #. message, which comes from the Amazon® S3 API call. Feel free to exclude
126
  #. `%s` if you like.
127
 
128
- #: s2member/includes/classes/files-in.inc.php:641
129
  msgctxt "s2member-admin"
130
  msgid "Unable to update existing Amazon® S3 Bucket Policy. %s"
131
  msgstr ""
132
 
133
- #: s2member/includes/classes/files-in.inc.php:644
134
  msgctxt "s2member-admin"
135
  msgid "Unable to update existing Amazon® S3 Bucket Policy. Connection failed."
136
  msgstr ""
@@ -139,17 +139,17 @@ msgstr ""
139
  #. message, which comes from the Amazon® S3 API call. Feel free to exclude
140
  #. `%s` if you like.
141
 
142
- #: s2member/includes/classes/files-in.inc.php:648
143
  msgctxt "s2member-admin"
144
  msgid "Unable to update existing Amazon® S3 Bucket ACLs. %s"
145
  msgstr ""
146
 
147
- #: s2member/includes/classes/files-in.inc.php:651
148
  msgctxt "s2member-admin"
149
  msgid "Unable to update existing Amazon® S3 Bucket ACLs. Connection failed."
150
  msgstr ""
151
 
152
- #: s2member/includes/classes/files-in.inc.php:654
153
  msgctxt "s2member-admin"
154
  msgid "Unable to acquire/read existing Amazon® S3 Bucket ACLs. Unexpected response."
155
  msgstr ""
@@ -158,22 +158,22 @@ msgstr ""
158
  #. message, which comes from the Amazon® S3 API call. Feel free to exclude
159
  #. `%s` if you like.
160
 
161
- #: s2member/includes/classes/files-in.inc.php:658
162
  msgctxt "s2member-admin"
163
  msgid "Unable to acquire existing Amazon® S3 Bucket ACLs. %s"
164
  msgstr ""
165
 
166
- #: s2member/includes/classes/files-in.inc.php:661
167
  msgctxt "s2member-admin"
168
  msgid "Unable to acquire existing Amazon® S3 Bucket ACLs. Connection failed."
169
  msgstr ""
170
 
171
- #: s2member/includes/classes/files-in.inc.php:664
172
  msgctxt "s2member-admin"
173
  msgid "Unable to auto-configure existing Amazon® S3 Bucket ACLs. Incomplete Amazon® S3 configuration options. Missing one of: Amazon® S3 Bucket, Access Key, or Secret Key."
174
  msgstr ""
175
 
176
- #: s2member/includes/classes/files-in.inc.php:766
177
  msgctxt "s2member-admin"
178
  msgid "Unable to delete existing Amazon® CloudFront Downloads Distro. Still in a `pending` state. Please wait 15 minutes, then try again. There is a certain process that s2Member must strictly adhere to when re-configuring your Amazon® CloudFront Distros. You may have to tick the auto-configure checkbox again, and re-run s2Member's auto-configuration routine many times, because s2Member will likely run into several `pending` challenges, as it works to completely re-configure your Amazon® CloudFront Distros for you. Thanks for your patience. Please wait 15 minutes, then try again."
179
  msgstr ""
@@ -182,12 +182,12 @@ msgstr ""
182
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
183
  #. exclude `%s` if you like.
184
 
185
- #: s2member/includes/classes/files-in.inc.php:773
186
  msgctxt "s2member-admin"
187
  msgid "Unable to delete existing Amazon® CloudFront Downloads Distro. %s"
188
  msgstr ""
189
 
190
- #: s2member/includes/classes/files-in.inc.php:785
191
  msgctxt "s2member-admin"
192
  msgid "Unable to delete existing Amazon® CloudFront Streaming Distro. Still in a `pending` state. Please wait 15 minutes, then try again. There is a certain process that s2Member must strictly adhere to when re-configuring your Amazon® CloudFront Distros. You may have to tick the auto-configure checkbox again, and re-run s2Member's auto-configuration routine many times, because s2Member will likely run into several `pending` challenges, as it works to completely re-configure your Amazon® CloudFront Distros for you. Thanks for your patience. Please wait 15 minutes, then try again."
193
  msgstr ""
@@ -196,7 +196,7 @@ msgstr ""
196
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
197
  #. exclude `%s` if you like.
198
 
199
- #: s2member/includes/classes/files-in.inc.php:792
200
  msgctxt "s2member-admin"
201
  msgid "Unable to delete existing Amazon® CloudFront Streaming Distro. %s"
202
  msgstr ""
@@ -205,8 +205,8 @@ msgstr ""
205
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
206
  #. exclude `%s` if you like.
207
 
208
- #: s2member/includes/classes/files-in.inc.php:808
209
- #: s2member/includes/classes/files-in.inc.php:992
210
  msgctxt "s2member-admin"
211
  msgid "Unable to delete existing Amazon® CloudFront Origin Access Identity. %s"
212
  msgstr ""
@@ -215,12 +215,12 @@ msgstr ""
215
  #. message, which comes from the Amazon® S3 API call. Feel free to exclude
216
  #. `%s` if you like.
217
 
218
- #: s2member/includes/classes/files-in.inc.php:849
219
  msgctxt "s2member-admin"
220
  msgid "Unable to update existing Amazon® S3 ACLs. %s"
221
  msgstr ""
222
 
223
- #: s2member/includes/classes/files-in.inc.php:852
224
  msgctxt "s2member-admin"
225
  msgid "Unable to update existing Amazon® S3 ACLs. Connection failed."
226
  msgstr ""
@@ -229,14 +229,14 @@ msgstr ""
229
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
230
  #. exclude `%s` if you like.
231
 
232
- #: s2member/includes/classes/files-in.inc.php:856
233
- #: s2member/includes/classes/files-in.inc.php:1279
234
  msgctxt "s2member-admin"
235
  msgid "Unable to create Amazon® CloudFront Streaming Distro. %s"
236
  msgstr ""
237
 
238
- #: s2member/includes/classes/files-in.inc.php:859
239
- #: s2member/includes/classes/files-in.inc.php:1282
240
  msgctxt "s2member-admin"
241
  msgid "Unable to create Amazon® CloudFront Streaming Distro. Connection failed."
242
  msgstr ""
@@ -245,14 +245,14 @@ msgstr ""
245
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
246
  #. exclude `%s` if you like.
247
 
248
- #: s2member/includes/classes/files-in.inc.php:863
249
- #: s2member/includes/classes/files-in.inc.php:1256
250
  msgctxt "s2member-admin"
251
  msgid "Unable to create Amazon® CloudFront Downloads Distro. %s"
252
  msgstr ""
253
 
254
- #: s2member/includes/classes/files-in.inc.php:866
255
- #: s2member/includes/classes/files-in.inc.php:1259
256
  msgctxt "s2member-admin"
257
  msgid "Unable to create Amazon® CloudFront Downloads Distro. Connection failed."
258
  msgstr ""
@@ -261,19 +261,19 @@ msgstr ""
261
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
262
  #. exclude `%s` if you like.
263
 
264
- #: s2member/includes/classes/files-in.inc.php:870
265
- #: s2member/includes/classes/files-in.inc.php:1037
266
  msgctxt "s2member-admin"
267
  msgid "Unable to create Amazon® CloudFront Origin Access Identity. %s"
268
  msgstr ""
269
 
270
- #: s2member/includes/classes/files-in.inc.php:873
271
- #: s2member/includes/classes/files-in.inc.php:1040
272
  msgctxt "s2member-admin"
273
  msgid "Unable to create Amazon® CloudFront Origin Access Identity. Connection failed."
274
  msgstr ""
275
 
276
- #: s2member/includes/classes/files-in.inc.php:876
277
  msgctxt "s2member-admin"
278
  msgid "Unable to clear existing Amazon® CloudFront Origin Access Identity."
279
  msgstr ""
@@ -282,19 +282,19 @@ msgstr ""
282
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
283
  #. exclude `%s` if you like.
284
 
285
- #: s2member/includes/classes/files-in.inc.php:880
286
- #: s2member/includes/classes/files-in.inc.php:949
287
  msgctxt "s2member-admin"
288
  msgid "Unable to acquire existing Amazon® CloudFront Origin Access Identity. %s"
289
  msgstr ""
290
 
291
- #: s2member/includes/classes/files-in.inc.php:883
292
- #: s2member/includes/classes/files-in.inc.php:952
293
  msgctxt "s2member-admin"
294
  msgid "Unable to acquire existing Amazon® CloudFront Origin Access Identity. Connection failed."
295
  msgstr ""
296
 
297
- #: s2member/includes/classes/files-in.inc.php:886
298
  msgctxt "s2member-admin"
299
  msgid "Unable to clear existing Amazon® CloudFront Streaming Distro."
300
  msgstr ""
@@ -303,17 +303,17 @@ msgstr ""
303
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
304
  #. exclude `%s` if you like.
305
 
306
- #: s2member/includes/classes/files-in.inc.php:890
307
  msgctxt "s2member-admin"
308
  msgid "Unable to acquire existing Amazon® CloudFront Streaming Distro. %s"
309
  msgstr ""
310
 
311
- #: s2member/includes/classes/files-in.inc.php:893
312
  msgctxt "s2member-admin"
313
  msgid "Unable to acquire existing Amazon® CloudFront Streaming Distro. Connection failed."
314
  msgstr ""
315
 
316
- #: s2member/includes/classes/files-in.inc.php:896
317
  msgctxt "s2member-admin"
318
  msgid "Unable to clear existing Amazon® CloudFront Downloads Distro."
319
  msgstr ""
@@ -322,22 +322,22 @@ msgstr ""
322
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
323
  #. exclude `%s` if you like.
324
 
325
- #: s2member/includes/classes/files-in.inc.php:900
326
  msgctxt "s2member-admin"
327
  msgid "Unable to acquire existing Amazon® CloudFront Downloads Distro. %s"
328
  msgstr ""
329
 
330
- #: s2member/includes/classes/files-in.inc.php:903
331
  msgctxt "s2member-admin"
332
  msgid "Unable to acquire existing Amazon® CloudFront Downloads Distro. Connection failed."
333
  msgstr ""
334
 
335
- #: s2member/includes/classes/files-in.inc.php:906
336
  msgctxt "s2member-admin"
337
  msgid "Unable to auto-configure Amazon® CloudFront Distros. Incomplete Amazon® CloudFront configuration options. Missing of one: Amazon® CloudFront Private Key-Pair-ID, or Private Key file contents."
338
  msgstr ""
339
 
340
- #: s2member/includes/classes/files-in.inc.php:909
341
  msgctxt "s2member-admin"
342
  msgid "Unable to auto-configure Amazon® S3/CloudFront Distros. Incomplete Amazon® S3 configuration options. Missing one of: Amazon® S3 Bucket, Access Key, or Secret Key. You must provide s2Member with an Amazon® S3 configuration before enabling CloudFront."
343
  msgstr ""
@@ -346,34 +346,34 @@ msgstr ""
346
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
347
  #. exclude `%s` if you like.
348
 
349
- #: s2member/includes/classes/files-in.inc.php:945
350
  msgctxt "s2member-admin"
351
  msgid "Existing Amazon® CloudFront Origin Access Identity NOT found. %s"
352
  msgstr ""
353
 
354
- #: s2member/includes/classes/files-in.inc.php:955
355
  msgctxt "s2member-admin"
356
  msgid "Unable to acquire existing Amazon® CloudFront Origin Access Identity. Invalid Access ID."
357
  msgstr ""
358
 
359
- #: s2member/includes/classes/files-in.inc.php:995
360
  msgctxt "s2member-admin"
361
  msgid "Unable to delete existing Amazon® CloudFront Origin Access Identity. Connection failed."
362
  msgstr ""
363
 
364
- #: s2member/includes/classes/files-in.inc.php:998
365
  msgctxt "s2member-admin"
366
  msgid "Unable to delete existing Amazon® CloudFront Origin Access Identity. Invalid Access ID, ETag, or XML config."
367
  msgstr ""
368
 
369
- #: s2member/includes/classes/files-in.inc.php:1024
370
- #: s2member/includes/classes/files-in.inc.php:1243
371
- #: s2member/includes/classes/files-in.inc.php:1266
372
  msgctxt "s2member-admin"
373
  msgid "Created by s2Member, for S3 Bucket: %s."
374
  msgstr ""
375
 
376
- #: s2member/includes/classes/files-in.inc.php:1033
377
  msgctxt "s2member-admin"
378
  msgid "Unable to create/read Amazon® CloudFront Origin Access Identity. Unexpected response."
379
  msgstr ""
@@ -382,7 +382,7 @@ msgstr ""
382
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
383
  #. exclude `%s` if you like.
384
 
385
- #: s2member/includes/classes/files-in.inc.php:1077
386
  msgctxt "s2member-admin"
387
  msgid "Existing Amazon® CloudFront Distro NOT found. %s"
388
  msgstr ""
@@ -391,17 +391,17 @@ msgstr ""
391
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
392
  #. exclude `%s` if you like.
393
 
394
- #: s2member/includes/classes/files-in.inc.php:1081
395
  msgctxt "s2member-admin"
396
  msgid "Unable to acquire existing Amazon® CloudFront Distro. %s"
397
  msgstr ""
398
 
399
- #: s2member/includes/classes/files-in.inc.php:1084
400
  msgctxt "s2member-admin"
401
  msgid "Unable to acquire existing Amazon® CloudFront Distro. Connection failed."
402
  msgstr ""
403
 
404
- #: s2member/includes/classes/files-in.inc.php:1087
405
  msgctxt "s2member-admin"
406
  msgid "Unable to acquire existing Amazon® CloudFront Distro. Invalid Distro ID and/or Distro type."
407
  msgstr ""
@@ -410,24 +410,24 @@ msgstr ""
410
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
411
  #. exclude `%s` if you like.
412
 
413
- #: s2member/includes/classes/files-in.inc.php:1129
414
- #: s2member/includes/classes/files-in.inc.php:1202
415
  msgctxt "s2member-admin"
416
  msgid "Unable to disable existing Amazon® CloudFront Distro. %s"
417
  msgstr ""
418
 
419
- #: s2member/includes/classes/files-in.inc.php:1132
420
- #: s2member/includes/classes/files-in.inc.php:1205
421
  msgctxt "s2member-admin"
422
  msgid "Unable to disable existing Amazon® CloudFront Distro. Connection failed."
423
  msgstr ""
424
 
425
- #: s2member/includes/classes/files-in.inc.php:1135
426
  msgctxt "s2member-admin"
427
  msgid "Existing Amazon® CloudFront Distro cannot be disabled at this time. Still in a `pending` state. Please wait 15 minutes, then try again. There is a certain process that s2Member must strictly adhere to when re-configuring your Amazon® CloudFront Distros. You may have to tick the auto-configure checkbox again, and re-run s2Member's auto-configuration routine many times, because s2Member will likely run into several `pending` challenges, as it works to completely re-configure your Amazon® CloudFront Distros for you. Thanks for your patience. Please wait 15 minutes, then try again."
428
  msgstr ""
429
 
430
- #: s2member/includes/classes/files-in.inc.php:1141
431
  msgctxt "s2member-admin"
432
  msgid "Unable to disable existing Amazon® CloudFront Distro. Invalid Distro ID, ETag, or XML config."
433
  msgstr ""
@@ -436,12 +436,12 @@ msgstr ""
436
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
437
  #. exclude `%s` if you like.
438
 
439
- #: s2member/includes/classes/files-in.inc.php:1184
440
  msgctxt "s2member-admin"
441
  msgid "Unable to delete existing Amazon® CloudFront Distro. %s"
442
  msgstr ""
443
 
444
- #: s2member/includes/classes/files-in.inc.php:1187
445
  msgctxt "s2member-admin"
446
  msgid "Unable to delete existing Amazon® CloudFront Distro. Connection failed."
447
  msgstr ""
@@ -450,7 +450,7 @@ msgstr ""
450
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
451
  #. exclude `%s` if you like.
452
 
453
- #: s2member/includes/classes/files-in.inc.php:1191
454
  msgctxt "s2member-admin"
455
  msgid "Existing Amazon® CloudFront Distro cannot be deleted at this time. Still in a `pending` state after having been disabled by s2Member. Please wait 15 minutes, then try again. There is a certain process that s2Member must strictly adhere to when re-configuring your Amazon® CloudFront Distros. You may have to tick the auto-configure checkbox again, and re-run s2Member's auto-configuration routine many times, because s2Member will likely run into several `pending` challenges, as it works to completely re-configure your Amazon® CloudFront Distros for you. Thanks for your patience. Please wait 15 minutes, then try again."
456
  msgstr ""
@@ -459,37 +459,37 @@ msgstr ""
459
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
460
  #. exclude `%s` if you like.
461
 
462
- #: s2member/includes/classes/files-in.inc.php:1195
463
  msgctxt "s2member-admin"
464
  msgid "Unable to check status of existing Amazon® CloudFront Distro. %s"
465
  msgstr ""
466
 
467
- #: s2member/includes/classes/files-in.inc.php:1198
468
  msgctxt "s2member-admin"
469
  msgid "Unable to check status of existing Amazon® CloudFront Distro. Connection failed."
470
  msgstr ""
471
 
472
- #: s2member/includes/classes/files-in.inc.php:1208
473
  msgctxt "s2member-admin"
474
  msgid "Existing Amazon® CloudFront Distro cannot be deleted at this time. Still in a `pending` state. Please wait 15 minutes, then try again. There is a certain process that s2Member must strictly adhere to when re-configuring your Amazon® CloudFront Distros. You may have to tick the auto-configure checkbox again, and re-run s2Member's auto-configuration routine many times, because s2Member will likely run into several `pending` challenges, as it works to completely re-configure your Amazon® CloudFront Distros for you. Thanks for your patience. Please wait 15 minutes, then try again."
475
  msgstr ""
476
 
477
- #: s2member/includes/classes/files-in.inc.php:1211
478
  msgctxt "s2member-admin"
479
  msgid "Unable to delete existing Amazon® CloudFront Distro. Invalid Distro ID or ETag."
480
  msgstr ""
481
 
482
- #: s2member/includes/classes/files-in.inc.php:1252
483
  msgctxt "s2member-admin"
484
  msgid "Unable to create/read Amazon® CloudFront Downloads Distro. Unexpected response."
485
  msgstr ""
486
 
487
- #: s2member/includes/classes/files-in.inc.php:1275
488
  msgctxt "s2member-admin"
489
  msgid "Unable to create/read Amazon® CloudFront Streaming Distro. Unexpected response."
490
  msgstr ""
491
 
492
- #: s2member/includes/classes/files-in.inc.php:1286
493
  msgctxt "s2member-admin"
494
  msgid "Unable to create Amazon® CloudFront Distro. Invalid Distro type."
495
  msgstr ""
@@ -2466,8 +2466,8 @@ msgstr ""
2466
  #: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:580
2467
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:294
2468
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:617
2469
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:338
2470
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:671
2471
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:425
2472
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:853
2473
  msgctxt "s2member-front"
@@ -2478,8 +2478,8 @@ msgstr ""
2478
  #: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:696
2479
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:456
2480
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:769
2481
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:510
2482
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:823
2483
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:687
2484
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1005
2485
  msgctxt "s2member-front"
@@ -2496,10 +2496,10 @@ msgstr ""
2496
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:486
2497
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:778
2498
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:799
2499
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:519
2500
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:540
2501
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:832
2502
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:853
2503
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:696
2504
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:717
2505
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1014
@@ -2514,8 +2514,8 @@ msgstr ""
2514
  #: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:717
2515
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:477
2516
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:790
2517
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:531
2518
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:844
2519
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:708
2520
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1026
2521
  msgctxt "s2member-front"
@@ -2524,7 +2524,7 @@ msgstr ""
2524
 
2525
  #: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:737
2526
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:810
2527
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:864
2528
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1046
2529
  #: s2member-pro/includes/classes/gateways/paypal/paypal-update-pf-in.inc.php:138
2530
  msgctxt "s2member-front"
@@ -3595,8 +3595,8 @@ msgstr ""
3595
 
3596
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:306
3597
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:629
3598
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:350
3599
- #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:683
3600
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:442
3601
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:865
3602
  msgctxt "s2member-front"
@@ -3707,7 +3707,7 @@ msgstr ""
3707
 
3708
  #: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:526
3709
  msgctxt "s2member-admin"
3710
- msgid "Invalid Payflow® form configuration. Invalid \"rt, rp, rr\" attributes. Payflow® supports a specific set of recurring intervals. Pro Forms can be configured to charge: weekly, bi-weekly, monthly, quarterly, or yearly. Any other combination results in this error. This is a Payflow® limitation. Note that Payflow® does NOT support daily and/or bi-monthly billing."
3711
  msgstr ""
3712
 
3713
  #: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:583
4
  msgstr ""
5
  "Project-Id-Version: s2Member® Framework 121213\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/___s2member\n"
7
+ "POT-Creation-Date: 2013-01-17 00:57: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"
92
  msgid "<strong>503: Basic File Downloads are NOT enabled yet.</strong> Please contact Support for assistance. If you are the site owner, please configure: <code>s2Member -> Download Options -> Basic Download Restrictions</code>."
93
  msgstr ""
94
 
95
+ #: s2member/includes/classes/files-in.inc.php:475
96
  msgctxt "s2member-front"
97
  msgid "<strong>503: Access denied.</strong> Invalid File Download specs."
98
  msgstr ""
99
 
100
+ #: s2member/includes/classes/files-in.inc.php:561
101
  msgctxt "s2member-front"
102
  msgid "Members Only"
103
  msgstr ""
104
 
105
+ #: s2member/includes/classes/files-in.inc.php:567
106
  msgctxt "s2member-front"
107
  msgid "<strong>401:</strong> Sorry, access denied."
108
  msgstr ""
111
  #. message, which comes from the Amazon® S3 API call. Feel free to exclude
112
  #. `%s` if you like.
113
 
114
+ #: s2member/includes/classes/files-in.inc.php:705
115
  msgctxt "s2member-admin"
116
  msgid "Unable to update existing Amazon® S3 Cross-Domain Policy. %s"
117
  msgstr ""
118
 
119
+ #: s2member/includes/classes/files-in.inc.php:708
120
  msgctxt "s2member-admin"
121
  msgid "Unable to update existing Amazon® S3 Cross-Domain Policy. Connection failed."
122
  msgstr ""
125
  #. message, which comes from the Amazon® S3 API call. Feel free to exclude
126
  #. `%s` if you like.
127
 
128
+ #: s2member/includes/classes/files-in.inc.php:712
129
  msgctxt "s2member-admin"
130
  msgid "Unable to update existing Amazon® S3 Bucket Policy. %s"
131
  msgstr ""
132
 
133
+ #: s2member/includes/classes/files-in.inc.php:715
134
  msgctxt "s2member-admin"
135
  msgid "Unable to update existing Amazon® S3 Bucket Policy. Connection failed."
136
  msgstr ""
139
  #. message, which comes from the Amazon® S3 API call. Feel free to exclude
140
  #. `%s` if you like.
141
 
142
+ #: s2member/includes/classes/files-in.inc.php:719
143
  msgctxt "s2member-admin"
144
  msgid "Unable to update existing Amazon® S3 Bucket ACLs. %s"
145
  msgstr ""
146
 
147
+ #: s2member/includes/classes/files-in.inc.php:722
148
  msgctxt "s2member-admin"
149
  msgid "Unable to update existing Amazon® S3 Bucket ACLs. Connection failed."
150
  msgstr ""
151
 
152
+ #: s2member/includes/classes/files-in.inc.php:725
153
  msgctxt "s2member-admin"
154
  msgid "Unable to acquire/read existing Amazon® S3 Bucket ACLs. Unexpected response."
155
  msgstr ""
158
  #. message, which comes from the Amazon® S3 API call. Feel free to exclude
159
  #. `%s` if you like.
160
 
161
+ #: s2member/includes/classes/files-in.inc.php:729
162
  msgctxt "s2member-admin"
163
  msgid "Unable to acquire existing Amazon® S3 Bucket ACLs. %s"
164
  msgstr ""
165
 
166
+ #: s2member/includes/classes/files-in.inc.php:732
167
  msgctxt "s2member-admin"
168
  msgid "Unable to acquire existing Amazon® S3 Bucket ACLs. Connection failed."
169
  msgstr ""
170
 
171
+ #: s2member/includes/classes/files-in.inc.php:735
172
  msgctxt "s2member-admin"
173
  msgid "Unable to auto-configure existing Amazon® S3 Bucket ACLs. Incomplete Amazon® S3 configuration options. Missing one of: Amazon® S3 Bucket, Access Key, or Secret Key."
174
  msgstr ""
175
 
176
+ #: s2member/includes/classes/files-in.inc.php:837
177
  msgctxt "s2member-admin"
178
  msgid "Unable to delete existing Amazon® CloudFront Downloads Distro. Still in a `pending` state. Please wait 15 minutes, then try again. There is a certain process that s2Member must strictly adhere to when re-configuring your Amazon® CloudFront Distros. You may have to tick the auto-configure checkbox again, and re-run s2Member's auto-configuration routine many times, because s2Member will likely run into several `pending` challenges, as it works to completely re-configure your Amazon® CloudFront Distros for you. Thanks for your patience. Please wait 15 minutes, then try again."
179
  msgstr ""
182
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
183
  #. exclude `%s` if you like.
184
 
185
+ #: s2member/includes/classes/files-in.inc.php:844
186
  msgctxt "s2member-admin"
187
  msgid "Unable to delete existing Amazon® CloudFront Downloads Distro. %s"
188
  msgstr ""
189
 
190
+ #: s2member/includes/classes/files-in.inc.php:856
191
  msgctxt "s2member-admin"
192
  msgid "Unable to delete existing Amazon® CloudFront Streaming Distro. Still in a `pending` state. Please wait 15 minutes, then try again. There is a certain process that s2Member must strictly adhere to when re-configuring your Amazon® CloudFront Distros. You may have to tick the auto-configure checkbox again, and re-run s2Member's auto-configuration routine many times, because s2Member will likely run into several `pending` challenges, as it works to completely re-configure your Amazon® CloudFront Distros for you. Thanks for your patience. Please wait 15 minutes, then try again."
193
  msgstr ""
196
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
197
  #. exclude `%s` if you like.
198
 
199
+ #: s2member/includes/classes/files-in.inc.php:863
200
  msgctxt "s2member-admin"
201
  msgid "Unable to delete existing Amazon® CloudFront Streaming Distro. %s"
202
  msgstr ""
205
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
206
  #. exclude `%s` if you like.
207
 
208
+ #: s2member/includes/classes/files-in.inc.php:879
209
+ #: s2member/includes/classes/files-in.inc.php:1063
210
  msgctxt "s2member-admin"
211
  msgid "Unable to delete existing Amazon® CloudFront Origin Access Identity. %s"
212
  msgstr ""
215
  #. message, which comes from the Amazon® S3 API call. Feel free to exclude
216
  #. `%s` if you like.
217
 
218
+ #: s2member/includes/classes/files-in.inc.php:920
219
  msgctxt "s2member-admin"
220
  msgid "Unable to update existing Amazon® S3 ACLs. %s"
221
  msgstr ""
222
 
223
+ #: s2member/includes/classes/files-in.inc.php:923
224
  msgctxt "s2member-admin"
225
  msgid "Unable to update existing Amazon® S3 ACLs. Connection failed."
226
  msgstr ""
229
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
230
  #. exclude `%s` if you like.
231
 
232
+ #: s2member/includes/classes/files-in.inc.php:927
233
+ #: s2member/includes/classes/files-in.inc.php:1350
234
  msgctxt "s2member-admin"
235
  msgid "Unable to create Amazon® CloudFront Streaming Distro. %s"
236
  msgstr ""
237
 
238
+ #: s2member/includes/classes/files-in.inc.php:930
239
+ #: s2member/includes/classes/files-in.inc.php:1353
240
  msgctxt "s2member-admin"
241
  msgid "Unable to create Amazon® CloudFront Streaming Distro. Connection failed."
242
  msgstr ""
245
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
246
  #. exclude `%s` if you like.
247
 
248
+ #: s2member/includes/classes/files-in.inc.php:934
249
+ #: s2member/includes/classes/files-in.inc.php:1327
250
  msgctxt "s2member-admin"
251
  msgid "Unable to create Amazon® CloudFront Downloads Distro. %s"
252
  msgstr ""
253
 
254
+ #: s2member/includes/classes/files-in.inc.php:937
255
+ #: s2member/includes/classes/files-in.inc.php:1330
256
  msgctxt "s2member-admin"
257
  msgid "Unable to create Amazon® CloudFront Downloads Distro. Connection failed."
258
  msgstr ""
261
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
262
  #. exclude `%s` if you like.
263
 
264
+ #: s2member/includes/classes/files-in.inc.php:941
265
+ #: s2member/includes/classes/files-in.inc.php:1108
266
  msgctxt "s2member-admin"
267
  msgid "Unable to create Amazon® CloudFront Origin Access Identity. %s"
268
  msgstr ""
269
 
270
+ #: s2member/includes/classes/files-in.inc.php:944
271
+ #: s2member/includes/classes/files-in.inc.php:1111
272
  msgctxt "s2member-admin"
273
  msgid "Unable to create Amazon® CloudFront Origin Access Identity. Connection failed."
274
  msgstr ""
275
 
276
+ #: s2member/includes/classes/files-in.inc.php:947
277
  msgctxt "s2member-admin"
278
  msgid "Unable to clear existing Amazon® CloudFront Origin Access Identity."
279
  msgstr ""
282
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
283
  #. exclude `%s` if you like.
284
 
285
+ #: s2member/includes/classes/files-in.inc.php:951
286
+ #: s2member/includes/classes/files-in.inc.php:1020
287
  msgctxt "s2member-admin"
288
  msgid "Unable to acquire existing Amazon® CloudFront Origin Access Identity. %s"
289
  msgstr ""
290
 
291
+ #: s2member/includes/classes/files-in.inc.php:954
292
+ #: s2member/includes/classes/files-in.inc.php:1023
293
  msgctxt "s2member-admin"
294
  msgid "Unable to acquire existing Amazon® CloudFront Origin Access Identity. Connection failed."
295
  msgstr ""
296
 
297
+ #: s2member/includes/classes/files-in.inc.php:957
298
  msgctxt "s2member-admin"
299
  msgid "Unable to clear existing Amazon® CloudFront Streaming Distro."
300
  msgstr ""
303
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
304
  #. exclude `%s` if you like.
305
 
306
+ #: s2member/includes/classes/files-in.inc.php:961
307
  msgctxt "s2member-admin"
308
  msgid "Unable to acquire existing Amazon® CloudFront Streaming Distro. %s"
309
  msgstr ""
310
 
311
+ #: s2member/includes/classes/files-in.inc.php:964
312
  msgctxt "s2member-admin"
313
  msgid "Unable to acquire existing Amazon® CloudFront Streaming Distro. Connection failed."
314
  msgstr ""
315
 
316
+ #: s2member/includes/classes/files-in.inc.php:967
317
  msgctxt "s2member-admin"
318
  msgid "Unable to clear existing Amazon® CloudFront Downloads Distro."
319
  msgstr ""
322
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
323
  #. exclude `%s` if you like.
324
 
325
+ #: s2member/includes/classes/files-in.inc.php:971
326
  msgctxt "s2member-admin"
327
  msgid "Unable to acquire existing Amazon® CloudFront Downloads Distro. %s"
328
  msgstr ""
329
 
330
+ #: s2member/includes/classes/files-in.inc.php:974
331
  msgctxt "s2member-admin"
332
  msgid "Unable to acquire existing Amazon® CloudFront Downloads Distro. Connection failed."
333
  msgstr ""
334
 
335
+ #: s2member/includes/classes/files-in.inc.php:977
336
  msgctxt "s2member-admin"
337
  msgid "Unable to auto-configure Amazon® CloudFront Distros. Incomplete Amazon® CloudFront configuration options. Missing of one: Amazon® CloudFront Private Key-Pair-ID, or Private Key file contents."
338
  msgstr ""
339
 
340
+ #: s2member/includes/classes/files-in.inc.php:980
341
  msgctxt "s2member-admin"
342
  msgid "Unable to auto-configure Amazon® S3/CloudFront Distros. Incomplete Amazon® S3 configuration options. Missing one of: Amazon® S3 Bucket, Access Key, or Secret Key. You must provide s2Member with an Amazon® S3 configuration before enabling CloudFront."
343
  msgstr ""
346
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
347
  #. exclude `%s` if you like.
348
 
349
+ #: s2member/includes/classes/files-in.inc.php:1016
350
  msgctxt "s2member-admin"
351
  msgid "Existing Amazon® CloudFront Origin Access Identity NOT found. %s"
352
  msgstr ""
353
 
354
+ #: s2member/includes/classes/files-in.inc.php:1026
355
  msgctxt "s2member-admin"
356
  msgid "Unable to acquire existing Amazon® CloudFront Origin Access Identity. Invalid Access ID."
357
  msgstr ""
358
 
359
+ #: s2member/includes/classes/files-in.inc.php:1066
360
  msgctxt "s2member-admin"
361
  msgid "Unable to delete existing Amazon® CloudFront Origin Access Identity. Connection failed."
362
  msgstr ""
363
 
364
+ #: s2member/includes/classes/files-in.inc.php:1069
365
  msgctxt "s2member-admin"
366
  msgid "Unable to delete existing Amazon® CloudFront Origin Access Identity. Invalid Access ID, ETag, or XML config."
367
  msgstr ""
368
 
369
+ #: s2member/includes/classes/files-in.inc.php:1095
370
+ #: s2member/includes/classes/files-in.inc.php:1314
371
+ #: s2member/includes/classes/files-in.inc.php:1337
372
  msgctxt "s2member-admin"
373
  msgid "Created by s2Member, for S3 Bucket: %s."
374
  msgstr ""
375
 
376
+ #: s2member/includes/classes/files-in.inc.php:1104
377
  msgctxt "s2member-admin"
378
  msgid "Unable to create/read Amazon® CloudFront Origin Access Identity. Unexpected response."
379
  msgstr ""
382
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
383
  #. exclude `%s` if you like.
384
 
385
+ #: s2member/includes/classes/files-in.inc.php:1148
386
  msgctxt "s2member-admin"
387
  msgid "Existing Amazon® CloudFront Distro NOT found. %s"
388
  msgstr ""
391
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
392
  #. exclude `%s` if you like.
393
 
394
+ #: s2member/includes/classes/files-in.inc.php:1152
395
  msgctxt "s2member-admin"
396
  msgid "Unable to acquire existing Amazon® CloudFront Distro. %s"
397
  msgstr ""
398
 
399
+ #: s2member/includes/classes/files-in.inc.php:1155
400
  msgctxt "s2member-admin"
401
  msgid "Unable to acquire existing Amazon® CloudFront Distro. Connection failed."
402
  msgstr ""
403
 
404
+ #: s2member/includes/classes/files-in.inc.php:1158
405
  msgctxt "s2member-admin"
406
  msgid "Unable to acquire existing Amazon® CloudFront Distro. Invalid Distro ID and/or Distro type."
407
  msgstr ""
410
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
411
  #. exclude `%s` if you like.
412
 
413
+ #: s2member/includes/classes/files-in.inc.php:1200
414
+ #: s2member/includes/classes/files-in.inc.php:1273
415
  msgctxt "s2member-admin"
416
  msgid "Unable to disable existing Amazon® CloudFront Distro. %s"
417
  msgstr ""
418
 
419
+ #: s2member/includes/classes/files-in.inc.php:1203
420
+ #: s2member/includes/classes/files-in.inc.php:1276
421
  msgctxt "s2member-admin"
422
  msgid "Unable to disable existing Amazon® CloudFront Distro. Connection failed."
423
  msgstr ""
424
 
425
+ #: s2member/includes/classes/files-in.inc.php:1206
426
  msgctxt "s2member-admin"
427
  msgid "Existing Amazon® CloudFront Distro cannot be disabled at this time. Still in a `pending` state. Please wait 15 minutes, then try again. There is a certain process that s2Member must strictly adhere to when re-configuring your Amazon® CloudFront Distros. You may have to tick the auto-configure checkbox again, and re-run s2Member's auto-configuration routine many times, because s2Member will likely run into several `pending` challenges, as it works to completely re-configure your Amazon® CloudFront Distros for you. Thanks for your patience. Please wait 15 minutes, then try again."
428
  msgstr ""
429
 
430
+ #: s2member/includes/classes/files-in.inc.php:1212
431
  msgctxt "s2member-admin"
432
  msgid "Unable to disable existing Amazon® CloudFront Distro. Invalid Distro ID, ETag, or XML config."
433
  msgstr ""
436
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
437
  #. exclude `%s` if you like.
438
 
439
+ #: s2member/includes/classes/files-in.inc.php:1255
440
  msgctxt "s2member-admin"
441
  msgid "Unable to delete existing Amazon® CloudFront Distro. %s"
442
  msgstr ""
443
 
444
+ #: s2member/includes/classes/files-in.inc.php:1258
445
  msgctxt "s2member-admin"
446
  msgid "Unable to delete existing Amazon® CloudFront Distro. Connection failed."
447
  msgstr ""
450
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
451
  #. exclude `%s` if you like.
452
 
453
+ #: s2member/includes/classes/files-in.inc.php:1262
454
  msgctxt "s2member-admin"
455
  msgid "Existing Amazon® CloudFront Distro cannot be deleted at this time. Still in a `pending` state after having been disabled by s2Member. Please wait 15 minutes, then try again. There is a certain process that s2Member must strictly adhere to when re-configuring your Amazon® CloudFront Distros. You may have to tick the auto-configure checkbox again, and re-run s2Member's auto-configuration routine many times, because s2Member will likely run into several `pending` challenges, as it works to completely re-configure your Amazon® CloudFront Distros for you. Thanks for your patience. Please wait 15 minutes, then try again."
456
  msgstr ""
459
  #. message, which comes from the Amazon® CloudFront API call. Feel free to
460
  #. exclude `%s` if you like.
461
 
462
+ #: s2member/includes/classes/files-in.inc.php:1266
463
  msgctxt "s2member-admin"
464
  msgid "Unable to check status of existing Amazon® CloudFront Distro. %s"
465
  msgstr ""
466
 
467
+ #: s2member/includes/classes/files-in.inc.php:1269
468
  msgctxt "s2member-admin"
469
  msgid "Unable to check status of existing Amazon® CloudFront Distro. Connection failed."
470
  msgstr ""
471
 
472
+ #: s2member/includes/classes/files-in.inc.php:1279
473
  msgctxt "s2member-admin"
474
  msgid "Existing Amazon® CloudFront Distro cannot be deleted at this time. Still in a `pending` state. Please wait 15 minutes, then try again. There is a certain process that s2Member must strictly adhere to when re-configuring your Amazon® CloudFront Distros. You may have to tick the auto-configure checkbox again, and re-run s2Member's auto-configuration routine many times, because s2Member will likely run into several `pending` challenges, as it works to completely re-configure your Amazon® CloudFront Distros for you. Thanks for your patience. Please wait 15 minutes, then try again."
475
  msgstr ""
476
 
477
+ #: s2member/includes/classes/files-in.inc.php:1282
478
  msgctxt "s2member-admin"
479
  msgid "Unable to delete existing Amazon® CloudFront Distro. Invalid Distro ID or ETag."
480
  msgstr ""
481
 
482
+ #: s2member/includes/classes/files-in.inc.php:1323
483
  msgctxt "s2member-admin"
484
  msgid "Unable to create/read Amazon® CloudFront Downloads Distro. Unexpected response."
485
  msgstr ""
486
 
487
+ #: s2member/includes/classes/files-in.inc.php:1346
488
  msgctxt "s2member-admin"
489
  msgid "Unable to create/read Amazon® CloudFront Streaming Distro. Unexpected response."
490
  msgstr ""
491
 
492
+ #: s2member/includes/classes/files-in.inc.php:1357
493
  msgctxt "s2member-admin"
494
  msgid "Unable to create Amazon® CloudFront Distro. Invalid Distro type."
495
  msgstr ""
2466
  #: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:580
2467
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:294
2468
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:617
2469
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:339
2470
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:672
2471
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:425
2472
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:853
2473
  msgctxt "s2member-front"
2478
  #: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:696
2479
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:456
2480
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:769
2481
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:511
2482
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:824
2483
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:687
2484
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1005
2485
  msgctxt "s2member-front"
2496
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:486
2497
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:778
2498
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:799
2499
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:520
2500
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:541
2501
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:833
2502
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:854
2503
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:696
2504
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:717
2505
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1014
2514
  #: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:717
2515
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:477
2516
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:790
2517
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:532
2518
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:845
2519
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:708
2520
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1026
2521
  msgctxt "s2member-front"
2524
 
2525
  #: s2member-pro/includes/classes/gateways/authnet/authnet-checkout-in.inc.php:737
2526
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:810
2527
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:865
2528
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:1046
2529
  #: s2member-pro/includes/classes/gateways/paypal/paypal-update-pf-in.inc.php:138
2530
  msgctxt "s2member-front"
3595
 
3596
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:306
3597
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-in.inc.php:629
3598
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:351
3599
+ #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-pf-in.inc.php:684
3600
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:442
3601
  #: s2member-pro/includes/classes/gateways/paypal/paypal-checkout-rdp-in.inc.php:865
3602
  msgctxt "s2member-front"
3707
 
3708
  #: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:526
3709
  msgctxt "s2member-admin"
3710
+ msgid "Invalid Payflow® form configuration. Invalid \"rt, rp, rr\" attributes. Payflow® supports a specific set of recurring intervals. Pro Forms can be configured to charge: weekly, bi-weekly, monthly, quarterly, every six months, or yearly. Any other combination results in this error. This is a Payflow® limitation. Note that Payflow® does NOT support daily and/or bi-monthly billing."
3711
  msgstr ""
3712
 
3713
  #: s2member-pro/includes/classes/gateways/paypal/paypal-responses.inc.php:583
readme.txt CHANGED
@@ -1,7 +1,7 @@
1
  === s2Member® Framework (Member Roles, Capabilities, Membership, PayPal Members) ===
2
 
3
- Version: 121213
4
- Stable tag: 121213
5
 
6
  SSL Compatible: yes
7
  bbPress® Compatible: yes
@@ -16,7 +16,7 @@ Authorize.Net® Compatible: yes w/s2Member® Pro
16
  Google® Checkout Compatible: yes w/s2Member® Pro
17
  ClickBank® Compatible: yes w/s2Member® Pro
18
 
19
- Tested up to: 3.5
20
  Requires at least: 3.2
21
 
22
  Copyright: © 2009 WebSharks, Inc.
@@ -91,11 +91,18 @@ Please see [this FAQ entry](http://www.s2member.com/faqs/#s2-faqs-translations)
91
 
92
  == Upgrade Notice ==
93
 
94
- = v121213 =
95
  Maintenance release. Upgrade immediately.
96
 
97
  == Changelog ==
98
 
 
 
 
 
 
 
 
99
  = v121213 =
100
  * **(Maintenance Release) Upgrade immediately.**
101
  * **Updated for compatibility with WordPress® v3.5. Backward compatibility remains for previous versions of WordPress®, as far back as WordPress® v3.2.**
@@ -207,212 +214,6 @@ Maintenance release. Upgrade immediately.
207
  * (s2Member) **New website.** A new website has been launched for s2Member. Please see: [s2Member.com](http://www.s2member.com/)
208
  * **Coming soon.** Work continues on the next generation of s2Member®.
209
 
210
- = v111220 =
211
- * (s2Member Pro) **Security fix**. PayPal® Pro and Authorize.Net® Forms were vulnerable to an XSS attack, reproducible with a Coupon Code containing special characters. Discovered by ControlScan™. Fixed in this release. For further details, please see [this thread](http://www.primothemes.com/forums/viewtopic.php?f=4&t=16173#p56982).
212
- * (s2Member Pro) **Security hardening**. s2Member's Systematics routine hardended against a possible attack coming from a spoofed IP address matching that of the installation server itself. For further details, please see [this thread](http://www.primothemes.com/forums/viewtopic.php?f=4&t=16412&p=57044#p57044).
213
- * (s2Member Pro) **Security hardening**. PayPal® Pro and Authorize.Net® Forms hardended against a possible attack against card types. Discovered by ControlScan™. For further details, please see [this thread](http://www.primothemes.com/forums/viewtopic.php?f=4&t=16173#p56982).
214
-
215
- = v111216 =
216
- * (s2Member/s2Member Pro) **Bug fix**. ClickBank® not passing all s2 Vars after return from a non-recurring transaction. Fixed in this release. For further details, please see [this thread](http://www.primothemes.com/forums/viewtopic.php?f=4&t=16256#p56649).
217
- * (s2Member) **Bug fix**. Amazon® S3/CloudFront issues with ACLs upon auto-configuration routine. Leading to a 400 error code. Fixed in this release. For further details, please see [this thread](http://www.primothemes.com/forums/viewtopic.php?f=4&t=15853&p=56158#p56159).
218
- * (s2Member/s2Member Pro) **WordPress® v3.3 / v3.4**. Updates for compatibility with WordPress® v3.3, and initial compatibility scans against WordPress® v3.4-alpha. Everything looks good. This release of s2Member also remains compatible with the WordPress® v3.2.x series.
219
-
220
- = v111206 =
221
- * (s2Member/s2Member Pro) **WordPress® v3.3**. Updates for compatibility with WordPress® v3.3. This release of s2Member also remains compatible with the WordPress® v3.2.x series.
222
- * (s2Member/s2Member Pro) **Bug fix**. An important bug was identified in s2Member's handling of certain EOT events associated with Subscr. Modifications *( under the right scenario )*. Fixed in this release.
223
- * (s2Member Pro) **reCAPTCHA™ bug fix**. An issue with reCAPTCHA™ public/private keys, on s2Member Pro Forms *( particularly on Free Registration Forms )*, which was related to some data loss suffered by Google's reCAPTCHA™ service; has been resolved in this release. In addition, a new UI panel has been introduced, allowing site owners to use their own public/private keys associated with reCAPTCHA™; if they so choose. This is optional however. For further details, please check your Dashboard here: `s2Member -> General Options -> CAPTCHA Anti-Spam Security`. Requires s2Member® Pro.
224
- * (s2Member/s2Member Pro) **Security hardening**. Additional security checksums have been added to s2Member's utility encryption methods to make these routines even more secure.
225
- * (s2Member/s2Member Pro) **Security hardening**. Additional security protocols have been added to s2Member's core PayPal® processors to make these routines even more secure.
226
- * (s2Member Pro) **Deprecated feature**. For s2Member Pro Forms with Custom Return URLs on success, the `%%response%%` Replacement Code within URLs is now deprecated, in favor of the new `%%s_response%%`. For further details, please check your Dashboard here: `s2Member -> PayPal/Authorize.Net Pro Forms -> Custom Return URLs On Success -> Replacement Codes`.
227
- * (s2Member/s2Member Pro) **Security fix**. A security vulnerability related to unsigned URLs leading to checkout pages for ccBill®, ClickBank® and Google® Checkout, has been addressed in this release. For further details, please see [this thread](http://www.primothemes.com/forums/viewtopic.php?f=4&t=15232&p=41707#p41707).
228
-
229
- = v111105 =
230
- * (s2Member Pro) **New feature**. It is now possible to configure Coupon Codes that are ONLY valid on specific Pages/Posts which may hold one of your s2Member Pro Forms. For further details, please check the examples in your Dashboard, here: `s2Member -> Pro Coupon Codes`.
231
- * (s2Member Pro) **New feature**. Affiliate Coupon Codes make it possible for your affiliates to receive credit for sales they refer, using one of your Coupon Codes. Here's how it works. You tell your affiliates about one or more of the Coupon Codes that you accept. Each of your affiliates can add their affiliate ID onto the end of any valid Coupon Code, like this: `COUPON-CODE-A:123`; where `COUPON-CODE` is the valid Coupon Code that you've configured, and `123` is the affiliate's ID. If a Customer comes to your site, and they use a Coupon Code with an affiliate ID on the end of it; your affiliate will be tracked automatically by s2Member. If this Customer actually completes the sale, the referring affiliate will be credited with whatever commission your affiliate program offers. For further details, please check the examples in your Dashboard, here: `s2Member -> Pro Coupon Codes -> Affiliate Coupon Codes`.
232
- * (s2Member/s2Member Pro) **New feature**. It is now possible to protect `all` Posts, but only of a specific Post Type. For further details, please check your Dashboard, under: `s2Member -> Restriction Options -> Post Level Access Restrictions`.
233
- * (s2Member Pro) **Improvement**. The s2Member Pro Login Widget now has improved handling of its `%%previous%%` Replacement Code for login redirections. For further details, please see [this thread](http://www.primothemes.com/forums/viewtopic.php?f=4&t=15522&p=48448#p48515).
234
- * (s2Member/s2Member Pro) **MOP Vars improved**. s2Member MOP Vars ( Membership Options Page Variables ), have been improved in this release. For further details, please check your Dashboard, under: `s2Member -> API / Scripting -> Membership Options Page (Variables)`.
235
- * (s2Member/s2Member Pro) **bbPress®**. Dropped legacy support for bbPress® stand-alone version. s2Member still supports the WordPress® plugin version of bbPress® v2.0+. However, from this version forward, we will no longer support the legacy s2Member Bridge to the stand-alone version of bbPress®. If you've already installed the s2Member Bridge for the stand-alone version of bbPress®, using a previous release of s2Member, your s2Member Bridge plugin should continue to work. However, the s2Member bbPress® Bridge is no longer included with s2Member, and we will not support the stand-alone version of bbPress® from this point forward.
236
- * (s2Member) **Bug fix**. s2Member function `c_ws_plugin__s2member_utils_gets::get_all_post_ids()` was not properly excluding Post Type `nav_menu_item`. Fixed in this release.
237
- * (s2Member) **Bug fix**. s2Member function `c_ws_plugin__s2member_utils_gets::get_all_child_category_ids()` was not including empty terms. Fixed in this release.
238
- * (s2Member) **Bug fix**. s2Member function `c_ws_plugin__s2member_utils_gets::get_all_tag_ids()` was not including empty terms. Fixed in this release.
239
- * (s2Member/s2Member Pro) **Routine maintenance**. Some code optimization, some cleanup, and some organizational improvements in preparation for new features in a coming release.
240
- * (s2Member/s2Member Pro) **WordPress® 3.3-beta2**. Compatibility updates for the coming release of WordPress® 3.3.
241
-
242
- = v111029 =
243
- * (s2Member Pro) **Compatibility**. s2Member Pro now supports automatic upgrades through filesystem methdologies, other than `direct`. For further details, please see [this thread](http://www.primothemes.com/forums/viewtopic.php?f=4&t=15283#p49034).
244
- * (s2Member) **Bug fix**. A bug in the s2Member framework was causing some IPNs with `txn_type = recurring_payment_suspended_due_to_max_failed_payment` to get bypassed inadvertently. Fixed in this release. For further details, please see [this thread](http://www.primothemes.com/forums/viewtopic.php?f=4&t=6204&p=48246#p48361).
245
- * (s2Member Pro) **Bug fix**. A bug in s2Member Pro's AliPay® integration was causing an error `could not find existing User ID`. Fixed in this release. For further details, please see [this thread](http://www.primothemes.com/forums/viewtopic.php?f=4&t=15569&p=49044#p48604).
246
- * (s2Member Pro) **Bug fix**. A bug in s2Member Pro's AliPay® integration was causing issues in duplicate IPNs received from AliPay®. Fixed in this release.
247
- * (s2Member/s2Member Pro) **Compatibility**. File Downloads. s2Member now considers server software environments before chunking file downloads, avoiding issues with partially corrupted files on some hosting platforms. In addition, s2Member is now capable of falling back on a flushed delivery method so it can continue to avoid memory issues on shared hosting accounts, even when `Transfer-Encoding: chunked` is not possible. These improvements allow s2Member to remain compatible in edge cases. Such as when running on Litespeed and/or Windows servers; or on shared hosting platforms that have fewer resources available.
248
- * (s2Member Pro) **Bug fix**. Automatic upgrader failing on `copy` command when running at HostGator. Fixed in this release.
249
- * (s2Member/s2Member Pro) **Security fix**. The `/s2member-files/` directory *(with newly updated Mod Rewrite rules in its .htaccess file)* was allowing directory indexing inadvertently, on some servers. This was a low-level vulnerability, because although directory indexing was possible, protected file access was not. Fixed in this release. For further details, please see [this thread](http://www.primothemes.com/forums/viewtopic.php?f=4&t=15665&p=48984&hilit=next+release#p48984).
250
- * (s2Member/s2Member Pro) **Bug fix**. A bug related to the `init()` Hook firing an early call to `c_ws_plugin__s2member_systematics::is_wp_systematic_use_page()` was identified. Fixed in this release. One symptom of this bug was for Users/Members to have trouble accessing a BuddyPress registration form after having paid for Membership, under the right scenario.
251
- * (s2Member/s2Member Pro) **New API Functions**. New API Functions: `s2member_shorten_url()`, `s2member_user_downloads()`, `s2member_total_downloads_of()`, and `s2member_total_unique_downloads_of()`. For further details, please check the [s2Member Codex](http://www.s2member.com/codex/stable/s2member/api_functions/package-summary/).
252
- * (s2Member/s2Member Pro) **Routine maintenance**. Some code optimization, some cleanup, and some organizational improvements in preparation for new features in a coming release.
253
- * (s2Member/s2Member Pro) **WordPress® 3.3-beta2**. Compatibility updates. CSS tweaks, JavaScript tweaks and other considerations for the coming release of WordPress® 3.3.
254
-
255
- = v111017 =
256
- * (s2Member/s2Member Pro) **Bug fix**. s2Member now works around a known bug in PHP, related to the `parse_url()` function. For further details, please see [this PHP bug report](https://bugs.php.net/bug.php?id=38143).
257
- * (s2Member/s2Member Pro) **Compatibility**. Improvements to s2Member's `wp_mail()` conformity, related to the reducton of `"Name" <email>` to just `email`. This release should work to further improve email deliverability in edge cases, particulary on sites running an SMTP mail plugin.
258
- * (s2Member/s2Member Pro) **Compatibility**. Improvements to s2Member's JW Player® integration. s2Member now prevents `unreserved chars`, i.e. `array ("-", ".", "_", "~")` from being URL-encoded in file download URLs, maximizing compatibility with many media players, including JW Player®. In previous releases, JW Player® would randomly fail on some RTMP streams with error `Stream Not Found`. Fixed in this release. For further details, see [RFC 3896](http://www.faqs.org/rfcs/rfc3986.html).
259
- * (s2Member/s2Member Pro) **Compatibility**. Initial testing against WordPress v3.3-beta1. Looks pretty good. A few minor cosmetic issues still need to be addressed in a future release of s2Member though.
260
- * (s2Member/s2Member Pro) **Compatibility**. Tested against BuddyPress v1.5.1. Updated s2Member to support `$bp->maintenance_mode`, and other cases where `bp_core_loaded` is NOT fired at all.
261
- * (s2Member/s2Member Pro) **Routine maintenance**. Some code optimization, some cleanup, and some organizational improvements in preparation for new features in a coming release.
262
- * (s2Member/s2Member Pro) **Bug fix**. Edge case identified where the `/s2member-o.php` file was failing to fallback on full WordPress®. Fixed in this release.
263
-
264
- = v111011 =
265
- * (s2Member/s2Member Pro) **Bug fix**. An array to string conversion error was found in Profile editing panels whenever a multi-option Select Menu was created as a Custom Registration/Profile Field with s2Member. Fixed in this release. For further details, please see [this thread](http://www.primothemes.com/forums/viewtopic.php?f=4&t=15416&p=44801#p45169).
266
- * (s2Member/s2Member Pro) **Email recipients / compatibility fix**. A bug found by an s2Member Pro customer, related to PHP's `mail()` function in PHP 5.2 < 5.2.11 was preventing some email messages from being processed properly. Fixed in this release. For further details, see [this thread](http://www.primothemes.com/forums/viewtopic.php?f=4&t=14957#p45222) and/or [this PHP bug report](https://bugs.php.net/bug.php?id=28038) please.
267
- * (s2Member/s2Member Pro) **Bug fix**. s2Member was redirecting logged-in Users/Members to the Download Limit Exceeded Page whenever an attempt to download a file was made by a User/Member with access at a Level that was NOT allowed to access files period. s2Member should have been redirecting these specific requests to the Membership Options Page instead, with MOP Vars included. Fixed in this release. For further details, please see [this thread](http://www.primothemes.com/forums/viewtopic.php?f=4&t=15367#p45122).
268
- * (s2Member/s2Member Pro) **Documentation updates**. s2Member's built-in Dashboard documentation has been updated in several places. This should work to further help site owners that are new to s2Member. In addition, s2Member's inline documentation now includes tips for integrating BuddyPress, when/if BuddyPress is installed and activated in your WordPress® installation.
269
- * (s2Member/s2Member Pro) **Logging**. s2Member now adds the currently installed version of PHP to its log entries, if logging is enabled by the site owner.
270
- * (s2Member/s2Member Pro) **AWeber**. A bug was found in s2Member's AWeber integration. When/if you configured s2Member NOT to collect First/Last Names, the email subscription request was not being parsed properly on the AWeber side of things, due to a regex issue in their built-in PayPal Email Parser. Fixed in this release. In addition, s2Member has built a Custom Email Parser for AWeber, which is optional, but definitely recommended. Please see [this thread](http://www.primothemes.com/forums/viewtopic.php?f=36&t=15496) for further details.
271
- * (s2Member/s2Member Pro) **Bug fix**. A bug was found in s2Member's email configuration routine, which made it possible *( based on other plugin combinations running in concert with s2Member )*, for s2Member to drop existing `mail_from` values configured by other plugins, which may have resulted in delivery failures, particularly when/if a site was configured to use an external SMTP server, which MAY require that your `From:` header reference a specific address, one that is directly associated with your external SMTP account. Fixed in this release. In addition, please be advised that if you run an SMTP mail plugin with WordPress®, you should be sure to configure your `s2Member -> General Options -> Email Configuration` with a valid `From:` address *( i.e. one matching your SMTP configuration perhaps )*. Most free SMTP servers, such as Gmail/Yahoo, require that your `From:` header match the email address associated with your account. Please check with your SMTP service provider before attempting to configure plugins like s2Member to use a different `From:` address when sending email messages. For further details, please check your Dashboad, under: `s2Member -> General Options -> Email Configuration`.
272
- * (s2Member/s2Member Pro) **MailChimp®/AWeber® list transitioning**. s2Member's list transitioning routine ( an optional feature ) has been further optimized and improved. In addition, it is now possible to force the transition of Users/Members from one set of lists to another, even when s2Member is unable to remove them from an existing list. For further details, please check your Dashboard under: `s2Member -> API List Servers -> Automate Unsubscribe / Opt-Outs`.
273
- * (s2Member/s2Member Pro) **Reset or lock-in Roles/Capabilities**. A new development tool is available in your Dashboard, which makes it possible for developers to reset and/or lock-in the Roles/Capabilities associated with s2Member. For further details, please check your Dashboard, under: `s2Member -> General Options -> Membership Levels/Labels`.
274
- * (s2Member/s2Member Pro) **Routine maintenance**. Some code optimization, some cleanup, and some organizational improvements in preparation for new features in a coming release.
275
-
276
- = v111003 =
277
- * (s2Member) **Bug fix**. Fatal `eval()` error inside: `/includes/classes/no-cache.inc.php`. Fixed in this release.
278
-
279
- = v111002 =
280
- * (s2Member) **BuddyPress v1.5 fix**. Issues with BuddyPress v1.5 and s2Member's URI Restrictions; corrected in this release. Hook priority updated, and `template_redirect` converted to `wp` at priority `2`, giving s2Member the ability to integrate with BuddyPress v1.5 properly in all scenarios.
281
- * (s2Member) **tinyURL® bug fix**. s2Member's handling of potential failures in the output of tinyURLs, generated by the tinyURL® API; was NOT considering all failure possibilities. A symptom of this bug was to see URLs in your Signup Confirmation Email (occassionally, upon connection failure to the tinyURL® API, when it was down for whatever reason) starting with: `Error#`. Corrected in this release.
282
- * (s2Member) **URL Shortening API (Preference)**. s2Member now includes a class method dedicated to URL shortening service APIs. Currently, s2Member will use the tinyURL® API first *(i.e. tinyurl.com )*, and then use the Google® URL Shortening API *(i.e. goo.gl )* as a backup when/if the tinyURL® API is down for whatever reason. In this release, a new configurable option is available, which allows advanced site owners to preference the Google® Shortening API over tinyURL®, if they desire. It is also possible to integrate your own custom GET request, for whichever service you prefer. For further details, please check your Dashboard, under: `s2Member -> General Options -> URL Shortening API (Preference)`.
283
- * (s2Member) **Bug fix**. Bug first introduced in s2Member v110912. s2Member's new optimized method of loading its CSS/JS was causing some problems on a few Windows® server environments. In some cases, s2Member was unable to properly identify itself through the `/s2member-o.php` file, given limitations of the core WordPress® function `plugin_basename()`. A symptom of this bug was for s2Member to fail at loading its CSS/JS libraries. Fixed in this release.
284
- * (s2Member) **Security fix**. It was possible for some of s2Member's code sample files to be executed directly. Not a proven vulnerability, but definitely NOT a good idea to allow this either. Fixed in this release, by renaming all `.php` files inside the `/includes/menu-pages/code-samples/` directory. These files now have a `.x-php` extension. As an additional line of defense, a new `.htaccess` file with `deny from all` is automatically placed inside the main `/s2member/includes/` directory. None of these files should be available pulicly anyway. s2Member's exsiting `realpath()` file scans remain in place too, which further prevents the direct execution of `.php` files.
285
-
286
- = v110927 =
287
- * (s2Member) **BuddyPress v1.5 compatibility**. Misc tweaks.
288
- * (s2Member) **Documentation improvements**. New documentation covering Shortcode Attributes and API Function parameters for the new `[s2File /]` Shortcode, and for the new API Function `s2member_file_download_url()`. Please check your Dashboard, under: `s2Member -> Download Options -> Shortcode Attributes / API Functions ( Explained )`.
289
-
290
- = v110926 =
291
- * (s2Member/s2Member Pro) **BuddyPress v1.5**. Updated for compatibility with BuddyPress v1.5.
292
- * (s2Member Pro) **Bug fix**. A bug first introduced in s2Member Pro v110912 was causing problems for Pro Forms integrated on a Child Blog of Multisite Blog Farm. Fixed in this release.
293
- * (s2Member/s2Member Pro) **Bug fix**. Custom Registration/Profile Fields configured to require an EXACT number of characters and/or digits was NOT being handled properly by s2Member in all cases. Fixed in this release.
294
- * (s2Member/s2Member Pro) **Bug fix**. A bug first introduced in s2Member v110912 was causing problems with s2Member's default email customization templates. Double percent signs `%%` for Replacement Codes were being reduced by s2Member's internationalization routines, to just single percent signs `%`, thereby nullifying them as valid Replacement Codes. Fixed in this release. If you installed s2Member and/or s2Member Pro v110912 - v110915 on a clean installation of WordPress®, it would be a good idea to have a quick look at your email customizations with s2Member, just to make sure your Replacement Codes have double percent signs around them *( for example, this is valid: `%%registration_url%%`, and this is NOT valid: `%registration_url%` )*.
295
- * (s2Member) **Amazon® S3/CloudFront**. s2Member is now fully integrated with Amazon® CloudFront, in addition to its existing support for Amazon® S3. Please note, one of the greatest things about Amazon® CloudFront, is its ability to `stream/seek` media files in the truest sense of the word over the RTMP protocol. For sites delivering protected `FLV/MP4/OGG/WEBM` and other streaming audio/video file types over the RTMP protocol, Amazon® CloudFront is our recommendation. Once you've successfully configured s2Member to use both Amazon® S3 and Amazon® CloudFront together, please review this section in your Dashboard: `s2Member -> Download Options -> JW Player® & RTMP Protocol Examples`. s2Member will automatically serve your protected files over the RTMP protocol, using an Amazon® CloudFront Streaming Distribution. In fact, s2Member can even configure all of your Amazon® S3/CloudFront Distros, ACLs, and Policies automatically; making it possible for just about anyone to stream media s2Member-protected files in real-time.
296
- * (s2Member) **s2File Shortcode**. s2Member now provides a new Shortcode: `[s2File /]`. For further details, please check your Dashboard, under: `s2Member -> Download Options -> Basic Download Restrictions`.
297
-
298
- = v110915 =
299
- * (s2Member Pro) **Bug fix**. A bug first introduced in s2Member/s2Member Pro v110912+ was causing parse errors on Authorize.Net Free Regisration Forms. Fixed in this release.
300
-
301
- = v110913 =
302
- * (s2Member) **Compatibility**. s2Member v110912+ requires WordPress® v3.2+.
303
- * (s2Member) **Bug fix**. A bug first introduced in s2Member v110912 related to JavaScript/CSS files not loading properly on some installations has been corrected in this release. One symptom of this bug was s2Member's failure to display Pro Form integrations properly in some cases. Another symptom may have been improper handling of Registration Form validations.
304
- * (s2Member) **HostGator**. Tildas ( `~` ) found in some encrypted data strings were triggering `mod_security` conflicts on sites powered by HostGator. This release corrects the problem on HostGator by stripping tildas from query strings processed by s2Member. In addition, HostGator has been very helpful in white-listing the s2Member application across its entire network to prevent interruption of service. For further details, please check [this thread](http://www.primothemes.com/forums/viewtopic.php?f=36&t=14787#p35909).
305
-
306
- = v110912 =
307
- * (s2Member) **Compatibility**. This version of s2Member requires WordPress® v3.2+.
308
- * (s2Member) **Alternative View Protections**. s2Member's Alternative View Protections are now more flexible, allowing specific types of Protections to be applied individually now, instead of in groups. In addition, there are two new types of Alternative View Protection available: Comment Feeds (new), and WordPress® Navigation Menus (new). For further details, please check your Dashboard, under: `s2Member -> Restriction Options -> Alternative View Protections`.
309
- * (s2Member Pro) **Independent Custom Capabilities**. The integration of Independent Custom Capabilities from the last release, has now been completed for all of s2Member's Payment Gateways. In this release, we completed Independent Custom Capability integration for ClickBank®, Google® Checkout, ccBill®, and AliPay®. Independent Custom Capabilities are already possible with PayPal®, PayPal® Pro, and Authorize.Net®, from the last release. Further improvements to this aspect of s2Member Pro will come in a future release.
310
- * (s2Member/s2Member Pro) **Security**. Back-end panels for both s2Member and s2Member Pro have been updated to use `password` input fields, anywhere/everywhere sensitive data is being configured. This helps to further safeguard various API and Payment Gateway credentials on your installation of WordPress®. In other words, some sensitive data that you configure for s2Member, will now appear with just x's `xxxxxxxxxxxxxxx`, instead of the actual data that you entered; *( e.g. `password` input fields secure this information from prying eyes )*.
311
- * (s2Member/s2Member Pro) **Translation Support**. s2Member and s2Member Pro are now equipped with support for front-end translation, using standardized WordPress® methodologies; i.e. we've implemented the use of `_x()`, and various other translation routines for many aspects of s2Member's front-end interfaces. For instance, things like Profile panels, Login/Registration Fields, and Pro Form integrations; as well as error messages displayed to Users/Members. Translation support for back-end admin panels provided by s2Member will come in a future release, along with more extensive translation support for front-end aspects.
312
-
313
- Please note, this is but our first step toward internationalizing s2Member and s2Member Pro. Look for further updates/improvements to come in the future.
314
-
315
- Like WordPress® itself, we chose to use the GNU `gettext` localization framework to provide localization infrastructure for s2Member®. GNU `gettext` is a mature, widely used framework for modular translation of software, and is the *de facto* standard for localization in the open source/free software realm. If you'd like to translate s2Member and/or s2Member Pro, please use the POT file found inside `/s2member/includes/translations/s2member.pot`, which contains all translation entries for both the s2Member Framework *( i.e. the free version )*, and also for s2Member Pro.
316
-
317
- The file: `/s2member/includes/translations/s2member.pot` will be updated with each new release of s2Member.
318
- If this is your first translation of a WordPress® plugin, [this article](http://codex.wordpress.org/Translating_WordPress#Localization_Technology) and/or [this article](http://urbangiraffe.com/articles/translating-wordpress-themes-and-plugins/), might be of some assistance. When you are finished translating the `s2member.pot` file, place your completed `s2member-[locale].mo` file into this directory: `/wp-content/plugins/`; and please feel free to [share your translation](http://www.primothemes.com/forums/viewforum.php?f=4) with the rest of the s2Member® community.
319
-
320
- Quick Tip: If you only need to translate the front-end of s2Member, please ignore entries in the `s2member.pot` file with a context matching `s2member-admin`. Those sections of s2Member are only seen by site Administrators; they are NOT used in s2Member's front-end integration with WordPress®. Skipping over translation entries with a context matching `s2member-admin` can save you time.
321
- * (s2Member) **Bug fix / Multisite**. A bug fix related to site creation within the Dashboard on a Multisite Blog Farm, has been corrected in this release. For further details, please see [this thread](http://www.primothemes.com/forums/viewtopic.php?f=4&t=10307#p32628).
322
- * (s2Member/s2Member Pro) **Bug fix**. New Filter added to s2Member's source code, allowing s2Member Pro site owners to enable/disable tab indexing of reCAPTCHA box controllers *( e.g. the three mundane buttons )* that are skipped over 99.9% of the time anyway. If you'd like to enable tab indexing on these buttons, use: `add_filter("c_ws_plugin__s2member_utils_tabindex_recaptcha_icons", "__return_true");` inside a `/wp-content/mu-plugins/s2-hacks.php` file.
323
- * (s2Member Pro) **Bug fix**. Some site owners running s2Member Pro, on server configurations with PHP-based output compression enabled, experienced problems with the `success=""` Shortcode Attribute for s2Member Pro Forms. s2Member Pro has been improved in this regard *( i.e. s2Member Pro now makes better attempts to clear output buffers before returning plain text data with it's handlers )*. In addition, calls to `trim()` have also been implemented as an additional line of defense against errors reported in the previous release; which were related to URLs with leading white space, returned by s2Member's core PayPal® IPN processor.
324
- * (s2Member/s2Member Pro) **Conformity**. s2Member and s2Member Pro now make use of a core WordPress® function for all HTTP status headers ( i.e. `status_header(xxx)` ).
325
- * (s2Member Pro) **Pro Forms / Tabindex ( Bug fix )**. s2Member Pro Forms suffered from a bug related to `tabindex` conflicts whenever MANY Custom Registration/Profile Fields were configured together. Corrected in this release.
326
- * (s2Member Pro) **Google® Checkout ( Bug fix )**. s2Member Pro's integration with Google Checkout has been updated in this release to use `display-disposition: PESSIMISTIC` instead of `OPTIMISTIC`. This change prevents possible card declines from slipping through, and thereby granting a Customer access inadvertently. With the former `OPTIMISTIC` behavior, in rare cases when payment authorizaton at Google® Checkout took longer than 20 seconds, s2Member was giving a Customer access to the site, instead of waiting pessimistically for Google® Checkout to complete processing. The updated behavior, now set to `PESSIMISTIC`, prevents this from occurring. For technical details, see [this article](http://code.google.com/apis/checkout/developer/Google_Checkout_Digital_Delivery.html).
327
- * (s2Member Pro) **ClickBank® ( Bug fix )**. s2Member Pro's integration with ClickBank® has been updated in this release. A bug was found by WebSharks, Inc. Support Rep: Cristián Lávaque, related to the verification of POST vars. Whenever UTF-8 characters appeared in any part of a ClickBank® IPN response received by s2Member, s2Member was failing to verify the checksum, and thus, returning the error: `POST vars could not be verified`. This issue has been corrected in the latest release of s2Member Pro. In addition, a known bug with ClickBank® cutting off first/last names whenever special characters were part of either name, has now been side-stepped by s2Member Pro's integration with ClickBank®.
328
- * (s2Member Pro) **PayPal® ( Bug fix )**. s2Member Pro's integration with the PayPal® Pro API has been updated in this release. A bug was found by the s2Member community which affected a rare scenario during heavy testing. When/if a site owner was heavily testing s2Member Pro Forms repeatedly, whereby PayPal® Pro Recurring Profiles were created over and over again; one of these Recurring Profiles could still be in a `Pending` state during a Subscription Modification soon thereafter. This is rare, because Recurring Profiles are usually in a `Pending` state on the PayPal® side of things, for just a few seconds. However, in this test case, it was possible for s2Member to create a second Recurring Profile through the PayPal® Pro API, and the old one would NOT be terminated properly, because it was still in a `Pending` state, and unable to be terminated. This release of s2Member Pro resolves this issue and prevents this from occuring under any scenario. Customers and/or site owners testing s2Member Pro Forms will now see an error message related to pending changes, and the Customer would be asked to wait 15 minutes in this rare scenario.
329
- * (s2Member) **Protected Files**. This version of s2Member updates the `.htaccess` file in your `/s2member-files/` directory with `mod_rewrite` rules which provide additional flexibility in the way protected files are served to your Customers. With the new `mod_rewrite` rules, it is now possible to link directly to a protected file, avoiding the use of query string variables *( it's completely optional though )*.
330
-
331
- In other words, this update adds new functionality, it does NOT change anything that already existed. This new flexibility may come in handy for site owners serving files through media playback devices that have issues with query string variables. For further details, please check your Dashboard, under: `s2Member -> Download Options -> Advanced Mod Rewrite Linkage`.
332
-
333
- Dev note. Any existing `.htaccess` file inside your `/s2member-files/` directory will be overwritten by this release, as it should be. However, if you'd like s2Member to preserve a custom `.htaccess` file that you've written, please create this directory and file: `/wp-content/mu-plugins/s2-hacks.php`, and put this inside it: `<?php add_filter("ws_plugin__s2member_preserve_files_dir_htaccess", "__return_true"); ?>`. Please do this before you upgrade, if this is your intention.
334
- * (s2Member) **Download Keys**. There is now a Shortcode equivalent to s2Member's API function `s2member_file_download_key($file, $directive)`. You can now do this in this WordPress® Visual Editor if you prefer: `[s2Key file_download="example-file.zip" /]` without needing a PHP Execution plugin.
335
-
336
- For those of you that use the optional `$directive` parameter, you can do something like this: `[s2Key file_download="example-file.zip" directive="ip-forever|universal" /]`. For further details, please check your Dashboard, under: `s2Member -> Download Options -> Advanced Download Restrictions`. Or see [this article](http://www.primothemes.com/forums/viewtopic.php?f=40&t=12453#src_doc_s2member_file_download_key%28%29) in the s2Member Codex.
337
- * (s2Member) **Localhost Installs**. s2Member now includes information for site owners developing in a `localhost` environment, with WAMP/MAMP or something like EasyPHP. Instructions are now easier to find. For further details, please check your Dashboard, under: `s2Member -> General Options -> Localhost WAMP/MAMP Developers`.
338
- * (s2Member) **PayPal® ( Bug fix )**. s2Member was incorrectly handling delayed EOT Times under a specific scenario, as [reported here](http://www.primothemes.com/forums/viewtopic.php?f=4&t=14876&p=34414#p34414). Corrected in this release.
339
- * (s2Member) **JavaScript/CSS Optimization**. s2Member now loads its dynamic JavaScript/CSS libraries through a new optimized file called `/s2member-o.php`, designed to increase the speed at which your installation of WordPress® can load these resources. The new optimized `/s2member-o.php` file loads only the core WordPress® framework and the s2Member JavaScript and/or CSS file, depending on which is being requested. This new file will eliminate a potential bottleneck on some WordPress® installations, which may have MANY other plugins running in concert with s2Member. It also works to further reduce CPU and memory consumption for all site owners. For further details about why this optimization is beneficial, please see [this article](http://www.primothemes.com/forums/viewtopic.php?f=4&t=14359&p=33441#p33441).
340
- * (s2Member Pro) **PayPal® Express Checkout / Pre-Population**. s2Member now pre-populates everything it can through PayPal® Express Checkout integration. If a Customer does NOT already have a PayPal® account when they arrive at Express Checkout, the Account Creation Form at PayPal® will be pre-populated with a minimum of their Name and Email Address. Street address information will ONLY be pre-populated, when/if s2Member collects it for tax purposes. Otherwise, the address information will NOT be pre-populated, because only PayPal® will ask for those details anyway *( i.e. s2Member doesn't ask for address details when Express Checkout is used; not unless you're collecting taxes: `s2Member -> PayPal® Options -> Tax Calculations` ).
341
- * (s2Member) **New API Function**. This version of s2Member includes a new API Function `get_s2member_custom_fields()`, designed to provide more information about Custom Registration/Profile Field configuration and values for a specific User. The API function `get_user_field()` remains available as well. For further details, please see [this article](http://www.s2member.com/codex/stable/s2member/api_functions/package-summary/) in the s2Member Codex.
342
- * (s2Member Pro) **Pro Login Widget**. This version of s2Member improves the `%%automatic%%` setting for the Signup URL in Pro Login Widgets. When/if a Customer has already paid for their Membership, the Signup URL presented in the Pro Login Widget will change dynamically, pointing a Customer to the Registration Form, instead of to your Membership Options Page. Of course, this behavior could be overridden by changing the Signup URL to something other than `%%automatic%%`, if you prefer.
343
-
344
- = v110815 =
345
- * (s2Member/s2Member Pro) **Independent Custom Capabilities.** You can now sell one or more Custom Capabilities using Buy Now functionality, to "existing" Users/Members, regardless of which Membership Level they have on your site *( i.e. you could even sell Independent Custom Capabilities to Users at Membership Level #0, normally referred to as Free Subscribers, if you like )*. So this is quite flexible. Independent Custom Capabilities do NOT rely on any specific Membership Level. That's why s2Member refers to these as *Independent* Custom Capabilities, because you can sell Capabilities this way, through Buy Now functionality, and the Customer's Membership Level Access, along with any existing paid Subscription they may already have with you, will remain completely unaffected. For further details, please check your Dashboard, under: `s2Member -> PayPal® Buttons -> Capability (Buy Now) Buttons`. Independent Custom Capabilities are currently integrated with PayPal® Standard Buttons, PayPal® Pro Forms, and Authorize.Net® Pro Forms only. Integration with other Payment Gateways supported by s2Member Pro will come in a future release.
346
- * (s2Member) **API Tracking.** This release of s2Member introduces two new API Tracking methods, now making it possible to incorporate Tracking Codes *( i.e. affiliate program integrations, as one example )* for `Signup Tracking`, `Modification Tracking (new)`, and also for `Capability Tracking (new)`. For further details, please check your Dashboard, under: `s2Member -> API Tracking`. These new methods are ( in addition to ) s2Member's API Notifications, which remain available. s2Member's API Notifications are intended for more advanced tracking integrations, such as a 3rd-party call through an HTTP request.
347
- * (s2Member) **Bug fix / Multisite.** s2Member's supplemental API Functions `current_user_is()`, `current_user_is_not()` and the `..for_blog()` alternatives, were not properly considering Super Administators on a Multisite Network installation. On a Multisite Network, the WordPress `$user->has_cap()` routine returns true for anything passed in on a Super Administrator account, causing s2Member's `user_is` API Functions to return true for Super Administrators in some cases, when it really should NOT have been. Fixed in this release. If you need to use `current_user_is()` against a Super Administrator, the `user_is` API Functions introduced by s2Member will only return true in these special cases: `current_user_is("super_administrator")` and/or `current_user_is("administrator")`. Super Administrators should always have the `administrator` Role, for all Blogs in the Network, and s2Member will also consider the fake Role `super_administrator` *( unique to s2Member )* for cases when you need to test explicity for a Super Administrator. Actually, you could also just use the WordPress core function for this: `is_super_admin()` *( recommended )*.
348
- * (s2Member) **Bug fix / Capabilities.** When/if you require Custom Capabilities in order to view certain content sections on your site, s2Member was behaving properly in all cases, except for one specific scenario. When an Administrator of the site *( on a normal single-site installation of WordPress )*, was attempting to test-view content protected with Custom Capabilities *( this scenario was causing a problem )*. What was happening, is that s2Member was seeing that an Adminstrator did not have certain Custom Capabilities defined explicity in their account, and access was being denied *( that's actually, NOT right )*. This was in conflict with the way that s2Member handles all other content protection routines with respect to Administrators. Administrators should automatically have access to all protected content, even if Custom Capabilities are not explicity defined in their account. After all, they are Administrators. In short, this release makes it possible for Administrators of a single-site WordPress installation, to have full access to all content; even when/if Custom Capabilities are required. This should help to prevent confusion for site owners just beginning to understand s2Member's functionality with respect to Custom Capabilities.
349
- * (s2Member Pro) **Bug fix / Coupon Codes.** s2Member Pro Forms were failing to apply Coupon Codes properly in some cases. Whenever a Coupon Code eliminated all initial charges for a Trial Amount, s2Member was attempting to charge a zero dollar sale amount, under the right scenario. Fixed in this release.
350
- * (s2Member) **API Notifications.** Starting with this release, s2Member's Payment Notifications are also triggered whenever a Buy Now purchase for Independent Custom Capabilities takes place (new). The documentation in your Dashboard has been updated. For further details, please see: `s2Member -> API Notifications -> Payment Notifications`.
351
- * (s2Member/s2Member Pro) **Cookies.** Both s2Member and s2Member Pro now fully support the `COOKIEPATH`, `SITECOOKIEPATH`, and `COOKIE_DOMAIN` constants from the WordPress® core, making s2Member more secure on Multisite Networks, and improving compatibility overall for sites that use one or more of these PHP Constants in their `/wp-config.php` file.
352
- * (s2Member Pro) **UI Improvement / tabindex.** s2Member Pro Forms have been updated to skip tab indexes on reCAPTCHA box controllers *( e.g. the three mundane buttons )* that are skipped over 99.9% of the time anyway. This allows Pro Form tab controls to jump immediately to the reCAPTCHA input field, if/when enabled by your Shortcode.
353
- * (s2Member Pro) **UI Improvement.** s2Member\'s live feed inside your Dashboard, which is responsible for delivering updates that come from Lead Developer Jason Caldwell and s2Member Support Reps, has been improved in this release. You'll see this on the right-hand side of s2Member's UI panels, near the top.
354
- * (s2Member/s2Member Pro) **Capability Additions (Changed).** In previous versions of s2Member, when generating a Payment Button/Form, it was possible to precede your list of Custom Capabilities with a `+` sign, indicating that you wish to (Add) new Custom Capabilities instead of (Resetting) a User's Capbilities to the ones you list. Starting with this release, (Add) is now the default behavior. In other words, the `+` sign is no longer required, because s2Member will automatically (Add) Capabilities to any that already exist for a particular User/Member, even without the `+` sign *(no longer required)*. In addition, there is now a new directive available: `-all`. You may now precede your list of Custom Capabilities with `-all`, but only if you wish to (Remove/Reset) all Custom Capabilities, and then (Add) new ones. For example: `-all,music,videos`, would remove any existing Custom Capabilities that may or may not already exist for a particular User/Member, and then add: `music,videos`. There are additional examples provided by the Payment Button/Form Generators that come with s2Member. Please check your Dashboard if you'd like to learn more.
355
- * (s2Member) **Compatibility.** s2Member's ability to modify the WordPress® Admin Bar for Users/Members has been updated to fully support WordPress® v3.2+. This feature now behaves as expected in the latest release. For further details, please check your Dashboard, under: `s2Member -> General Options -> Profile Modifications`. The Redirection option in that section, has the side effect of manipulating the Admin Bar across the top of your site *( if enabled )*, making WordPress® behave properly.
356
- * (s2Member Pro) **Options Import/Export.** s2Member Pro now makes it possible to export your s2Member options, in their entirety, and then import them into another instance of WordPress®. For further details, please check your Dashboard, under: `s2Member -> Import/Export`.
357
- * (s2Member/s2Member Pro) **Memory.** Memory reporting is now added to log entries by s2Member.
358
- * (s2Member/s2Member Pro) **JavaScript.** Minor optimization of s2Member's JavaScript routine.
359
-
360
- = v110812 =
361
- * (s2Member) **Security fix.** This release addresses an important security vulnerability in previous releases of the s2Member Framework *( i.e. the free version of s2Member )*. Sites with Download Options configured for s2Member should be advised to update to s2Member v110812+ as soon as possible to avoid possible exploits.
362
-
363
- = v110731 =
364
- * **(s2Member) Bug fix / Multisite.** In the Multisite (Config) panel, s2Member was not properly displaying the number of Blogs allowed at Level #0, in some cases.
365
- * **(s2Member Pro) Update / ClickBank®.** s2Member Pro has been updated to better support ClickBank's policy on Thank-You Pages. s2Member now provides a link on the ClickBank Return-Page where Customers may contact your support department, and a message regarding charges on a Customer's bank statement appearing as `CLKBANK*COM`. This is mandatory for all ClickBank® integrations. ClickBank® will not approve your Products without this information on the Thank-You Page integrated with s2Member. In addition, s2Member now makes it possible to customize your Thank-You Page for ClickBank®. For further details, please check your Dashboard, under: `s2Member -> ClickBank® Options -> Thank-You Page`. If you have attempted to use temporary hacks of your own in order to avoid issues with ClickBank® policy in this regard, we suggest that you remove those hacks, and instead work with the new features introduced in this release of s2Member Pro. If you need assistance, please use the s2Member forums.
366
- * **(s2Member Pro) Pro API For Remote Operations.** With s2Member Pro installed, you now have access to the s2Member Pro API For Remote Operations. This is made available for developers that wish to create User/Member accounts dynamically through custom scripts of their own. s2Member's Remote Operations API requires a secret API Key in order to POST authenticated requests to your installation of s2Member. For further details, please check your Dashboard, under: `s2Member -> API Scripting -> Remote Operations API`.
367
- * **(s2Member) Compatibility.** In cases where a site owner integrates Amazon® S3 file storage for protected File Downloads, with an invalid Bucket name which contains mixed caSe ( that's a no-no anyway ), s2Member will now convert the Amazon® S3 connection URL to `s3.amazonaws.com/[BUCKET]`, instead of the default `[bucket].s3.amazonaws.com`. This is required for invalid Bucket names which use mixed caSe. The only way for Amazon® S3 communication to work with these invalid Bucket names, is with a sub-folder URL. See docs on [Bucket names](http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?BucketRestrictions.html).
368
- * **(s2Member) Feature Improvement.** s2Member's API Tracking Codes are now displayed immediately after checkout in all possible scenarios. This is an improvement over past versions, where s2Member sometimes had to await IPN processing before Tracking Codes integrated with s2Member could be displayed on-site. For further details, please check your Dashboard, under: `s2Member -> API Tracking`.
369
- * **(s2Member/s2Member Pro) New Feature / Thank-You Page Templates.** s2Member's Return Page handlers ( aka: Thank-You Page handlers ) have been improved. Instead of using a JavaScript alert immediately after checkout, s2Member now displays all responses with pure HTML. In addition, with s2Member Pro installed ( and only with s2Member Pro installed ), it is now possible to customize the header section ( i.e the top ) of your Thank-You Page from the Dashboard, and/or to create a custom template file inside your active WordPress® theme directory for each Payment Gateway integrated with s2Member ( all optional ). For details on your PayPal Return Page ( aka: Thank-You Page ), please check your Dashboard, under: `s2Member -> PayPal Options -> Auto-Return/PDT Integration -> Auto-Return Page Template`.
370
-
371
- The ability to customize the Return Page is now possible ( for all applicable Payment Gateways ) integrated with s2Member Pro, including: PayPal® Standard, ClickBank®, ccBill®, and AliPay®. Other Payment Gateways, such as: PayPal® Pro, Authorize.Net®, and Google® Checkout do NOT require a Return-Page anyway, so they are NOT applicable in this regard.
372
-
373
- *Please note, this feature improvement should NOT negatively impact any existing installations of s2Member. In other words, you don't need to change anything in your existing installation, unless you want to. Custom Return Page templates are completely optional. This improvement simply makes new things possible in s2Member Pro, and even provides a smoother experience for all Customers completing checkout through the free version of s2Member. If you need to customize s2Member's default Return-Page Template, please upgrade to s2Member Pro, where the tools for this are made available in your Dashboard.*
374
- * **(s2Member) New Feature / Login Counter.** Starting with this release, s2Member will automatically monitor the number of times each User/Member logs into your site. This information is made visible to the site owner in the list of Users ( i.e. in the Dashboard ). This information is also used as the basis for a new feature in s2Member Pro, which allows for the configuration of One-Time-Offers, based on the number of previous logins at your site. For further details, please check your Dashboard with s2Member Pro installed, see: `s2Member -> General Options -> One-Time-Offers`.
375
- * **(s2Member Pro) Feature Improvement / Success Attribute.** With s2Member Pro installed, it is also possible to completely override the Standard Return-Page handlers with the `success=""` Attribute in your Shortcode. This works with PayPal® Standard integration, and also for AliPay®. New in this release, It is now possible to achieve the same result with ClickBank® and ccBill® too, using the instructions provided in your s2Member options panel, for each respective Gateway. Also, this release of s2Member improves the handling of custom Return URLs.
376
-
377
- In all cases, s2Member will now ALWAYS handle the initial redirection after checkout, where s2Member sets important authorization cookies, and THEN ( if configured to do so ) redirect to your custom URL on success. This prevents issues with registration authorization cookies not being set properly when/if custom Success URLs are used. This was a problematic area in previous releases of s2Member, and this version should resolve those issues; as long as the updated instructions are followed inside your Dashboard. For example, with ClickBank®, please see: `s2Member -> ClickBank® Options -> Thank-You Page -> Thank-You Page Templates` for full details regarding all possible customizations. You will find similar instructions for other Payment Gateways integrated with s2Member.
378
- * **(s2Member Pro) New Feature / One-Time-Offers.** With s2Member Pro installed, it is now possible to configure One-Time-Offers ( Upon Login ). This feature allows site owners to display a different page the 1st time a User/Member logs in ( and more ), and/or to create loyaltly rewards/offers for Users/Members who have been very active on their account. For further details, please check your Dashboard with s2Member Pro installed, see: `s2Member -> General Options -> One-Time-Offers`.
379
- * **(s2Member) Bug fix. BuddyPress Profile Fields.** s2Member's integration with BuddyPress Profile fields was invalid in cases where public Profiles were being viewed/edited while another User was logged in. s2Member was displaying/populating the current User's Custom Field data in places where it should have been pulling details based on `$bp->displayed_user->id`. This bug has been corrected in this release of s2Member.
380
- * **(s2Member/s2Member Pro) Code Restructuring / Security Hardening.** s2Member's core IPN and Return-Page handlers have been reorganized into sub-classes containing conditional phases. This made it possibe to harden s2Member's security in various ways, and also sets the groundwork for new features ( coming soon ). One way in which s2Member's security had been hardended in this release, is that it's now harder, if not impossible, for s2Member to reprocess any IPN and/or Return-Page Data in duplicate. In rare cases where information comes through in duplicate, s2Member will ignore dupes completely, recover gracefully, log important details, and/or display `Page Expired` notifications to possible attackers.
381
- * **(s2Member Pro) Bug fix. Authorize.Net® ARB.** s2Member Pro was incorrectly handling scenarios where a Customer was attempting to create an ARB Profile with a credit card that expires before the 2nd payment in the ARB Profile would clear. s2Member Pro always collects the first payment up front, and starts the ARB Profile to handle future payments. In cases where a Customer's card would expire before the second payment is collected, the creation of the ARB Profile would fail on the Authorize.Net® side, and s2Member Pro was not recovering properly. The result is that the Customer was charged for the first payment, and then left with a decline notice on-site ( not good ). In this release, s2Member Pro has been updated to avoid the situation where a Customer may be declined, with the error `The credit card expires before the subscription startDate`. In this scenario, s2Member will now allow the Customer's transaction to go through ( collecting the first payment in real-time ), and allowing the Customer to gain access. In this case, s2Member knows that future payments will fail because the card will expire beforehand, so an EOT Time for the Customer will be set during checkout.
382
-
383
- = v110710 =
384
- * **(s2Member/s2Member Pro) Bug fix.** Some versions of PHP were generating an error `Warning: call_user_func_array()` after registration. This error was caused by a new static class method introduced in s2Member v110708, which was NOT previously declared `static` explicity. This release of s2Member v110710 corrects this bug and eliminates the error message. For further details, please check your Dashboard, under: `s2Member -> General Options -> Email Configuration`.
385
- * **(s2Member) New Feature.** It is now possible to enable/disable s2Member's customization of New User Email notifications. This may be desirable when/if you're using a plugin ( other than s2Member ) to handle this aspect of your installation. For further details, please check your Dashboard, under: `s2Member -> General Options -> Email Configuration`.
386
- * **(s2Member) New Feature.** It is now possible to customize both the Username/Password email ( e.g. the email sent to new Users/Members after registration ), and now you can ALSO customize the Administrative "New User Notification" email too. For further details, please check your Dashboard, under: `s2Member -> General Options -> Email Configuration`.
387
-
388
- = v110709 =
389
- * **(s2Member/s2Member Pro) Email Configuration ( bug fix ).** New file `/s2member/includes/functions/pluggables.inc.php` was missing in the last release, weird. This release adds the missing file that implements this new feature included in the previous Changelog. FEATURE: Some new options are now available that allow site owners to customize the email that contains the Username/Password for new Users/Members. For further details, please check your Dashboard, under: `s2Member -> General Options -> Email Configuration`.
390
-
391
- = v110708 =
392
- * **(s2Member/s2Member Pro) Compatibility.** s2Member and s2Member Pro have both been updated to support WordPress® v3.2.
393
- * **(s2Member Pro) Unlimited Membership Levels.** With s2Member Pro installed, you may now configure an unlimited number of Membership Levels. You can set the number of Membership Levels by adding this line to your /wp-config.php file: `define("MEMBERSHIP_LEVELS", 4);`. Feel free to change the default value of 4 to whatever you need. The minimum allowed value is 1. The recommended maximum is 100. For further details, please check your Dashboard, under: `s2Member -> General Options -> Membership Levels/Labels`.
394
- * **(s2Member/s2Member Pro) Email Configuration.** Some new options are now available that allow site owners to customize the email that contains the Username/Password for new Users/Members. For further details, please check your Dashboard, under: `s2Member -> General Options -> Email Configuration`.
395
- * **(s2Member/s2Member Pro) Bug fix.** A problem with certain email addresses routed through the `wp_mail()` function, containing special characters in the "Name" portion. The issue was related to the way in which `wp_mail()` handles recipient addresses in the format `"Name" <address>`. s2Member now strips double quotes dynamically ( i.e. internally ), so that `wp_mail()` and the PHPMailer class can deal with this format on their own. This bug fix should also prevent seemingly random `500 Internal Server Error` messages during checkout. One symptom of this bug was to find "Premature end of script headers" inside your Apache error log, followed by an error code of `500` reported in the browser. These issues have been corrected in this release of s2Member.
396
- * **(s2Member) Bug fix.** A bug first introduced in v110604 was preventing s2Member from setting a User's "Display Name" during Registration properly. This bug has been corrected in the latest release. In addition, a new configurable option for this behavior has been added to the s2Member General Options panel. For further details, please check your Dashboard under: `s2Member -> General Options -> Registration/Profile Fields -> Display Name`.
397
- * **(s2Member) Bug fix.** A bug first introduced in v110604 was preventing s2Member from handling password strenth meters in the Stand-Alone Profile Editing Panel ( i.e. the popup version ).
398
- * **(s2Member) Documentation.** s2Member's `API Scripting` sections inside your Dashboard have been updated in various places, in support of some new API Functions/Constants introduced in the latest versions of s2Member; and also to reference relevant articles in the [s2Member Codex](http://www.primothemes.com/forums/viewforum.php?f=40).
399
-
400
- = v110620 =
401
- * **(s2Member) Bug fix.** s2Member has been updated to support GMT offset in date calculations for Registration Time. In previous versions, this was addressed using `date_i18n()`, but this update now includes the proper function call to `get_date_from_gmt()`. No changes are necessary, as this update simply corrects the way Registration Times are displayed in your list of Users. Starting with v110620, s2Member will now display Registration Times with the correct GMT offset, based on your configuration of `WordPress -> General Options -> Timezone`.
402
-
403
- = v110617 =
404
- * **(s2Member) Bug fix.** A bug first introduced in s2Member v110604 has been corrected. This bug was hindering s2Member's ability to identify MIME types for protected File Downloads.
405
- * **(s2Member) HTML 5 MIME types.** s2Member has been updated to provide support through File Download protection for HTML 5 MIME types: `video/ogg` and `video/webm`.
406
-
407
- = v110606 =
408
- * **(s2Member). MailChimp® over SSL.** s2Member has been updated to communicate with the MailChimp® API over SSL, for improved security. No action or reconfiguration is necessary, as this only affects the HTTP protocol used during communication with the MailChimp® API.
409
- * **(s2Member). Documentation update.** s2Member has been updated to mention the PHP Execution plugin, which is required to take full advantage of `"Advanced" Download Restrictions`, through the application of a File Download Key. The creation of a File Download `Key`, requires a small PHP code snippet. In order to use PHP scripting inside your Posts/Pages, you'll need to install this handy plugin ( [PHP Execution](http://wordpress.org/extend/plugins/php-execution-plugin/) ).
410
- * **(s2Member). MailChimp® data center prefix.** Starting with this release, the data center prefix ( ex: `us1`, etc ), will be recorded in s2Member's log file for MailChimp® communication. The only change here, is the inclusion of the prefix in the log file. s2Member has always used proper data center prefixes, they just weren't included in the log file until now.
411
- * **(s2Member). Amazon® S3 bug fix.** s2Member has been updated to support all regions, and not just the `US Standard`. If you were getting errors in the previous release, related to Amazon® S3 storage locations being accessed inproperly, this release of s2Member v110606 should resolve the issue for you. To put it simply, s2Member now connects to your S3 Bucket using `[bucket].s3.amazonaws.com`, instead of `s3.amazonaws.com/[bucket]`, making s2Member more compatible in this regard; and as suggested by [this documentation](http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?RESTAuthentication.html). This also improves the User experience, since your Bucket name will appear in the host name of the download, instead of just `s3.amazonaws.com`. For further discussion, please check [this thread](http://www.primothemes.com/forums/viewtopic.php?f=4&t=10054).
412
-
413
- = v110605 =
414
- * **(s2Member). Bug fix.** If File Download protection was enabled, changes introduced in the previous release, were causing some site Administrators to receive a "File Download Limit Exceeded" error under the right circumstances. This has been corrected in the release of s2Member v110605.
415
-
416
- = v110604 - 1.0 =
417
- * ... trimmed away at v110604.
418
  * Initial release: v1.0.
1
  === s2Member® Framework (Member Roles, Capabilities, Membership, PayPal Members) ===
2
 
3
+ Version: 130116
4
+ Stable tag: 130116
5
 
6
  SSL Compatible: yes
7
  bbPress® Compatible: yes
16
  Google® Checkout Compatible: yes w/s2Member® Pro
17
  ClickBank® Compatible: yes w/s2Member® Pro
18
 
19
+ Tested up to: 3.6-alpha
20
  Requires at least: 3.2
21
 
22
  Copyright: © 2009 WebSharks, Inc.
91
 
92
  == Upgrade Notice ==
93
 
94
+ = v130116 =
95
  Maintenance release. Upgrade immediately.
96
 
97
  == Changelog ==
98
 
99
+ = v130116 =
100
+ * **(Maintenance Release) Upgrade immediately.**
101
+ * **Compatibility (Issue #39)** Updated codes samples for JW Player®, to include the `mp4:` prefix when implementing RTMP streams against MP4 video files. Discussed in [this thread](http://www.s2member.com/forums/topic/cloudfront-subfolder-streaming-error/#post-35750).
102
+ * **Compatibility (Issue #51)** Updated Payflow® API to support recurring billing every six months. Discussed in [this thread](http://www.s2member.com/forums/topic/payflow-error-6-month-recurring-membership/#post-36053).
103
+ * **Bug Fix (Issue #69)** Updated multisite user imporation routine, to support a specific scenario not covered under WordPress v3.5. Discussed in [this thread](http://www.s2member.com/forums/topic/users-on-multisite/).
104
+ * **Feature Improvement (Issue #71)** s2Member® has been updated to support byte-range requests with it's default local file storage engine, served from the `/s2member-files/` directory. s2Member® has always supported byte-range requests when integrated with Amazon® CloudFront. Now it supports byte-range requests in it's default local storage engine too. This will improve compatibility with mobile devices, iTunes™ and other devices that use byte-range requests. Discussed in [this thread](http://www.s2member.com/forums/topic/any-way-to-set-accept-ranges-for-downloads/#post-15871).
105
+
106
  = v121213 =
107
  * **(Maintenance Release) Upgrade immediately.**
108
  * **Updated for compatibility with WordPress® v3.5. Backward compatibility remains for previous versions of WordPress®, as far back as WordPress® v3.2.**
214
  * (s2Member) **New website.** A new website has been launched for s2Member. Please see: [s2Member.com](http://www.s2member.com/)
215
  * **Coming soon.** Work continues on the next generation of s2Member®.
216
 
217
+ = v111220 - 1.0 =
218
+ * ... trimmed away at v111220.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
219
  * Initial release: v1.0.
s2member.php CHANGED
@@ -19,8 +19,8 @@
19
  */
20
  /* -- This section for WordPress® parsing. ------------------------------------------------------------------------------
21
 
22
- Version: 121213
23
- Stable tag: 121213
24
 
25
  SSL Compatible: yes
26
  bbPress® Compatible: yes
@@ -35,7 +35,7 @@ Authorize.Net® Compatible: yes w/s2Member® Pro
35
  Google® Checkout Compatible: yes w/s2Member® Pro
36
  ClickBank® Compatible: yes w/s2Member® Pro
37
 
38
- Tested up to: 3.5
39
  Requires at least: 3.2
40
 
41
  Copyright: © 2009 WebSharks, Inc.
@@ -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", "121213" /* !#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", "121213" /* !#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: 130116
23
+ Stable tag: 130116
24
 
25
  SSL Compatible: yes
26
  bbPress® Compatible: yes
35
  Google® Checkout Compatible: yes w/s2Member® Pro
36
  ClickBank® Compatible: yes w/s2Member® Pro
37
 
38
+ Tested up to: 3.6-alpha
39
  Requires at least: 3.2
40
 
41
  Copyright: © 2009 WebSharks, Inc.
75
  * @var str
76
  */
77
  if(!defined("WS_PLUGIN__S2MEMBER_VERSION"))
78
+ define("WS_PLUGIN__S2MEMBER_VERSION", "130116" /* !#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", "130116" /* !#distro-version#! */);
109
  /*
110
  Several compatibility checks.
111
  If all pass, load the s2Member plugin.