%s capability has been created.', 'groups' ),
$capability->capability ? stripslashes( wp_filter_nohtml_kses( $capability->capability ) ) : ''
) );
}
break;
case 'edit' :
if ( !( $capability_id = groups_admin_capabilities_edit_submit() ) ) {
return groups_admin_capabilities_edit( groups_sanitize_post( 'capability-id-field' ) );
} else {
$capability = Groups_Capability::read( $capability_id );
Groups_Admin::add_message( sprintf(
/* translators: capability name */
__( 'The %s capability has been updated.', 'groups' ),
$capability->capability ? stripslashes( wp_filter_nohtml_kses( $capability->capability ) ) : ''
) );
}
break;
case 'remove' :
if ( $capability_id = groups_admin_capabilities_remove_submit() ) {
Groups_Admin::add_message( __( 'The capability has been deleted.', 'groups' ) );
}
break;
// bulk actions on groups: capabilities
case 'groups-action' :
if ( groups_verify_post_nonce( GROUPS_ADMIN_GROUPS_ACTION_NONCE, 'admin' ) ) {
$capability_ids = groups_sanitize_post( 'capability_ids' );
$bulk = groups_sanitize_post( 'bulk' );
if ( is_array( $capability_ids ) && ( $bulk !== null ) ) {
foreach ( $capability_ids as $capability_id ) {
$bulk_action = groups_sanitize_post( 'bulk-action' );
switch ( $bulk_action ) {
case 'remove' :
if ( isset( $_POST['confirm'] ) ) {
groups_admin_capabilities_bulk_remove_submit();
} else {
return groups_admin_capabilities_bulk_remove();
}
break;
}
break;
}
}
}
break;
}
} else if ( isset ( $_GET['action'] ) ) {
// handle action request - show form
switch ( groups_sanitize_get( 'action' ) ) {
case 'add' :
return groups_admin_capabilities_add();
break;
case 'edit' :
if ( isset( $_GET['capability_id'] ) ) {
return groups_admin_capabilities_edit( groups_sanitize_get( 'capability_id' ) );
}
break;
case 'remove' :
if ( isset( $_GET['capability_id'] ) ) {
return groups_admin_capabilities_remove( groups_sanitize_get( 'capability_id' ) );
}
break;
case 'refresh' :
if ( check_admin_referer( 'refresh' ) ) {
$n = Groups_WordPress::refresh_capabilities();
if ( $n > 0 ) {
/* translators: count */
$output .= '
' . esc_html( sprintf( _n( 'One capability has been added.', '%d capabilities have been added.', $n, 'groups' ), $n ) ) . '
'; // phpcs:ignore WordPress.WP.I18n.MissingSingularPlaceholder
} else {
$output .= '' .
'
';
$output .= Groups_Admin::render_messages();
$row_count = intval( groups_sanitize_post( 'row_count' ) ?? 0 );
if ($row_count <= 0) {
$row_count = Groups_Options::get_user_option( 'capabilities_per_page', GROUPS_CAPABILITIES_PER_PAGE );
} else {
Groups_Options::update_user_option('capabilities_per_page', $row_count );
}
$offset = intval( groups_sanitize_get( 'offset' ) ?? 0 );
if ( $offset < 0 ) {
$offset = 0;
}
$paged = intval( groups_sanitize_request( 'paged' ) ?? 0 );
if ( $paged < 0 ) {
$paged = 0;
}
$orderby = groups_sanitize_get( 'orderby' );
switch ( $orderby ) {
case 'capability_id' :
case 'capability' :
case 'description' :
break;
default:
$orderby = 'name';
}
$order = groups_sanitize_get( 'order' );
switch ( $order ) {
case 'asc' :
case 'ASC' :
$switch_order = 'DESC';
break;
case 'desc' :
case 'DESC' :
$switch_order = 'ASC';
break;
default:
$order = 'ASC';
$switch_order = 'DESC';
}
$filters = array( " 1=%d " );
$filter_params = array( 1 );
if ( $capability_id ) {
$filters[] = " $capability_table.capability_id = %d ";
$filter_params[] = $capability_id;
}
if ( $capability ) {
$filters[] = " $capability_table.capability LIKE %s ";
$filter_params[] = '%' . $wpdb->esc_like( $capability ) . '%';
}
if ( !empty( $filters ) ) { // @phpstan-ignore empty.variable
$filters = " WHERE " . implode( " AND ", $filters );
} else {
$filters = '';
}
$count_query = $wpdb->prepare( "SELECT COUNT(*) FROM $capability_table $filters", $filter_params ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare
$count = $wpdb->get_var( $count_query ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
if ( $count > $row_count ) {
$paginate = true;
} else {
$paginate = false;
}
$pages = ceil ( $count / $row_count );
if ( $paged > $pages ) {
$paged = $pages;
}
if ( $paged != 0 ) {
$offset = ( $paged - 1 ) * $row_count;
}
$query = $wpdb->prepare(
// nosemgrep: audit.php.wp.security.sqli.input-in-sinks
"SELECT * FROM $capability_table $filters ORDER BY $orderby $order LIMIT $row_count OFFSET $offset", // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare
$filter_params
);
// nosemgrep: audit.php.wp.security.sqli.input-in-sinks
$results = $wpdb->get_results( $query, OBJECT ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
$column_display_names = array(
'capability_id' => __( 'ID', 'groups' ),
'capability' => __( 'Capability', 'groups' ),
'description' => __( 'Description', 'groups' )
);
$output .= '
';
$output .=
'
' .
'' .
'
';
$output .= '
'; // #groups-action
if ( $paginate ) {
require_once GROUPS_CORE_LIB . '/class-groups-pagination.php';
$pagination = new Groups_Pagination($count, null, $row_count);
$output .= '
';
$output .= $pagination->pagination( 'bottom' );
$output .= '
';
}
$output .= '
'; // .capabilities-overview
$output .= '
'; // .manage-capabilities
echo $output; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
} // function groups_admin_capabilities()