Hi, as promised :) here's my current code, this is from another plugin but has the exact same issue. Hence why these snippets will slightly differ from the ones in my first post.
The form:
$adrotate_config = get_option('adrotate_config');
<tr>
<th scope="row" valign="top">Global Statistics Page</th>
<td>
<select name="adrotate_globalstatistics">
<?php wp_dropdown_roles($adrotate_config['globalstatistics']); ?>
</select><br />
<span class="description">Role to review the global statistics.</span>
</td>
<th scope="row" valign="top">Advertiser Statistics Page</th>
<td>
<select name="adrotate_userstatistics">
<?php wp_dropdown_roles($adrotate_config['userstatistics']); ?>
</select><br />
<span class="description">Role to allow users/advertisers to see their statistics page.</span>
</td>
</tr>
<tr>
<th scope="row" valign="top">Manage/Add/Edit Ads</th>
<td>
<select name="adrotate_ad_manage">
<?php wp_dropdown_roles($adrotate_config['ad_manage']); ?>
</select><br />
<span class="description">Role to see and add/edit ads.</span>
</td>
<th scope="row" valign="top">Delete/Reset Ads</th>
<td>
<select name="adrotate_ad_delete">
<?php wp_dropdown_roles($adrotate_config['ad_delete']); ?>
</select><br />
<span class="description">Role to delete ads and reset stats.</span>
</td>
</tr>
<tr>
<th scope="row" valign="top">Manage/Add/Edit Groups</th>
<td>
<select name="adrotate_group_manage">
<?php wp_dropdown_roles($adrotate_config['group_manage']); ?>
</select><br />
<span class="description">Role to see and add/edit groups.</span>
</td>
<th scope="row" valign="top">Delete Groups</th>
<td>
<select name="adrotate_group_delete">
<?php wp_dropdown_roles($adrotate_config['group_delete']); ?>
</select><br />
<span class="description">Role to delete groups.</span>
</td>
</tr>
<tr>
<th scope="row" valign="top">Manage/Add/Edit Blocks</th>
<td>
<select name="adrotate_block_manage">
<?php wp_dropdown_roles($adrotate_config['block_manage']); ?>
</select><br />
<span class="description">Role to see and add/edit blocks.</span>
</td>
<th scope="row" valign="top">Delete Blocks</th>
<td>
<select name="adrotate_block_delete">
<?php wp_dropdown_roles($adrotate_config['block_delete']); ?>
</select><br />
<span class="description">Role to delete blocks.</span>
</td>
</tr>
The code saving that form:
$config['userstatistics'] = $_POST['adrotate_userstatistics'];
$config['globalstatistics'] = $_POST['adrotate_globalstatistics'];
$config['ad_manage'] = $_POST['adrotate_ad_manage'];
$config['ad_delete'] = $_POST['adrotate_ad_delete'];
$config['group_manage'] = $_POST['adrotate_group_manage'];
$config['group_delete'] = $_POST['adrotate_group_delete'];
$config['block_manage'] = $_POST['adrotate_block_manage'];
$config['block_delete'] = $_POST['adrotate_block_delete'];
update_option('adrotate_config', $config);
Menu structure using the roles chosen in the form:
function adrotate_dashboard() {
global $adrotate_config;
add_object_page('AdRotate', 'AdRotate', $adrotate_config['ad_manage'], 'adrotate', 'adrotate_manage');
add_submenu_page('adrotate', 'AdRotate > Manage Ads', 'Manage Ads', $adrotate_config['ad_manage'], 'adrotate', 'adrotate_manage');
add_submenu_page('adrotate', 'AdRotate > Groups', 'Manage Groups', $adrotate_config['group_manage'], 'adrotate-groups', 'adrotate_manage_group');
add_submenu_page('adrotate', 'AdRotate > Blocks', 'Manage Blocks', $adrotate_config['block_manage'], 'adrotate-blocks', 'adrotate_manage_block');
add_submenu_page('adrotate', 'AdRotate > User Statistics', 'User Statistics', $adrotate_config['userstatistics'], 'adrotate-userstatistics', 'adrotate_userstatistics');
add_submenu_page('adrotate', 'AdRotate > Global Statistics', 'Global Statistics', $adrotate_config['globalstatistics'], 'adrotate-statistics', 'adrotate_statistics');
add_submenu_page('adrotate', 'AdRotate > Settings','Settings', 'manage_options', 'adrotate-settings', 'adrotate_options');
}
And throughout the plugin thers various actions and functions that are limited by code like this:
if($action == 'activate') {
if(current_user_can($adrotate_config['ad_manage'])) {
adrotate_active($banner_id, 'activate');
$result_id = $banner_id;
} else {
adrotate_return('no_access');
}
}
As explained, it ALL works except the dropdowns. If in said dropdowns i select a certain role then only people having that role can access the dashboard or feature. Not higher or lower levels. Which obviously is wrong. The role in the dropdown should act as a MINIMUM required level.
Thanks!