Ticket #6605 (closed defect (bug): fixed)

Opened 9 months ago

Last modified 9 months ago

WordPress-related widget upgrade issue

Reported by: Denis-de-Bernardy Assigned to: mdawaffe
Priority: normal Milestone: 2.5.1
Component: General Version: 2.5
Severity: major Keywords: has-patch
Cc:

Description

while debugging upgrade scripts from WP 2.1.3 to WP 2.5, I ran into a particularly nasty bug whereby sidebars get essentially flushed from their contents upon upgrading. Basically, the bug applies to the legacy category widget and to other widgets that, like it, went from single widget status to multi-widget status at some point.

changing wp_get_sidebars_widgets() fixes the issue:

	switch ( $sidebars_widgets['array_version'] ) {
		case 1 :
			foreach ( $sidebars_widgets as $index => $sidebar )
			if ( is_array($sidebar) )
			foreach ( $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;
				}
				
				$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;
					}
				}
				
				if ( $found )
				{
					continue;
				}
				
				unset($_sidebars_widgets[$index][$i]);
			}
			$_sidebars_widgets['array_version'] = 2;
			$sidebars_widgets = $_sidebars_widgets;
			unset($_sidebars_widgets);

basically, if it fails to spot the id, it does a "last chance" try by scanning the entire wp_registerd_widgets array in order to match the legacy ID against the new name.

D.

Attachments

widgets.diff (0.9 kB) - added by Denis-de-Bernardy on 04/05/08 20:27:12.

Change History

04/05/08 20:27:12 changed by Denis-de-Bernardy

  • attachment widgets.diff added.

04/05/08 20:28:37 changed by Denis-de-Bernardy

  • keywords set to has-patch.

not sure the diff will work, I did it using my own svn server

04/07/08 01:07:25 changed by ryan

  • owner changed from anonymous to mdawaffe.

04/16/08 23:44:34 changed by Denis-de-Bernardy

any odds we can commit this? it has been working fine for at least a dozen users so far...

04/17/08 20:20:41 changed by mdawaffe

+1 untested

04/18/08 02:19:10 changed by ryan

  • status changed from new to closed.
  • resolution set to fixed.

(In [7735]) If widget ID not found, scan the entire registered widgets array looking for legacy IDs. Props Denis-de-Bernardy. fixes #6605

04/18/08 02:19:46 changed by ryan

(In [7736]) If widget ID not found, scan the entire registered widgets array looking for legacy IDs. Props Denis-de-Bernardy. fixes #6605 for trunk

04/18/08 09:50:37 changed by Denis-de-Bernardy

thank you soo much!

D.