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

201 lines 7.1 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 for($n = 1; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
73 {
74 for($i = 0, $caps = array('read' => TRUE, 'level_0' => TRUE); $i <= $n; $i++)
75 $caps = array_merge($caps, array('access_s2member_level'.$i => TRUE));
76 $caps = (!empty($bbp_participant_caps)) ? array_merge($caps, $bbp_participant_caps) : $caps;
77
78 if(!($role = get_role('s2member_level'.$n)))
79 {
80 add_role('s2member_level'.$n, 's2Member Level '.$n);
81 $role = get_role('s2member_level'.$n);
82 }
83 foreach(array_keys($caps) as $cap)
84 $role->add_cap($cap);
85 }
86 $full_access_roles = array('administrator', 'editor', 'author', 'contributor');
87
88 if(!function_exists('bbp_get_dynamic_roles') && function_exists('bbp_get_caps_for_role') && function_exists('bbp_get_moderator_role') /* bbPress < v2.2 integration. */)
89 $full_access_roles = array_merge($full_access_roles, (array)bbp_get_moderator_role());
90
91 foreach($full_access_roles as $role)
92 {
93 if(($role = get_role($role)))
94 for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
95 $role->add_cap('access_s2member_level'.$n);
96 }
97 }
98 do_action('ws_plugin__s2member_after_config_roles', get_defined_vars());
99 }
100
101 /**
102 * Adds support for bbPress v2.2+ dynamic roles.
103 *
104 * @package s2Member\Roles_Caps
105 * @since 112512
106 *
107 * @param array $caps Array of BBP capabilities.
108 * @param string $role Role ID in WordPress.
109 *
110 * @attaches-to ``add_filter('bbp_get_caps_for_role');``
111 *
112 * @return array
113 */
114 public static function bbp_dynamic_role_caps($caps = array(), $role = '')
115 {
116 if(function_exists('bbp_get_dynamic_roles') && function_exists('bbp_get_blocked_role') && $role !== bbp_get_blocked_role())
117 if(!did_action('bbp_deactivation') && !did_action('bbp_uninstall') && function_exists('bbp_get_keymaster_role') && function_exists('bbp_get_moderator_role'))
118 {
119 $caps = array_merge($caps, array('read' => TRUE, 'level_0' => TRUE));
120 $caps = array_merge($caps, array('access_s2member_level0' => TRUE));
121
122 if(in_array($role, array(bbp_get_keymaster_role(), bbp_get_moderator_role()), TRUE))
123 {
124 for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['levels']; $n++)
125 $caps = array_merge($caps, array('access_s2member_level'.$n => TRUE));
126 }
127 }
128 return $caps;
129 }
130
131 /**
132 * Unlinks Roles/Capabilities.
133 *
134 * @package s2Member\Roles_Caps
135 * @since 110524RC
136 *
137 * @return null
138 */
139 public static function unlink_roles()
140 {
141 do_action('ws_plugin__s2member_before_unlink_roles', get_defined_vars());
142
143 if(!apply_filters('ws_plugin__s2member_lock_roles_caps', FALSE))
144 {
145 if(($role = get_role('subscriber')))
146 $role->remove_cap('access_s2member_level0');
147
148 for($n = 1; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['max_levels']; $n++)
149 remove_role('s2member_level'.$n);
150
151 $full_access_roles = array('administrator', 'editor', 'author', 'contributor');
152
153 if(!function_exists('bbp_get_dynamic_roles') && function_exists('bbp_get_caps_for_role') && function_exists('bbp_get_moderator_role'))
154 $full_access_roles = array_merge($full_access_roles, (array)bbp_get_moderator_role());
155
156 foreach($full_access_roles as $role)
157 {
158 if(($role = get_role($role)))
159 for($n = 0; $n <= $GLOBALS['WS_PLUGIN__']['s2member']['c']['max_levels']; $n++)
160 $role->remove_cap('access_s2member_level'.$n);
161 }
162 }
163 do_action('ws_plugin__s2member_after_unlink_roles', get_defined_vars());
164 }
165
166 /**
167 * Updates Roles/Capabilities via AJAX.
168 *
169 * @package s2Member\Roles_Caps
170 * @since 110524RC
171 *
172 * @attaches-to ``add_action('wp_ajax_ws_plugin__s2member_update_roles_via_ajax');``
173 */
174 public static function update_roles_via_ajax()
175 {
176 do_action('ws_plugin__s2member_before_update_roles_via_ajax', get_defined_vars());
177
178 status_header(200); // Send a 200 OK status header.
179 header('Content-Type: text/plain; charset=UTF-8'); // Content-Type with UTF-8.
180 while(@ob_end_clean()) ; // Clean any existing output buffers.
181
182 if(current_user_can('create_users')) // Check privileges. Ability to create Users?
183
184 if(!empty($_POST['ws_plugin__s2member_update_roles_via_ajax']))
185 if(($nonce = $_POST['ws_plugin__s2member_update_roles_via_ajax']))
186 if(wp_verify_nonce($nonce, 'ws-plugin--s2member-update-roles-via-ajax'))
187
188 if(!apply_filters('ws_plugin__s2member_lock_roles_caps', FALSE))
189 {
190 c_ws_plugin__s2member_roles_caps::config_roles();
191 $success = TRUE; // Roles updated.
192 }
193 else // Else flag as having been locked here.
194 $locked = TRUE;
195
196 exit(apply_filters('ws_plugin__s2member_update_roles_via_ajax', // Also handle ``$locked`` here.
197 ((isset($success) && $success) ? '1' : ((isset($locked) && $locked) ? 'l' : '0')), get_defined_vars()));
198 }
199 }
200 }
201