summaryrefslogtreecommitdiffstats
path: root/wp-admin/includes
diff options
context:
space:
mode:
authordonncha <donncha@7be80a69-a1ef-0310-a953-fb0f7c49ff36>2008-01-23 01:31:58 +0000
committerdonncha <donncha@7be80a69-a1ef-0310-a953-fb0f7c49ff36>2008-01-23 01:31:58 +0000
commit488af8b6d55fd4535e9d88e3bf8cf4d20e583d3d (patch)
treee46c96d4de82c9e0f02e11a3d176d34d7fd6ad80 /wp-admin/includes
parent8dcb4eb1ed5ce55ab32860892857de425b09f0d1 (diff)
downloadwordpress-mu-488af8b6d55fd4535e9d88e3bf8cf4d20e583d3d.tar.gz
wordpress-mu-488af8b6d55fd4535e9d88e3bf8cf4d20e583d3d.tar.xz
wordpress-mu-488af8b6d55fd4535e9d88e3bf8cf4d20e583d3d.zip
Whitelist the options pages. (plugins may break, see forum)
git-svn-id: http://svn.automattic.com/wordpress-mu/trunk@1188 7be80a69-a1ef-0310-a953-fb0f7c49ff36
Diffstat (limited to 'wp-admin/includes')
-rw-r--r--wp-admin/includes/misc.php57
-rw-r--r--wp-admin/includes/mu.php16
2 files changed, 73 insertions, 0 deletions
diff --git a/wp-admin/includes/misc.php b/wp-admin/includes/misc.php
index db28014..23f998f 100644
--- a/wp-admin/includes/misc.php
+++ b/wp-admin/includes/misc.php
@@ -175,4 +175,61 @@ function wp_reset_vars( $vars ) {
}
}
+function add_option_update_handler($option_group, $option_name, $sanitize_callback = '') {
+ global $new_whitelist_options, $sanitize_callbacks;
+ $new_whitelist_options[ $option_group ][] = $option_name;
+ if( $sanitize_callback != '' )
+ add_filter( "sanitize_option_{$option_name}", $sanitize_callback );
+}
+
+function remove_option_update_handler($option_group, $option_name, $sanitize_callback = '') {
+ global $new_whitelist_options, $sanitize_callbacks;
+ $pos = array_search( $option_name, $new_whitelist_options );
+ if( $pos !== false )
+ unset( $new_whitelist_options[ $option_group ][ $pos ] );
+ if( $sanitize_callback != '' )
+ remove_filter( "sanitize_option_{$option_name}", $sanitize_callback );
+}
+
+function option_update_filter( $options ) {
+ global $new_whitelist_options;
+
+ if( is_array( $new_whitelist_options ) )
+ $options = add_option_whitelist( $new_whitelist_options, $options );
+
+ return $options;
+}
+add_filter( 'whitelist_options', 'option_update_filter' );
+
+function add_option_whitelist( $new_options, $options = '' ) {
+ if( $options == '' ) {
+ global $whitelist_options;
+ } else {
+ $whitelist_options = $options;
+ }
+ foreach( $new_options as $page => $keys ) {
+ foreach( $keys as $key ) {
+ $pos = array_search( $key, $whitelist_options[ $page ] );
+ if( $pos === false )
+ $whitelist_options[ $page ][] = $key;
+ }
+ }
+ return $whitelist_options;
+}
+
+function remove_option_whitelist( $del_options, $options = '' ) {
+ if( $options == '' ) {
+ global $whitelist_options;
+ } else {
+ $whitelist_options = $options;
+ }
+ foreach( $del_options as $page => $keys ) {
+ foreach( $keys as $key ) {
+ $pos = array_search( $key, $whitelist_options[ $page ] );
+ if( $pos !== false )
+ unset( $whitelist_options[ $page ][ $pos ] );
+ }
+ }
+ return $whitelist_options;
+}
?>
diff --git a/wp-admin/includes/mu.php b/wp-admin/includes/mu.php
index d24ce46..f5dd094 100644
--- a/wp-admin/includes/mu.php
+++ b/wp-admin/includes/mu.php
@@ -411,4 +411,20 @@ function wpmu_menu() {
}
add_action( '_admin_menu', 'wpmu_menu' );
+function mu_options( $options ) {
+ $removed = array( 'general' => array( 'admin_email', 'default_role' ),
+ 'reading' => array( 'gzipcompression' ),
+ 'writing' => array( 'ping_sites', 'mailserver_login', 'mailserver_pass', 'default_email_category', 'mailserver_port', 'mailserver_url' ) );
+
+ $added = array( 'general' => array( 'new_admin_email', 'WPLANG', 'language' ) );
+
+ unset( $options[ 'misc' ] );
+
+ $options = remove_option_whitelist( $removed, $options );
+ $options = add_option_whitelist( $added, $options );
+
+ return $options;
+}
+add_filter( 'whitelist_options', 'mu_options' );
+
?>