update_page_options( $sitewide, $customize_defaults ); $this->update_page_otype_options( $sitewide, $customize_defaults ); global $wpdb; $wpdb->query( "UPDATE $wpdb->options SET autoload = 'no' WHERE option_name LIKE 'scoper_%' AND option_name != 'scoper_version'" ); } function default_options( $sitewide = false, $customize_defaults = false ) { check_admin_referer( 'scoper-update-options' ); $default_prefix = ( $customize_defaults ) ? 'default_' : ''; $reviewed_options = explode(',', $_POST['all_options']); foreach ( $reviewed_options as $option_name ) scoper_delete_option($default_prefix . $option_name, $sitewide ); $reviewed_otype_options = explode(',', $_POST['all_otype_options']); foreach ( $reviewed_otype_options as $option_name ) scoper_delete_option($default_prefix . $option_name, $sitewide ); scoper_delete_option($default_prefix . 'disabled_role_caps', $sitewide ); scoper_delete_option($default_prefix . 'user_role_caps', $sitewide ); scoper_set_conditional_defaults(); } function update_realm( $sitewide = false, $customize_defaults = false ) { check_admin_referer( 'scoper-update-options' ); // changes to these options will trigger .htaccess regen if ( $sitewide ) { add_action( 'add_site_option_scoper_disabled_access_types', 'scoper_expire_file_rules' ); add_action( 'update_site_option_scoper_disabled_access_types', 'scoper_expire_file_rules' ); } else add_action( 'update_option_scoper_disabled_access_types', 'scoper_maybe_expire_file_rules', 10, 2 ); $default_prefix = ( $customize_defaults ) ? 'default_' : ''; $disabled = array(); $access_names = explode(',', $_POST['all_access_types'] ); foreach ( $access_names as $access_name ) $disabled[$access_name] = empty( $_POST['access_types-' . $access_name ] ); scoper_update_option($default_prefix . 'disabled_access_types', $disabled, $sitewide ); $this->update_page_otype_options( $sitewide, $customize_defaults ); } function default_realm( $sitewide = false, $customize_defaults = false ) { check_admin_referer( 'scoper-update-options' ); $default_prefix = ( $customize_defaults ) ? 'default_' : ''; scoper_delete_option( $default_prefix . 'disabled_access_types', $sitewide ); $reviewed_otype_options = explode(',', $_POST['all_otype_options']); foreach ( $reviewed_otype_options as $option_name ) scoper_delete_option($default_prefix . $option_name, $sitewide ); } function update_sitewide() { check_admin_referer( 'scoper-update-options' ); $reviewed_options = isset($_POST['rs_all_movable_options']) ? explode(',', $_POST['rs_all_movable_options']) : array(); $options_sitewide = isset($_POST['rs_options_sitewide']) ? (array) $_POST['rs_options_sitewide'] : array(); // must force disabled_role_caps scope setting to follow user_role_caps $reviewed_options []= 'disabled_role_caps'; if ( in_array( 'user_role_caps', $options_sitewide ) ) $options_sitewide = array_merge( $options_sitewide, array( 'disabled_role_caps' ) ); // must force use_object_roles scope setting to follow use_term_roles $reviewed_options []= 'use_term_roles'; $reviewed_options []= 'use_object_roles'; if ( in_array( 'use_term_roles', $options_sitewide ) ) $options_sitewide = array_merge( $options_sitewide, array( 'use_object_roles' ) ); // must force all teaser option to follow scope of do_teaser $teaser_options = array( 'use_teaser' ); global $scoper_default_otype_options; foreach ( array_keys($scoper_default_otype_options) as $option_name ) { if ( 0 === strpos( $option_name, 'teaser_' ) ) $teaser_options []= $option_name; } $reviewed_options = array_merge( $reviewed_options, $teaser_options ); if ( in_array( 'do_teaser', $options_sitewide ) ) $options_sitewide = array_merge( $options_sitewide, $teaser_options ); add_site_option( "scoper_options_sitewide_reviewed", $reviewed_options ); add_site_option( "scoper_options_sitewide", $options_sitewide ); } function default_sitewide() { check_admin_referer( 'scoper-update-options' ); scoper_delete_option( 'options_sitewide', true ); scoper_delete_option( 'options_sitewide_reviewed', true ); } function update_page_options( $sitewide = false, $customize_defaults = false ) { global $scoper_role_types; global $scoper_default_options; // changes to these options will trigger .htaccess regen if ( $sitewide ) { add_action( 'pre_update_site_option_scoper_file_filtering', 'scoper_maybe_flush_site_rules', 10, 2 ); add_action( 'add_site_option_scoper_file_filtering', 'scoper_flush_site_rules' ); add_action( 'pre_update_site_option_scoper_file_filtering', 'scoper_maybe_expire_file_rules', 10, 2 ); add_action( 'add_site_option_scoper_file_filtering', 'scoper_expire_file_rules' ); } else { add_action( 'update_option_scoper_file_filtering', 'scoper_maybe_expire_file_rules', 10, 2 ); add_action( 'update_option_scoper_feed_link_http_auth', 'scoper_maybe_flush_site_rules', 10, 2 ); } $default_prefix = ( $customize_defaults ) ? 'default_' : ''; $reviewed_options = explode(',', $_POST['all_options']); foreach ( $reviewed_options as $option_basename ) { $value = isset($_POST[$option_basename]) ? $_POST[$option_basename] : ''; if ( ( 'use_post_types' == $option_basename ) || ( 'use_taxonomies' == $option_basename ) ) { $value = array(); foreach ( array_keys($scoper_default_options[$option_basename]) as $key ) { $postvar = $option_basename . '-' . $key; $value[$key] = isset($_POST[$postvar]) ? $_POST[$postvar] : ''; } } elseif ( 'mu_sitewide_groups' == $option_basename ) { $current_setting = get_site_option( 'scoper_mu_sitewide_groups' ); if ( $current_setting != $value ) { //delete_option( 'scoper_version' ); // this forces DB schema update on next access (to create site-wide / blog-specific groups table) $ver = get_option( 'scoper_version' ); require_once( dirname(__FILE__).'/db-setup_rs.php' ); scoper_db_setup( $ver['db_version'] ); } $value = intval( $value ); } if ( ! is_array($value) ) $value = trim($value); $value = stripslashes_deep($value); scoper_update_option( $default_prefix . $option_basename, $value, $sitewide ); } } 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); } } function update_rs_role_defs_customize_defaults () { $this->update_rs_role_defs( true, true ); } function update_rs_role_defs_sitewide () { $this->update_rs_role_defs( true, false ); } 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(); } } ?>