PluginProbe
Groups – Memberships and Access Control / 1.11.0
Groups – Memberships and Access Control v1.11.0
4.7.1 4.7.0 4.6.0 4.5.0 4.4.0 4.3.0 trunk 1.0.0-beta-1 1.0.0-beta-2 1.0.0-beta-3 1.0.0-beta-3b 1.0.0-beta-3c 1.0.0-beta-3d 1.1.4 1.1.5 1.10.0 1.10.1 1.10.2 1.10.3 1.11.0 1.11.1 1.11.2 1.11.3 1.12.0 1.13.0 All 131 releases
groups / lib / admin / groups-admin-capabilities.php

groups-admin-capabilities.php in Groups – Memberships and Access Control 1.11.0, at lib/admin/groups-admin-capabilities.php

507 lines 16.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * groups-admin-capabilities.php
4 *
5 * Copyright (c) "kento" Karim Rahimpur www.itthinx.com
6 *
7 * This code is released under the GNU General Public License.
8 * See COPYRIGHT.txt and LICENSE.txt.
9 *
10 * This code is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * This header and all notices must be kept intact.
16 *
17 * @author Karim Rahimpur
18 * @package groups
19 * @since groups 1.0.0
20 */
21
22 if ( !defined( 'ABSPATH' ) ) {
23 exit;
24 }
25
26 define( 'GROUPS_CAPABILITIES_PER_PAGE', 10 );
27 define( 'GROUPS_ADMIN_CAPABILITIES_NONCE_1', 'groups-cap-nonce-1');
28 define( 'GROUPS_ADMIN_CAPABILITIES_NONCE_2', 'groups-cap-nonce-2');
29 define( 'GROUPS_ADMIN_CAPABILITIES_ACTION_NONCE', 'groups-cap-action-nonce');
30 define( 'GROUPS_ADMIN_CAPABILITIES_FILTER_NONCE', 'groups-cap-filter-nonce' );
31
32 require_once( GROUPS_CORE_LIB . '/class-groups-pagination.php' );
33 require_once( GROUPS_ADMIN_LIB . '/groups-admin-capabilities-add.php');
34 require_once( GROUPS_ADMIN_LIB . '/groups-admin-capabilities-edit.php');
35 require_once( GROUPS_ADMIN_LIB . '/groups-admin-capabilities-remove.php');
36
37 /**
38 * Manage capabilities: table of capabilities and add, edit, remove actions.
39 */
40 function groups_admin_capabilities() {
41
42 global $wpdb;
43
44 $output = '';
45 $today = date( 'Y-m-d', time() );
46
47 if ( !current_user_can( GROUPS_ADMINISTER_GROUPS ) ) {
48 wp_die( __( 'Access denied.', GROUPS_PLUGIN_DOMAIN ) );
49 }
50
51 //
52 // handle actions
53 //
54 if ( isset( $_POST['action'] ) ) {
55 // handle action submit - do it
56 switch( $_POST['action'] ) {
57 case 'add' :
58 if ( !( $capability_id = groups_admin_capabilities_add_submit() ) ) {
59 return groups_admin_capabilities_add();
60 } else {
61 $capability = Groups_Capability::read( $capability_id );
62 Groups_Admin::add_message( sprintf( __( 'The <em>%s</em> capability has been created.', GROUPS_PLUGIN_DOMAIN ), stripslashes( wp_filter_nohtml_kses( $capability->capability ) ) ) );
63 }
64 break;
65 case 'edit' :
66 if ( !( $capability_id = groups_admin_capabilities_edit_submit() ) ) {
67 return groups_admin_capabilities_edit( $_POST['capability-id-field'] );
68 } else {
69 $capability = Groups_Capability::read( $capability_id );
70 Groups_Admin::add_message( sprintf( __( 'The <em>%s</em> capability has been updated.', GROUPS_PLUGIN_DOMAIN ), stripslashes( wp_filter_nohtml_kses( $capability->capability ) ) ) );
71 }
72 break;
73 case 'remove' :
74 if ( $capability_id = groups_admin_capabilities_remove_submit() ) {
75 Groups_Admin::add_message( __( 'The capability has been deleted.', GROUPS_PLUGIN_DOMAIN ) );
76 }
77 break;
78 // bulk actions on groups: capabilities
79 case 'groups-action' :
80 if ( wp_verify_nonce( $_POST[GROUPS_ADMIN_GROUPS_ACTION_NONCE], 'admin' ) ) {
81 $capability_ids = isset( $_POST['capability_ids'] ) ? $_POST['capability_ids'] : null;
82 $bulk = isset( $_POST['bulk'] ) ? $_POST['bulk'] : null;
83 if ( is_array( $capability_ids ) && ( $bulk !== null ) ) {
84 foreach ( $capability_ids as $capability_id ) {
85 $bulk_action = isset( $_POST['bulk-action'] ) ? $_POST['bulk-action'] : null;
86 switch( $bulk_action ) {
87 case 'remove' :
88 if ( isset( $_POST['confirm'] ) ) {
89 groups_admin_capabilities_bulk_remove_submit();
90 } else {
91 return groups_admin_capabilities_bulk_remove();
92 }
93 break;
94 }
95 break;
96 }
97 }
98 }
99 break;
100 }
101 } else if ( isset ( $_GET['action'] ) ) {
102 // handle action request - show form
103 switch( $_GET['action'] ) {
104 case 'add' :
105 return groups_admin_capabilities_add();
106 break;
107 case 'edit' :
108 if ( isset( $_GET['capability_id'] ) ) {
109 return groups_admin_capabilities_edit( $_GET['capability_id'] );
110 }
111 break;
112 case 'remove' :
113 if ( isset( $_GET['capability_id'] ) ) {
114 return groups_admin_capabilities_remove( $_GET['capability_id'] );
115 }
116 break;
117 case 'refresh' :
118 if ( check_admin_referer( 'refresh' ) ) {
119 $n = Groups_WordPress::refresh_capabilities();
120 if ( $n > 0 ) {
121 $output .= '<div class="updated fade"><p>' . sprintf( _n( 'One capability has been added.', '%d capabilities have been added.', $n, GROUPS_PLUGIN_DOMAIN ), $n ) . '</p></div>';
122 } else {
123 $output .= '<div class="updated fade"><p>' . __( 'No new capabilities have been found.', GROUPS_PLUGIN_DOMAIN ) . '</p></div>';
124 }
125 } else {
126 wp_die( __( 'A Duck!', GROUPS_PLUGIN_DOMAIN ) );
127 }
128 break;
129 }
130 }
131
132 //
133 // capabilities table
134 //
135 if (
136 isset( $_POST['clear_filters'] ) ||
137 isset( $_POST['capability_id'] ) ||
138 isset( $_POST['capability'] )
139 ) {
140 if ( !wp_verify_nonce( $_POST[GROUPS_ADMIN_CAPABILITIES_FILTER_NONCE], 'admin' ) ) {
141 wp_die( __( 'Access denied.', GROUPS_PLUGIN_DOMAIN ) );
142 }
143 }
144
145 // filters
146 $capability_id = Groups_Options::get_user_option( 'capabilities_capability_id', null );
147 $capability = Groups_Options::get_user_option( 'capabilities_capability', null );
148
149 if ( isset( $_POST['clear_filters'] ) ) {
150 Groups_Options::delete_user_option( 'capabilities_capability_id' );
151 Groups_Options::delete_user_option( 'capabilities_capability' );
152 $capability_id = null;
153 $capability = null;
154 } else if ( isset( $_POST['submitted'] ) ) {
155 // filter by name
156 if ( !empty( $_POST['capability'] ) ) {
157 $capability = $_POST['capability'];
158 Groups_Options::update_user_option( 'capabilities_capability', $capability );
159 }
160 // filter by capability id
161 if ( !empty( $_POST['capability_id'] ) ) {
162 $capability_id = intval( $_POST['capability_id'] );
163 Groups_Options::update_user_option( 'capabilities_capability_id', $capability_id );
164 } else if ( isset( $_POST['capability_id'] ) ) { // empty && isset => '' => all
165 $capability_id = null;
166 Groups_Options::delete_user_option( 'capabilities_capability_id' );
167 }
168 }
169
170 if ( isset( $_POST['row_count'] ) ) {
171 if ( !wp_verify_nonce( $_POST[GROUPS_ADMIN_CAPABILITIES_NONCE_1], 'admin' ) ) {
172 wp_die( __( 'Access denied.', GROUPS_PLUGIN_DOMAIN ) );
173 }
174 }
175
176 if ( isset( $_POST['paged'] ) ) {
177 if ( !wp_verify_nonce( $_POST[GROUPS_ADMIN_CAPABILITIES_NONCE_2], 'admin' ) ) {
178 wp_die( __( 'Access denied.', GROUPS_PLUGIN_DOMAIN ) );
179 }
180 }
181
182 $current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
183 $current_url = remove_query_arg( 'paged', $current_url );
184 $current_url = remove_query_arg( 'action', $current_url );
185 $current_url = remove_query_arg( 'capability_id', $current_url );
186
187 $capability_table = _groups_get_tablename( 'capability' );
188
189 $output .=
190 '<div class="manage-capabilities wrap">' .
191 '<h1>' .
192 __( 'Capabilities', GROUPS_PLUGIN_DOMAIN ) .
193 // add capability
194 sprintf(
195 '<a title="%s" class="add page-title-action" href="%s">',
196 esc_attr( __( 'Click to add a new capability', GROUPS_PLUGIN_DOMAIN ) ),
197 esc_url( $current_url . '&action=add' )
198 ) .
199 sprintf(
200 '<img class="icon" alt="%s" src="%s" />',
201 esc_attr( __( 'Add', GROUPS_PLUGIN_DOMAIN ) ),
202 esc_url( GROUPS_PLUGIN_URL . 'images/add.png' )
203 ) .
204 sprintf(
205 '<span class="label">%s</span>',
206 stripslashes( wp_filter_nohtml_kses( __( 'New Capability', GROUPS_PLUGIN_DOMAIN ) ) )
207 ) .
208 '</a>' .
209 // refresh capabilities
210 sprintf(
211 '<a title="%s" class="refresh page-title-action" href="%s">',
212 esc_attr( __( 'Click to refresh capabilities', GROUPS_PLUGIN_DOMAIN ) ),
213 esc_url( wp_nonce_url( $current_url . '&action=refresh', 'refresh' ) )
214 ) .
215 sprintf(
216 '<img class="icon" alt="%s" src="%s" />',
217 esc_attr( __( 'Refresh', GROUPS_PLUGIN_DOMAIN ) ),
218 esc_url( GROUPS_PLUGIN_URL . 'images/refresh.png' )
219 ) .
220 sprintf(
221 '<span class="label">%s</span>',
222 stripslashes( wp_filter_nohtml_kses( __( 'Refresh', GROUPS_PLUGIN_DOMAIN ) ) )
223 ) .
224 '</a>' .
225 '</h1>';
226
227 $output .= Groups_Admin::render_messages();
228
229 $row_count = isset( $_POST['row_count'] ) ? intval( $_POST['row_count'] ) : 0;
230
231 if ($row_count <= 0) {
232 $row_count = Groups_Options::get_user_option( 'capabilities_per_page', GROUPS_CAPABILITIES_PER_PAGE );
233 } else {
234 Groups_Options::update_user_option('capabilities_per_page', $row_count );
235 }
236 $offset = isset( $_GET['offset'] ) ? intval( $_GET['offset'] ) : 0;
237 if ( $offset < 0 ) {
238 $offset = 0;
239 }
240 $paged = isset( $_REQUEST['paged'] ) ? intval( $_REQUEST['paged'] ) : 0;
241 if ( $paged < 0 ) {
242 $paged = 0;
243 }
244
245 $orderby = isset( $_GET['orderby'] ) ? $_GET['orderby'] : null;
246 switch ( $orderby ) {
247 case 'capability_id' :
248 case 'capability' :
249 case 'description' :
250 break;
251 default:
252 $orderby = 'name';
253 }
254
255 $order = isset( $_GET['order'] ) ? $_GET['order'] : null;
256 switch ( $order ) {
257 case 'asc' :
258 case 'ASC' :
259 $switch_order = 'DESC';
260 break;
261 case 'desc' :
262 case 'DESC' :
263 $switch_order = 'ASC';
264 break;
265 default:
266 $order = 'ASC';
267 $switch_order = 'DESC';
268 }
269
270 $filters = array( " 1=%d " );
271 $filter_params = array( 1 );
272 if ( $capability_id ) {
273 $filters[] = " $capability_table.capability_id = %d ";
274 $filter_params[] = $capability_id;
275 }
276 if ( $capability ) {
277 $filters[] = " $capability_table.capability LIKE '%%%s%%' ";
278 $filter_params[] = $capability;
279 }
280
281 if ( !empty( $filters ) ) {
282 $filters = " WHERE " . implode( " AND ", $filters );
283 } else {
284 $filters = '';
285 }
286
287 $count_query = $wpdb->prepare( "SELECT COUNT(*) FROM $capability_table $filters", $filter_params );
288 $count = $wpdb->get_var( $count_query );
289 if ( $count > $row_count ) {
290 $paginate = true;
291 } else {
292 $paginate = false;
293 }
294 $pages = ceil ( $count / $row_count );
295 if ( $paged > $pages ) {
296 $paged = $pages;
297 }
298 if ( $paged != 0 ) {
299 $offset = ( $paged - 1 ) * $row_count;
300 }
301
302 $query = $wpdb->prepare(
303 "SELECT * FROM $capability_table
304 $filters
305 ORDER BY $orderby $order
306 LIMIT $row_count OFFSET $offset",
307 $filter_params
308 );
309
310 $results = $wpdb->get_results( $query, OBJECT );
311
312 $column_display_names = array(
313 'capability_id' => __( 'ID', GROUPS_PLUGIN_DOMAIN ),
314 'capability' => __( 'Capability', GROUPS_PLUGIN_DOMAIN ),
315 'description' => __( 'Description', GROUPS_PLUGIN_DOMAIN )
316 );
317
318 $output .= '<div class="capabilities-overview">';
319
320 $output .=
321 '<div class="filters">' .
322 '<form id="setfilters" action="" method="post">' .
323 '<fieldset>' .
324 '<legend>' . __( 'Filters', GROUPS_PLUGIN_DOMAIN ) . '</legend>' .
325 '<label class="capability-id-filter">' .
326 __( 'Capability ID', GROUPS_PLUGIN_DOMAIN ) . ' ' .
327 '<input class="capability-id-filter" name="capability_id" type="text" value="' . esc_attr( $capability_id ) . '"/>' .
328 '</label>' . ' ' .
329 '<label class="capability-filter">' .
330 __( 'Capability', GROUPS_PLUGIN_DOMAIN ) . ' ' .
331 '<input class="capability-filter" name="capability" type="text" value="' . $capability . '"/>' .
332 '</label>' . ' ' .
333 wp_nonce_field( 'admin', GROUPS_ADMIN_CAPABILITIES_FILTER_NONCE, true, false ) .
334 '<input class="button" type="submit" value="' . __( 'Apply', GROUPS_PLUGIN_DOMAIN ) . '"/>' . ' ' .
335 '<input class="button" type="submit" name="clear_filters" value="' . __( 'Clear', GROUPS_PLUGIN_DOMAIN ) . '"/>' .
336 '<input type="hidden" value="submitted" name="submitted"/>' .
337 '</fieldset>' .
338 '</form>' .
339 '</div>';
340
341 if ( $paginate ) {
342 require_once( GROUPS_CORE_LIB . '/class-groups-pagination.php' );
343 $pagination = new Groups_Pagination( $count, null, $row_count );
344 $output .= '<form id="posts-filter" method="post" action="">';
345 $output .= '<div>';
346 $output .= wp_nonce_field( 'admin', GROUPS_ADMIN_CAPABILITIES_NONCE_2, true, false );
347 $output .= '</div>';
348 $output .= '<div class="tablenav top">';
349 $output .= $pagination->pagination( 'top' );
350 $output .= '</div>';
351 $output .= '</form>';
352 }
353
354 $output .= '<div class="page-options right">';
355 $output .= '<form id="setrowcount" action="" method="post">';
356 $output .= '<div>';
357 $output .= '<label for="row_count">' . __( 'Results per page', GROUPS_PLUGIN_DOMAIN ) . '</label>';
358 $output .= '<input name="row_count" type="text" size="2" value="' . esc_attr( $row_count ) .'" />';
359 $output .= wp_nonce_field( 'admin', GROUPS_ADMIN_CAPABILITIES_NONCE_1, true, false );
360 $output .= '<input class="button" type="submit" value="' . __( 'Apply', GROUPS_PLUGIN_DOMAIN ) . '"/>';
361 $output .= '</div>';
362 $output .= '</form>';
363 $output .= '</div>';
364
365 $output .= '<form id="groups-action" method="post" action="">';
366
367 $output .= '<div class="tablenav top">';
368 $output .= '<div class="capabilities-bulk-container">';
369 $output .= '<div class="alignleft actions">';
370 $output .= '<select name="bulk-action">';
371 $output .= '<option selected="selected" value="-1">' . esc_html( __( 'Bulk Actions', GROUPS_PLUGIN_DOMAIN ) ) . '</option>';
372 $output .= '<option value="remove">' . esc_html( __( 'Remove', GROUPS_PLUGIN_DOMAIN ) ) . '</option>';
373 $output .= '</select>';
374 $output .= '<input class="button" type="submit" name="bulk" value="' . esc_attr( __( "Apply", GROUPS_PLUGIN_DOMAIN ) ) . '"/>';
375 $output .= '</div>';
376 $output .= '</div>';
377 $output .= '</div>';
378 $output .= wp_nonce_field( 'admin', GROUPS_ADMIN_GROUPS_ACTION_NONCE, true, false );
379 $output .= '<input type="hidden" name="action" value="groups-action"/>';
380
381 $output .= '<table id="" class="wp-list-table widefat fixed" cellspacing="0">';
382 $output .= '<thead>';
383 $output .= '<tr>';
384
385 $output .= '<th id="cb" class="manage-column column-cb check-column" scope="col"><input type="checkbox"></th>';
386
387 foreach ( $column_display_names as $key => $column_display_name ) {
388 $options = array(
389 'orderby' => $key,
390 'order' => $switch_order
391 );
392 $class = $key;
393 if ( !in_array($key, array( 'capabilities', 'edit', 'remove' ) ) ) {
394 if ( strcmp( $key, $orderby ) == 0 ) {
395 $lorder = strtolower( $order );
396 $class = "$key manage-column sorted $lorder";
397 } else {
398 $class = "$key manage-column sortable";
399 }
400 $column_display_name =
401 sprintf(
402 '<a href="%s"><span>%s</span><span class="sorting-indicator"></span></a>',
403 esc_url( add_query_arg( $options, $current_url ) ),
404 esc_html( $column_display_name )
405 );
406 } else {
407 $column_display_name = esc_html( $column_display_name );
408 }
409 $output .= sprintf(
410 '<th scope="col" class="%s">%s</th>',
411 esc_attr( $class ),
412 $column_display_name
413 );
414 }
415
416 $output .= '</tr>';
417 $output .= '</thead>';
418 $output .= '<tbody>';
419
420 if ( count( $results ) > 0 ) {
421 for ( $i = 0; $i < count( $results ); $i++ ) {
422 $result = $results[$i];
423
424 // Construct the "edit" URL.
425 $edit_url = add_query_arg(
426 array(
427 'capability_id' => intval( $result->capability_id ),
428 'action' => 'edit',
429 'paged' => $paged
430 ),
431 $current_url
432 );
433 // Construct the "delete" URL.
434 $delete_url = add_query_arg(
435 array(
436 'capability_id' => intval( $result->capability_id ),
437 'action' => 'remove',
438 'paged' => $paged
439 ),
440 $current_url
441 );
442
443 // Construct row actions for this group.
444 $row_actions =
445 '<div class="row-actions">' .
446 '<span class="edit">' .
447 '<a href="' . esc_url( $edit_url ) . '">' .
448 '<img src="' . GROUPS_PLUGIN_URL . 'images/edit.png"/>' .
449 __( 'Edit', GROUPS_PLUGIN_DOMAIN ) .
450 '</a>';
451 if ( $result->capability !== Groups_Post_Access::READ_POST_CAPABILITY ) {
452 $row_actions .=
453 ' | '.
454 '</span>' .
455 '<span class="remove trash">' .
456 '<a href="' . esc_url( $delete_url ) . '" class="submitdelete">' .
457 '<img src="' . GROUPS_PLUGIN_URL . 'images/remove.png"/>' .
458 __( 'Remove', GROUPS_PLUGIN_DOMAIN ) .
459 '</a>' .
460 '</span>';
461 }
462 $row_actions .= '</div>'; // .row-actions
463
464 $output .= '<tr class="' . ( $i % 2 == 0 ? 'even' : 'odd' ) . '">';
465
466 $output .= '<th class="check-column">';
467 $output .= '<input type="checkbox" value="' . esc_attr( $result->capability_id ) . '" name="capability_ids[]"/>';
468 $output .= '</th>';
469
470 $output .= '<td class="capability-id">';
471 $output .= $result->capability_id;
472 $output .= '</td>';
473 $output .= '<td class="capability">';
474 $output .= sprintf( '<a href="%s">%s</a>', esc_url( $edit_url ), stripslashes( wp_filter_nohtml_kses( $result->capability ) ) );
475 $output .= $row_actions;
476 $output .= '</td>';
477 $output .= '<td class="description">';
478 $output .= stripslashes( wp_filter_nohtml_kses( $result->description ) );
479 $output .= '</td>';
480
481 $output .= '</tr>';
482 }
483 } else {
484 $output .= '<tr><td colspan="3">' . __( 'There are no results.', GROUPS_PLUGIN_DOMAIN ) . '</td></tr>';
485 }
486
487 $output .= '</tbody>';
488 $output .= '</table>';
489
490 $output .= Groups_UIE::render_add_titles( '.capabilities-overview table td' );
491
492 $output .= '</form>'; // #groups-action
493
494 if ( $paginate ) {
495 require_once( GROUPS_CORE_LIB . '/class-groups-pagination.php' );
496 $pagination = new Groups_Pagination($count, null, $row_count);
497 $output .= '<div class="tablenav bottom">';
498 $output .= $pagination->pagination( 'bottom' );
499 $output .= '</div>';
500 }
501
502 $output .= '</div>'; // .capabilities-overview
503 $output .= '</div>'; // .manage-capabilities
504
505 echo $output;
506 } // function groups_admin_capabilities()
507