Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
s2member fork with E_STRICT compatibility
PHP JavaScript
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
images
includes
licensing
.gitignore
index.php
ms.txt
readme.txt
s2member-o.php
s2member.php
screenshot-1.png
screenshot-10.png
screenshot-2.png
screenshot-3.png
screenshot-4.png
screenshot-5.png
screenshot-6.png
screenshot-7.png
screenshot-8.png
screenshot-9.png

readme.txt

=== s2Member® ( Membership w/ PayPal® ) ===

Version: 111002
Stable tag: 111002
Framework: WS-P-110523

SSL Compatible: yes
bbPress Compatible: yes
WordPress Compatible: yes
BuddyPress Compatible: yes
WP Multisite Compatible: yes
Multisite Blog Farm Compatible: yes

PayPal® Standard Compatible: yes
PayPal® Pro Compatible: w/ s2Member Pro
Google® Checkout Compatible: w/ s2Member Pro
Authorize.Net® Compatible: w/ s2Member Pro
ClickBank® Compatible: w/ s2Member Pro
AliPay® Compatible: w/ s2Member Pro
ccBill® Compatible: w/ s2Member Pro

Tested up to: 3.2.1
Requires at least: 3.2
Requires: WordPress® 3.2+, PHP 5.2.3+

Copyright: © 2009 WebSharks, Inc.
License: GNU General Public License
Contributors: WebSharks, PriMoThemes
Author URI: http://www.primothemes.com/
Author: PriMoThemes.com / WebSharks, Inc.
Donate link: http://www.primothemes.com/donate/

Text Domain: s2member
Domain Path: /includes/translations

Plugin Name: s2Member
Video Tutorials: http://www.s2member.com/videos/
Pro Module / Prices: http://www.s2member.com/prices/
Forum URI: http://www.primothemes.com/forums/viewforum.php?f=4
Privacy URI: http://www.primothemes.com/about/privacy-policy/
PayPal Pro Integration: http://www.primothemes.com/forums/viewtopic.php?f=4&t=304
Professional Installation URI: http://www.s2member.com/professional-installation/
Plugin URI: http://www.primothemes.com/post/product/s2member-membership-plugin-with-paypal/
Description: s2Member® (Membership w/ PayPal®). Powerful (free) membership capabilities. Protect/secure members only content w/ roles/capabilities for members.
Tags: membership, members, member, register, signup, paypal, paypal pro, pay pal, s2member, authorize.net, google checkout, ccbill, clickbank, alipay, subscriber, members only, buddypress, buddy press, buddy press compatible, shopping cart, checkout, api, options panel included, websharks framework, w3c validated code, includes extensive documentation, highly extensible

s2Member® (Membership w/ PayPal®). Powerful (free) membership capabilities. Protect/secure members only content w/ roles/capabilities for members.

== Installation ==

= s2Member is very easy to install ( instructions ) =
1. Upload the `/s2member` folder to your `/wp-content/plugins/` directory.
2. Activate the plugin through the `Plugins` menu in WordPress®.
3. Navigate to the `s2Member Options` panel for configuration details.

