Skip to content

Commit

Permalink
Convert the old style widgets order array only when loading the widge…
Browse files Browse the repository at this point in the history
…ts screen, fixes #10300 for 2.8

git-svn-id: https://develop.svn.wordpress.org/branches/2.8@11690 602fd350-edb4-49c9-b593-d223f7449a82
  • Loading branch information
azaozz committed Jul 4, 2009
1 parent ab224a1 commit 3a982c1
Showing 1 changed file with 78 additions and 74 deletions.
152 changes: 78 additions & 74 deletions wp-includes/widgets.php
Original file line number Diff line number Diff line change
Expand Up @@ -885,7 +885,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 ) {
Expand Down Expand Up @@ -935,7 +935,7 @@ function is_dynamic_sidebar() {
*/
function is_active_sidebar( $index ) {
$index = ( is_int($index) ) ? "sidebar-$index" : sanitize_title($index);
$sidebars_widgets = wp_get_sidebars_widgets(false);
$sidebars_widgets = wp_get_sidebars_widgets();
if ( isset($sidebars_widgets[$index]) && !empty($sidebars_widgets[$index]) )
return true;

Expand All @@ -953,89 +953,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']) )
$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']) )
Expand Down Expand Up @@ -1086,9 +1090,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 {
Expand All @@ -1110,7 +1113,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'];
}

Expand All @@ -1119,13 +1122,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);
}

Expand Down

0 comments on commit 3a982c1

Please sign in to comment.