Ticket #10300: 10300.7.diff

File 10300.7.diff, 4.6 KB (added by Denis-de-Bernardy, 4 years ago)

same as previous without the typo

Line 
1Index: wp-includes/widgets.php
2===================================================================
3--- wp-includes/widgets.php     (revision 11685)
4+++ wp-includes/widgets.php     (working copy)
5@@ -957,89 +957,29 @@
6  * @return array Upgraded list of widgets to version 2 array format.
7  */
8 function wp_get_sidebars_widgets($update = true) {
9-       global $wp_registered_widgets, $wp_registered_sidebars, $_wp_sidebars_widgets;
10-
11+       global $_wp_sidebars_widgets;
12+       
13        // If loading from front page, consult $_wp_sidebars_widgets rather than options
14        // to see if wp_convert_widget_settings() has made manipulations in memory.
15        if ( is_admin() ) {
16                $sidebars_widgets = get_option('sidebars_widgets', array());
17        } else {
18                if ( empty($_wp_sidebars_widgets) )
19-                       $sidebars_widgets = get_option('sidebars_widgets', array());
20-               else
21-                       $sidebars_widgets = &$_wp_sidebars_widgets;
22+                       $_wp_sidebars_widgets = get_option('sidebars_widgets', array());
23+
24+               $sidebars_widgets = $_wp_sidebars_widgets;
25        }
26-       $_sidebars_widgets = array();
27 
28-       if ( !isset($sidebars_widgets['array_version']) )
29-               $sidebars_widgets['array_version'] = 1;
30-
31-       switch ( $sidebars_widgets['array_version'] ) {
32-               case 1 :
33-                       foreach ( (array) $sidebars_widgets as $index => $sidebar )
34-                       if ( is_array($sidebar) )
35-                       foreach ( (array) $sidebar as $i => $name ) {
36-                               $id = strtolower($name);
37-                               if ( isset($wp_registered_widgets[$id]) ) {
38-                                       $_sidebars_widgets[$index][$i] = $id;
39-                                       continue;
40-                               }
41-                               $id = sanitize_title($name);
42-                               if ( isset($wp_registered_widgets[$id]) ) {
43-                                       $_sidebars_widgets[$index][$i] = $id;
44-                                       continue;
45-                               }
46-
47-                               $found = false;
48-
49-                               foreach ( $wp_registered_widgets as $widget_id => $widget ) {
50-                                       if ( strtolower($widget['name']) == strtolower($name) ) {
51-                                               $_sidebars_widgets[$index][$i] = $widget['id'];
52-                                               $found = true;
53-                                               break;
54-                                       } elseif ( sanitize_title($widget['name']) == sanitize_title($name) ) {
55-                                               $_sidebars_widgets[$index][$i] = $widget['id'];
56-                                               $found = true;
57-                                               break;
58-                                       }
59-                               }
60-
61-                               if ( $found )
62-                                       continue;
63-
64-                               unset($_sidebars_widgets[$index][$i]);
65-                       }
66-                       $_sidebars_widgets['array_version'] = 2;
67-                       $sidebars_widgets = $_sidebars_widgets;
68-                       unset($_sidebars_widgets);
69-
70-               case 2 :
71-                       $sidebars = array_keys( $wp_registered_sidebars );
72-                       if ( !empty( $sidebars ) ) {
73-                               // Move the known-good ones first
74-                               foreach ( (array) $sidebars as $id ) {
75-                                       if ( array_key_exists( $id, $sidebars_widgets ) ) {
76-                                               $_sidebars_widgets[$id] = $sidebars_widgets[$id];
77-                                               unset($sidebars_widgets[$id], $sidebars[$id]);
78-                                       }
79-                               }
80-
81-                               // Assign to each unmatched registered sidebar the first available orphan
82-                               unset( $sidebars_widgets[ 'array_version' ] );
83-                               while ( ( $sidebar = array_shift( $sidebars ) ) && $widgets = array_shift( $sidebars_widgets ) )
84-                                       $_sidebars_widgets[ $sidebar ] = $widgets;
85-
86-                               $_sidebars_widgets['array_version'] = 3;
87-                               $sidebars_widgets = $_sidebars_widgets;
88-                               unset($_sidebars_widgets);
89-                       }
90-
91-                       if ( $update && is_admin() )
92-                               update_option('sidebars_widgets', $sidebars_widgets);
93+       if ( !isset($sidebars_widgets['array_version']) || $sidebars_widgets['array_version'] != 3 ) {
94+               $sidebars_widgets = array('array_version' => 3 );
95+               if ( $update && is_admin() )
96+                       update_option('sidebars_widgets', array());
97        }
98 
99-       if ( isset($sidebars_widgets['array_version']) )
100-               unset($sidebars_widgets['array_version']);
101+       if ( !is_admin() )
102+               $_wp_sidebars_widgets = $sidebars_widgets;
103+       
104+       unset($sidebars_widgets['array_version']);
105 
106        $sidebars_widgets = apply_filters('sidebars_widgets', $sidebars_widgets);
107        return $sidebars_widgets;
108@@ -1086,9 +1026,8 @@
109  * @return array
110  */
111 function wp_convert_widget_settings($base_name, $option_name, $settings) {
112-       global $_wp_sidebars_widgets;
113        // This test may need expanding.
114-       $single = false;
115+       $single = $changed = false;
116        if ( empty($settings) ) {
117                $single = true;
118        } else {
119@@ -1113,19 +1052,24 @@
120                                $GLOBALS['_wp_sidebars_widgets'] = get_option('sidebars_widgets');
121                        $sidebars_widgets = &$GLOBALS['_wp_sidebars_widgets'];
122                }
123+               
124+               if ( !isset($sidebars_widgets['array_version']) || $sidebars_widgets['array_version'] != 3 ) {
125+                       $sidebars_widgets = array('array_version' => 3 );
126+               }
127 
128                foreach ( (array) $sidebars_widgets as $index => $sidebar ) {
129                        if ( is_array($sidebar) ) {
130                                foreach ( $sidebar as $i => $name ) {
131                                        if ( $base_name == $name ) {
132                                                $sidebars_widgets[$index][$i] = "$name-2";
133+                                               $changed = true;
134                                                break 2;
135                                        }
136                                }
137                        }
138                }
139 
140-               if ( is_admin() )
141+               if ( is_admin() && $changed )
142                        update_option('sidebars_widgets', $sidebars_widgets);
143        }
144