= Upgrading to the latest version? =
Please visit [this page](http://www.primothemes.com/forums/viewtopic.php?f=36&t=247) for [easy upgrade instructions](http://www.primothemes.com/forums/viewtopic.php?f=36&t=247).

= Is s2Member compatible with Multisite Networking ? =
Yes. s2Member, and also s2Member Pro, are BOTH compatible with Multisite Networking enabled. After you enable Multisite Networking, install the s2Member plugin. Then navigate to `s2Member -> Multisite ( Config )` in the Dashboard on your ( Main Site ).

== Description ==

[youtube http://www.youtube.com/watch?v=FyA8Qmm2DHY /]

s2Member® (Membership w/ PayPal®). Powerful (free) membership capabilities. Protect members only content. The s2Member Framework (free) integrates w/ PayPal® (very easy), and fully supports recurring billing. s2Member supports custom Pages for registration (including Custom Registration Fields), account access, and a lot more. s2Member is now compatible with Multisite Networking too, and even with BuddyPress and bbPress. In addition, with the s2Member Pro Module (an optional paid upgrade), you can add support for unlimited Membership Levels, PayPal® Pro (w/ Pro Forms), Authorize.Net® (w/ Pro Forms), ccBill®, Google® Checkout, ClickBank®, AliPay®, advanced User Import/Export tools, the ability to use Coupon Codes, and more. Videos available at: [s2Member.com / Videos](http://www.s2member.com/videos/).

s2Member supports Free Subscribers (at Level #0), and four primary Membership Levels [1-4] (unlimited with s2Member Pro). You can label your Membership Levels anything you like. The defaults are Free, Bronze, Silver, Gold, and Platinum. s2Member also supports an unlimited number of Custom Capability Packages. Custom Capabilities are an easy way to extend s2Member in creative ways. Custom Capabilities allow you to create an unlimited number of Membership Packages, all with different Capabilities and prices.

s2Member allows you to protect Pages, Posts, Tags, Categories, URIs, URI word fragments, URI Replacement Codes for BuddyPress, Specific Post/Page "Buy Now" Access, and even portions of content within Posts/Pages/themes/plugins. Everything is configurable through the s2Member Options Panel. This makes s2Member VERY easy to integrate into any WordPress® site. With s2Member, you can also protect downloadable files, using restrictions to control how many downloads can occur within a certain amount of time; all based on Membership Level. sMember also integrates with Amazon® S3 (optional).

Each Membership Level can have different restrictions, and you could even integrate Conditionals within your content based on Member Level, or on Custom Capabilities. Both Simple (Shortcode) and Advanced (PHP) code samples are provided under `s2Member -> API Scripting`. s2Member has been fully integrated with Roles/Capabilities; already built into WordPress®. It is designed to be completely seamless, without code bloat. We've carefully structured the entire framework, in order to maximize s2Member's ability to operate with other plugins installed. For instance, s2Member is also compatible with BuddyPress; and can even be used to protect forums powered by bbPress.

You can also sell Specific Post/Page Access (membership not required), using "Buy Now" buttons. You can even package multiple Posts/Pages together into one "Buy Now" transaction. Further details are provided under `s2Member -> PayPal® Buttons -> Specific Posts/Pages`. Specific Post/Page Access, is like selling a product. Only, instead of shipping anything to the Customer, you just give them access to a specific Post/Page on your site; one that you created in WordPress®. A Specific Post/Page protected by s2Member, might contain a download link for your eBook, access to file & music downloads, access to support services, and the list goes on. The possibilities with this are endless; as long as your digital product can be delivered through access to a WordPress® Post/Page. For instance, you might sell an existing Member an additional item (without affecting their current Membership plan).

New! - [s2Member Pro](http://www.s2member.com/) is an add-on for the free version of s2Member. [s2Member Pro](http://www.s2member.com/) adds support for unlimited Membership Levels, PayPal® Pro (w/ Pro Forms), Authorize.Net® (w/ Pro Forms), ccBill®, Google® Checkout, ClickBank®, AliPay®, advanced User Import/Export tools, and the ability to use Coupon Codes. Videos available at: [s2Member.com / Videos](http://www.s2member.com/videos/).

== Screenshots ==

1. s2Member / Screenshot #1
2. s2Member / Screenshot #2
3. s2Member / Screenshot #3
4. s2Member / Screenshot #4
5. s2Member / Screenshot #5
6. s2Member / Screenshot #6
7. s2Member / Screenshot #7
8. s2Member / Screenshot #8
9. s2Member / Screenshot #9
10. s2Member / Screenshot #10

== Translations ==

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.

Please note, this is but our first step toward internationalizing s2Member and s2Member Pro. Look for further updates/improvements to come in the future.

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.

The file: `/s2member/includes/translations/s2member.pot` will be updated with each new release of s2Member.

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: `/s2member/includes/translations/`; and please feel free to [share your translation](http://www.primothemes.com/forums/viewforum.php?f=4) with the rest of the s2Member® community.

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.

== Frequently Asked Questions ==

= Is there documentation available for s2Member? =
Yes. You will need to install s2Member. The official documentation is built right into the plugin's configuration panels. Supplemental documentation is also built into the plugin, found in your Dashboard under: `s2Member -> API / Scripting` ( which covers MANY advanced topics ).

= Are video tutorials available for s2Member? =
Yes. [Video Tutorials](http://www.s2member.com/videos/) for s2Member are available [here](http://www.s2member.com/videos/).

= Is there a community forum for s2Member? =
Yes. The [forum](http://www.primothemes.com/forums/viewforum.php?f=4) for s2Member is available [here](http://www.primothemes.com/forums/viewforum.php?f=4).

= Is there a larger list of common problems/solutions? =
Yes, many [common questions/problems/tips](http://www.primothemes.com/forums/viewforum.php?f=36) are discussed [here](http://www.primothemes.com/forums/viewforum.php?f=36).

= Where can I download older versions of s2Member? =
Archived releases of s2Member are maintained [here](http://wordpress.org/extend/plugins/s2member/download/).

= Does PayPal integration work right-out-of-the-box? =
Yes, it can even generate your PayPal® Subscription Buttons for you. Everything is fully integrated. You even get to create your own Pages within WordPress® to handle Membership Options, the Login Welcome Page, etc. For advanced webmasters, there are scripting techniques that are documented as well. These will help you further develop your site and tailor it to meet your specific needs. s2Member API Scripting is NOT required however.

= How many Membership Levels are supported? =
s2Member supports Free Subscribers (at Level #0), and four primary Membership Levels [1-4] (unlimited with s2Member Pro). You can label your Membership Levels anything you like. The defaults are Free, Bronze, Silver, Gold, and Platinum. s2Member also supports an unlimited number of Custom Capability Packages. Custom Capabilities are an easy way to extend s2Member in creative ways. Custom Capabilities allow you to create an unlimited number of Membership Packages, all with different Capabilities and prices.

= How can I extend s2Member beyond four Levels? =
With s2Member "Pro" installed, you may 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`.

= Does s2Member utilize the PayPal® IPN system? =
Yes, s2Member supports automation of account activation, welcome emails, confirmations, renewals, deactivation, refunds, etc. The integration with PayPal® is seamless. s2Member even provides API Notifications, which are an added layer of functionality. These are not to be confused with the IPN service. s2Member API Notifications make it easier to integrate back-office routines, affiliate programs, list servers, or any other 3rd-party applications that should react to certain events.

= Does s2Member support PayPal® PDT/Auto-Return? =
Yes, s2Member will work with PayPal® Auto-Return/PDT (Payment Data Transfer) `On`, and also with Auto-Return/PDT `Off`. If you enable Auto-Return, you MUST also enable PDT and supply s2Member with your Identity Token. If one is enabled, the other must also be enabled; and vice-versa. There is a place to enter your PayPal® Identity Token for PDT under `s2Member -> PayPal® Options`.

= Can I use PayPal® Pro, Authorize.Net®, ccBill®, AliPay®, ClickBank®, Google® Checkout? =
Yes. [s2Member Pro](http://www.s2member.com/) is an add-on for the free version of s2Member. [s2Member Pro](http://www.s2member.com/) adds [PayPal® Pro integration](http://www.primothemes.com/forums/viewtopic.php?f=4&t=304), a PayPal® Pro Form Generator, Authorize.Net® integration, ccBill®, Google® Checkout, ClickBank®, AliPay®, advanced User Import/Export tools, support for Coupon Codes, and more. A purchase of s2Member Pro includes free lifetime upgrades; along with full access to our [video tutorial library](http://www.s2member.com/videos/).

= How does s2Member protect content from public access? =
s2Member allows you to protect Pages, Posts, Tags, Categories, URIs, URI word fragments, URI Replacement Codes for BuddyPress, Specific Post/Page Access ( Buy Now! ), and even portions of content within Posts/Pages/themes/plugins using Simple ( Shortcode ) or Advanced ( PHP ) Conditionals. Everything is configurable through the s2Member Options Panel. This makes s2Member VERY easy to integrate into any WordPress® site. With s2Member, you can also protect downloadable files, using special restrictions on how many downloads can occur within a certain amount of time. Each Membership Level can have different restrictions ( even Custom Capability Packages ). You can also integrate Conditionals within your content based on Capabilities. Both Simple and Advanced code samples are provided under `s2Member -> API Scripting`.

= Does s2Member support an account approval process? =
s2Member does not come with an approval system. That being said, what many site owners do, is they allow Free Registration ( i.e. Open Registration: `on` ). This allows visitors to register for free at Level #0, which just gives them an account. After a manual review of Level #0 accounts, an Administrator can upgrade them to Level #1 or higher; granting them access to content you've protected at those higher Levels. So the trick is to protect your content at Level #1 or higher, then allow Open Registration at Level #0. In other words, Level #0 Members will just have an account, but not actually have access to anything until you increase their Membership Level from the default Level #0. If you would like to display a custom message ( i.e. "Your account is pending review." ), you can use s2Member's Simple Conditionals to detect a Customer's Membership Level, and to display an appropriate message on your Login Welcome Page. For further details on Simple/Advanced Conditionals, please check your Dashboard under `s2Member -> API Scripting -> Simple/Advanced Conditionals`.

= Does s2Member provide an API that I can connect to? =
Yes, s2Member provides many *Advanced Scripting* techniques that are fully documented within its option panels. Code samples are provided for everything. There are several API functions that you can use, along with s2Member API Constants. This allows you to access many parts of its functionality, as well as specific Member information. Theme designers are welcome to integrate their themes/plugins with s2Member using the code samples that we provide under `s2Member -> API Scripting`. s2Member even provides API Notifications, which are an added layer of functionality. These are not to be confused with the IPN service. s2Member API Notifications make it easier to integrate back-office routines, affiliate programs, list servers, or any other 3rd-party application that should react to certain events.

= Is s2Member compatible with Quick Cache or WP Super Cache? =
Yes, there were some bugs in the beginning, but they have been fixed now. Both Quick Cache and WP Super Cache will remain compatible with s2Member. We have integrated two internal Constants that prevent these plugins from caching important Members Only areas of your site, no matter what your cache configuration might be. The two Constants are: `DONOTCACHEPAGE` and `QUICK_CACHE_ALLOWED = false`. We recommend Quick Cache over WP Super Cache though; simply because we actually developed Quick Cache, and we've done more extensive testing with the s2Member/Quick-Cache combination.

= Is s2Member compatible with Multisite Networking? =
Yes. s2Member, and also s2Member Pro, are both compatible with Multisite Networking enabled. After you enable Multisite Networking, install the s2Member plugin. Then navigate to `s2Member -> Multisite ( Config )` in the Dashboard on your ( Main Site ).

= Is s2Member compatible with the BuddyPress plugin for WordPress? =
Yes it is. In fact, we must say... the s2Member/BuddyPress combination is just awesome. These two plugins running together make all sorts of things possible.

= How does s2Member know when to demote a paid Member to a Free Subscriber? =
s2Member uses its built-in Auto-EOT System. EOT = End Of Term. Whenever you generate a PayPal® Button with s2Member, you'll configure a length for the Subscription. Depending on the type of Subscription you choose ( recurring, non-recurring, lifetime, or fixed-term ); s2Member will either use PayPal's IPN/`subscr_payment,subscr_cancel,subscr_eot` notices, or it will set an Automatic EOT Time, which is processed automatically by s2Member via WP_Cron. For each Member, you can also override the EOT Time, by forcing a specific expiration date. To manually adjust the EOT Time for a specific Member, go to: `WordPress® -> Users`, and click the Edit link next the Member you want to work on.

= How can I see more of what's going on behind-the-scene? =
s2Member comes with very sophisticated logging routines for PayPal®. One for its PayPal® IPN communication ( and resulting actions ). Another logs Return-Data processing. Another logs PayPal® API communication ( i.e. for dynamic Button Encryption, if enabled; and/or for the s2Member Pro add-on communication with the PayPal® Pro API ). You can enable all of these logging routines, by going to: `s2Member -> PayPal® Options -> Account Details -> Logging`.

= When a User/Member is demoted by the Auto-EOT System, are Custom Capabilities removed too? =
Yes, whenever a User/Member is demoted, s2Member resets their account back to a Free Subscriber. Any Custom Capabilities the Member had, will be removed.

= When a User/Member upgrades, are existing Custom Capabilities preserved? =
No, by default, s2Member will reset their Custom Capabilities to the ones listed in the Payment Button/Form that initiates the upgrade. However, starting with s2Member v3.5+, it is now possible to start your list of Custom Capabilities with a `+` sign. This tells s2Member to (ADD) a comma-delimited list of new Custom Capabilities to any that may, or may not, already exist for a given Member. So this behavior can now be modified during Button/Form generation with s2Member.

= Can s2Member implement a Captcha Code on my Login/Registration Forms? =
Yes and no. We've left this feature out of the plugin intentionally, because many site owners prefer to use Captcha plugins that encompass all aspects of their site ( including comment forms ). We recommend this one: [SI CAPTCHA Anti-Spam](http://wordpress.org/extend/plugins/si-captcha-for-wordpress/). That being said, [s2Member's Pro Forms](http://www.s2member.com/) for PayPal® Pro and Authorize.Net® ( including Free Registration Forms ) CAN be configured to use Google's reCAPTCHA service. Just add this Attribute to any Pro Form Shortcode ( `captcha="clean"` ). For further details, please check your Dashboard under: `s2Member -> PayPal® Pro Forms -> Shortcode Attributes ( explained )`.

= What if I have other questions not covered here? =
The [forum](http://www.primothemes.com/forums/viewforum.php?f=4) for s2Member is available [here](http://www.primothemes.com/forums/viewforum.php?f=4). Many [common questions/problems/tips](http://www.primothemes.com/forums/viewforum.php?f=36) are discussed [here](http://www.primothemes.com/forums/viewforum.php?f=36).

== Video Tutorials ==
Please visit s2Member.com for [video tutorials](http://www.s2member.com/videos/).

== Changelog ==

= v111002 =
* (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.
* (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.
* (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)`.
* (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.
* (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.

= v110927 =
* (s2Member) **BuddyPress v1.5 compatibility**. Misc tweaks.
* (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 )`.

= v110926 =
* (s2Member/s2Member Pro) **BuddyPress v1.5**. Updated for compatibility with BuddyPress v1.5.
* (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.
* (s2Member/s2Member Pro) **Bug fix**. Custom Registration 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.
* (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%` )*.
* (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.
* (s2Member) **s2File Shortcode**. s2Member now provides a new Shortcode: `[s2File /]`. For further details, please check your Dashboard, under: `s2Member -> Download Options -> Basic Download Restrictions`.

= v110915 =
* (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.

= v110913 =
* (s2Member) **Compatibility**. s2Member v110912+ requires WordPress® v3.2+.
* (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.
* (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).

= v110912 =
* (s2Member) **Compatibility**. This version of s2Member requires WordPress® v3.2+.
* (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`.
* (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.
* (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 )*.
* (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.
 
 Please note, this is but our first step toward internationalizing s2Member and s2Member Pro. Look for further updates/improvements to come in the future.
 
 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.
 
 The file: `/s2member/includes/translations/s2member.pot` will be updated with each new release of s2Member.
 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: `/s2member/includes/translations/`; and please feel free to [share your translation](http://www.primothemes.com/forums/viewforum.php?f=4) with the rest of the s2Member® community.
 
 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.
* (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).
* (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.
* (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.
* (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)` ).
* (s2Member Pro) **Pro Forms / Tabindex ( Bug fix )**. s2Member Pro Forms suffered from a bug related to `tabindex` conflicts whenever MANY Custom Registration Fields were configured together. Corrected in this release.
* (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).
* (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®.
* (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.
* (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 )*.

 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`.
 
 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.
* (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.

 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.
* (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`.
* (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.
* (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).
* (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` ).
* (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 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.primothemes.com/forums/viewtopic.php?f=40&t=12455) in the s2Member Codex.
* (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.

= v110815 =
* (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.
* (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.
* (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 )*.
* (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.
* (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.
* (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`.
* (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.
* (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.
* (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.
* (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.
* (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.
* (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`.
* (s2Member/s2Member Pro) **Memory.** Memory reporting is now added to log entries by s2Member.
* (s2Member/s2Member Pro) **JavaScript.** Minor optimization of s2Member's JavaScript routine.

= v110812 =
* (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.

= v110731 =
* **(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.
* **(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.
* **(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`.
* **(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).
* **(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`.
* **(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`.
 
 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.
 
 *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.*
* **(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`.
* **(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.

 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.
* **(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`.
* **(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.
* **(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.
* **(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.

= v110710 =
* **(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`.
* **(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`.
* **(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`.

= v110709 =
* **(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`.

= v110708 =
* **(s2Member/s2Member Pro) Compatibility.** s2Member and s2Member Pro have both been updated to support WordPress® v3.2.
* **(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`.
* **(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`.
* **(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.
* **(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 -> Custom Registration Fields -> Display Name`.
* **(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 ).
* **(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).

= v110620 =
* **(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`.

= v110617 =
* **(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.
* **(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`.

= v110606 =
* **(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.
* **(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/) ).
* **(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.
* **(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).

= v110605 =
* **(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.

= v110604 ( instead of s2Member v3.6 ) =
* **(s2Member/s2Member Pro). Versioning.** Starting with this release, s2Member and s2Member Pro will be released with dated versions following this format: `yymmdd`. The version for this release is: `110604`.
* **(s2Member/s2Member Pro). s2Member Security Badge.** An s2Member® Security Badge ( optional ), can be used to express your site's concern for security; demonstrating to all Users/Members that your site ( and the s2Member software ), takes security seriously. However, in order to qualify your site, you MUST generate a Security Encryption Key and pass other security standards. For more information, please check your Dashboard under: `s2Member -> General Options -> Security Badge`.
* **(s2Member/s2Member Pro). Custom Fields For BuddyPress.** s2Member can now integrate your Custom Fields into BuddyPress. Please check your Dashboard for all configuration options. You'll find BuddyPress integration available here: `DashBoard -> s2Member -> General Options -> Custom Registration Fields`.
* **(s2Member Pro). PayPal® Pro API Updates (First Payment / Recurring Profile Behavior).** s2Member's integration with the PayPal® Pro API has been updated to API v71.0. There is also a new option available to PayPal® Pro Merchants. s2Member now provides site owners the abililty to control the way the first payment in a Recurring Profile is billed. (1)Consolidate w/ Recurring Profile or (2)— Real-Time / Direct Pay ( mission critical ) —. For further details, please check your Dashboard under: `s2Member -> PayPal Options -> Account Details`. We recommend: `Consolidate w/ Recurring Profile`, because this keeps all charges associated with a particular Customer organized in your PayPal® account. No matter which option you choose, a first Initial Payment ( when applicable ), will always be charged immediately ( improved in this release ). In cases where it is absolutely critical that a Customer NOT gain access until their first payment has been fully captured, choose: `Real-Time / Direct Pay`, which tells s2Member to authorize/capture the first payment in real-time during checkout, instead of consolidating it into the Recurring Profile.
* **(s2Member). bbPress® 2.0+.** s2Member has been integrated with preliminary support for bbPress® 2.0+ ( i.e. the new plugin variation for WordPress® ). Please check your Dashboard, under: `s2Member -> Other Integrations` for further details and a list of current limitations.
* **(s2Member/s2Member Pro). Field Labels.** Some additional `for=""` attributes in all Pro Form templates. This improves the reliability of s2Member's JavaScript validation routines. Existing s2Member Pro Customers with modified Pro Form templates MUST update their `for=""` attributes in order for s2Member's JavaScript API to properly validate Customer data entry in this new release. If you're running custom Pro Form templates, check this directory for the updated default templates, so you can merge any changes you've made yourself: `/s2member-pro/includes/templates/forms/`.
* **(s2Member). Amazon S3 Support** Amazon® Simple Storage Service ( Amazon® S3 ). Amazon® S3 is storage for the Internet. It is designed to make web-scale computing easier for developers. Amazon® S3 provides a simple web services interface that can be used to store and retrieve any amount of data, at any time, from anywhere on the web. It gives developers access to the same highly scalable, reliable, secure, fast, inexpensive infrastructure that Amazon® uses to run its own global network of web sites. s2Member has been integrated with Amazon® S3, so that ( if you wish ), instead of using the `/s2member-files/` directory, you can store all of your protected files inside an Amazon® S3 Bucket.
* **(s2Member/s2Member Pro). jQuery.** Tested s2Member against jQuery version 1.4.4+, including jQuery v1.6. Fixed a bug with `.attr()` returning undefined in jQuery v1.6.
* **(s2Member). Bug fix.** Using the Replacement Code `%%current_user_login%%` in a Special Redirection URL for your Login Welcome Page would sometimes result in your Home Page being protected inadvertently, depending on configuration.
* **(s2Member/s2Member Pro). IP Address Collection.** s2Member now records the original IP Address of a each User, for tracking purposes. In previous versions of s2Member, in order to integrate some tracking systems, ( such as iDevAffiliate's server-side call option ), it was required to use the `custom=""` Attribute of your Shortcode to grab a Customer's IP Address. That's no longer required, as Replacement Codes are now made available throughout all aspects of s2Member; giving you easy access to the User's IP Address.
* **(s2Member Pro). Bug fix.** Buy Now Coupon descriptions for Specific Post/Page Access were returning invalid details, referencing installments. This bug has been resolved.
* **(s2Member Pro). SSL.** Allow `?s2-ssl` without a value ( accept as true ). This has been implemented for advanced site owners running s2Member Pro Forms.
* **(s2Member/s2Member Pro). API Functions.** New API functions for user Level, Role, Custom Capabilities. These will be documented in our official source code documentation system for s2Member ( also new ). Source code documentation will become available in the s2Member forums, shortly after the official public release of this version.
* **(s2Member/s2Member Pro). New Shortcode Attribute.** For PayPal® Buttons/Forms, you can now apply Shortcode `lc="US"`. Optional 2 character Locale Code ( i.e. Country Code ). This controls the interface language used if/when a Customer chooses PayPal® Express Checkout as their payment method, or upon clicking a Standard PayPal® Button. If unspecified, the language is determined by PayPal®, when possible, defaulting to US english when not possible.
* **(s2Member/s2Member Pro). New Shortcode Attribute.** For PayPal® Buttons/Forms, you can now apply Shortcode `rrt=""`. Regular Recurring Times ( i.e. a fixed number of installments ). Only valid w/ Membership Level Access. When unspecified ( the default ), any recurring charges will remain ongoing until cancelled, or until payments start failing. If this is set to 1 or higher the regular recurring charges will only continue for X billing cycles, depending on what you specify. This is only valid when `rr="1"` for recurring "Subscriptions". Please note that a fixed number of installments, also means a fixed period of access. If a Customer's billing is monthly, and you set `rrt="3"`, billing will continue for only 3 monthly installments. After that, billing would stop, and their access to the site would be revoked as well ( based on your EOT Behavior setting under: `s2Member -> PayPal® Options` ).
* **(s2Member/s2Member Pro). New Shortcode Attribute.** You can now apply `rra="1"`. This has to do with reattempting failed payments. It has slightly different meanings and option values, depending on whether it's used for a PayPal® Button or a PayPal® Pro Form Shortcode. For instance, for PayPal® Pro Form Shortcodes, this also controls MAXFAILEDPAYMENTS. Please check your Dashboard under: `s2Member -> PayPal® Buttons/Forms -> Shortcode Attributes Explained`.
* **(s2Member w/s2Member Pro installed). New Shortcode Attribute.** You can now apply `success="http://..."` Attribute to Standard PayPal® Buttons. Success Return URL ( optional ). s2Member handles this automatically for you. However, if you would prefer to take control over the landing page after checkout ( i.e. your own custom Thank-You Page ), you can. If supplied, this must be a full URL, starting with http://. Note, s2Member will NOT use this value if an existing account holder is being modified. s2Member handles account updates ( i.e. billing modification ) in a more dynamic way. Your Success Return URL is only applied to (new) Customers. This feature is enabled with s2Member Pro installed.
* **(s2Member/s2Member Pro). Bug fix.** When using ampersands in the `success=""` Attribute, it would break Success Return URLs on some WordPress® installations. s2Member now converts these internally to avoid the issue.
* **(s2Member). Redirection Status Codes.** s2Member's default behavior ( for good reason ), is to send a 301 redirection status when it moves unauthorized Visitors to your Membership Options Page. The reasons for this are well founded. This prevents duplicate content warnings from search engine spiders. However, some web browsers ( like Safari ) make an attempt to cache a 301 redirection into memory, thereby preventing some browsers from reaching the proper areas of your site after logging in, had they been redirected to the Membership Options Page prior. s2Member resolves this problem by detecting all major browser engines ( i.e. `msie|trident|gecko|webkit|presto|konqueror|playstation` ) and sending web browsers a `302` redirection, while still sending spiders/crawlers ( such as the Google® bot ), the proper `301` redirection status. For further details, please check [this thread](http://www.primothemes.com/forums/viewtopic.php?f=4&t=6240&p=14120#p14084).
* **(s2Member). Alternative Views.** Alternative View Restrictions ( now compatible with Ajax search plugins ). For further details, please check [this thread](http://www.primothemes.com/forums/viewtopic.php?t=3087&p=9635#p12882).
* **(s2Member Pro). Bug fix.** Corrected first/last name updates during Pro Form checkout/upgrade routines. s2Member Pro should use ( and update to ) the values submitted, even when already logged-in.
* **(s2Member/s2Member Pro). Bug fix.** s2Member was not properly filling the `$_GET["s2member_level_req"]` parameter upon certain File Download Restrictions. For instance, s2Member would sometimes return `s2member_level_req=0`, even though you protected a File inside a Custom Capability and/or Member Level sub-directory. This bug has been corrected.
* **(s2Member/s2Member Pro). Time Zone.** s2Member now displays Registration Dates in your list of Users with `date_i18n()` for localized time, as opposed to UTC time. UTC time is still the default time zone ( internally ), this is built into the WordPress® core. However, certain dates displayed on-site are easier to understand in localized time, based on your WordPress® General Settings.
* **(s2Member). Password Confirmation.** s2Member now provides a Password confirmation field on the Standard Registration Form, and in other key areas, such as Profile Editing Panels.
* **(s2Member/s2Member Pro). Password Strength Meters.** This version adds Password strength meters in various places ( where it's helpful ); including s2Member Pro Forms, and even the default Registration Form for WordPress®.
* **(s2Member). Multisite Registration.** Cleaned up the default Multisite Registration Form ( i.e. `/wp-signup.php` ), with structural CSS to better support s2Member features.
* **(s2Member/s2Member Pro). SI Captchya.** s2Member now contains default CSS styles ( just two lines ), and JavaScript validation for the popular [SI Capchya](http://wordpress.org/extend/plugins/si-captcha-for-wordpress/) plugin; and also for it's own built-in support of Google's reCAPTCHA service for s2Member Pro Forms.
* **(s2Member/s2Member Pro). Custom Field Default Values.** It's now possible to set default text values for single-line and multi-line input/textarea fields too. This only affects Custom Fields you configure with s2Member.
* **(s2Member/s2Member Pro). Custom Fields By Section.** Custom Fields by section ( i.e. dividers ). It's now possible to configure certain Custom Fields, so that they start a new section. Your sections can be simple dividing lines, or you can give them a title that will appear on your Registration and Profile Editing forms.
* **(s2Member). Bug fix.** s2Member was creating window focus/blur issues on Profile updates through its Stand-Alone version of the Profile Editing Panel ( i.e. when it was popped open in a new window ). This was causing odd behavior Firefox® 4.
* **(s2Member/s2Member Pro). Remove First/Last Name.** It is now possible to turn off First/Last/Display Name, on Registration and Profile Editing forms. For configuration options, please check your Dashboard, under: `s2Member -> Custom Registration Fields`.
* **(s2Member Pro). Data Prefill.** s2Member Pro is now capable of prepopulating some Pro Form fields when/if existing Users buy a Specific Post/Page.
* **(s2Member/s2Member Pro). Bug fix.** Fixed nested Custom Registration Field labels for multi option check boxes/radios. Firefox 4+ had issues with this.
* **(s2Member/s2Member Pro). Registration Link Expiration.** The default is built-in, it's (2) days. We don't recommend changing this unless you know what you're doing. Some developers requested the ability to change this dynamically. s2Member now makes this Filter available: `ws_plugin__s2member_register_link_exp_time`.
* **(s2Member Pro). Automatic Upgrade Routine.** s2Member Pro now places your site into maintenance mode ( temporarily ) during an s2Member Pro Upgrade routine.
* **(s2Member). New API Notification.** New "Modification" Notification now available under: `s2Member -> API Notifications`. Say that three times fast!
* **(s2Member/s2Member Pro). MailChimp® / AWeber® improvements.** This release fixes several bugs related to Automatic Unsubscribes, general list removals, and introduces a new feature call Automatic List Transitions. For further details, please check your Dashboard under: `s2Member -> API List Servers`.
* **(s2Member). Bug fix.** PayPal® Button Codes should have been including a `charset` input variable for `UTF-8` encoding. This bug has been corrected now. If you've had trouble getting special characters to appear properly in the PayPal® interface, this version should correct those issues for you.
* **(s2Member/s2Member Pro). Animated Processing... Buttons.** This release adds simple animated "processing..." messages to all form submission buttons.
* **(s2Member/s2Member Pro). MailChimp® Interest Groups.** Ability to use Interest Groups with Mailchimp List IDs. For examples, please check your Dashboard under: `s2Member -> API List Servers -> MailChimp`.
* **(s2Member/s2Member Pro). New EOT Behavior Option.** Automatic Extension of EOT Time whenever a Customer is upgrading a paid Subscription? For configuration options, please check your Dashboard under: `s2Member -> PayPal® Options -> EOT Behavior`.
* **(s2Member/s2Member Pro). Log Entries.** WordPress® :: s2Member :: s2Member Pro versions now all reported in each log entry. In addition, s2Member now provides logging for all communications with MailChimp® and AWeber® too.
* **(s2Member/s2Member Pro). s2Member Now Requires WordPress® v3.1+.** Backward compatibility for the WordPress® 3.0.x series has been removed. Also removed all `include()` references to `/wp-includes/registration.php`. Deprecated in WordPress v3.1. This file no longer needs to be included.
* **(s2Member/s2Member Pro). s2Member Updates.** New built-in news updates from s2Member developers. This appears in your Dashboard automatically, inside the s2Member menu panels.
* **(s2Member/s2Member Pro). Bug fix.** Custom Post Types were not appearing in s2Member's Specific Post/Page Button and Form Generators, even when configured properly. This bug has been resolved.
* **(s2Member/s2Member Pro). Documentation.** Built-in documentation updated throughout.
* **(s2Member/s2Member Pro). UI Panels.** Some minor UI improvements.

= 3.5.8 =
* **(s2Member). Bug fix.** The Shortcode version of s2Member's Profile Editing Panel ( i.e. `[s2Member-Profile /]` ) was not validating input fields properly. This bug was has been resolved in v3.5.8+.
* **(s2Member). Compatibility.** s2Member now requires PHP v5.2.3+ instead of just PHP v5.2+. This is because `call_user_func_array()` in early versions of PHP 5.2 did not support static class methods with a scope resolution operator. If you've had trouble getting s2Member v3.5+ to run on your server, this is likely the cause. Please make sure you're running PHP v5.2.3+.
* **(s2Member). Bug fix.** PayPal® Button Encryption was failing under some circumstances, because the PayPal® API Method `BMCreateButton` requires two decimal places at all times. The bug fix in this release does NOT require any changes to your Shortcode attributes. Rather, the encryption routine will now automatically convert numeric dollar amounts during encryption.
* **(s2Member Pro). Compatibility.** Starting with s2Member Pro v3.5.8+, Pro Cancellation Forms will automatically detect Customers that may have signed up with a Standard PayPal® Button, and provide the Customer with a link & instructions about how to cancel their "Subscription" via PayPal®. This makes it possible for site owners upgrading to s2Member Pro, to provide their Customers with just ONE Cancellation Form, which has the ability to consider both PayPal® Standard "Subscriptions", and also "Recurring Profiles"; which are used by s2Member Pro Forms.

= 3.5.7 =
* **(s2Member/s2Member Pro). Bug fix.** A bug was found in the `c_ws_plugin__s2member_systematics_sp` class file. This bug was affecting s2Member's Security Gate for WordPress® `Pages` under certain unique circumstances. One symptom of this bug ( seen with s2Member Pro installed ), was to experience a strange disappearance of (s2) Lock Icons in your list of Pages, whenever the first Page in your list was the Login Welcome Page that you configured for s2Member.
* **(s2Member Pro). Bug fix.** On a Multisite Network, s2Member Pro Forms were generating an erroneous error `Please enter a username` during a Billing Modification under certain circumstances. This has been resolved in s2Member Pro v1.5.7+.
* **(s2Member Pro). Bug fix.** s2Member Pro Export Files ( i.e. CSV export of Users/Members ) sometimes contained Custom Registration Fields ( e.g. at the end of each CSV line ) in a different order for each User/Member. This was NOT causing any negative effects with s2Member Pro during import/export. However, it was causing some confusion and extra work for site owners that use s2Member's export files for other operations. This has been corrected in the release of s2Member Pro v1.5.7. For more information, please see [this thread](http://www.primothemes.com/forums/viewtopic.php?f=4&t=2783&p=8267#p8232).

= 3.5.6 =
* **(s2Member). Bug fix.** s2Member's File Download routine was failing on some installations running WordPress® with Windows® IIS 7. This was related to the fact that Windows® IIS 7 does not like it when scripts use `Content-Length` in conjunction with `Transfer-Encoding: chunked`. This has been resolved in s2Member v3.5.6+.
* **(s2Member/s2Member Pro). Bug fix.** s2Member's ability to force SSL by adding the Custom Field `s2member_force_ssl = yes`, was failing to achieve the desired result for links generated during some Pro Form submissions. A symptom of this bug was to see s2Member generate Specific Post/Page Access Links in SSL mode when running together with s2Member Pro Forms. This was related to the fact that s2Member's SSL Filters, which handle SSL conversions were applied on the `template_redirect` Hook instead of earlier in the routine ( i.e. on the `init` Hook ). In order to improve the reliability of this feature, s2Member now attaches itself to both `init` and `template_redirect`; checking in both cases, and only processing on one or the other. Another change, s2Member now forces a new query string parameter in all URLs that are forced to SSL mode by s2Member ( you will see: `?s2-ssl=yes` ). This improves clarity for site owners implementing Pro Forms, and it also makes this feature more compatible with other plugins running in concert with s2Member and s2Member Pro. For advanced site owners, it is possible to modify the name of this special query string variable using s2Member's Filter: `ws_plugin__s2member_check_force_ssl_get_var_name`. If you're interested in this and need assistance, please check the [s2Member forum](http://www.primothemes.com/forums/viewforum.php?f=4).
* **(s2Member Pro). Bug fix.** The Pro Login Widget for s2Member ( when integrated via PHP ), was not appearing on some sites running early versions of PHP v5.2. This bug has been resolved in s2Member Pro v1.5.6+.

= 3.5.5 =
* **(s2Member). New feature.** It is now possible to configure Custom Registration Fields with s2Member that are NOT actually visible during the registration process. Instead, they will only be visible after registration ( i.e. during a Profile edit ). In order to accomplish this, you will need to choose this option from the dropdown menu for a specific Custom Registration Field that you configure with s2Member. This option is in the dropdown menu entitled: `Allow Profile Edits?`. You can choose: `Yes ( editable after registration / invisible during registration )`.
* **(s2Member Pro). Feature Improvement.** The display of the Coupon Code field on Pro Forms has been improved ( i.e. enhanced with an icon and the "Apply Coupon" button is now floated to the right to save space ).
* **(s2Member Pro). Compatibility / Bug fix.** This is related to some bug reports regarding `500 Internal Server Errors`. s2Member is now compatible ( i.e. capable of running in concert with ) other plugins that attempt actions dealing with `$current_user` on the `plugins_loaded` Hook for WordPress®. In an ideal world, other plugins should NOT be doing this, because the WordPress® core framework does not initialize `$current_user` until just before the `init` Hook is fired, which comes after the `plugins_loaded` Hook. However, in an effort to maximize s2Member's compatibility, s2Member has been modified to work around this potential bug, by delaying the initialization of its Filter against `user_has_cap` just a bit. If you were experiencing `500 Internal Server Errors` in previous releases of s2Member, you will want to upgrade to this version for improved compatibility with other plugin combinations.
* **(s2Member Pro). Bug fix.** s2Member Pro Forms for Free Registration were not picking up Custom Registration Fields configured at specific Membership Levels; other than Level #0. This has been resolved in s2Member Pro v1.5.5+.
* **(s2Member Pro). Feature Improvement.** This change is related to the basic ( default ) CSS rules applied to Pro Forms generated by s2Member Pro. In this release, Pro Forms now utilize the CSS3 `box-sizing` specification to correct slight imperfections in the width of forms fields ( i.e. the difference between `select` and `input` ). This specification is supported by all modern browsers, including IE8. s2Member also degrades with a "best guess" workaround for IE 7 browsers. Reference article [here](http://css-tricks.com/box-sizing/).
* **(s2Member/s2Member Pro). Roadmap.** Barring any serious bug reports, this will be the last release in the 3.5.x series of s2Member and the 1.5.x series of s2Member Pro. The next releases will include substantial changes ( internally ) related to the handling of variables; further optimizing the entire codebase. In addition, there are plans to integrate some new functionality for Content Dripping in the next release. The next releases should be ready around the end of April 2011.

= 3.5.4 =
* **(s2Member). Bug fix.** When `s2member_force_ssl = yes`, the s2Member SSL/non-SSL Filters applied to `content_url` and `plugins_url` are now off by default. These two specific areas prevent clashes with some themes.

= 3.5.3 =
* **(s2Member). Feature improvement.** s2Member's Bridge integration with bbPress®. It is now possible to allow bbPress® forums to be available to the public ( with read-only access ), and to restrict participation access by Level # instead of locking everything down entirely. You now have the choice whenever you install and/or re-install the bbPress® Bridge/plugin for s2Member. In addition, s2Member makes a new API function available for bbPress® `current_wp_user_is()`. This will be useful to developers integrating bbPress® with s2Member in creative ways. For further details, please check your Dashboard under: `s2Member -> API Bridges -> bbPress®`.
* **(s2Member Pro). Feature improvement.** s2Member Pro Forms for Free Registration access are now more versatile. It is now possible to configure your Pro Form Shortcode so that Free Registrants come into your site with something other than the default Level #0 Access Level. For example, if you need to, you can change the Form Attribute `level="0"`, to `level="1"`, attach Custom Capabilities with the `ccaps=""` Attribute, and even limit this access to a certain timeframe with `tp="30" tt="D"` ( i.e. 30 Days ). So this Form is very flexible now. It can be used to allow free access to just about any aspect of your service. For more information on this topic, please check your Dashboard under: `s2Member -> PayPal® Pro Forms -> Free Registration Forms`. Also works with Pro Forms for Authorize.Net®.
* **(s2Member). New Filters.** s2Member v3.5.3 adds two new WordPress® Filters that allow developers to further customize the inner workings of s2Member ( among 300+ other existing Filters already established for s2Member ). You will find these two new Filters in the source code of the free version: `wp_register_location` and `ws_plugin__s2member_redirection_url_after_modification`. For Multisite Networks, there is also this Filter available: `wp_signup_location`. If you're a novice site owner, please keep tabs on our [forums](http://www.primothemes.com/forums/viewforum.php?f=4) for examples on how to utilize these new Filters. We're sure this topic will come up.
* **(s2Member). New Filters.** s2Member v3.5.3 adds two new WordPress® Filters that allow developers to further customize tinyURLs generated for email confirmations. You will find these two new Filters in the source code of the free version: `ws_plugin__s2member_register_link_gen_alternative` and `ws_plugin__s2member_sp_access_link_gen_alternative`. I've posted [an example](http://www.primothemes.com/forums/viewtopic.php?f=4&t=1636&p=7677#p7677) of how to use these in the forums. So these new Filters make it possible to use a shortening service that you prefer over tinyURL ( but you will have to integrate it yourself ). In a later release, we'll try to add some pre-integrated alternatives into the Dashboard for s2Member.
* **(s2Member). New Replacement Code.** s2Member's EOT/Deletion Notification now provides additional detail about the actual event that triggers this API Notification through a new Replacement Code: `%%eot_del_type%%`. For further details on this new Replacement Code, and a list of possible values, please check your Dashboard under: `s2Member -> API Notifications -> EOT/Deletion Notifications`.
* **(s2Member). Bug fix.** A common error that site owners see in s2Member's log file is `unable to verify POST vars`. This is due to issues with various hosting companies not being configured with either cURL and/or `allow_url_fopen` -> `on`. However, we recently discovered that WordPress® ( i.e. via the `WP_Http` class ) will attempt to officially verify the SSL certificate issued through remote connections to Payment Gateways integrated with s2Member. This can cause an additional roadblock on some servers, because often they are not capable of officially verifying SSL certificates. They lack the extended configuration necessary to do so. In other words, this default behavior in the `WP_Http` class file can ultimately lead to `unable to verify POST vars` in s2Member. To workaround this compatibility issue, s2Member now specifies `sslverify = false` in communications to Payment Gateways. This should work to further eliminate sightings of this error in your log files. Also important to note; this does NOT pose a security issue, because all communications with Payment Gateways have authentication mechanisms already in place. Either through explicit API Key validation or through server-to-server checksum verifications related to IPN data received by s2Member silently behind-the-scene.
* **(s2Member). Bug fix.** s2Member's Auto-Return/PDT handler was sometimes triggering the error `unable to verify POST vars` under special circumstances that are applicable with PayPal's Enchanced Recurring Billing service, and sometimes with Subscriptions that are paid for by credit card, instead of through a PayPal account; again related to PayPal's ERP add-on service. This has been resolved in s2Member v3.5.3+. In some special cases, PayPal® does not provide any data through PDT ( Payment Data Transfer ) and so s2Member must recover gracefully by asking the Customer to check their email. This does not affect s2Member's ability to process a Customer's transaction, but it does require s2Member's processing to take place entirely behind-the-scene via the IPN service, instead of immediately after checkout ( in a very few special cases ). This bug fix may or may not affect you, depending on what you're selling, and depending on whether you're using PayPal's ERP service or not.
* **(s2Member/s2Member Pro).** Bug fix. Supression of PHP errors triggered by web hosts that disable `set_time_limit()` via `@set_time_limit()`. Also applied to `@ignore_user_abort()` within s2Member's IPN handlers that need to finish processing even when Payment Gateways break the connection early. Resolved in s2Member v3.5.3+.
* **(s2Member). Bug fix.** Custom Registration Fields that are configured for s2Member as being `uneditable`; which are subsequently disabled for Users attempting to edit their Profile ( e.g. with `disabled="disabled"` ), are now excluded from s2Member's JavaScript validation routines; as they should be. Resolved in s2Member v3.5.3+.
* **(s2Member). Bug fix.** On some web hosts s2Member was generating the error: `Cannot modify header information, headers already sent` during activation on a Multisite Blog Farm. Resolved in s2Member v3.5.3+.
* **(s2Member Pro). Bug fix.** Invalid link corrected in PayPal® Options panel for download of `/s2m-pro-extras.zip`. Note, this file is NOT to be installed, it just contains some additional code samples and API documentation for payment gateways that is sometimes useful to developers integrating s2Member for their clients.
* **(s2Member Pro). Bug fix.** Under certain scenarios, s2Member's "Force SSL" functionality was incorrectly parsing content in its output buffer; ( i.e. an issue with regex in `preg_replace_callback()` ). A symptom of this bug was to experience SSL-enabled links in navigation menus for some themes; and possibly in other areas, such as login links after a Pro Form checkout was completed successfully. s2Member's intention is only to satisfy browser requirements for SSL media and other embedded content; and NOT to convert all navigation links over to SSL. This issue has been resolved in the latest release of s2Member Pro v1.5.3+.
* **(s2Member Pro). Bug fix.** s2Member Pro Forms integrated with PayPal® Pro and Authorize.Net® were not allowing flexible timeframes whenever `rr="BN"`. This was preventing advanced site owners and developers from selling fixed-term access for non-standardized term lengths. For instance, it is now possible to sell a 13 month ( fixed-term ) "Buy Now" Membership by adjusting your Pro Form Shortcode in the following way: `tp="0" tt="D" ta="0" rp="13" rt="M" ra="100.00" rr="BN"` ( BN = Buy Now ). For further details, please check your Dashboard under: `s2Member -> PayPal® Pro Forms -> Shortcode Attributes Explained`.
* **(s2Member). BuddyPress Multisite Bug fix.** When s2Member was running together with BuddyPress on a Multisite Network, if s2Member's Multisite (Config) was NOT offering Blogs, it was inadvertently disabling Open Registration for BuddyPress all together; regardless of the configuration value for Open Registration. In other words, in previous versions of s2Member, the only way to run BuddyPress effectively on a Multisite Network was to choose the Blog Farm option and set Blog counts to `0`. Starting with s2Member v3.5.3, it is now possible to run s2Member/BuddyPress without choosing to allow Blog creation, and without needing to use the `0` Blog hack. This bug should be resolved in s2Member v3.5.3+.
* **(s2Member). Bug fix.** Strange behavior ( i.e. 500 internal server errors ) were reported in PHP v5.2.17 / reproducible on GoDaddy servers. This quirkiness was related to the `map_meta_cap` Filter in WordPress®, where s2Member deals with permissions on a Multisite Network for Blog Farm Administrators. However, due to the nature of this quirkiness, it could also have affected standard WordPress® installations running PHP v5.2.17. This bug has been resolved by modifying s2Member's Filter against this troublesome `map_meta_cap` Filter. Instead of mapping meta capabilities, s2Member now Filters against `user_has_cap`. This technique not only avoids the troublesome behavior in PHP v5.2.17, but also optimizes s2Member on a Multisite Network just a bit further.
* **(s2Member). Bug fix.** Bug related to output buffering. This was preventing large file downloads protected by s2Member on some installations; depending on other plugins running in concert with s2Member. s2Member now implements `while(@ob_end_clean())` to be sure any/ALL output buffers are cleaned before chunked file delivery begins.

= 3.5.2 =
* Framework updated; general cleanup.
* **(s2Member/s2Member Pro). Optimizations.** Further internal optimizations applied through configuration checksums that allow s2Member and s2Member Pro to load with even less overhead now.
* **(s2Member/s2Member Pro). Optimizations.** Further internal optimizations applied with Hook priorities that allow s2Member and s2Member Pro to load dynamic CSS/JS files with even less overhead now.
* **(s2Member). Bug fix.** Due to changes in WordPress® 3.1+, s2Member was including it's JavaScript routines twice on the `/wp-login.php` page. This has been resolved in s2Member v3.5.2+.
* **(s2Member). Hook change.** Attn WP developers: s2Member's Hook `_ws_plugin__s2member_force_ssl_buffer_tags` is now `_ws_plugin__s2member_force_ssl_buffer_tags_array`.
* **(s2Member). API Constant change.** Attn WP developers: s2Member's API Constant `S2MEMBER_CURRENT_USER_SUBSCR_ID` is now accompanied with a new API Constant `S2MEMBER_CURRENT_USER_SUBSCR_OR_WP_ID`. The values returned by these API Constants have changed (slightly). For further details, check your Dashboard under: `s2Member -> API Scripting -> API Constants`.
* **(s2Member Pro). Bug fix.** s2Member's ccBill® DataLink routines were sometimes generating the error `Too Many Connections` due to an invalid data storage routine under a delayed scenario. This has been resolved in s2Member v3.5.2+.

= 3.5.1 =
* **(s2Member). Bug fix.** Errors regarding `class-autoloader.inc.php / glob()`, which were associated with installation servers running NFS ( network file systems ) have been corrected in this release.
* **(s2Member). Bug fix.** Errors regarding `ws_plugin__s2member_trim_deep()` during an upgrade from previous versions of s2Member have been corrected in this release.

= 3.5 =
* **(s2Member/s2Member Pro). WordPress® 3.1.** Updated for full compatibility with WordPress® 3.1 ( s2Member also remains compatible with the WordPress® 3.0.x series ).
* **(s2Member/s2Member Pro). Speed Optimizations.** s2Member's entire codebase has been re-organized into PHP classes containing s2Member's static functions ( dev note: all of s2Member's Hooks/Filters remain as they were ). This new infrastructure allows s2Member to take full advantage of PHP's built-in [SPL Autoload](http://php.net/manual/en/language.oop5.autoload.php) extension. This means s2Member's source code is loaded ( only on-demand ) as function calls are made within core routines. So instead of loading s2Member's entire codebase into WordPress®; only the objects/methods needed during the processing of particular page will be included. Long story short, this release of s2Member is much faster than previous versions. For advanced site owners, this will make it more feasible to run s2Member in concert many other plugins; even on shared hosting.
* **(s2Member). New feature.** You can now force WordPress® to use your Membership Labels instead of referencing them by s2Member Level #. For further details on this topic, check your Dashboard under `s2Member -> General Options -> Membership Levels/Labels`.
* **(s2Member). Profile Shortcode.** s2Member now provides a built-in Shortcode ( `[s2Member-Profile /]` ) that generates an inline Profile Modification Form; which can be inserted into any Post/Page ( such as your Login Welcome Page ) or even into a Text Widget if you like. This feature is ( in addition to ) the existing `/?s2member_profile=1` stand-alone version that has always been available with s2Member.
* **(s2Member). New feature.** s2Member now supports Remote Header Authorization on File Downloads ( optional ). Remote Header Authorization allows access to file downloads through an entirely different approach ( again, using this is 100% optional ). Instead of asking the Member to log into your site through a browser, a Member can be prompted automatically, to log in through HTTP Header Authorization prompts; which is the same technique used in more traditional security systems via .htaccess files. In other words, Remote Header Authorization makes it possible for your Members to access files through remote applications that may NOT use a browser. This is often the case when a Member needs to access protected files through a software client like iTunes®; typical with podcasts. For further details, please check your Dashboard under `s2Member -> Download Options -> Remote Auth / Podcasting`.
* **(s2Member). New feature.** s2Member now supports a new option in its Login/Registration Design panel. If you have WordPress® 3.1+ installed, you can add your own raw HTML/PHP code to the very bottom of your default Login/Registration Forms with s2Member. Please check your Dashboard under: `s2Member -> General Options -> Login/Registration Design`.
* **(s2Member). New feature.** You can now tell s2Member to *encrypt* your PayPal® Buttons automatically for added security. When this feature is enabled, all of your PayPal® Button Shortcodes will produce *encrypted* PayPal® Buttons. This improves security against fraudulent transactions. To turn this feature on, please log into your Dashboard and navigate to `s2Member -> PayPal® Options -> Account Details`. You'll need to provide s2Member with your PayPal® API Username/Password/Signature; and then enable `Button Encryption`. Additional instructions are provided in your WordPress® Dashboard. NOTE: This feature does NOT require you to have a PayPal® Pro account. If you do, that's fine, but it's not a requirement. Also, this particular feature is ONLY applicable to PayPal® Buttons ( it does NOT work with Pro Forms, nor does it need to ).
* **(s2Member Pro). CSV Exportation.** s2Member now provides two different export formats. 1. Default CSV ( for easy re-importation ). 2. Easy-Read CSV ( improved readability; CANNOT be re-imported ). In addition to these new options, ALL CSV export formats now include column headers too. This makes CSV files easier to read inside applications like MS Excel or OpenOffice/Calc.
* **(s2Member Pro). Authorize.Net®.** s2Member Pro now provides support for Authorize.Net® integrations. Authorize.Net® is a leading provider of payment gateway services, managing the submission of billions of transactions to processing networks on behalf of merchant customers. Authorize.Net is a solution offered by the CyberSource Corporation, a wholly owned subsidiary of Visa (NYSE: V).
* **(s2Member Pro). ccBill®.** s2Member Pro now provides support for ccBill® integration. ccBill® is a great choice when you need to process transactions discreetly on an adult-oriented site. Drawing on its years of experience and proven payment processing platform, ccBill® has a solution that will not only meet the requirements of your consumers, it will also help address the specific needs of your business.
* **(s2Member Pro). New feature.** s2Member now allows for the inclusion of the Pro Login Widget directly into a theme/plugin file ( optional ). Example usage: `<?php echo s2member_pro_login_widget(); ?>`. It is also possible to configure widget options dynamically. For further details, please check the documentation inside this file: `/s2member-pro/includes/functions/api-functions.inc.php`.
* **(s2Member/s2Member Pro). Optimization.** If/when s2Member's logging/debugging mechanisms are enabled through the Dashboard, s2Member is now capable of archiving its own log files. Oversize log files ( i.e. larger than 2MB ) are automatically renamed with `...-ARCHIVED-{time}.log` to prevent s2Member from creating ridiculously large log files that may have otherwise built up over a longer period of time.
* **(s2Member/s2Member Pro). New Profile field.** A new drop-down menu has been added to the administration editing panel for User/Member Profiles. This new drop-down menu allows a site owner to specify which Payment Gateway a Member's payments are associated with. s2Member will automatically configure this field for you, but it is editable none the less. NOTE: If you are upgrading from a previous version of s2Member, you may notice that s2Member will NOT have this information on file for any existing Members that you obtained prior to installing s2Member v3.5+. You may want to go through and update the value of this field for each Member after upgrading. That being said, this new field is only provided for clarity; and for future compatibility. In other words, there is no functionality lost if the Payment Gateway field is left blank for previously existing Members.
* **(s2Member). New feature.** s2Member now supports a new Replacement Code for Login Redirection URLs, and also for URI Restrictions ( `%%current_user_ccaps%%` ). This is the current User's set of Custom Capabilities. If the current User has multiple Custom Capabilities, they will be separated by hyphens; allowing this string to be used in the formulation of slugs for a Special Login Redirection URL; which could be configured differently for each Custom Capability Package that you offer.
* **(s2Member). New feature.** s2Member can now automate un-subscribe/opt-out removals for any List Servers that you've integrated ( i.e. MailChimp®, AWeber® ). s2Member is also capable of handling everything based on your own personal configuration preferences. You can choose which Events you consider grounds for List Removal. For further details, please check your Dashboard under: `s2Member -> API / List Servers -> Automate Un-Subscribes`. During a paid Subscription Modification, it also possible to have Members un-subscribed from Lists at their existing Membership Level#, while at the same time; subscribing them to Lists you've configured at the Membership Level they are upgrading/downgrading to.
* **(s2Member). New feature.** Brute Force IP/Login Restrictions. As with any Membership system, it is possible for someone to try and guess Username/Password combinations by attempting a Brute Force Attack; whereby multiple/repeated logins are strategically attempted with various Username/Password combinations until a correct guess is made. It is NOT likely that you'll be attacked in this way, but it's still a good idea to protect your system; just in case somebody tries this. s2Member thwarts this behavior by monitoring failed login attempts that occur within a short period of time. Whenever s2Member detects an IP address ( i.e. a remote user ) that is consistently failing to enter a valid Username/Password, a temporary ban is created; preventing additional attempts from taking place for 30 minutes. This temporary ban, will ONLY affect the offending IP address. For further details and configuration of this new feature, please check your Dashboard under: `s2Member -> General Options -> Brute Force IP/Login Restrictions`.
* **(s2Member Pro). New feature.** The s2Member (Pro) Login Widget now includes Login/Logout Redirection options. For further details, please check your Dashboard under: `Appearance -> Widgets -> s2Member (Pro) Login Widget`.
* **(s2Member/s2Member Pro). Compatibility.** s2Member now precedes all of its calls to these two functions with an @ sign ( `@ini_get` and `@ini_set` ). This suppresses errors generated by PHP whenever these functions are disabled on the installation server. This is a very minor issue, as most hosting companies DO allow these functions to be called through PHP. At any rate, the preceding @ sign now puts s2Member inline with WordPress® standards in this regard.
* **(s2Member). WP 3.1 Compatibility.** When "Redirect Members away from the Default Profile Panel?" is set to ( <code>Yes</code> ), s2Member will take an initiative to further safeguard ALL <code>/wp-admin/</code> areas of your installation; not just the Default Profile Panel. Also, starting with WordPress® 3.1+, setting this to ( <code>Yes</code> ) tells s2Member to dynamically modify links/titles in the new Admin Bar that can be enabled on WordPress® 3.1+. s2Member will force links to your Login Welcome Page instead of the Default Profile Panel; and Dashboard links are removed for non-Admin accounts ( as they should be ).
* **(s2Member). New feature.** It is now possible to delete/reset IP Restrictions ( i.e. temporary bans ) caused by a security breach in your configuration of s2Member's IP Restrictions. Some site owners have reported complaints from their Customers about the error `503 / Too Many IP Addresses`. This is not a bug; it is the result of a temporary ban that s2Member imposes automatically; based on your IP Restriction configuration in the General Options panel for s2Member. Improving upon this functionality in s2Member v3.5+, you can now pull up a Users account in your Dashboard and delete/reset temporary bans on a per-User basis; as needed for customer service. For further details, or to delete/reset ALL IP Restrictions at once, please check your Dashboard under: `s2Member -> General Options -> IP Restrictions`.
* **(s2Member). Multisite auto-patcher.** When running on a Multisite Network with `Automatically Patch WordPress® = yes`, s2Member is now capable of hooking into the automatic upgrade routines for WordPress® so that future updates to the WordPress® core framework will remain synchronized with core patches required by s2Member ( and a notice regarding patches automatically synchronized will be displayed during the core upgrade routine in your Dashboard ). This is ONLY applicable if you're running s2Member on a Multisite Network. For further details, check your Dashboard under: `s2Member -> Multisite (Config)`.
* **(s2Member Pro). Multisite Blog Farms.** On a Multisite Blog Farm, it is now possible for child Blog Administrators running s2Member Pro to utilize the advanced Import/Export routines provided by the s2Member Pro module.
* **(s2Member/s2Member Pro). New feature.** It is now possible to (ADD) Custom Capabilities through a Subscription Modification Button/Form. By default, a Checkout Button or Form generated by s2Member is designed to set and/or reset a Member's Custom Capabilities to the ones you specify in the Button/Form Code. However, starting with s2Member v3.5+, you can tell s2Member to (ADD) additional Custom Capabilities to any that already exist for a particular Member. This is accomplished on a per Form/Button basis by preceding your comma-delimited list of Custom Capabilities with a (+) sign. For further details on this topic, click the [?] icon next to the Custom Capabilities field in any Button/Form Generator supplied by s2Member.
* **(s2Member). Compatibility.** s2Member's data encryption routines have always used a URL-safe version of Base64 Encoding to transfer data; whereby the Base64 padding character `=` is replaced with a URL-safe `.`. This routine has been modified to replace `=` with `~` instead of `.`; making s2Member more compatible with internal WordPress® functions like `site_url()` which refuse to generate URLs containing double `..` occurrences. Backward compatibility for existing data remains intact though; so this change only serves to improve s2Member's compatibility with WordPress®.
* **(s2Member). New cookie.** s2Member has always used three temporary/encrypted cookies to authenticate a newly paid Customer. Starting with s2Member v3.5, there are now four cookies all together ( `s2member_subscr_gateway`, `s2member_subscr_id`, `s2member_custom`, `s2member_level` ). The new addition is `s2member_subscr_gateway`. The value of this cookie is also stored internally; it's associated with a Customer's Paid Subscr. ID. You can edit the Paid Subscr. Gateway/ID if you'd like. You'll find a drop-down menu on the [Edit] page for each Member.
* **(s2Member/s2Member Pro). New feature.** s2Member's Button and Form Generators now provide a customer service tool that allows a site owner to generate Membership Registration Access Links on their own ( if/when needed ). This tool accompanies the Specific Post/Page Link Generation tool that has been a part of previous versions of s2Member. So these tools working together, now make it possible to create Access Links for both types of functionality. Again, these tools are provided for convenience. They are only intended to help site owners with customer service issues; they are NOT a required aspect of s2Member's integration with WordPress®.
* **(s2Member Pro). New feature.** If you're using Pro Forms with s2Member Pro; particularly if you run a Multisite Blog Farm, you can now set this Constant in your `/wp-config.php` file: `define('S2MEMBER_PRO_AUTO_FORCE_SSL', true);`. This tells s2Member Pro to auto-force SSL on any Post/Page that contains a Pro Form Shortcode. This is useful if you're running a Blog Farm and SSL is already provided/configured for all Site Owners on your Network. Otherwise, the method of using a WordPress® Custom Field `s2member_force_ssl = yes` on a per-Post/Page basis works fine.
* **(s2Member Pro). Desc attribute change.** The maximum characters allowed in the `desc=""` attribute for Pro Form Shortcodes ( and only for Pro Forms ) is now `100` characters. In previous versions the max length was `127`. This has been lowered to `100` so that s2Member has plenty of room for dynamically generated annotations regarding discounts via coupon codes. FYI: most Payment Gateways impose an upper limit ( e.g. PayPal® 127 max total ). In other words, s2Member must reduce max characters allowed in the `desc=""` attribute so it has plenty of room for its own annotations.
* **(s2Member). Compatibility.** s2Member's handling of protected file delivery through `chunks` has been updated to support the full valid protocol of `Transfer-Encoding: chunked`. This should eliminate any remaining file delivery issues on GoDaddy shared hosting accounts and the like.
* **(s2Member). Compatibility.** s2Member's directory locations for `/s2member-files/` and `/s2member-logs/` are now nested into a sub-directory of `/app_data/` ONLY on Windows® servers. This way all files in these directories will be secured from public access in a Windows® environment. On a Windows® server, the `/app_data/` directory name is special. Files within a directory with this special name are automatically protected from public access, without needing to create an `.htaccess` workaround, or use a `web.config` file. In addition, s2Member now makes two WordPress® Filters available ( `ws_plugin__s2member_files_dir` and `ws_plugin__s2member_logs_dir` ) giving developers the ability to move their protected files and/or logs to a custom directory of their choosing; if/when this is needed in special cases.
* **(s2Member/s2Member Pro). New Hook for Multisite Blog Farm developers.** s2Member now makes a new Hook available; allowing Multisite Blog Farms to prevent the s2Member Pro module from loading on certain child Blogs, or under other special circumstances. You'll find this Hook inside `/s2member/s2member.php` ( `ws_plugin__s2member_load_pro` ).
* **(s2Member/s2Member Pro). Multisite Blog Farms.** The dynamic mutation of s2Member's built-in documentation has been updated to provide better ( i.e. more appropriate ) information to Administrators of child Blogs on a Multisite Blog Farm.
* **(s2Member Pro). Instruction.** Additional instructions have been added to the s2Member Pro panel for PayPal® Pro Forms. This new information includes details regarding workarounds when you do NOT have access to a PayPal® *Pro* account. FYI: It is no longer an *absolute requirement* that a site owner have a PayPal® Pro account; you can still use Pro Forms; as long as you have PayPal® Express Checkout ( which is free ).
* **(s2Member). Conflict prevention.** s2Member now provides warnings in the Dashboard whenever novice site owners attempt to configure their Login Welcome Page or Membership Options Page as their Home Page ( i.e. static page ) for WordPress®; or as the static Posts Page. These conflict warnings will appear under: `WordPress® -> Reading Options` when/if a configuration conflict arises.
* **(s2Member/s2Member Pro). Documentation.** Documentation updated/improved throughout several areas of s2Member and s2Member Pro.

= And these bugs were corrected in v3.5 ( Changelog cont. ) =

* **(s2Member). Multisite bug fix.** When s2Member is installed on a Multisite Network, it is now capable of dealing with centralized Users accounts that are being shared across multiple sites in the Network. In other words, s2Member v3.5+ prevents WordPress® from generating `username/email exists` errors through front-end forms whenever a User that exists on one site attempts to register on another. In order to accomplish this, s2Member v3.5 introduces one additional Multisite patch for your `/wp-includes/ms-functions.php` file, making it possible for WordPress® to add/remove existing User accounts from one site to another (gracefully); just like that which is supported natively in the WordPress® Dashboard already. NOTE: after updating to s2Member v3.5+, please be sure to re-run your Multisite (Config) patches. You will find these patches in your Dashboard under: `s2Member -> Multisite (Config)`. And yes, this is also compatible with WordPress® v3.1.
* **(s2Member). Bug fix.** The built-in Profile Editing panel for s2Member that resides at `/?s2member_profile=1` contained an extra ( i.e. double ) closing tag for the `form` element. This has been corrected in s2Member v3.5+.
* **(s2Member Pro). Bug fix.** A Pro Form configuration error, `Invalid "rp, rt" attributes.`, was being triggered whenever the Pro Form Attribute `rp` was greater than 1 year; even for Buy Now (BN) transactions. This was NOT the intended behavior, as the 1 year recurring limitation applies only to PayPal® Recurring Profiles, and should NOT have been limiting Buy Now transactions under 5 years. This bug/limitation has been resolved in the latest release. Maximum Subscription length for PayPal® Pro Recurring Profiles is 1 year, and maximum Subscription length for Buy Now transactions is 5 years; or 1 Lifetime also being possible.
* **(s2Member Pro). Bug fix.** A Pro Form configuration error, `attribute is "D", and "tp" ( Trial Period ) > 7` was corrected. This should have been testing for 365 days instead of 7.
* **(s2Member Pro). Bug fix.** The AliPay® integration file `alipay-notify.inc.php` was updated to correct an incompatibility issue with AliPay® custom variables. A symptom of this bug was ( no email being received after AliPay® checkout ). This bug has been resolved in s2Member Pro v1.5.
* **(s2Member Pro). Bug fix.** The AliPay® integration file `alipay-notify.inc.php` was not exiting with the proper `success` status in its communication with AliPay®. A symptom of this bug was repeated notifications for a single transaction; thereby causing multiple emails to each Customer under the right circumstance. This bug has been resolved in s2Member Pro v1.5.
* **(s2Member Pro). Bug fix.** s2Member Pro was sometimes processing API Payment Notifications in duplicate for AliPay®, ClickBank®, ccBill®, and Google® Checkout integrations. This has been resolved in s2Member Pro v1.5+.
* **(s2Member Pro). Bug fix.** s2Member Pro was sometimes delivering ClickBank® Customers to a Return-Page with a default POST vars error because of an invalid `proxy_use / ty-email` specification. This has been resolved in s2Member Pro v1.5+.
* **(s2Member Pro). Bug fix.** s2Member Pro Form integration with PayPal's Pro API, was suffering from a minor glitch caused by date/time conflicts between the s2Member installation server ( i.e. your server ) and PayPal's API server. In some rare cases, s2Member was attempting to start new Recurring Profiles in the past ( at least in the eyes of the PayPal® API server ); which could be in a different time zone. s2Member Pro now avoids this potential conflict by padding start dates with 12 hour offsets; making s2Member more reliable in this regard.
* **(s2Member). Bug fix.** When s2Member was running together with BuddyPress, `wp-login.php?redirect_to=` logic implemented by BuddyPress was conflicting with s2Member's handling of `wp-login.php?redirect_to=`, including Login Welcome Page redirection. s2Member v3.5 resolves this BuddyPress conflict by removing all Filters applied by BuddyPress to `login_redirect`; thereby eliminating the conflict all together. This conflict was resolved in favor of s2Member, because s2Member provides a very comprehensive option configuration for this behavior in it's General Options panel.
* **(s2Member). Bug fix.** s2Member's Alternative View Protection was not working properly when the `All` setting was applied to child/sub Category restrictions. At least, not in the same way that s2Member handles all of its other child Category restrictions. This bug has been corrected in v3.5 so that all child/sub Categories of a protected parent Category are filtered by s2Member's Alternative View Protection when this option is set to `All`.
* **(s2Member Pro). Bug fix.** s2Member's integration with AliPay® was attempting to process duplicate IPN responses from the AliPay® server. Apparently AliPay® finds it necessary to continue prodding the IPN handler multiple times. In order to prevent duplicate processing, s2Member now employs a Transient array of already-processed Notification IDs; allowing it to silently ignore duplicate IPNs ( they will still be logged though, as they should be ).
* **(s2Member). tinyURLs.** s2Member's limited use of the tinyURL service for shrinking links inserted into email messages has been improved upon in this release. As of s2Member v3.5+, all tinyURLs are now appended with your domain name; making them easier for Customers to read, and improving their overall appearance.
* **(s2Member). Bug fix.** Under certain circumstances, s2Member was generating administrative URLs with `/wp-admin/?page=...` instead of `/wp-admin/admin.php?page=...`. A common symptom of this bug was to see an error in your Dashboard, something like: `You do not have permission to access this page`. This has been resolved in s2Member v3.5+.
* **(s2Member). Bug fix.** Corrected layout issue on s2Member's Multisite (Config) panel. The field for `Level #0 Blogs Allowed` was not being hidden properly under certain circumstances; depending on the Multisite configuration being applied. This has been corrected in s2Member v3.5.
* **(s2Member Pro). Bug fix.** Some of the new Button Generators for ClickBank®, AliPay®, Google® Checkout were using the JavaScript `escape()` function instead of `encodeURIComponent()`; leaving the possibility for certain characters ( such as `+` signs ) to be misinterpreted when passed through a URL/query string. This bug has been resolved in s2Memeber v3.5+ and s2Member Pro v1.5+.
* **(s2Member Pro). Upgrader/bug fix.** The automatic upgrader for the s2Member Pro module was inadvertently deleting itself ( sometimes ) whenever an upgrade failed through WordPress® with script memory/timeout errors. This routine has been modified to better handle it's "point of no return" by unzipping the latest distribution into a separate temporary directory. In addition to this change, the update routine now analyzes your server configuration to ensure enough memory is available before the update routine begins. In the event that your installation lacks the memory required ( at least 256M ) to unzip the s2Member Pro module, a warning to that affect will be displayed and you will need to upload the `/s2member-pro/` directory via FTP instead; following instructions in the `/readme.txt` file.
 IMPORTANT: Since previous versions of the automatic updater did NOT include these important enhancements, you may not be able to use the automatic updater in your current version of s2Member Pro. Long story short, we believe the issues HAVE been corrected for "future" releases, but in order to upgrade to this release, you may need to download a copy at s2Member.com and upload it manually via FTP. Full instructions are provided in the `/readme.txt` file, and on the site at s2Member.com.

= v3.3.2 - 1.0 =
* ... trimmed away at v3.3.2.
* Initial release, v1.0.
Something went wrong with that request. Please try again.