function update_rs_role_defs($sitewide = false, $customize_defaults = false) { $default_prefix = $customize_defaults ? 'default_' : ''; $default_role_caps = apply_filters('define_role_caps_rs', cr_role_caps()); $cap_defs = new CR_Capabilities(); $cap_defs = apply_filters('define_capabilities_rs', $cap_defs); $cap_defs->add_member_objects(cr_cap_defs()); global $scoper, $scoper_role_types; $role_defs = new CR_Roles(); $role_defs->add_member_objects(cr_role_defs()); $role_defs = apply_filters('define_roles_rs', $role_defs); $reviewed_roles = explode(',', $_POST['reviewed_roles']); $disable_caps = array(); $add_caps = array(); foreach ($default_role_caps as $role_handle => $default_caps) { if (!in_array($role_handle, $reviewed_roles)) { continue; } if ($role_defs->member_property($role_handle, 'no_custom_caps') || $role_defs->member_property($role_handle, 'anon_user_blogrole')) { continue; } $posted_set_caps = empty($_POST["{$role_handle}_caps"]) ? array() : $_POST["{$role_handle}_caps"]; // html IDs have any spaces stripped out of cap names. Replace them for processing. $set_caps = array(); foreach ($posted_set_caps as $cap_name) { if (strpos($cap_name, ' ')) { $set_caps[] = str_replace('_', ' ', $cap_name); } else { $set_caps[] = $cap_name; } } // deal with caps which are locked into role, therefore displayed as a disabled checkbox and not included in $_POST foreach (array_keys($default_caps) as $cap_name) { if (!in_array($cap_name, $set_caps) && $cap_defs->member_property($cap_name, 'no_custom_remove')) { $set_caps[] = $cap_name; } } $disable_caps[$role_handle] = array_fill_keys(array_diff(array_keys($default_caps), $set_caps), true); $add_caps[$role_handle] = array_fill_keys(array_diff($set_caps, array_keys($default_caps)), true); } scoper_update_option($default_prefix . 'disabled_role_caps', $disable_caps, $sitewide); scoper_update_option($default_prefix . 'user_role_caps', $add_caps, $sitewide); scoper_refresh_options(); $scoper->load_definition('cap_defs'); global $wp_roles; // synchronize WP roles as requested if (!empty($_POST['sync_wp_roles'])) { foreach ($_POST['sync_wp_roles'] as $sync_request) { $scoper->log_cap_usage($scoper->role_defs, $scoper->cap_defs); $sync_handles = explode(':', $sync_request); $rs_role_handle = $sync_handles[0]; $wp_role_handle = $sync_handles[1]; $wp_role_name = str_replace('wp_', '', $wp_role_handle); // only remove caps which are defined for this RS role's data source and object type $role_attributes = $scoper->role_defs->get_role_attributes($rs_role_handle); $otype_caps = $scoper->cap_defs->get_matching($role_attributes->src_name, $role_attributes->object_type, '', STATUS_ANY_RS); // make the roledef change for all blogs if RS role def is sitewide if (IS_MU_RS && $sitewide) { global $wpdb, $blog_id; $blog_ids = scoper_get_col("SELECT blog_id FROM {$wpdb->blogs}"); $orig_blog_id = $blog_id; } else { $blog_ids = array(''); } foreach ($blog_ids as $id) { if (count($blog_ids) > 1) { switch_to_blog($id); } if (!isset($wp_roles->role_objects[$wp_role_name])) { continue; } if ($wp_missing_caps = array_diff_key($scoper->role_defs->role_caps[$rs_role_handle], $wp_roles->role_objects[$wp_role_name]->capabilities)) { foreach (array_keys($wp_missing_caps) as $cap_name) { $wp_roles->add_cap($wp_role_name, $cap_name); } } $wp_defined_caps = array_intersect_key($wp_roles->role_objects[$wp_role_name]->capabilities, $otype_caps); if ($wp_extra_caps = array_diff_key($wp_defined_caps, $scoper->role_defs->role_caps[$rs_role_handle])) { foreach (array_keys($wp_extra_caps) as $cap_name) { $wp_roles->remove_cap($wp_role_name, $cap_name); } } } if (count($blog_ids) > 1) { switch_to_blog($orig_blog_id); } $wp_roles = new WP_Roles(); } } $scoper->role_defs->locked = false; $scoper->log_wp_roles($scoper->role_defs); $scoper->role_defs->lock(); }
function scoper_expire_file_rules() { if (IS_MU_RS) { scoper_update_option('file_htaccess_min_date', agp_time_gmt(), true); } else { if (did_action('scoper_init')) { scoper_flush_file_rules(); } else { add_action('scoper_init', 'scoper_flush_file_rules'); } } }
</a> )</span> </h2> <?php $groups_url = 'admin.php?page=rs-groups'; echo "<a href='{$groups_url}'>Back to Groups</a>"; ?> <form action="" method="post" name="role_assign" id="role_assign"> <?php require_once dirname(__FILE__) . '/groups-support.php'; wp_nonce_field('scoper-assign-termroles'); if (isset($_POST['rs_submit'])) { $stored_groups = isset($_POST['group']) ? $_POST['group'] : array(); scoper_update_option('default_groups', $stored_groups); echo '<div id="message" class="updated fade"><p>'; printf(__('Default Groups Updated: %s groups', 'scoper'), count($stored_groups)); echo '</p></div>'; } else { $stored_groups = scoper_get_option('default_groups'); } if (!($all_groups = ScoperAdminLib::get_all_groups(UNFILTERED_RS))) { return; } if ($editable_ids = ScoperAdminLib::get_all_groups(FILTERED_RS, COL_ID_RS)) { echo "<div id='default_groupsdiv_rs' style='margin-top:1em'>"; if (!$stored_groups) { $stored_groups = array(); echo '<p><strong>'; _e('No default groups defined.', 'scoper');
function scoper_set_default_rs_roledefs() { global $wp_roles, $scoper; $sitewide = IS_MU_RS; if (scoper_get_option('disabled_role_caps', $sitewide) || scoper_get_option('default_disabled_role_caps', $sitewide)) { return; } $default_role_caps = cr_role_caps(); $wp_role_sync = array('rs_post_contributor' => 'contributor', 'rs_post_revisor' => 'revisor', 'rs_post_author' => 'author', 'rs_post_editor' => 'editor', 'rs_page_revisor' => 'revisor', 'rs_page_editor' => 'editor'); $disable_caps = array(); foreach ($wp_role_sync as $rs_role_handle => $wp_role_name) { if (isset($wp_roles->role_objects[$wp_role_name])) { if ($wp_missing_caps = array_diff_key($default_role_caps[$rs_role_handle], $wp_roles->role_objects[$wp_role_name]->capabilities)) { $disable_caps[$rs_role_handle] = $wp_missing_caps; } } } if ($disable_caps) { scoper_update_option('disabled_role_caps', $disable_caps, $sitewide); if ($sitewide) { scoper_update_option('default_disabled_role_caps', $disable_caps, $sitewide); } } }
function update_blog_file_rules($include_rs_rules = true) { global $blog_id; // avoid file collision by skipping if another flush was initiated < 5 seconds ago if ($last_regen = scoper_get_option('file_htaccess_date')) { if (intval($last_regen) > agp_time_gmt() - 5) { return; } } scoper_update_option('file_htaccess_date', agp_time_gmt()); $include_rs_rules = $include_rs_rules && scoper_get_option('file_filtering'); if (!ScoperRewrite::site_config_supports_rewrite()) { return; } elseif (!$include_rs_rules) { $rules = ''; } else { $rules = ScoperRewrite::build_blog_file_rules(); } require_once dirname(__FILE__) . '/uploads_rs.php'; $uploads = scoper_get_upload_info(); // If a filter has changed MU basedir, don't filter file attachments for this blog because we might not be able to regenerate the basedir for rule removal at RS deactivation if (!IS_MU_RS || strpos($uploads['basedir'], "/blogs.dir/{$blog_id}/files") || false !== strpos($uploads['basedir'], trailingslashit(WP_CONTENT_DIR) . 'uploads')) { $htaccess_path = trailingslashit($uploads['basedir']) . '.htaccess'; ScoperRewrite::insert_with_markers($htaccess_path, 'Role Scoper', $rules); } }
function update_page_otype_options($sitewide = false, $customize_defaults = false) { global $scoper_default_otype_options; // changes to these options will trigger .htaccess regen if ($sitewide) { add_filter('add_site_option_scoper_use_term_roles', 'scoper_expire_file_rules'); add_filter('add_site_option_scoper_use_object_roles', 'scoper_expire_file_rules'); add_filter('pre_update_site_option_scoper_use_term_roles', 'scoper_maybe_expire_file_rules', 10, 2); // update_site_option hook does not pass old_value (as of WP 3.0) add_filter('pre_update_site_option_scoper_use_object_roles', 'scoper_maybe_expire_file_rules', 10, 2); } else { add_filter('update_option_scoper_use_term_roles', 'scoper_maybe_expire_file_rules', 10, 2); add_filter('update_option_scoper_use_object_roles', 'scoper_maybe_expire_file_rules', 10, 2); } $default_prefix = $customize_defaults ? 'default_' : ''; $reviewed_otype_options = explode(',', $_POST['all_otype_options']); $otype_option_vals = array(); foreach ($reviewed_otype_options as $option_basename) { if (isset($scoper_default_otype_options[$option_basename])) { if ($opt = $scoper_default_otype_options[$option_basename]) { foreach (array_keys($opt) as $src_otype) { if (is_array($opt[$src_otype])) { foreach (array_keys($opt[$src_otype]) as $taxonomy) { $postvar = $option_basename . '-' . str_replace(':', '_', $src_otype) . '-' . $taxonomy; $value = isset($_POST[$postvar]) ? $_POST[$postvar] : ''; if (!is_array($value)) { $value = trim($value); } $otype_option_vals[$option_basename][$src_otype][$taxonomy] = stripslashes_deep($value); } } else { $postvar = $option_basename . '-' . str_replace(':', '_', $src_otype); $value = isset($_POST[$postvar]) ? $_POST[$postvar] : ''; if (!is_array($value)) { $value = trim($value); } $otype_option_vals[$option_basename][$src_otype] = stripslashes_deep($value); } } } } } foreach ($otype_option_vals as $option_basename => $value) { scoper_update_option($default_prefix . $option_basename, $value, $sitewide); } }