X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/d3b1ea255664edd2deef17f900a655613d20820d..refs/tags/wordpress-2.9.1:/wp-includes/widgets.php diff --git a/wp-includes/widgets.php b/wp-includes/widgets.php index dadca24f..47c0e6fc 100644 --- a/wp-includes/widgets.php +++ b/wp-includes/widgets.php @@ -126,20 +126,24 @@ class WP_Widget { function _register() { $settings = $this->get_settings(); + $empty = true; - if ( empty($settings) ) { - // If there are none, we register the widget's existance with a - // generic template - $this->_set(1); - $this->_register_one(); - } elseif ( is_array($settings) ) { + if ( is_array($settings) ) { foreach ( array_keys($settings) as $number ) { if ( is_numeric($number) ) { $this->_set($number); $this->_register_one($number); + $empty = false; } } } + + if ( $empty ) { + // If there are none, we register the widget's existance with a + // generic template + $this->_set(1); + $this->_register_one(); + } } function _set($number) { @@ -544,6 +548,7 @@ function register_sidebar($args = array()) { $defaults = array( 'name' => sprintf(__('Sidebar %d'), $i ), 'id' => "sidebar-$i", + 'description' => '', 'before_widget' => '
  • ', 'after_widget' => "
  • \n", 'before_title' => '

    ', @@ -650,6 +655,28 @@ function wp_widget_description( $id ) { return esc_html( $wp_registered_widgets[$id]['description'] ); } +/** + * Retrieve description for a sidebar. + * + * When registering sidebars a 'description' parameter can be included that + * describes the sidebar for display on the widget administration panel. + * + * @since 2.9.0 + * + * @param int|string $id sidebar ID. + * @return string Sidebar description, if available. Null on failure to retrieve description. + */ +function wp_sidebar_description( $id ) { + if ( !is_scalar($id) ) + return; + + global $wp_registered_sidebars; + + if ( isset($wp_registered_sidebars[$id]['description']) ) + return esc_html( $wp_registered_sidebars[$id]['description'] ); +} + + /** * Remove widget from sidebar. * @@ -885,7 +912,7 @@ function dynamic_sidebar($index = 1) { function is_active_widget($callback = false, $widget_id = false, $id_base = false, $skip_inactive = true) { global $wp_registered_widgets; - $sidebars_widgets = wp_get_sidebars_widgets(false); + $sidebars_widgets = wp_get_sidebars_widgets(); if ( is_array($sidebars_widgets) ) { foreach ( $sidebars_widgets as $sidebar => $widgets ) { @@ -935,7 +962,7 @@ function is_dynamic_sidebar() { */ function is_active_sidebar( $index ) { $index = ( is_int($index) ) ? "sidebar-$index" : sanitize_title($index); - $sidebars_widgets = get_option( 'sidebars_widgets', array() ); + $sidebars_widgets = wp_get_sidebars_widgets(); if ( isset($sidebars_widgets[$index]) && !empty($sidebars_widgets[$index]) ) return true; @@ -953,89 +980,93 @@ function is_active_sidebar( $index ) { * @since 2.2.0 * @access private * - * @param bool $update Optional, default is true. Whether to save upgrade of widget array list. - * @return array Upgraded list of widgets to version 2 array format. + * @param bool $update Optional, deprecated. + * @return array Upgraded list of widgets to version 3 array format when called from the admin. */ -function wp_get_sidebars_widgets($update = true) { +function wp_get_sidebars_widgets($deprecated = true) { global $wp_registered_widgets, $wp_registered_sidebars, $_wp_sidebars_widgets; // If loading from front page, consult $_wp_sidebars_widgets rather than options // to see if wp_convert_widget_settings() has made manipulations in memory. - if ( is_admin() ) { - $sidebars_widgets = get_option('sidebars_widgets', array()); - } else { + if ( !is_admin() ) { if ( empty($_wp_sidebars_widgets) ) - $sidebars_widgets = get_option('sidebars_widgets', array()); - else - $sidebars_widgets = &$_wp_sidebars_widgets; - } - $_sidebars_widgets = array(); - - if ( !isset($sidebars_widgets['array_version']) ) - $sidebars_widgets['array_version'] = 1; - - switch ( $sidebars_widgets['array_version'] ) { - case 1 : - foreach ( (array) $sidebars_widgets as $index => $sidebar ) - if ( is_array($sidebar) ) - foreach ( (array) $sidebar as $i => $name ) { - $id = strtolower($name); - if ( isset($wp_registered_widgets[$id]) ) { - $_sidebars_widgets[$index][$i] = $id; - continue; - } - $id = sanitize_title($name); - if ( isset($wp_registered_widgets[$id]) ) { - $_sidebars_widgets[$index][$i] = $id; - continue; - } + $_wp_sidebars_widgets = get_option('sidebars_widgets', array()); - $found = false; - - foreach ( $wp_registered_widgets as $widget_id => $widget ) { - if ( strtolower($widget['name']) == strtolower($name) ) { - $_sidebars_widgets[$index][$i] = $widget['id']; - $found = true; - break; - } elseif ( sanitize_title($widget['name']) == sanitize_title($name) ) { - $_sidebars_widgets[$index][$i] = $widget['id']; - $found = true; - break; + $sidebars_widgets = $_wp_sidebars_widgets; + } else { + $sidebars_widgets = get_option('sidebars_widgets', array()); + $_sidebars_widgets = array(); + + if ( isset($sidebars_widgets['wp_inactive_widgets']) || empty($sidebars_widgets) ) + $sidebars_widgets['array_version'] = 3; + elseif ( !isset($sidebars_widgets['array_version']) ) + $sidebars_widgets['array_version'] = 1; + + switch ( $sidebars_widgets['array_version'] ) { + case 1 : + foreach ( (array) $sidebars_widgets as $index => $sidebar ) + if ( is_array($sidebar) ) + foreach ( (array) $sidebar as $i => $name ) { + $id = strtolower($name); + if ( isset($wp_registered_widgets[$id]) ) { + $_sidebars_widgets[$index][$i] = $id; + continue; + } + $id = sanitize_title($name); + if ( isset($wp_registered_widgets[$id]) ) { + $_sidebars_widgets[$index][$i] = $id; + continue; } - } - - if ( $found ) - continue; - unset($_sidebars_widgets[$index][$i]); - } - $_sidebars_widgets['array_version'] = 2; - $sidebars_widgets = $_sidebars_widgets; - unset($_sidebars_widgets); - - case 2 : - $sidebars = array_keys( $wp_registered_sidebars ); - if ( !empty( $sidebars ) ) { - // Move the known-good ones first - foreach ( (array) $sidebars as $id ) { - if ( array_key_exists( $id, $sidebars_widgets ) ) { - $_sidebars_widgets[$id] = $sidebars_widgets[$id]; - unset($sidebars_widgets[$id], $sidebars[$id]); + $found = false; + + foreach ( $wp_registered_widgets as $widget_id => $widget ) { + if ( strtolower($widget['name']) == strtolower($name) ) { + $_sidebars_widgets[$index][$i] = $widget['id']; + $found = true; + break; + } elseif ( sanitize_title($widget['name']) == sanitize_title($name) ) { + $_sidebars_widgets[$index][$i] = $widget['id']; + $found = true; + break; + } } - } - // Assign to each unmatched registered sidebar the first available orphan - unset( $sidebars_widgets[ 'array_version' ] ); - while ( ( $sidebar = array_shift( $sidebars ) ) && $widgets = array_shift( $sidebars_widgets ) ) - $_sidebars_widgets[ $sidebar ] = $widgets; + if ( $found ) + continue; - $_sidebars_widgets['array_version'] = 3; + unset($_sidebars_widgets[$index][$i]); + } + $_sidebars_widgets['array_version'] = 2; $sidebars_widgets = $_sidebars_widgets; unset($_sidebars_widgets); - } - if ( $update && is_admin() ) - update_option('sidebars_widgets', $sidebars_widgets); + case 2 : + $sidebars = array_keys( $wp_registered_sidebars ); + if ( !empty( $sidebars ) ) { + // Move the known-good ones first + foreach ( (array) $sidebars as $id ) { + if ( array_key_exists( $id, $sidebars_widgets ) ) { + $_sidebars_widgets[$id] = $sidebars_widgets[$id]; + unset($sidebars_widgets[$id], $sidebars[$id]); + } + } + + // move the rest to wp_inactive_widgets + if ( !isset($_sidebars_widgets['wp_inactive_widgets']) ) + $_sidebars_widgets['wp_inactive_widgets'] = array(); + + if ( !empty($sidebars_widgets) ) { + foreach ( $sidebars_widgets as $lost => $val ) { + if ( is_array($val) ) + $_sidebars_widgets['wp_inactive_widgets'] = array_merge( (array) $_sidebars_widgets['wp_inactive_widgets'], $val ); + } + } + + $sidebars_widgets = $_sidebars_widgets; + unset($_sidebars_widgets); + } + } } if ( isset($sidebars_widgets['array_version']) ) @@ -1086,9 +1117,8 @@ function wp_get_widget_defaults() { * @return array */ function wp_convert_widget_settings($base_name, $option_name, $settings) { - global $_wp_sidebars_widgets; // This test may need expanding. - $single = false; + $single = $changed = false; if ( empty($settings) ) { $single = true; } else { @@ -1110,7 +1140,7 @@ function wp_convert_widget_settings($base_name, $option_name, $settings) { $sidebars_widgets = get_option('sidebars_widgets'); } else { if ( empty($GLOBALS['_wp_sidebars_widgets']) ) - $GLOBALS['_wp_sidebars_widgets'] = get_option('sidebars_widgets'); + $GLOBALS['_wp_sidebars_widgets'] = get_option('sidebars_widgets', array()); $sidebars_widgets = &$GLOBALS['_wp_sidebars_widgets']; } @@ -1119,13 +1149,14 @@ function wp_convert_widget_settings($base_name, $option_name, $settings) { foreach ( $sidebar as $i => $name ) { if ( $base_name == $name ) { $sidebars_widgets[$index][$i] = "$name-2"; + $changed = true; break 2; } } } } - if ( is_admin() ) + if ( is_admin() && $changed ) update_option('sidebars_widgets', $sidebars_widgets); }