PluginProbe ʕ •ᴥ•ʔ
Advanced Access Manager – Access Governance for WordPress / 4.0
Advanced Access Manager – Access Governance for WordPress v4.0
6.8.4 6.8.5 6.9.0 6.9.1 6.9.10 6.9.11 6.9.12 6.9.13 6.9.14 6.9.15 6.9.16 6.9.17 6.9.18 6.9.19 6.9.2 6.9.20 6.9.21 6.9.22 6.9.23 6.9.24 6.9.25 6.9.26 6.9.27 6.9.28 6.9.29 6.9.3 6.9.30 6.9.31 6.9.32 6.9.33 6.9.34 6.9.35 6.9.36 6.9.37 6.9.38 6.9.39 6.9.4 6.9.41 6.9.42 6.9.43 6.9.44 6.9.45 6.9.46 6.9.47 6.9.48 6.9.49 6.9.5 6.9.51 6.9.6 6.9.7 6.9.8 6.9.9 7.0.0 7.0.0-alpha.6 7.0.0-alpha.7 7.0.0-beta.1 7.0.0-rc1 7.0.0-rc2 7.0.0-rc3 7.0.1 7.0.10 7.0.11 7.0.2 7.0.3 7.0.4 7.0.5 7.0.6 7.0.7 7.0.8 7.0.9 7.1.0 7.1.1 trunk 3.0 4.0 4.0.1 4.1 4.2 4.3 4.4 4.4.1 4.5 4.6 4.6.1 4.6.2 4.7 4.7.1 4.7.2 4.7.5 4.7.6 4.8 4.8.1 4.9 4.9.1 4.9.2 4.9.3 4.9.4 4.9.5 4.9.5.1 4.9.5.2 5.0 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.1 5.1.1 5.10 5.11 5.2 5.2.1 5.2.5 5.2.6 5.2.7 5.3 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.4 5.4.1 5.4.2 5.4.3 5.4.3.1 5.4.3.2 5.5 5.5.1 5.5.2 5.6 5.6.1 5.6.1.1 5.7 5.7.1 5.7.2 5.7.3 5.8 5.8.1 5.8.2 5.8.3 5.9 5.9.1 5.9.1.1 5.9.2 5.9.2.1 5.9.3 5.9.4 5.9.5 5.9.6 5.9.6.1 5.9.6.2 5.9.6.3 5.9.7 5.9.7.1 5.9.7.2 5.9.7.3 5.9.8 5.9.8.1 5.9.9 5.9.9.1 6.0.0 6.0.1 6.0.2 6.0.3 6.0.4 6.0.5 6.1.0 6.1.1 6.2.0 6.2.1 6.2.2 6.3.0 6.3.1 6.3.2 6.3.3 6.4.0 6.4.1 6.4.2 6.4.3 6.5.0 6.5.1 6.5.2 6.5.3 6.5.4 6.6.0 6.6.1 6.6.2 6.6.3 6.6.4 6.7.0 6.7.1 6.7.2 6.7.3 6.7.4 6.7.5 6.7.6 6.7.7 6.7.8 6.7.9 6.8.0 6.8.1 6.8.2 6.8.3
advanced-access-manager / Application / Backend / Feature / Role.php
advanced-access-manager / Application / Backend / Feature Last commit date
Abstract.php 9 years ago Capability.php 9 years ago Contact.php 9 years ago Extension.php 9 years ago LoginRedirect.php 9 years ago Menu.php 9 years ago Metabox.php 9 years ago Post.php 9 years ago Redirect.php 9 years ago Role.php 9 years ago Security.php 9 years ago Teaser.php 9 years ago User.php 9 years ago Utility.php 9 years ago
Role.php
212 lines
1 <?php
2
3 /**
4 * ======================================================================
5 * LICENSE: This file is subject to the terms and conditions defined in *
6 * file 'license.txt', which is part of this source code package. *
7 * ======================================================================
8 */
9
10 /**
11 * Role view manager
12 *
13 * @package AAM
14 * @author Vasyl Martyniuk <vasyl@vasyltech.com>
15 */
16 class AAM_Backend_Feature_Role {
17
18 /**
19 * Constructor
20 *
21 * @return void
22 *
23 * @access public
24 * @throws Exception
25 */
26 public function __construct() {
27 $cap = AAM_Core_Config::get('page.capability', 'administrator');
28 if (!AAM::getUser()->hasCapability($cap)) {
29 Throw new Exception(__('Access Denied', AAM_KEY));
30 }
31 }
32
33 /**
34 * Get role list
35 *
36 * Prepare and return the list of roles for the table view
37 *
38 * @return string JSON Encoded role list
39 *
40 * @access public
41 */
42 public function getTable() {
43 //retrieve list of users
44 $count = count_users();
45 $stats = $count['avail_roles'];
46
47 $filtered = $this->fetchRoleList();
48
49 $response = array(
50 'recordsTotal' => count(get_editable_roles()),
51 'recordsFiltered' => count($filtered),
52 'draw' => AAM_Core_Request::request('draw'),
53 'data' => array(),
54 );
55
56 foreach ($filtered as $id => $data) {
57 $uc = (isset($stats[$id]) ? $stats[$id] : 0);
58 $allow = current_user_can('delete_users');
59
60 $response['data'][] = array(
61 $id,
62 $uc,
63 translate_user_role($data['name']),
64 apply_filters(
65 'aam-role-row-actions-filter',
66 'manage,edit,clone' . ($uc || !$allow ? '' : ',delete'),
67 $data
68 ),
69 AAM_Core_API::maxLevel($data['capabilities'])
70 );
71 }
72
73 return json_encode(apply_filters('aam-get-role-list-filter', $response));
74 }
75
76 /**
77 * Retrieve Pure Role List
78 *
79 * @return string
80 */
81 public function getList(){
82 return json_encode($this->fetchRoleList());
83 }
84
85 /**
86 * Fetch role list
87 *
88 * @return array
89 *
90 * @access protected
91 */
92 protected function fetchRoleList() {
93 $response = array();
94
95 //filter by name
96 $search = trim(AAM_Core_Request::request('search.value'));
97 $exclude = trim(AAM_Core_Request::request('exclude'));
98
99 $roles = get_editable_roles();
100 foreach ($roles as $id => $role) {
101 $match = preg_match('/^' . $search . '/i', $role['name']);
102 if (($exclude != $id) && (!$search || $match)) {
103 $response[$id] = $role;
104 }
105 }
106
107 return $response;
108 }
109
110 /**
111 * Add New Role
112 *
113 * @return string
114 *
115 * @access public
116 */
117 public function add() {
118 $name = sanitize_text_field(AAM_Core_Request::post('name'));
119 $roles = AAM_Core_API::getRoles();
120 $role_id = strtolower($name);
121
122 //if inherited role is set get capabilities from it
123 $parent = $roles->get_role(trim(AAM_Core_Request::post('inherit')));
124 $caps = ($parent ? $parent->capabilities : array());
125
126 if ($role = $roles->add_role($role_id, $name, $caps)) {
127 $response = array(
128 'status' => 'success',
129 'role' => array(
130 'id' => $role_id,
131 'name' => $name,
132 'level' => AAM_Core_API::maxLevel($caps)
133 )
134 );
135 if (AAM_Core_Request::post('clone')) {
136 $this->cloneSettings($role, $parent);
137 }
138 do_action('aam-post-add-role-action', $role, $parent);
139 } else {
140 $response = array('status' => 'failure');
141 }
142
143 return json_encode($response);
144 }
145
146 /**
147 *
148 * @global type $wpdb
149 * @param type $role
150 * @param type $parent
151 */
152 protected function cloneSettings($role, $parent) {
153 global $wpdb;
154
155 //clone _options settings
156 $oquery = "SELECT * FROM {$wpdb->options} WHERE `option_name` LIKE %s";
157 if ($wpdb->query($wpdb->prepare($oquery, 'aam_%_role_' . $parent->name))) {
158 foreach($wpdb->last_result as $setting) {
159 AAM_Core_API::updateOption(
160 str_replace($parent->name, $role->name, $setting->option_name),
161 maybe_unserialize($setting->option_value)
162 );
163 }
164 }
165
166 //clone _postmeta settings
167 $pquery = "SELECT * FROM {$wpdb->postmeta} WHERE `meta_key` LIKE %s";
168 if ($wpdb->query($wpdb->prepare($pquery, 'aam-%-role' . $parent->name))) {
169 foreach($wpdb->last_result as $setting) {
170 add_post_meta(
171 $setting->post_id,
172 str_replace($parent->name, $role->name, $setting->meta_key),
173 maybe_unserialize($setting->meta_value)
174 );
175 }
176 }
177 }
178
179 /**
180 * Edit role name
181 *
182 * @return string
183 *
184 * @access public
185 */
186 public function edit() {
187 $role = AAM_Backend_View::getSubject();
188 $role->update(trim(AAM_Core_Request::post('name')));
189
190 do_action('aam-post-update-role-action', $role);
191
192 return json_encode(array('status' => 'success'));
193 }
194
195 /**
196 * Delete role
197 *
198 * @return string
199 *
200 * @access public
201 */
202 public function delete() {
203 if (AAM_Backend_View::getSubject()->delete()) {
204 $status = 'success';
205 } else {
206 $status = 'failure';
207 }
208
209 return json_encode(array('status' => $status));
210 }
211
212 }