PluginProbe
s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions / 120213
s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions v120213
260917 260913 260909 260829 260814 260805 110710 110731 110812 110815 110912 110913 110915 110926 110927 111002 111003 111011 111017 111029 111105 111206 111216 111220 120213 All 189 releases
s2member / includes / syscon.inc.php

syscon.inc.php in s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions 120213, at includes/syscon.inc.php

553 lines 33.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * System configuration for the s2Member plugin.
4 *
5 * **WARNING:** This is a system configuration file, please DO NOT EDIT this file directly.
6 * Instead, use the plugin options panel in WordPress® to override these settings.
7 *
8 * Copyright: © 2009-2011
9 * {@link http://www.websharks-inc.com/ WebSharks, Inc.}
10 * ( coded in the USA )
11 *
12 * Released under the terms of the GNU General Public License.
13 * You should have received a copy of the GNU General Public License,
14 * along with this software. In the main directory, see: /licensing/
15 * If not, see: {@link http://www.gnu.org/licenses/}.
16 *
17 * @package s2Member
18 * @since 3.0
19 */
20 if(realpath(__FILE__) === realpath($_SERVER["SCRIPT_FILENAME"]))
21 exit("Do not access this file directly.");
22 /*
23 Determine the directory.
24 */
25 $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir"] = dirname(dirname(__FILE__));
26 /*
27 Determine the base directory name.
28 */
29 $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_base"] = basename(dirname(dirname(__FILE__)));
30 /*
31 Determine the full URL to the directory this plugin resides in.
32 */
33 $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"] = (stripos(__FILE__, WP_CONTENT_DIR) !== 0) ? /* Have to assume plugins dir? */
34 plugins_url("/".basename(dirname(dirname(__FILE__)))) : /* Otherwise, this gives it a chance to live anywhere in the content dir. */
35 content_url(preg_replace("/^(.*?)\/".preg_quote(basename(WP_CONTENT_DIR), "/")."/", "", str_replace(DIRECTORY_SEPARATOR, "/", dirname(dirname(__FILE__)))));
36 /*
37 Determine full URL to the s2Member-only file that loads WordPress® with only s2Member active.
38 */
39 $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["s2o_url"] = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]."/".preg_replace("/\.php$/", "-o.php", basename($GLOBALS["WS_PLUGIN__"]["s2member"]["l"]));
40 /*
41 Determine correct ``plugin_basename()`` here. WordPress® has a few issues with its ``plugin_basename()`` function across different platforms.
42 */
43 $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["plugin_basename"] = basename(dirname($GLOBALS["WS_PLUGIN__"]["s2member"]["l"]))."/".basename($GLOBALS["WS_PLUGIN__"]["s2member"]["l"]);
44 /*
45 Configure the number of Membership Levels being used with s2Member. This is now possible. All areas of s2Member are now capable of adapting to this.
46 */
47 $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"] = 4; /* Hard coded in at 4 Levels. This can only be extended when/if s2Member Pro is installed. */
48 $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["min_levels"] = 1; /* A lower limit to protect the integrity of the s2Member software application. */
49 $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["max_levels"] = apply_filters("ws_plugin__s2member_max_levels", 100); /* Filterable. */
50 /*
51 Configure regular expression matches for Membership Access Item Numbers ( including those with only Custom Capabilities ).
52 */
53 $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["membership_item_number_w_level_regex"] = "/^([1-9][0-9]*)(?:(?:\:((?:-all\+|\+-all|-all|\+)?[a-z_0-9,\+]*)?)?(?:\:([0-9]+ [A-Z])?)?)?$/";
54 $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["membership_item_number_wo_level_regex"] = "/^(\*)(?:(?:\:((?:-all\+|\+-all|-all|\+)?[a-z_0-9,\+]*)?)?(?:\:([0-9]+ [A-Z])?)?)?$/";
55 $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["membership_item_number_w_or_wo_level_regex"] = "/^([1-9][0-9]*|\*)(?:(?:\:((?:-all\+|\+-all|-all|\+)?[a-z_0-9,\+]*)?)?(?:\:([0-9]+ [A-Z])?)?)?$/";
56 /*
57 Configure regular expression match for Specific Post/Page Access Item Numbers ( all elements required here ).
58 */
59 $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["sp_access_item_number_regex"] = "/^(sp)(?:(?:\:([1-9][0-9,]*))(?:\:([1-9][0-9]*)))$/";
60 /*
61 Configure multibyte detection order when charset is unknown ( used by calls to `mb_convert_encoding()` ).
62 */
63 $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["mb_detection_order"] = "UTF-8, ISO-8859-1, WINDOWS-1252, ASCII, JIS, EUC-JP, SJIS";
64 /*
65 Configure an array of file extensions associated with streaming media file types. See: <http://www.spartanicus.utvinternet.ie/streaming.htm> Also see: <http://www.longtailvideo.com/support/jw-player/jw-player-for-flash-v5/12539/supported-video-and-audio-formats>
66 */
67 $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["streaming_file_extns"] = array_unique(array("avi", "wav", "mpa", "mpeg", "mpv", "mps", "m1v", "m2v", "mp4"/**/, "mp3", "m3u"/**/, "mp4", "flv", "f4v", "3gp", "3g2", "aac", "m4a"/**/, "webm"/**/, "ogg", "ogv", "pls", "m3u", "ogm", "m4u"/**/, "mov", "qtl", "mp4"/**/, "asf", "wmv", "wvx", "wma", "wax"/**/, "ra", "rm", "ram"));
68 /*
69 Configure directory and .htaccess for files protected by s2Member.
70 */
71 $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["files_dir"] = apply_filters("ws_plugin__s2member_files_dir", dirname(dirname(__FILE__))."-files".((stripos(PHP_OS, "win") === 0 && stripos($_SERVER["SERVER_SOFTWARE"], "apache") === false) ? "/app_data" : ""));
72 $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["files_no_gzip_htaccess"] = dirname(__FILE__)."/templates/cfg-files/s2member-files-no-gzip.php";
73 $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["files_dir_htaccess"] = dirname(__FILE__)."/templates/cfg-files/s2member-files.php";
74 /*
75 Configure the directory for logs protected by s2Member.
76 */
77 $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["logs_dir"] = apply_filters("ws_plugin__s2member_logs_dir", dirname(dirname(__FILE__))."-logs".((stripos(PHP_OS, "win") === 0 && stripos($_SERVER["SERVER_SOFTWARE"], "apache") === false) ? "/app_data" : ""));
78 $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["logs_dir_htaccess"] = dirname(__FILE__)."/templates/cfg-files/s2member-logs.php";
79 /*
80 Configure the global reCaptcha ( www.websharks-inc.net / or any domain ). These public/private keys work on any installation.
81 */
82 $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["recaptcha"] = array("public_key" => "6LeEOsoSAAAAALTKvUpMQMONdBOwG1UVXiFon96F", "private_key" => "6LeEOsoSAAAAAF8gycva4_0cpVr2KHlnnGzAfocd", "lang" => _x("en", "s2member-front recaptcha-lang-code", "s2member"));
83 /*
84 Configure the right menu options panel for s2Member.
85 */
86 $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["menu_pages"] = array("updates" => true, "upsell-pro" => true, "installation" => false, "tools" => false, "videos" => true, "support" => true, "donations" => true);
87 /*
88 Check if s2Member has been configured *should be set after the first config via options panel*.
89 */
90 $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["configured"] = get_option("ws_plugin__s2member_configured");
91 /*
92 This is a special option cache that holds some additional information autoloaded into WordPress®.
93 */
94 $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["cache"] = get_option("ws_plugin__s2member_cache");
95 /*
96 Configure checksum time for the syscon.inc.php file.
97 */
98 $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["checksum"] = filemtime(__FILE__);
99 /*
100 Configure an array of pluggable functions handled by s2Member.
101 */
102 $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["pluggables"] = array();
103 /*
104 Configure & validate all of the s2Member options; and set their defaults.
105 */
106 if(!function_exists("ws_plugin__s2member_configure_options_and_their_defaults"))
107 {
108 /**
109 * Configures an options array for the s2Member plugin.
110 *
111 * **WARNING:** This is a system configuration function, please DO NOT EDIT this function directly.
112 * Instead, use the plugin options panel in WordPress® to override these settings.
113 *
114 * @package s2Member
115 * @since 3.0
116 *
117 * @param array $options Optional. An array of new options, to be merged with the defaults.
118 * @return array This merged array of options: ``$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]``
119 */
120 function ws_plugin__s2member_configure_options_and_their_defaults($options = FALSE)
121 {
122 global $current_site, $current_blog;
123 /**/
124 $default_options["options_checksum"] = "";
125 $default_options["options_version"] = "1.0";
126 /**/
127 $default_options["gateway_debug_logs"] = "0";
128 /**/
129 $default_options["sec_encryption_key"] = "";
130 $default_options["sec_encryption_key_history"] = array();
131 $default_options["s_badge_status_enabled"] = "0";
132 /**/
133 $default_options["max_ip_restriction"] = "5";
134 $default_options["max_ip_restriction_time"] = "3600";
135 $default_options["max_failed_login_attempts"] = "5";
136 /**/
137 $default_options["run_deactivation_routines"] = "0";
138 /**/
139 $default_options["custom_reg_fields"] = "";
140 $default_options["custom_reg_names"] = "1";
141 $default_options["custom_reg_display_name"] = "full";
142 $default_options["custom_reg_password"] = "0";
143 /**/
144 $default_options["custom_reg_opt_in"] = "1";
145 $default_options["custom_reg_opt_in_label"] = _x("Yes, I want to receive updates via email.", "s2member-front", "s2member");
146 /**/
147 $default_options["custom_reg_auto_opt_outs"] = array();
148 $default_options["custom_reg_auto_opt_out_transitions"] = "0";
149 /**/
150 $default_options["custom_reg_fields_4bp"] = array();
151 $default_options["custom_reg_force_personal_emails"] = "";
152 /**/
153 $default_options["allow_subscribers_in"] = "0";
154 $default_options["force_admin_lockouts"] = "0";
155 $default_options["filter_wp_query"] = array();
156 /**/
157 $default_options["default_url_shortener"] = "tiny_url";
158 $default_options["default_custom_str_url_shortener"] = "";
159 /**/
160 $default_options["mms_auto_patch"] = "1";
161 $default_options["mms_registration_file"] = "wp-login";
162 $default_options["mms_registration_grants"] = "none";
163 for($n = 0, $v = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++, $v = $v + 5)
164 $default_options["mms_registration_blogs_level".$n] = (string)$v;
165 /**/
166 $default_options["login_welcome_page"] = "";
167 $default_options["login_redirection_override"] = "";
168 $default_options["membership_options_page"] = "";
169 /**/
170 $default_options["login_reg_background_color"] = "FFFFFF";
171 $default_options["login_reg_background_image"] = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]."/images/bg.png";
172 $default_options["login_reg_background_image_repeat"] = "repeat";
173 /**/
174 $default_options["login_reg_background_text_color"] = "000000";
175 $default_options["login_reg_background_text_shadow_color"] = "EEEEEE";
176 $default_options["login_reg_background_box_shadow_color"] = "EEEEEE";
177 /**/
178 $default_options["login_reg_logo_src"] = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["dir_url"]."/images/logo.png";
179 $default_options["login_reg_logo_src_width"] = "550";
180 $default_options["login_reg_logo_src_height"] = "100";
181 $default_options["login_reg_logo_url"] = home_url("/");
182 $default_options["login_reg_logo_title"] = get_bloginfo("name");
183 /**/
184 $default_options["login_reg_font_size"] = "12px";
185 $default_options["login_reg_font_family"] = "'Verdana', 'Arial', sans-serif";
186 $default_options["login_reg_font_field_size"] = "18px";
187 /**/
188 $default_options["login_reg_footer_design"] = "";
189 /**/
190 $default_options["reg_email_from_name"] = get_bloginfo("name");
191 $default_options["reg_email_from_email"] = get_bloginfo("admin_email");
192 $default_options["reg_email_support_link"] = "mailto:".get_bloginfo("admin_email");
193 /**/
194 $default_options["new_user_emails_enabled"] = "0";
195 /**/
196 $default_options["new_user_email_subject"] = sprintf(_x("[%s] Username/Password", "s2member-front", "s2member"), get_bloginfo("name"));
197 $default_options["new_user_email_message"] = sprintf(_x("Your Username/Password for:\n%s\n\nUsername: %%%%user_login%%%%\nPassword: %%%%user_pass%%%%\n%%%%wp_login_url%%%%", "s2member-front", "s2member"), get_bloginfo("name"));
198 /**/
199 $default_options["new_user_admin_email_recipients"] = get_bloginfo("admin_email");
200 $default_options["new_user_admin_email_subject"] = sprintf(_x("[%s] New User Registration", "s2member-front", "s2member"), get_bloginfo("name"));
201 $default_options["new_user_admin_email_message"] = sprintf(_x("New User Registration on your site:\n%s\n\nUser ID: %%%%user_id%%%%\nUsername: %%%%user_login%%%%\nEmail: %%%%user_email%%%%\nIP Address: %%%%user_ip%%%%", "s2member-front", "s2member"), get_bloginfo("name"));
202 /**/
203 $default_options["paypal_sandbox"] = "0";
204 $default_options["paypal_business"] = "";
205 $default_options["paypal_api_username"] = "";
206 $default_options["paypal_api_password"] = "";
207 $default_options["paypal_api_signature"] = "";
208 $default_options["paypal_identity_token"] = "";
209 $default_options["paypal_btn_encryption"] = "0";
210 /**/
211 $default_options["signup_tracking_codes"] = "";
212 $default_options["modification_tracking_codes"] = "";
213 $default_options["ccap_tracking_codes"] = "";
214 $default_options["sp_tracking_codes"] = "";
215 /**/
216 $default_options["signup_email_recipients"] = '"%%full_name%%" <%%payer_email%%>';
217 $default_options["signup_email_subject"] = _x("Congratulations! ( your membership has been approved )", "s2member-front", "s2member");
218 $default_options["signup_email_message"] = sprintf(_x("Thanks %%%%first_name%%%%! Your membership has been approved.\n\nIf you haven't already done so, the next step is to Register a Username.\n\nComplete your registration here:\n%%%%registration_url%%%%\n\nIf you have any trouble, please feel free to contact us.\n\nBest Regards,\n%s", "s2member-front", "s2member"), get_bloginfo("name"));
219 /**/
220 $default_options["sp_email_recipients"] = '"%%full_name%%" <%%payer_email%%>';
221 $default_options["sp_email_subject"] = _x("Thank You! ( instructions for access )", "s2member-front", "s2member");
222 $default_options["sp_email_message"] = sprintf(_x("Thanks %%%%first_name%%%%!\n\n%%%%item_name%%%%\n\nYour order can be retrieved here:\n%%%%sp_access_url%%%%\n( link expires in %%%%sp_access_exp%%%% )\n\nIf you have any trouble, please feel free to contact us.\n\nBest Regards,\n%s", "s2member-front", "s2member"), get_bloginfo("name"));
223 /**/
224 $default_options["mailchimp_api_key"] = "";
225 /**/
226 for($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)
227 $default_options["level".$n."_mailchimp_list_ids"] = "";
228 /**/
229 for($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)
230 $default_options["level".$n."_aweber_list_ids"] = "";
231 /**/
232 $default_options["signup_notification_urls"] = "";
233 $default_options["registration_notification_urls"] = "";
234 $default_options["payment_notification_urls"] = "";
235 $default_options["modification_notification_urls"] = "";
236 $default_options["cancellation_notification_urls"] = "";
237 $default_options["eot_del_notification_urls"] = "";
238 $default_options["ref_rev_notification_urls"] = "";
239 $default_options["sp_sale_notification_urls"] = "";
240 $default_options["sp_ref_rev_notification_urls"] = "";
241 /**/
242 $default_options["signup_notification_recipients"] = "";
243 $default_options["registration_notification_recipients"] = "";
244 $default_options["payment_notification_recipients"] = "";
245 $default_options["modification_notification_recipients"] = "";
246 $default_options["cancellation_notification_recipients"] = "";
247 $default_options["eot_del_notification_recipients"] = "";
248 $default_options["ref_rev_notification_recipients"] = "";
249 $default_options["sp_sale_notification_recipients"] = "";
250 $default_options["sp_ref_rev_notification_recipients"] = "";
251 /**/
252 for($n = 0, $l = array(_x("Free Subscriber", "s2member-front", "s2member"), _x("Bronze Member", "s2member-front", "s2member"), _x("Silver Member", "s2member-front", "s2member"), _x("Gold Member", "s2member-front", "s2member"), _x("Platinum Member", "s2member-front", "s2member")); $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)
253 $default_options["level".$n."_label"] = (!empty($l[$n])) ? $l[$n] : sprintf(_x("Level %s Member", "s2member-front", "s2member"), $n);
254 /**/
255 $default_options["apply_label_translations"] = "0";
256 /**/
257 for($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)
258 $default_options["level".$n."_file_downloads_allowed"] = "";
259 /**/
260 for($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)
261 $default_options["level".$n."_file_downloads_allowed_days"] = "";
262 /**/
263 $default_options["file_download_limit_exceeded_page"] = "";
264 $default_options["file_download_inline_extensions"] = "";
265 $default_options["file_download_stream_extensions"] = "";
266 /**/
267 $default_options["amazon_s3_files_bucket"] = "";
268 $default_options["amazon_s3_files_access_key"] = "";
269 $default_options["amazon_s3_files_secret_key"] = "";
270 /**/
271 $default_options["amazon_cf_files_private_key"] = "";
272 $default_options["amazon_cf_files_private_key_id"] = "";
273 $default_options["amazon_cf_files_distros_access_id"] = "";
274 $default_options["amazon_cf_files_distros_s3_access_id"] = "";
275 $default_options["amazon_cf_files_distro_downloads_id"] = "";
276 $default_options["amazon_cf_files_distro_downloads_cname"] = "";
277 $default_options["amazon_cf_files_distro_downloads_dname"] = "";
278 $default_options["amazon_cf_files_distro_streaming_id"] = "";
279 $default_options["amazon_cf_files_distro_streaming_cname"] = "";
280 $default_options["amazon_cf_files_distro_streaming_dname"] = "";
281 $default_options["amazon_cf_files_distros_auto_config_status"] = "";
282 /**/
283 for($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)
284 $default_options["level".$n."_ruris"] = "";
285 /**/
286 for($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)
287 $default_options["level".$n."_catgs"] = "";
288 /**/
289 for($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)
290 $default_options["level".$n."_ptags"] = "";
291 /**/
292 for($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)
293 $default_options["level".$n."_posts"] = "";
294 /**/
295 for($n = 0; $n <= $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]; $n++)
296 $default_options["level".$n."_pages"] = "";
297 /**/
298 $default_options["specific_ids"] = "";
299 /**/
300 $default_options["triggers_immediate_eot"] = "refunds,reversals";
301 $default_options["membership_eot_behavior"] = "demote";
302 $default_options["eot_time_ext_behavior"] = "extend";
303 $default_options["auto_eot_system_enabled"] = "1";
304 /**/
305 $default_options["wp_footer_code"] = "";
306 /**/
307 $default_options = apply_filters("ws_plugin__s2member_default_options", $default_options);
308 /**/
309 unset($n, $v, $l); /* Unset/cleanup these working variables from the routines above. */
310 /*
311 Here they are merged. User options will overwrite some or all default values.
312 */
313 $GLOBALS["WS_PLUGIN__"]["s2member"]["o"] = array_merge($default_options, (($options !== false) ? (array)$options : (array)get_option("ws_plugin__s2member_options")));
314 /**/
315 /* Back compatibility for `filter_wp_query`. Changed in v110912 to array. */
316 if(is_string($_ov = &$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["filter_wp_query"]))
317 $_ov = (!$_ov || $_ov === "none") ? $default_options["filter_wp_query"] : array_unique(preg_split("/[;,\r\n\t\s ]+/", $_ov));
318 /**/
319 /* Backward compatibility for old logo image width of 500 pixels. Changed in v110604. */
320 if($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_reg_logo_src"] === $default_options["login_reg_logo_src"])
321 $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["login_reg_logo_src_width"] = $default_options["login_reg_logo_src_width"];
322 /**/
323 /* Backward compatibility for PayPal® API Credentials. Starting with v3.5+, this info is stored by the free version of s2Member. */
324 if(empty($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_username"]) && !empty($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["pro_paypal_api_username"]))
325 $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_username"] = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["pro_paypal_api_username"];
326 /**/
327 if(empty($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_password"]) && !empty($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["pro_paypal_api_password"]))
328 $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_password"] = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["pro_paypal_api_password"];
329 /**/
330 if(empty($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_signature"]) && !empty($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["pro_paypal_api_signature"]))
331 $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["paypal_api_signature"] = $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["pro_paypal_api_signature"];
332 /*
333 This builds an MD5 checksum for the full array of options. This also includes the config checksum and the current set of default options.
334 */
335 $checksum = md5(($checksum_prefix = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["checksum"].serialize($default_options)).serialize(array_merge($GLOBALS["WS_PLUGIN__"]["s2member"]["o"], array("options_checksum" => 0))));
336 /*
337 Validate each option, possibly reverting back to the default value in some cases. This is only processed when/if the checksum is not up-to-date.
338 */
339 if($options !== false || ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["options_checksum"] !== $checksum && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"] !== $default_options))
340 {
341 foreach($GLOBALS["WS_PLUGIN__"]["s2member"]["o"] as $key => &$value)
342 {
343 if(!isset($default_options[$key]) && !preg_match("/^pro_/", $key))
344 unset($GLOBALS["WS_PLUGIN__"]["s2member"]["o"][$key]);
345 /**/
346 else if($key === "options_checksum" && (!is_string($value) || !strlen($value)))
347 $value = $default_options[$key];
348 /**/
349 else if($key === "options_version" && (!is_string($value) || !is_numeric($value)))
350 $value = $default_options[$key];
351 /**/
352 else if($key === "gateway_debug_logs" && (!is_string($value) || !is_numeric($value)))
353 $value = $default_options[$key];
354 /**/
355 else if($key === "sec_encryption_key" && (!is_string($value) || !strlen($value)))
356 $value = $default_options[$key];
357 /**/
358 else if($key === "sec_encryption_key_history" && (!is_array($value) || empty($value)))
359 $value = $default_options[$key];
360 /**/
361 else if($key === "s_badge_status_enabled" && (!is_string($value) || !is_numeric($value)))
362 $value = $default_options[$key];
363 /**/
364 else if($key === "max_ip_restriction" && (!is_string($value) || !is_numeric($value) || $value < 0 || $value > 100))
365 $value = $default_options[$key];
366 /**/
367 else if($key === "max_ip_restriction_time" && (!is_string($value) || !is_numeric($value) || $value < 900 || $value > 31556926))
368 $value = $default_options[$key];
369 /**/
370 else if($key === "max_failed_login_attempts" && (!is_string($value) || !is_numeric($value) || $value < 0 || $value > 100))
371 $value = $default_options[$key];
372 /**/
373 else if($key === "run_deactivation_routines" && (!is_string($value) || !is_numeric($value)))
374 $value = $default_options[$key];
375 /**/
376 else if($key === "custom_reg_fields" && (!is_string($value) || !strlen($value)))
377 $value = $default_options[$key];
378 /**/
379 else if(preg_match("/^custom_reg_(?:names|password|opt_in|auto_opt_out_transitions)$/", $key) && (!is_string($value) || !is_numeric($value)))
380 $value = $default_options[$key];
381 /**/
382 else if($key === "custom_reg_display_name" && (!is_string($value) || !preg_match("/^(?:full|first|last|login|0)$/", $value)))
383 $value = $default_options[$key];
384 /**/
385 else if($key === "custom_reg_opt_in_label" && (!is_string($value) || !strlen($value)))
386 $value = $default_options[$key];
387 /**/
388 else if($key === "custom_reg_auto_opt_outs" && (!is_array($value) || empty($value)))
389 $value = $default_options[$key];
390 /**/
391 else if($key === "custom_reg_fields_4bp" && (!is_array($value) || empty($value)))
392 $value = $default_options[$key];
393 /**/
394 else if($key === "custom_reg_force_personal_emails" && (!is_string($value) || !strlen($value = preg_replace("/\s+/", "", $value))))
395 $value = $default_options[$key];
396 /**/
397 else if($key === "allow_subscribers_in" && (!is_string($value) || !is_numeric($value)))
398 $value = $default_options[$key];
399 /**/
400 else if($key === "mms_auto_patch" && (!is_string($value) || !is_numeric($value)))
401 $value = $default_options[$key];
402 /**/
403 else if($key === "mms_registration_file" && (!is_string($value) || !preg_match("/^(?:wp-login|wp-signup)$/", $value)))
404 $value = $default_options[$key];
405 /**/
406 else if($key === "mms_registration_grants" && (!is_string($value) || !preg_match("/^(?:none|user|all)$/", $value)))
407 $value = $default_options[$key];
408 /**/
409 else if(preg_match("/^mms_registration_blogs_level[0-9]+$/", $key) && (!is_string($value) || !is_numeric($value) || $value < 0))
410 $value = $default_options[$key];
411 /**/
412 else if($key === "force_admin_lockouts" && (!is_string($value) || !is_numeric($value)))
413 $value = $default_options[$key];
414 /**/
415 else if($key === "filter_wp_query" && !is_array($value)) /* This array CAN be empty. */
416 $value = $default_options[$key];
417 /**/
418 else if(preg_match("/^default_(?:custom_str_)?url_shortener$/", $key) && (!is_string($value) || !strlen($value)))
419 $value = $default_options[$key];
420 /**/
421 else if($key === "login_welcome_page" && (!is_string($value) || !is_numeric($value)))
422 $value = $default_options[$key];
423 /**/
424 else if($key === "login_redirection_override" && (!is_string($value) || !strlen($value)))
425 $value = $default_options[$key];
426 /**/
427 else if($key === "membership_options_page" && (!is_string($value) || !is_numeric($value)))
428 $value = $default_options[$key];
429 /**/
430 else if($key === "login_reg_background_image" && !is_string($value)) /* This is optional. */
431 $value = $default_options[$key];
432 /**/
433 else if($key === "login_reg_background_image_repeat" && (!is_string($value) || !preg_match("/^(?:repeat|repeat-x|repeat-y|no-repeat)$/", $value)))
434 $value = $default_options[$key];
435 /**/
436 else if(preg_match("/^login_reg_(?:background|logo|font|footer)_/", $key) && !preg_match("/background_image/", $key) && (!is_string($value) || !strlen($value)))
437 $value = $default_options[$key];
438 /**/
439 else if(preg_match("/^reg_email_(?:from_name|from_email|support_link)$/", $key) && (!is_string($value) || !strlen($value)))
440 $value = $default_options[$key];
441 /**/
442 else if($key === "new_user_emails_enabled" && (!is_string($value) || !is_numeric($value)))
443 $value = $default_options[$key];
444 /**/
445 else if(preg_match("/^new_user_email_(?:subject|message)$/", $key) && (!is_string($value) || !strlen($value)))
446 $value = $default_options[$key];
447 /**/
448 else if(preg_match("/^new_user_admin_email_(?:recipients|subject|message)$/", $key) && (!is_string($value) || !strlen($value)))
449 $value = $default_options[$key];
450 /**/
451 else if($key === "paypal_sandbox" && (!is_string($value) || !is_numeric($value)))
452 $value = $default_options[$key];
453 /**/
454 else if(preg_match("/^paypal_(?:business|api_username|api_password|api_signature|identity_token)$/", $key) && (!is_string($value) || !strlen($value)))
455 $value = $default_options[$key];
456 /**/
457 else if($key === "paypal_btn_encryption" && (!is_string($value) || !is_numeric($value)))
458 $value = $default_options[$key];
459 /**/
460 else if(preg_match("/^(?:signup|modification|ccap|sp)_tracking_codes$/", $key) && (!is_string($value) || !strlen($value)))
461 $value = $default_options[$key];
462 /**/
463 else if(preg_match("/^(?:signup|sp)_email_recipients$/", $key) && !is_string($value)) /* Can be empty. */
464 $value = $default_options[$key];
465 /**/
466 else if(preg_match("/^(?:signup|sp)_email_(?:subject|message)$/", $key) && (!is_string($value) || !strlen($value)))
467 $value = $default_options[$key];
468 /**/
469 else if($key === "mailchimp_api_key" && (!is_string($value) || !strlen($value)))
470 $value = $default_options[$key];
471 /**/
472 else if(preg_match("/^level[0-9]+_mailchimp_list_ids$/", $key) && (!is_string($value) || !strlen($value = preg_replace("/[\r\n\t]+/", "", $value))))
473 $value = $default_options[$key];
474 /**/
475 else if(preg_match("/^level[0-9]+_aweber_list_ids$/", $key) && (!is_string($value) || !strlen($value = preg_replace("/\s+/", "", $value))))
476 $value = $default_options[$key];
477 /**/
478 else if(preg_match("/^(?:signup|registration|payment|modification|cancellation|eot_del|ref_rev|sp_sale|sp_ref_rev)_notification_urls$/", $key) && (!is_string($value) || !strlen($value)))
479 $value = $default_options[$key];
480 /**/
481 else if(preg_match("/^(?:signup|registration|payment|modification|cancellation|eot_del|ref_rev|sp_sale|sp_ref_rev)_notification_recipients$/", $key) && (!is_string($value) || !strlen($value)))
482 $value = $default_options[$key];
483 /**/
484 else if(preg_match("/^level[0-9]+_label$/", $key) && (!is_string($value) || !strlen($value)))
485 $value = $default_options[$key];
486 /**/
487 else if($key === "apply_label_translations" && (!is_string($value) || !is_numeric($value)))
488 $value = $default_options[$key];
489 /**/
490 else if(preg_match("/^level[0-9]+_file_downloads_allowed$/", $key) && (!is_string($value) || !is_numeric($value) || $value < 0))
491 $value = $default_options[$key];
492 /**/
493 else if(preg_match("/^level[0-9]+_file_downloads_allowed_days$/", $key) && (!is_string($value) || !is_numeric($value) || $value < 0))
494 $value = $default_options[$key];
495 /**/
496 else if($key === "file_download_limit_exceeded_page" && (!is_string($value) || !is_numeric($value)))
497 $value = $default_options[$key];
498 /**/
499 else if(preg_match("/^file_download_(?:inline|stream)_extensions$/", $key) && (!is_string($value) || !($value = strtolower(preg_replace("/\s+/", "", $value)))))
500 $value = $default_options[$key];
501 /**/
502 else if(preg_match("/^amazon_(?:s3|cf)_files_/", $key) && (!is_string($value) || !strlen($value)))
503 $value = $default_options[$key];
504 /**/
505 else if(preg_match("/^level[0-9]+_ruris$/", $key) && (!is_string($value) || !strlen($value)))
506 $value = $default_options[$key];
507 /**/
508 else if(preg_match("/^level[0-9]+_catgs$/", $key) && (!is_string($value) || !($value = ((strcasecmp($value, "all") === 0) ? strtolower($value) : trim(preg_replace("/[^0-9,]/", "", $value), ",")))))
509 $value = $default_options[$key];
510 /**/
511 else if(preg_match("/^level[0-9]+_ptags$/", $key) && (!is_string($value) || !($value = ((strcasecmp($value, "all") === 0) ? strtolower($value) : trim(preg_replace("/ +/", " ", trim(preg_replace("/ *, */", ",", $value))), ",")))))
512 $value = $default_options[$key];
513 /**/
514 else if(preg_match("/^level[0-9]+_posts$/", $key) && (!is_string($value) || !($value = trim( /* Supports `all` or `1,2,3,all-[type]s`. */preg_replace("/[^a-z0-9_\-,]/", "", strtolower($value)), ","))))
515 $value = $default_options[$key];
516 /**/
517 else if(preg_match("/^level[0-9]+_pages$/", $key) && (!is_string($value) || !($value = ((strcasecmp($value, "all") === 0) ? strtolower($value) : trim(preg_replace("/[^0-9,]/", "", $value), ",")))))
518 $value = $default_options[$key];
519 /**/
520 else if($key === "specific_ids" && (!is_string($value) || !($value = trim(preg_replace("/[^0-9,]/", "", $value), ","))))
521 $value = $default_options[$key];
522 /**/
523 else if($key === "triggers_immediate_eot" && (!is_string($value) || !preg_match("/^(?:none|refunds|reversals|refunds,reversals)$/", $value)))
524 $value = $default_options[$key];
525 /**/
526 else if($key === "membership_eot_behavior" && (!is_string($value) || !preg_match("/^(?:demote|delete)$/", $value)))
527 $value = $default_options[$key];
528 /**/
529 else if($key === "eot_time_ext_behavior" && (!is_string($value) || !preg_match("/^(?:extend|reset)$/", $value)))
530 $value = $default_options[$key];
531 /**/
532 else if($key === "auto_eot_system_enabled" && (!is_string($value) || !is_numeric($value)))
533 $value = $default_options[$key];
534 /**/
535 else if($key === "wp_footer_code" && (!is_string($value) || !strlen($value)))
536 $value = $default_options[$key];
537 }
538 /**/
539 if($options !== false && is_string($options["sec_encryption_key"]) && strlen($options["sec_encryption_key"]) && !in_array($options["sec_encryption_key"], $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sec_encryption_key_history"]))
540 {
541 array_unshift($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sec_encryption_key_history"], $options["sec_encryption_key"]);
542 $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sec_encryption_key_history"] = array_slice($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["sec_encryption_key_history"], 0, 10);
543 }
544 /**/
545 $GLOBALS["WS_PLUGIN__"]["s2member"]["o"] = apply_filters_ref_array("ws_plugin__s2member_options_before_checksum", array(&$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]));
546 /**/
547 $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["options_checksum"] = md5($checksum_prefix.serialize(array_merge($GLOBALS["WS_PLUGIN__"]["s2member"]["o"], array("options_checksum" => 0))));
548 }
549 /**/
550 return apply_filters_ref_array("ws_plugin__s2member_options", array(&$GLOBALS["WS_PLUGIN__"]["s2member"]["o"]));
551 }
552 }
553 ?>