diff options
author | donncha <donncha@7be80a69-a1ef-0310-a953-fb0f7c49ff36> | 2008-01-23 01:31:58 +0000 |
---|---|---|
committer | donncha <donncha@7be80a69-a1ef-0310-a953-fb0f7c49ff36> | 2008-01-23 01:31:58 +0000 |
commit | 488af8b6d55fd4535e9d88e3bf8cf4d20e583d3d (patch) | |
tree | e46c96d4de82c9e0f02e11a3d176d34d7fd6ad80 /wp-admin/includes | |
parent | 8dcb4eb1ed5ce55ab32860892857de425b09f0d1 (diff) | |
download | wordpress-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.php | 57 | ||||
-rw-r--r-- | wp-admin/includes/mu.php | 16 |
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' ); + ?> |