PluginProbe
s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions / 260917
s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions v260917
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 / src / includes / classes / roles-caps.inc.php

roles-caps.inc.php in s2Member – Excellent for All Kinds of Memberships, Content Restriction Paywalls & Member Access Subscriptions 260917, at src/includes/classes/roles-caps.inc.php

215 lines 7.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 // @codingStandardsIgnoreFile
3 /**
4 * Roles/Capabilities.
5 *
6 * Copyright: © 2009-2011
7 * {@link http://websharks-inc.com/ WebSharks, Inc.}
8 * (coded in the USA)
9 *
10 * Released under the terms of the GNU General Public License.
11 * You should have received a copy of the GNU General Public License,
12 * along with this software. In the main directory, see: /licensing/
13 * If not, see: {@link http://www.gnu.org/licenses/}.
14 *
15 * @package s2Member\Roles_Caps
16 * @since 110524RC
17 */
18 if(!defined('WPINC')) // MUST have WordPress.
19 exit('Do not access this file directly.');
20
21 if(!class_exists('c_ws_plugin__s2member_roles_caps'))
22 {
23 /**
24 * Roles/Capabilities.
25 *
26 * @package s2Member\Roles_Caps
27 * @since 110524RC
28 */
29 class c_ws_plugin__s2member_roles_caps
30 {
31 /**
32 * Configures Roles/Capabilities.
33 *
34 * @package s2Member\Roles_Caps
35 * @since 110524RC
36 *
37 * @return null
38 */
39 public static function config_roles()
40 {
41 do_action('ws_plugin__s2member_before_config_roles', get_defined_vars());
42
43 if(!apply_filters('ws_plugin__s2member_lock_roles_caps', FALSE))
44 {
45 c_ws_plugin__s2member_roles_caps::unlink_roles();
46
47 if(function_exists('bbp_get_dynamic_roles') && function_exists('bbp_get_caps_for_role') && function_exists('bbp_get_participant_role') /* bbPress v2.2+ integration. */)
48 {
49 foreach(bbp_get_caps_for_role(bbp_get_participant_role()) as $bbp_participant_cap => $bbp_participant_cap_is)
50 if($bbp_participant_cap_is /* Is this capability enabled? */)
51 $bbp_participant_caps[$bbp_participant_cap] = TRUE;
52 }
53 else if(function_exists('bbp_get_caps_for_role') && function_exists('bbp_get_participant_role') /* bbPress < v2.2 integration. */)
54 {
55 foreach(bbp_get_caps_for_role(bbp_get_participant_role()) as $bbp_participant_cap)
56 $bbp_participant_caps[$bbp_participant_cap] = TRUE;
57 }
58 if(0 === 0) // Subscriber Role is required by s2Member.
59 {
60 $caps = array('read' => TRUE, 'level_0' => TRUE);
61 $caps = array_merge($caps, array('access_s2member_level0' => TRUE));
62 $caps = (!empty($bbp_participant_caps)) ? array_merge($caps, $bbp_participant_caps) : $caps;
63
64 if(!($role = get_role('subscriber')))
65 {
66 add_role('subscriber', 'Subscriber');
67 $role = get_role('subscriber');
68 }
69 foreach(array_keys($caps) as $cap)
70 $role->add_cap($cap);
71 }
72 //260822.0520 `delete` now expires membership access into a dedicated read-only Pending Deletion role by default; irreversible user deletion requires an explicit developer opt-in.
73 if(!($role = get_role('s2member_pending_deletion')))
74 {
75 add_role('s2member_pending_deletion', 'Pending Deletion', array('read' => TRUE));
76 $role = get_role('s2member_pending_deletion');
77 }
78 if($role)
79 {
80 $role->add_cap('read');
81 for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['max_levels']; $n++)
82 $role->remove_cap('access_s2member_level'.$n);
83 }
84
85 for($n = 1; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
86 {
87 for($i = 0, $caps = array('read' => TRUE, 'level_0' => TRUE); $i <= $n; $i++)
88 $caps = array_merge($caps, array('access_s2member_level'.$i => TRUE));
89 $caps = (!empty($bbp_participant_caps)) ? array_merge($caps, $bbp_participant_caps) : $caps;
90
91 if(!($role = get_role('s2member_level'.$n)))
92 {
93 add_role('s2member_level'.$n, 's2Member Level '.$n);
94 $role = get_role('s2member_level'.$n);
95 }
96 foreach(array_keys($caps) as $cap)
97 $role->add_cap($cap);
98 }
99 $full_access_roles = array('administrator', 'editor', 'author', 'contributor');
100
101 if(!function_exists('bbp_get_dynamic_roles') && function_exists('bbp_get_caps_for_role') && function_exists('bbp_get_moderator_role') /* bbPress < v2.2 integration. */)
102 $full_access_roles = array_merge($full_access_roles, (array)bbp_get_moderator_role());
103
104 foreach($full_access_roles as $role)
105 {
106 if(($role = get_role($role)))
107 for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
108 $role->add_cap('access_s2member_level'.$n);
109 }
110 }
111 do_action('ws_plugin__s2member_after_config_roles', get_defined_vars());
112 }
113
114 /**
115 * Adds support for bbPress v2.2+ dynamic roles.
116 *
117 * @package s2Member\Roles_Caps
118 * @since 112512
119 *
120 * @param array $caps Array of BBP capabilities.
121 * @param string $role Role ID in WordPress.
122 *
123 * @attaches-to ``add_filter('bbp_get_caps_for_role');``
124 *
125 * @return array
126 */
127 public static function bbp_dynamic_role_caps($caps = array(), $role = '')
128 {
129 if(function_exists('bbp_get_dynamic_roles') && function_exists('bbp_get_blocked_role') && $role !== bbp_get_blocked_role())
130 if(!did_action('bbp_deactivation') && !did_action('bbp_uninstall') && function_exists('bbp_get_keymaster_role') && function_exists('bbp_get_moderator_role'))
131 {
132 $caps = array_merge($caps, array('read' => TRUE, 'level_0' => TRUE));
133 $caps = array_merge($caps, array('access_s2member_level0' => TRUE));
134
135 if(in_array($role, array(bbp_get_keymaster_role(), bbp_get_moderator_role()), TRUE))
136 {
137 for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
138 $caps = array_merge($caps, array('access_s2member_level'.$n => TRUE));
139 }
140 }
141 return $caps;
142 }
143
144 /**
145 * Unlinks Roles/Capabilities.
146 *
147 * @package s2Member\Roles_Caps
148 * @since 110524RC
149 *
150 * @return null
151 */
152 public static function unlink_roles()
153 {
154 do_action('ws_plugin__s2member_before_unlink_roles', get_defined_vars());
155
156 if(!apply_filters('ws_plugin__s2member_lock_roles_caps', FALSE))
157 {
158 if(($role = get_role('subscriber')))
159 $role->remove_cap('access_s2member_level0');
160
161 for($n = 1; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['max_levels']; $n++)
162 remove_role('s2member_level'.$n);
163 remove_role('s2member_pending_deletion'); //260822.0520 Recreated by config_roles(); removed cleanly with other s2Member-owned roles.
164
165 $full_access_roles = array('administrator', 'editor', 'author', 'contributor');
166
167 if(!function_exists('bbp_get_dynamic_roles') && function_exists('bbp_get_caps_for_role') && function_exists('bbp_get_moderator_role'))
168 $full_access_roles = array_merge($full_access_roles, (array)bbp_get_moderator_role());
169
170 foreach($full_access_roles as $role)
171 {
172 if(($role = get_role($role)))
173 for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['max_levels']; $n++)
174 $role->remove_cap('access_s2member_level'.$n);
175 }
176 }
177 do_action('ws_plugin__s2member_after_unlink_roles', get_defined_vars());
178 }
179
180 /**
181 * Updates Roles/Capabilities via AJAX.
182 *
183 * @package s2Member\Roles_Caps
184 * @since 110524RC
185 *
186 * @attaches-to ``add_action('wp_ajax_ws_plugin__s2member_update_roles_via_ajax');``
187 */
188 public static function update_roles_via_ajax()
189 {
190 do_action('ws_plugin__s2member_before_update_roles_via_ajax', get_defined_vars());
191
192 status_header(200); // Send a 200 OK status header.
193 header('Content-Type: text/plain; charset=UTF-8'); // Content-Type with UTF-8.
194 while(@ob_end_clean()) ; // Clean any existing output buffers.
195
196 if(current_user_can('create_users')) // Check privileges. Ability to create Users?
197
198 if(!empty($_POST['ws_plugin__s2member_update_roles_via_ajax']))
199 if(($nonce = $_POST['ws_plugin__s2member_update_roles_via_ajax']))
200 if(wp_verify_nonce($nonce, 'ws-plugin--s2member-update-roles-via-ajax'))
201
202 if(!apply_filters('ws_plugin__s2member_lock_roles_caps', FALSE))
203 {
204 c_ws_plugin__s2member_roles_caps::config_roles();
205 $success = TRUE; // Roles updated.
206 }
207 else // Else flag as having been locked here.
208 $locked = TRUE;
209
210 exit(apply_filters('ws_plugin__s2member_update_roles_via_ajax', // Also handle ``$locked`` here.
211 ((isset($success) && $success) ? '1' : ((isset($locked) && $locked) ? 'l' : '0')), get_defined_vars()));
212 }
213 }
214 }
215