summaryrefslogtreecommitdiffstats
path: root/wp-admin/includes/misc.php
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/misc.php
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/misc.php')
-rw-r--r--wp-admin/includes/misc.php57
1 files changed, 57 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;
+}
?>