=")) /* Needs to be upgraded? */ /* Version 3.2 is where `meta_key` names were changed. They're prefixed now. */ { $like = "`meta_key` LIKE 's2member\_%' AND `meta_key` NOT LIKE '%s2member\_originating\_blog%'"; $wpdb->query ("UPDATE `" . $wpdb->usermeta . "` SET `meta_key` = CONCAT('" . $wpdb->prefix . "', `meta_key`) WHERE " . $like); } /**/ if (!$v || !version_compare ($v, "3.2.5", ">=")) /* Needs to be upgraded? */ /* Version 3.2.5 is where transient names were changed. They're prefixed now. */ { $wpdb->query ("DELETE FROM `" . $wpdb->options . "` WHERE `option_name` LIKE '\_transient\_%'"); } /**/ if (!$v || !version_compare ($v, "3.2.6", ">=")) /* Needs to be upgraded? */ /* Version 3.2.6 fixed `s2member_ccaps_req` being stored empty and/or w/ one empty element in the array. */ { $wpdb->query ("DELETE FROM `" . $wpdb->postmeta . "` WHERE `meta_key` = 's2member_ccaps_req' AND `meta_value` IN('','a:0:{}','a:1:{i:0;s:0:\"\";}')"); } /**/ if (!$v || !version_compare ($v, "110912", ">=") && $GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["filter_wp_query"] === array ("all")) /* s2Member v110912 changed the way the "all" option for Alternative Views was handled. */ { $notice = 'IMPORTANT: This version of s2Member® changes the way your Alternative View Protections work. Please review your options under: s2Member -> Restriction Options -> Alternative View Protections.
'; c_ws_plugin__s2member_admin_notices::enqueue_admin_notice ($notice, array ("blog|network:plugins.php", "blog|network:ws-plugin--s2member-start", "blog|network:ws-plugin--s2member-mms-ops", "blog|network:ws-plugin--s2member-gen-ops", "blog|network:ws-plugin--s2member-res-ops")); } /**/ $notice = 's2Member has been reactivated, with ' . (($reactivation_reason === "levels") ? '' . esc_html ($GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["levels"]) . ' Membership Levels' : 'the latest version') . '.
'; $notice .= 'You now have version ' . esc_html (WS_PLUGIN__S2MEMBER_VERSION) . '. Your existing configuration remains.'; /**/ if (!is_multisite () || !c_ws_plugin__s2member_utils_conds::is_multisite_farm () || is_main_site ()) /* No Changelog on a Multisite Blog Farm. */ $notice .= '
Have fun, read the Changelog, and make some money! :-)'; /**/ c_ws_plugin__s2member_admin_notices::enqueue_admin_notice ($notice, array ("blog|network:plugins.php", "blog|network:ws-plugin--s2member-start", "blog|network:ws-plugin--s2member-mms-ops", "blog|network:ws-plugin--s2member-gen-ops", "blog|network:ws-plugin--s2member-res-ops")); } else /* Otherwise (initial activation); we'll help the Site Owner out by giving them a link to the Quick Start Guide. */ { $notice = 'Note: s2Member adds some new data columns to your list of Users/Members. If your list gets overcrowded, please use the Screen Options tab ( upper right-hand corner ). With WordPress® Screen Options, you can add/remove specific data columns; thereby making the most important data easier to read. For example, if you create Custom Registration/Profile Fields with s2Member, those Custom Fields will result in new data columns; which can cause your list of Users/Members to become nearly unreadable. So just use the Screen Options tab to clean things up.'; /**/ c_ws_plugin__s2member_admin_notices::enqueue_admin_notice ($notice, "blog:users.php", false, false, true); /**/ $notice = 's2Member v' . esc_html (WS_PLUGIN__S2MEMBER_VERSION) . ' has been activated. Nice work!
'; $notice .= 'Have fun, read the Quick Start Guide, and make some money! :-)'; /**/ c_ws_plugin__s2member_admin_notices::enqueue_admin_notice ($notice, array ("blog|network:plugins.php", "blog|network:ws-plugin--s2member-start", "blog|network:ws-plugin--s2member-mms-ops", "blog|network:ws-plugin--s2member-gen-ops", "blog|network:ws-plugin--s2member-res-ops")); } /**/ if (is_multisite () && is_main_site ()) /* Network activation routines. */ { foreach ((array)($users = $wpdb->get_results ("SELECT `ID` FROM `" . $wpdb->users . "`")) as $user) if (!($originating_blog = get_user_meta ($user->ID, "s2member_originating_blog", true))) update_user_meta ($user->ID, "s2member_originating_blog", $current_site->blog_id); /**/ $notice = 'Multisite Network updated automatically by s2Member v' . esc_html (WS_PLUGIN__S2MEMBER_VERSION) . '.
'; $notice .= 'You\'ll want to configure s2Member\'s Multisite options now.
'; $notice .= 'In the Dashboard for your Main Site, see:
'; $notice .= 's2Member -> Multisite ( Config ).'; /**/ c_ws_plugin__s2member_admin_notices::enqueue_admin_notice ($notice, array ("blog|network:plugins.php", "blog|network:ws-plugin--s2member-start", "blog|network:ws-plugin--s2member-mms-ops", "blog|network:ws-plugin--s2member-gen-ops", "blog|network:ws-plugin--s2member-res-ops")); /**/ update_site_option ("ws_plugin__s2member_options", (array)get_option ("ws_plugin__s2member_options")); /**/ update_option ("ws_plugin__s2member_activated_mms_version", WS_PLUGIN__S2MEMBER_VERSION); } /**/ update_option ("ws_plugin__s2member_activated_version", WS_PLUGIN__S2MEMBER_VERSION); /**/ do_action ("ws_plugin__s2member_after_activation", get_defined_vars ()); /**/ return; /* Return for uniformity. */ } /** * Deactivation routines for s2Member. * * @package s2Member\Installation * @since 3.5 * * @return null */ public static function deactivate () { global $wpdb; /* Global database object reference. */ global $current_site, $current_blog; /* Multisite. */ /**/ do_action ("ws_plugin__s2member_before_deactivation", get_defined_vars ()); /**/ if ($GLOBALS["WS_PLUGIN__"]["s2member"]["o"]["run_deactivation_routines"]) { c_ws_plugin__s2member_roles_caps::unlink_roles (); /* Unlink Roles/Caps. */ /**/ if (is_dir ($files_dir = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["files_dir"])) { if (file_exists ($htaccess = $files_dir . "/.htaccess")) if (is_writable ($htaccess)) unlink($htaccess); /**/ @rmdir($files_dir) . @rmdir (c_ws_plugin__s2member_utils_dirs::strip_dir_app_data ($files_dir)); } /**/ if (is_dir ($logs_dir = $GLOBALS["WS_PLUGIN__"]["s2member"]["c"]["logs_dir"])) { foreach (scandir ($logs_dir) as $log_file) if (is_file ($log_file = $logs_dir . "/" . $log_file)) if (is_writable ($log_file)) unlink($log_file); /**/ @rmdir($logs_dir) . @rmdir (c_ws_plugin__s2member_utils_dirs::strip_dir_app_data ($logs_dir)); } /**/ delete_option("ws_plugin__s2member_cache"); delete_option("ws_plugin__s2member_notices"); delete_option("ws_plugin__s2member_options"); delete_option("ws_plugin__s2member_configured"); delete_option("ws_plugin__s2member_activated_levels"); delete_option("ws_plugin__s2member_activated_version"); delete_option("ws_plugin__s2member_activated_mms_version"); /**/ if (is_multisite () && is_main_site ()) /* Site options? */ delete_site_option("ws_plugin__s2member_options"); /**/ $wpdb->query ("DELETE FROM `" . $wpdb->options . "` WHERE `option_name` LIKE '%" . esc_sql (like_escape ("s2member_")) . "%'"); $wpdb->query ("DELETE FROM `" . $wpdb->options . "` WHERE `option_name` LIKE '" . esc_sql (like_escape ("_transient_s2m_")) . "%'"); $wpdb->query ("DELETE FROM `" . $wpdb->options . "` WHERE `option_name` LIKE '" . esc_sql (like_escape ("_transient_timeout_s2m_")) . "%'"); $wpdb->query ("DELETE FROM `" . $wpdb->postmeta . "` WHERE `meta_key` LIKE '%" . esc_sql (like_escape ("s2member_")) . "%'"); $wpdb->query ("DELETE FROM `" . $wpdb->usermeta . "` WHERE `meta_key` LIKE '%" . esc_sql (like_escape ("s2member_")) . "%'"); /**/ do_action ("ws_plugin__s2member_during_deactivation", get_defined_vars ()); } /**/ do_action ("ws_plugin__s2member_after_deactivation", get_defined_vars ()); /**/ return; /* Return for uniformity. */ } } } ?>