scoper =& $GLOBALS['scoper'];
add_action('admin_head', array(&$this, 'admin_head_base'));
if ( ! defined('DISABLE_QUERYFILTERS_RS') || is_content_administrator_rs() ) {
add_action('admin_head', array(&$this, 'admin_head'));
if ( ! defined('XMLRPC_REQUEST') && ( 'async-upload.php' != $pagenow ) ) {
// New Network menu with WP 3.1
if ( defined( 'IS_MU_RS' ) ) {
add_action('network_admin_menu', 'scoper_mu_site_menu' );
add_action('network_admin_menu', 'scoper_mu_users_menu' );
}
add_action('admin_menu', array(&$this,'build_menu'));
add_action('admin_menu', array(&$this,'ngg_uploader_workaround'));
add_action('admin_init', array(&$this,'filter_add_new_content_links')); // changed from 'admin_menu' hook to work around WP 3.2 (as of RC1) removal of Edit submenu item if Add New is removed
add_action('admin_print_scripts', array(&$this,'filter_add_new_button'));
if ( 'plugins.php' == $pagenow )
add_filter( 'plugin_row_meta', array(&$this, 'flt_plugin_action_links'), 10, 2 );
}
}
if ( ( ( 'edit-tags.php' == $pagenow ) || ( isset($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], 'p-admin/edit-tags.php') ) ) && awp_is_plugin_active('subscribe2') )
require_once( dirname(__FILE__).'/subscribe2_helper_rs.php');
if ( defined( 'FLUTTER_NAME' ) )
require_once( dirname(__FILE__).'/flutter_helper_rs.php');
}
function menu_handler() {
$rs_page = $_GET['page'];
$url = SCOPER_ABSPATH . '/admin/';
switch ($rs_page) {
case 'rs-options' :
include_once( $url . 'options.php');
scoper_options( false );
break;
case 'rs-general_roles' :
include_once( $url . 'general_roles.php');
break;
case 'rs-groups' :
include_once( $url . 'groups.php');
break;
case 'rs-default_groups' :
include_once( $url . 'default_groups.php');
break;
case 'rs-group_members' :
include_once( $url . 'group_members.php');
break;
case 'rs-object_role_edit' :
include_once( $url . 'object_role_edit.php');
break;
case 'rs-about' :
include_once( $url . 'about.php');
break;
case 'rs-attachments_utility' :
include_once( $url . 'attachments_utility.php');
break;
default :
if ( strpos( $rs_page, '-roles' ) )
$topic = 'roles';
elseif( strpos( $rs_page, '-restrictions' ) )
$topic = 'restrictions';
if ( ! empty($topic) ) {
$matches = array();
if ( preg_match( "/rs-(.*)-$topic(.*)/", $rs_page, $matches ) ) {
if ( strpos( $rs_page, "{$topic}_t" ) ) {
include_once( SCOPER_ABSPATH . "/admin/section_{$topic}.php" );
call_user_func( "scoper_admin_section_{$topic}", $matches[1] );
} else {
if ( ! $matches[2] ) {
global $scoper;
if ( $scoper->data_sources->member_property( 'post', 'object_types', $matches[1] ) )
$matches[2] = 'post';
else
$matches[2] = $matches[1];
}
include_once( SCOPER_ABSPATH . "/admin/object_{$topic}.php" );
call_user_func( "scoper_admin_object_{$topic}", $matches[2], $matches[1] );
}
}
}
} // end switch
}
// adds an Options link next to Deactivate, Edit in Plugins listing
function flt_plugin_action_links($links, $file) {
if ( $file == SCOPER_BASENAME ) {
$links[] = "" . __awp('Support Forum') . "";
$page = ( IS_MU_RS ) ? 'rs-site_options' : 'rs-options';
$links[] = "" . __awp('Options') . "";
}
return $links;
}
function admin_head_base() {
if ( isset( $_POST['rs_defaults'] ) ) {
// User asked to restore default options, so restore htaccess rule for attachment filtering (if it's not disabled)
scoper_flush_site_rules();
scoper_expire_file_rules();
}
}
function admin_head() {
global $pagenow, $plugin_page_cr;
echo ''."\n";
if ( 'rs-options' == $plugin_page_cr ) {
if ( scoper_get_option('version_update_notice') ) {
require_once( dirname(__FILE__).'/misc/version_notice_rs.php');
scoper_new_version_notice();
}
} elseif ( 'rs-about' == $plugin_page_cr ) {
echo ''."\n";
}
if ( in_array( $pagenow, array( 'post.php', 'post-new.php') ) ) {
$src_name = 'post';
$object_type = cr_find_post_type();
} elseif ( isset($_GET['src_name']) && isset($_GET['object_type']) ) {
$src_name = $_GET['src_name'];
$object_type = $_GET['object_type'];
}
if ( ! empty($object_type) ) {
// dynamically set checkbox titles for user/group object role selection
$src = $this->scoper->data_sources->get($src_name);
$otype_def = $this->scoper->data_sources->member_property($src_name, 'object_types', $object_type);
if ( ! empty($src) && ! empty($src->cols->parent) && empty($otype_def->ignore_object_hierarchy) ) {
$obj_title = sprintf( __('assign role for this %s', 'scoper'), agp_strtolower( $otype_def->labels->singular_name ) );
$child_title = sprintf( __('assign role for sub-%s', 'scoper'), agp_strtolower( $otype_def->labels->name ) );
$js_params = "var role_for_object_title = '$obj_title';"
. "var role_for_children_title = '$child_title';";
// TODO: replace some of this JS with equivalent JQuery
echo "\n" . '';
echo "\n" . "";
}
}
add_filter( 'contextual_help_list', array(&$this, 'flt_contextual_help_list'), 10, 2 );
if ( ( 0 === strpos( $plugin_page_cr, 'rs-' ) ) && strpos( $plugin_page_cr, 'roles' ) ) {
// add Ajax goodies we need for role duration/content date limit editing Bulk Role Admin
wp_print_scripts( array( 'page' ) );
require_once( dirname(__FILE__).'/admin_lib-bulk_rs.php' );
ScoperAdminBulkLib::date_limits_js();
}
// TODO: replace some of this JS with equivalent JQuery
echo "\n" . "";
echo "\n" . "";
if ( scoper_get_option( 'group_ajax' ) && ( in_array( $pagenow, array( 'user-edit.php', 'profile.php' ) ) || ( 'rs-groups' == $plugin_page_cr ) ) ) {
global $scoper_user_search;
if ( 'rs-groups' == $plugin_page_cr ) {
$agent_type = 'users';
$agent_id = isset( $_GET['id'] ) ? $_GET['id'] : 0;
} else {
$agent_type = 'groups';
if ( 'profile.php' == $pagenow ) {
global $current_user;
$agent_id = $current_user->ID;
} else
$agent_id = $_GET['user_id'];
}
require_once( dirname(__FILE__).'/user_search_ui_rs.php' );
$scoper_user_search = new ScoperUserSearch( $agent_type );
$scoper_user_search->output_js( $agent_type, $agent_id );
}
}
function flt_contextual_help_list ($help, $screen) {
$link_section = '';
// WP < 3.0 passes ID as string
if ( is_object($screen) )
$screen = $screen->id;
if ( strpos( $screen, 'rs-' ) ) {
$match = array();
if ( ! preg_match( "/admin_page_rs-[^@]*-*/", $screen, $match ) )
if ( ! preg_match( "/_page_rs-[^@]*-*/", $screen, $match ) )
preg_match( "/rs-[^@]*-*/", $screen, $match );
if ( $match )
if ( $pos = strpos( $match[0], 'rs-' ) ) {
$link_section = substr( $match[0], $pos + strlen('rs-') );
$link_section = str_replace( '_t', '', $link_section );
}
} elseif ( in_array( $screen, array( 'post', 'page', 'upload', 'users' ) ) ) {
$link_section = $screen;
}
if ( $link_section ) {
$link_section = str_replace( '.php', '', $link_section);
$link_section = str_replace( '/', '~', $link_section);
if ( ! isset($help[$screen]) )
$help[$screen] = '';
$help[$screen] .= ' ' . sprintf(__('%1$s Role Scoper Documentation%2$s', 'scoper'), "", '')
. ', ' . sprintf(__('%1$s Role Scoper Support Forum%2$s', 'scoper'), "", '');
}
return $help;
}
function filter_add_new_content_links() {
global $scoper, $submenu;
if ( is_content_administrator_rs() )
return;
// But user might have a qualifying Default Post Role assigned
//$_default_restricted_roles = $scoper->get_default_restrictions( 'object' );
//$default_restricted_roles = ( isset( $_default_restricted_roles['post'] ) ) ? $_default_restricted_roles['post'] : array();
// workaround for WP's universal inclusion of "Add New"
$src = $this->scoper->data_sources->get( 'post' );
foreach ( array_keys($src->object_types) as $_post_type ) {
if ( $wp_type = get_post_type_object( $_post_type ) ) {
$edit_key = ( 'post' == $_post_type ) ? 'edit.php' : "edit.php?post_type=$_post_type";
$add_key = ( 'post' == $_post_type ) ? 'post-new.php' : "post-new.php?post_type=$_post_type";
if ( isset($submenu[$edit_key]) ) {
foreach ( $submenu[$edit_key] as $key => $arr ) {
if ( isset($arr['2']) && ( $add_key == $arr['2'] ) ) {
//$qualifying_roles = $scoper->role_defs->qualify_roles( $wp_type->cap->edit_posts );
if ( ( ! defined( 'SCOPER_LEGACY_MENU_FILTERING' ) ) // && ! array_diff_key( $qualifying_roles, $default_restricted_roles ) )
&& ! cr_user_can( $wp_type->cap->edit_posts, 0, 0, array( 'skip_id_generation' => true, 'skip_any_object_check' => true ) ) ) {
unset( $submenu[$edit_key][$key]);
}
}
}
}
}
}
if ( isset($submenu['link-manager.php'][10]) ) {
$this->scoper->ignore_object_roles = true;
if ( ! current_user_can( 'manage_links' ) )
unset( $submenu['link-manager.php'][10] );
$this->scoper->ignore_object_roles = false;
}
}
function filter_add_new_button() {
if ( in_array( $GLOBALS['pagenow'], array( 'edit.php', 'post.php', 'post-new.php' ) ) ) {
$_post_type = ( ! empty($_REQUEST['post_type']) ) ? $_REQUEST['post_type'] : 'post';
if ( $wp_type = get_post_type_object( $_post_type ) ) {
global $scoper;
$_default_restricted_roles = $scoper->get_default_restrictions( 'object' );
$default_restricted_roles = ( isset( $_default_restricted_roles['post'] ) ) ? $_default_restricted_roles['post'] : array();
$qualifying_roles = $scoper->role_defs->qualify_roles( $wp_type->cap->edit_posts );
if ( ( ! defined( 'SCOPER_LEGACY_MENU_FILTERING' ) && ! array_diff_key( $qualifying_roles, $default_restricted_roles ) )
|| ! $this->scoper->user_can_edit_blogwide( 'post', $_post_type ) ) {
if ( ! wp_script_is( 'jquery' ) )
wp_print_scripts( 'jquery' );
?>
Options > Features > Content Maintenance, set "Roles and Restrictions can be set" to "Administrators only"
//
// To prevent Role Scoper from filtering the backend at all, go to Roles > Options > Realm > Access Types and deselect "editing and administering content"
//
// end optional hack
*/
$require_blogwide_editor = scoper_get_option('role_admin_blogwide_editor_only');
if ( ! $is_content_administrator && ( 'admin_content' == $require_blogwide_editor ) )
if ( ! $is_option_administrator )
return;
if ( ! $is_user_administrator && ( 'admin' == $require_blogwide_editor ) )
if ( ! $is_option_administrator )
return;
$can_admin_objects = array();
$can_admin_terms = array();
$use_post_types = scoper_get_option( 'use_post_types' );
$use_taxonomies = scoper_get_option( 'use_taxonomies' );
// which object types does this user have any administration over?
foreach ( $this->scoper->data_sources->get_all() as $src_name => $src ) {
if ( ! empty($src->no_object_roles) || ! empty($src->taxonomy_only) || ('group' == $src_name) )
continue;
$object_types = ( isset($src->object_types) ) ? $src->object_types : array( $src_name => true );
foreach ( array_keys($object_types) as $object_type ) {
if ( ( 'post' == $src_name ) && empty( $use_post_types[$object_type] ) )
continue;
if ( is_administrator_rs($src, 'user') || $this->user_can_admin_object($src_name, $object_type, 0, true) )
if ( scoper_get_otype_option('use_object_roles', "$src_name:$object_type") )
$can_admin_objects[$src_name][$object_type] = true;
}
}
// which taxonomies does this user have any administration over?
foreach ( $this->scoper->taxonomies->get_all() as $taxonomy => $tx ) {
if ( taxonomy_exists($taxonomy) && empty( $use_taxonomies[$taxonomy] ) && ( 'post' == $tx->object_source ) )
continue;
if ( is_taxonomy_used_rs( $taxonomy ) && ( is_administrator_rs($tx->source, 'user') || $this->user_can_admin_terms($taxonomy) ) )
$can_admin_terms[$taxonomy] = true;
}
// Users Tab
if ( DEFINE_GROUPS_RS ) {
$can_manage_groups = DEFINE_GROUPS_RS && ( $is_user_administrator || current_user_can('recommend_group_membership') );
$cap_req = ( $can_manage_groups ) ? 'read' : 'manage_groups';
$groups_caption = ( defined( 'GROUPS_CAPTION_RS' ) ) ? GROUPS_CAPTION_RS : __('Role Groups', 'scoper');
if ( ! IS_MU_RS || ! scoper_get_site_option( 'mu_sitewide_groups' ) ) {
add_submenu_page( 'users.php', $groups_caption, $groups_caption, $cap_req, 'rs-groups', array( &$this, 'menu_handler' ) );
} elseif ( IS_MU_RS && ! awp_ver( '3.1' ) ) {
add_submenu_page( "ms-admin.php", $groups_caption, $groups_caption, $cap_req, 'rs-groups', array( &$this, 'menu_handler' ) );
}
// satisfy WordPress' demand that all admin links be properly defined in menu
if ( 'rs-default_groups' == $plugin_page_cr )
add_submenu_page('users.php', __('User Groups', 'scoper'), __('Default Groups', 'scoper'), $cap_req, 'rs-default_groups', array( &$this, 'menu_handler' ) );
if ( 'rs-group_members' == $plugin_page_cr )
add_submenu_page('users.php', __('User Groups', 'scoper'), __('Group Members', 'scoper'), $cap_req, 'rs-group_members', array( &$this, 'menu_handler' ) );
}
// the rest of this function pertains to Roles and Restrictions menus
if ( ! $is_user_administrator && ! $can_admin_terms && ! $is_user_administrator && ! $can_admin_objects )
return;
$general_roles = $is_user_administrator; // && scoper_get_option('rs_blog_roles'); // rs_blog_roles option has never been active in any RS release; leave commented here in case need arises
// determine the official WP-registered URL for roles and restrictions menus
$object_submenus_first = false;
$use_users_menu = ( defined( 'OZH_MENU_VER' ) && ! defined( 'SCOPER_FORCE_ROLES_MENU' ) ) || defined( 'SCOPER_FORCE_USERS_MENU' );
$tweak_menu = false;
if ( $use_users_menu ) {
$roles_menu = 'users.php';
$restrictions_menu = 'users.php';
if ( $is_option_administrator )
add_submenu_page($roles_menu, __('Role Options', 'scoper'), __('Role Options', 'scoper'), 'read', 'rs-options', array( &$this, 'menu_handler' ) );
} else {
if ( ! empty($can_admin_terms['category']) ) {
$roles_menu = 'rs-category-roles_t';
$restrictions_menu = 'rs-category-restrictions_t';
} elseif ( ! empty($can_admin_objects['post']['post']) ) {
$roles_menu = 'rs-post-roles';
$restrictions_menu = 'rs-post-restrictions';
$object_submenus_first = true;
} elseif ( ! empty($can_admin_objects['post']['page']) ) { // TODO: handle custom types here?
$roles_menu = 'rs-page-roles';
$restrictions_menu = 'rs-page-restrictions';
$object_submenus_first = true;
} elseif ( $can_admin_terms && $this->scoper->taxonomies->member_property( key($can_admin_terms), 'requires_term' ) ) {
$taxonomy = key($can_admin_terms);
$roles_menu = "rs-$taxonomy-roles_t";
$restrictions_menu = "rs-$taxonomy-restrictions_t";
} elseif ( $can_admin_objects ) {
$src_name = key($can_admin_objects);
$object_type = key($can_admin_objects[$src_name]);
if ( ( $src_name != $object_type ) && ( 'post' != $src_name ) ) {
$roles_menu = "rs-{$object_type}-roles_{$src_name}";
$restrictions_menu = "rs-{$object_type}-restrictions_{$src_name}";
} else {
$roles_menu = "rs-$object_type-roles";
$restrictions_menu = "rs-$object_type-restrictions";
}
$object_submenus_first = true;
} else {
// shouldn't ever need this
$roles_menu = 'rs-roles-post';
$restrictions_menu = 'rs-restrictions-post';
$object_submenus_first = true;
}
if ( $general_roles )
$roles_menu = 'rs-general_roles';
if ( $is_option_administrator )
$roles_menu = 'rs-options'; // option administrators always have RS Options as top level roles submenu
if ( $is_user_administrator ) {
if ( empty( $restrictions_menu ) )
$restrictions_menu = 'rs-category-restrictions_t'; // If RS Realms are customized, the can_admin_terms / can_admin_objects result can override this default, even for user administrators
}
// Register the menus with WP using URI and links determined above
global $menu;
// Manually set menu indexes for positioning below Users menu,
// but not if Flutter (a.k.a. Fresh Page) plugin is active. It re-indexes menu items
if ( ! defined( 'SCOPER_DISABLE_MENU_TWEAK' ) ) {
//if ( awp_ver('2.9') ) {
// review each WP version for menu indexes until there's a clean way to force menu proximity to 'Users'
if ( isset( $menu[70] ) && $menu[70][2] == 'users.php' ) { // WP 2.9 and 3.0
$tweak_menu = true;
$restrictions_menu_key = 71;
$roles_menu_key = 72;
}
//}
}
$roles_cap = 'read'; // we apply other checks within this function to confirm the menu is valid for current user
$restrictions_caption = __('Restrictions', 'scoper');
$roles_caption = __('Roles', 'scoper');
if ( $tweak_menu ) {
add_menu_page($restrictions_caption, __('Restrictions', 'scoper'), 'read', $restrictions_menu, array(&$this, 'menu_handler'), SCOPER_URLPATH . '/admin/images/menu/restrictions.png', $restrictions_menu_key );
add_menu_page($roles_caption, __('Roles', 'scoper'), $roles_cap, $roles_menu, array(&$this, 'menu_handler'), SCOPER_URLPATH . '/admin/images/menu/roles.png', $roles_menu_key );
} else {
add_menu_page($restrictions_caption, __('Restrictions', 'scoper'), 'read', $restrictions_menu, array(&$this, 'menu_handler'), SCOPER_URLPATH . '/admin/images/menu/restrictions.png' );
add_menu_page($roles_caption, __('Roles', 'scoper'), $roles_cap, $roles_menu, array(&$this, 'menu_handler'), SCOPER_URLPATH . '/admin/images/menu/roles.png' );
}
} // endif putting roles and restrictions links in Users menu
if ( $general_roles ) {
$menu_label = ( $use_users_menu ) ? __('General Roles', 'scoper') : __('General', 'scoper');
add_submenu_page($roles_menu, __('General Roles', 'scoper'), $menu_label, 'read', 'rs-general_roles', array( &$this, 'menu_handler' ) );
}
$first_pass = true;
$submenu_types = ( $object_submenus_first ) ? array( 'object', 'term' ) : array( 'term', 'object' );
foreach ( $submenu_types as $scope ) {
if ( 'term' == $scope ) {
// Term Roles and Restrictions (will only display objects user can edit)
if ( $can_admin_terms ) {
// Will only allow assignment to terms for which current user has admin cap
// Term Roles page also prevents assignment or removal of roles current user doesn't have
foreach ( $this->scoper->taxonomies->get_all() as $taxonomy => $tx ) {
if ( empty($can_admin_terms[$taxonomy]) )
continue;
$show_roles_menu = true;
$menu_label = ( $use_users_menu ) ? sprintf(__('%s Roles', 'scoper'), $tx->labels->singular_name ) : $tx->labels->name;
add_submenu_page($roles_menu, sprintf(__('%s Roles', 'scoper'), $tx->labels->singular_name ), $menu_label, 'read', "rs-$taxonomy-roles_t", array( &$this, 'menu_handler' ) );
if ( ! empty($tx->requires_term) ) {
$show_restrictions_menu = true;
$menu_label = ( $use_users_menu ) ? sprintf(__('%s Restrictions', 'scoper'), $tx->labels->singular_name ) : $tx->labels->name;
add_submenu_page($restrictions_menu, sprintf(__('%s Restrictions', 'scoper'), $tx->labels->singular_name), $menu_label, 'read', "rs-$taxonomy-restrictions_t", array( &$this, 'menu_handler' ) );
}
} // end foreach taxonomy
} // endif can admin terms
} else {
// Object Roles (will only display objects user can edit)
if ( $can_admin_objects ) {
foreach ( $this->scoper->data_sources->get_all() as $src_name => $src ) {
if ( ! empty($src->no_object_roles) || ! empty($src->taxonomy_only) || ('group' == $src_name) )
continue;
$object_types = ( isset($src->object_types) ) ? $src->object_types : array( $src_name => true );
foreach ( array_keys($object_types) as $object_type ) {
if ( empty($can_admin_objects[$src_name][$object_type]) )
continue;
if ( $require_blogwide_editor ) {
if ( ! $this->scoper->user_can_edit_blogwide( $src_name, $object_type, array( 'require_others_cap' => true ) ) )
continue;
}
$show_roles_menu = true;
$show_restrictions_menu = true;
if ( ( $src_name != $object_type ) && ( 'post' != $src_name ) ) {
$roles_page = "rs-{$object_type}-roles_{$src_name}";
$restrictions_page = "rs-{$object_type}-restrictions_{$src_name}";
} else {
$roles_page = "rs-$object_type-roles";
$restrictions_page = "rs-$object_type-restrictions";
}
$src_otype = ( isset($src->object_types) ) ? "{$src_name}:{$object_type}" : $src_name;
$item_label_singular = $this->interpret_src_otype($src_otype, 'singular_name');
$item_label = $this->interpret_src_otype($src_otype);
$menu_label = ( $use_users_menu ) ? sprintf(__('%s Roles', 'scoper'), $item_label_singular) : $item_label;
add_submenu_page($roles_menu, sprintf(__('%s Roles', 'scoper'), $item_label_singular), $menu_label, 'read', $roles_page, array( &$this, 'menu_handler' ) );
$menu_label = ( $use_users_menu ) ? sprintf(__('%s Restrictions', 'scoper'), $item_label_singular) : $item_label;
add_submenu_page($restrictions_menu, sprintf(__('%s Restrictions', 'scoper'), $item_label_singular), $menu_label, 'read', $restrictions_page, array( &$this, 'menu_handler' ) );
} // end foreach obj type
} // end foreach data source
} // endif can admin objects
} // endif drawing object scope submenus
} // end foreach submenu scope
if ( $is_user_administrator )
add_submenu_page($roles_menu, __('About Role Scoper', 'scoper'), __('About', 'scoper'), 'read', 'rs-about', array( &$this, 'menu_handler' ) );
global $submenu;
// Change Role Scoper Options submenu title from default "Roles" to "Options"
if ( $is_option_administrator ) {
if ( isset($submenu[$roles_menu][0][2]) && ( $roles_menu == $submenu[$roles_menu][0][2] ) )
$submenu[$roles_menu][0][0] = __awp('Options');
// satisfy WordPress' demand that all admin links be properly defined in menu
if ( 'rs-attachments_utility' == $plugin_page_cr )
add_submenu_page($roles_menu, __('Attachment Utility', 'scoper'), __('Attachment Utility', 'scoper'), 'read', 'rs-attachments_utility', array( &$this, 'menu_handler' ) );
} elseif ( empty($show_restrictions_menu) || empty($show_roles_menu) ) {
// Remove Roles or Restrictions menu if it has no submenu
if ( $tweak_menu ) { // since we forced the menu keys, no need to loop through menu looking for them
if ( empty($show_restrictions_menu) && isset($menu[$restrictions_menu_key]) )
unset($menu[$restrictions_menu_key]);
if ( empty($show_roles_menu) && isset($menu[$roles_menu_key]) )
unset($menu[$roles_menu_key]);
} else {
global $menu;
foreach ( array_keys($menu) as $key ) {
if ( isset( $menu[$key][0]) )
if ( empty($show_roles_menu) && ( $roles_caption == $menu[$key][0] ) )
unset($menu[$key]);
elseif ( empty($show_restrictions_menu) && ( $restrictions_caption == $menu[$key][0] ) )
unset($menu[$key]);
}
}
}
// WP MU site options
if ( ! awp_ver( '3.1' ) && $is_option_administrator && IS_MU_RS )
scoper_mu_site_menu();
// satisfy WordPress' demand that all admin links be properly defined in menu
if ( 'rs-object_role_edit' == $plugin_page_cr )
add_submenu_page($roles_menu, __('Object Role Edit', 'scoper'), __('Object Role Edit', 'scoper'), 'read', 'rs-object_role_edit', array( &$this, 'menu_handler' ) );
}
function interpret_src_otype( $src_otype, $label_property = 'name' ) {
if ( ! $arr_src_otype = explode(':', $src_otype) )
return $src_otype;
if ( isset( $arr_src_otype[1]) ) {
$label_text = $this->scoper->data_sources->member_property($arr_src_otype[0], 'object_types', $arr_src_otype[1], 'labels', $label_property);
} else
$label_text = $this->scoper->data_sources->member_property($arr_src_otype[0], 'labels', $label_property);
if ( ! $label_text ) { // need this in cases (Realm option labeling) where taxonomy is RS-enabled but its corresponding post type is not. TODO: eliminate redundancy
if ( ( 'post' == $arr_src_otype[0] ) && ( $type_object = get_post_type_object( $arr_src_otype[1] ) ) )
$label_text = $type_object->labels->name;
}
if ( ! $label_text ) // in case of data sources definition error, cryptic fallback better than nullstring
$label_text = $src_otype;
return $label_text;
}
function user_can_admin_role($role_handle, $item_id, $src_name = '', $object_type = '', $args = array() ) {
if ( is_user_administrator_rs() )
return true;
require_once( dirname(__FILE__).'/permission_lib_rs.php' );
return user_can_admin_role_rs($role_handle, $item_id, $src_name, $object_type, $args );
}
function user_can_admin_object($src_name, $object_type, $object_id = false, $any_obj_role_check = false, $user = '' ) {
if ( is_content_administrator_rs() )
return true;
require_once( dirname(__FILE__).'/permission_lib_rs.php' );
return user_can_admin_object_rs($src_name, $object_type, $object_id, $any_obj_role_check, $user );
}
function user_can_admin_terms($taxonomy = '', $term_id = '', $user = '') {
if ( is_user_administrator_rs() )
return true;
require_once( dirname(__FILE__).'/permission_lib_rs.php' );
return user_can_admin_terms_rs($taxonomy, $term_id, $user);
}
} // end class ScoperAdmin
?>