<?php
if(preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF'])) { die('You are not allowed to call this page directly.'); }
function nggallery_admin_roles() {
if ( !empty($_POST) ) {
check_admin_referer('ngg_addroles');
ngg_set_capability($_POST['general'], "NextGEN Gallery overview");
ngg_set_capability($_POST['tinymce'], "NextGEN Use TinyMCE");
ngg_set_capability($_POST['add_gallery'], "NextGEN Upload images");
ngg_set_capability($_POST['manage_gallery'], "NextGEN Manage gallery");
ngg_set_capability($_POST['manage_others'], "NextGEN Manage others gallery");
ngg_set_capability($_POST['manage_tags'], "NextGEN Manage tags");
ngg_set_capability($_POST['edit_album'], "NextGEN Edit album");
ngg_set_capability($_POST['change_style'], "NextGEN Change style");
ngg_set_capability($_POST['change_options'], "NextGEN Change options");
ngg_set_capability($_POST['attach_interface'], "NextGEN Attach Interface");
}
?>
<div class="wrap">
<p>
<?php _e('Select the lowest role which should be able to access the following capabilities. NextGEN Gallery supports the standard roles from WordPress.', 'nggallery') ?> <br />
</p>
<?php wp_nonce_field('ngg_addroles') ?>
<table class="form-table">
<tr valign="top">
<th scope="row"><?php _e('Main NextGEN Gallery overview', 'nggallery') ;?>:</th>
<td><label for="general"><select name="general" id="general"><?php wp_dropdown_roles( ngg_get_role('NextGEN Gallery overview') ); ?></select></label></td>
</tr>
<tr valign="top">
<th scope="row"><?php _e('Use TinyMCE Button / Upload tab', 'nggallery') ;?>:</th>
<td><label for="tinymce"><select name="tinymce" id="tinymce"><?php wp_dropdown_roles( ngg_get_role('NextGEN Use TinyMCE') ); ?></select></label></td>
</tr>
<tr valign="top">
<th scope="row"><?php _e('Add gallery / Upload images', 'nggallery') ;?>:</th>
<td><label for="add_gallery"><select name="add_gallery" id="add_gallery"><?php wp_dropdown_roles( ngg_get_role('NextGEN Upload images') ); ?></select></label></td>
</tr>
<tr valign="top">
<th scope="row"><?php _e('Manage gallery', 'nggallery') ;?>:</th>
<td><label for="manage_gallery"><select name="manage_gallery" id="manage_gallery"><?php wp_dropdown_roles( ngg_get_role('NextGEN Manage gallery') ); ?></select></label></td>
</tr>
<tr valign="top">
<th scope="row"><?php _e('Manage others gallery', 'nggallery') ;?>:</th>
<td><label for="manage_others"><select name="manage_others" id="manage_others"><?php wp_dropdown_roles( ngg_get_role('NextGEN Manage others gallery') ); ?></select></label></td>
</tr>
<tr valign="top">
<th scope="row"><?php _e('Manage tags', 'nggallery') ;?>:</th>
<td><label for="manage_tags"><select name="manage_tags" id="manage_tags"><?php wp_dropdown_roles( ngg_get_role('NextGEN Manage tags') ); ?></select></label></td>
</tr>
<tr valign="top">
<th scope="row"><?php _e('Edit Album', 'nggallery') ;?>:</th>
<td><label for="edit_album"><select name="edit_album" id="edit_album"><?php wp_dropdown_roles( ngg_get_role('NextGEN Edit album') ); ?></select></label></td>
</tr>
<tr valign="top">
<th scope="row"><?php _e('Change style', 'nggallery') ;?>:</th>
<td><label for="change_style"><select name="change_style" id="change_style"><?php wp_dropdown_roles( ngg_get_role('NextGEN Change style') ); ?></select></label></td>
</tr>
<tr valign="top">
<th scope="row"><?php _e('Change options', 'nggallery') ;?>:</th>
<td><label for="change_options"><select name="change_options" id="change_options"><?php wp_dropdown_roles( ngg_get_role('NextGEN Change options') ); ?></select></label></td>
</tr>
<tr valign="top">
<th scope="row"><?php _e('NextGEN Attach Interface', 'nggallery') ;?>:</th>
<td><label for="attach_interface"><select name="attach_interface" id="attach_interface"><?php wp_dropdown_roles( ngg_get_role('NextGEN Attach Interface') ); ?></select></label></td>
</tr>
</table>
</div>
<?php
}
function ngg_get_sorted_roles() {
global $wp_roles;
$roles = $wp_roles->role_objects;
$sorted = array();
if( class_exists('RoleManager') ) {
foreach( $roles as $role_key => $role_name ) {
$role = get_role($role_key);
if( empty($role) ) continue;
$role_user_level = array_reduce(array_keys($role->capabilities), array('WP_User', 'level_reduction'), 0);
$sorted[$role_user_level] = $role;
}
$sorted = array_values($sorted);
} else {
$role_order = array("subscriber", "contributor", "author", "editor", "administrator");
foreach($role_order as $role_key) {
$sorted[$role_key] = get_role($role_key);
}
}
return $sorted;
}
function ngg_get_role($capability) {
$check_order = ngg_get_sorted_roles();
$args = array_slice(func_get_args(), 1);
$args = array_merge(array($capability), $args);
foreach ($check_order as $check_role) {
if ( empty($check_role) )
return false;
if (call_user_func_array(array(&$check_role, 'has_cap'), $args))
return $check_role->name;
}
return false;
}
function ngg_set_capability($lowest_role, $capability) {
$check_order = ngg_get_sorted_roles();
$add_capability = false;
foreach ($check_order as $the_role) {
$role = $the_role->name;
if ( $lowest_role == $role )
$add_capability = true;
if ( empty($the_role) )
continue;
$add_capability ? $the_role->add_cap($capability) : $the_role->remove_cap($capability) ;
}
}
?>