WordPress.org

Make WordPress Core

Changeset 11691


Ignore:
Timestamp:
07/04/09 12:49:54 (5 years ago)
Author:
azaozz
Message:

Convert the old style widgets order array only when loading the widgets screen, fixes #10300 for trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/widgets.php

    r11562 r11691  
    886886    global $wp_registered_widgets; 
    887887 
    888     $sidebars_widgets = wp_get_sidebars_widgets(false); 
     888    $sidebars_widgets = wp_get_sidebars_widgets(); 
    889889 
    890890    if ( is_array($sidebars_widgets) ) { 
     
    936936function is_active_sidebar( $index ) { 
    937937    $index = ( is_int($index) ) ? "sidebar-$index" : sanitize_title($index); 
    938     $sidebars_widgets = wp_get_sidebars_widgets(false); 
     938    $sidebars_widgets = wp_get_sidebars_widgets(); 
    939939    if ( isset($sidebars_widgets[$index]) && !empty($sidebars_widgets[$index]) ) 
    940940        return true; 
     
    954954 * @access private 
    955955 * 
    956  * @param bool $update Optional, default is true. Whether to save upgrade of widget array list. 
    957  * @return array Upgraded list of widgets to version 2 array format. 
    958  */ 
    959 function wp_get_sidebars_widgets($update = true) { 
     956 * @param bool $update Optional, deprecated. 
     957 * @return array Upgraded list of widgets to version 3 array format when called from the admin. 
     958 */ 
     959function wp_get_sidebars_widgets($deprecated = true) { 
    960960    global $wp_registered_widgets, $wp_registered_sidebars, $_wp_sidebars_widgets; 
    961961 
    962962    // If loading from front page, consult $_wp_sidebars_widgets rather than options 
    963963    // to see if wp_convert_widget_settings() has made manipulations in memory. 
    964     if ( is_admin() ) { 
     964    if ( !is_admin() ) { 
     965        if ( empty($_wp_sidebars_widgets) ) 
     966            $_wp_sidebars_widgets = get_option('sidebars_widgets', array()); 
     967 
     968        $sidebars_widgets = $_wp_sidebars_widgets; 
     969    } else { 
    965970        $sidebars_widgets = get_option('sidebars_widgets', array()); 
    966     } else { 
    967         if ( empty($_wp_sidebars_widgets) ) 
    968             $sidebars_widgets = get_option('sidebars_widgets', array()); 
    969         else 
    970             $sidebars_widgets = &$_wp_sidebars_widgets; 
    971     } 
    972     $_sidebars_widgets = array(); 
    973  
    974     if ( !isset($sidebars_widgets['array_version']) ) 
    975         $sidebars_widgets['array_version'] = 1; 
    976  
    977     switch ( $sidebars_widgets['array_version'] ) { 
    978         case 1 : 
    979             foreach ( (array) $sidebars_widgets as $index => $sidebar ) 
    980             if ( is_array($sidebar) ) 
    981             foreach ( (array) $sidebar as $i => $name ) { 
    982                 $id = strtolower($name); 
    983                 if ( isset($wp_registered_widgets[$id]) ) { 
    984                     $_sidebars_widgets[$index][$i] = $id; 
    985                     continue; 
     971        $_sidebars_widgets = array(); 
     972 
     973        if ( isset($sidebars_widgets['wp_inactive_widgets']) ) 
     974            $sidebars_widgets['array_version'] = 3; 
     975        elseif ( !isset($sidebars_widgets['array_version']) ) 
     976            $sidebars_widgets['array_version'] = 1; 
     977 
     978        switch ( $sidebars_widgets['array_version'] ) { 
     979            case 1 : 
     980                foreach ( (array) $sidebars_widgets as $index => $sidebar ) 
     981                if ( is_array($sidebar) ) 
     982                foreach ( (array) $sidebar as $i => $name ) { 
     983                    $id = strtolower($name); 
     984                    if ( isset($wp_registered_widgets[$id]) ) { 
     985                        $_sidebars_widgets[$index][$i] = $id; 
     986                        continue; 
     987                    } 
     988                    $id = sanitize_title($name); 
     989                    if ( isset($wp_registered_widgets[$id]) ) { 
     990                        $_sidebars_widgets[$index][$i] = $id; 
     991                        continue; 
     992                    } 
     993 
     994                    $found = false; 
     995 
     996                    foreach ( $wp_registered_widgets as $widget_id => $widget ) { 
     997                        if ( strtolower($widget['name']) == strtolower($name) ) { 
     998                            $_sidebars_widgets[$index][$i] = $widget['id']; 
     999                            $found = true; 
     1000                            break; 
     1001                        } elseif ( sanitize_title($widget['name']) == sanitize_title($name) ) { 
     1002                            $_sidebars_widgets[$index][$i] = $widget['id']; 
     1003                            $found = true; 
     1004                            break; 
     1005                        } 
     1006                    } 
     1007 
     1008                    if ( $found ) 
     1009                        continue; 
     1010 
     1011                    unset($_sidebars_widgets[$index][$i]); 
    9861012                } 
    987                 $id = sanitize_title($name); 
    988                 if ( isset($wp_registered_widgets[$id]) ) { 
    989                     $_sidebars_widgets[$index][$i] = $id; 
    990                     continue; 
    991                 } 
    992  
    993                 $found = false; 
    994  
    995                 foreach ( $wp_registered_widgets as $widget_id => $widget ) { 
    996                     if ( strtolower($widget['name']) == strtolower($name) ) { 
    997                         $_sidebars_widgets[$index][$i] = $widget['id']; 
    998                         $found = true; 
    999                         break; 
    1000                     } elseif ( sanitize_title($widget['name']) == sanitize_title($name) ) { 
    1001                         $_sidebars_widgets[$index][$i] = $widget['id']; 
    1002                         $found = true; 
    1003                         break; 
    1004                     } 
    1005                 } 
    1006  
    1007                 if ( $found ) 
    1008                     continue; 
    1009  
    1010                 unset($_sidebars_widgets[$index][$i]); 
    1011             } 
    1012             $_sidebars_widgets['array_version'] = 2; 
    1013             $sidebars_widgets = $_sidebars_widgets; 
    1014             unset($_sidebars_widgets); 
    1015  
    1016         case 2 : 
    1017             $sidebars = array_keys( $wp_registered_sidebars ); 
    1018             if ( !empty( $sidebars ) ) { 
    1019                 // Move the known-good ones first 
    1020                 foreach ( (array) $sidebars as $id ) { 
    1021                     if ( array_key_exists( $id, $sidebars_widgets ) ) { 
    1022                         $_sidebars_widgets[$id] = $sidebars_widgets[$id]; 
    1023                         unset($sidebars_widgets[$id], $sidebars[$id]); 
    1024                     } 
    1025                 } 
    1026  
    1027                 // Assign to each unmatched registered sidebar the first available orphan 
    1028                 unset( $sidebars_widgets[ 'array_version' ] ); 
    1029                 while ( ( $sidebar = array_shift( $sidebars ) ) && $widgets = array_shift( $sidebars_widgets ) ) 
    1030                     $_sidebars_widgets[ $sidebar ] = $widgets; 
    1031  
    1032                 $_sidebars_widgets['array_version'] = 3; 
     1013                $_sidebars_widgets['array_version'] = 2; 
    10331014                $sidebars_widgets = $_sidebars_widgets; 
    10341015                unset($_sidebars_widgets); 
    1035             } 
    1036  
    1037             if ( $update && is_admin() ) 
    1038                 update_option('sidebars_widgets', $sidebars_widgets); 
     1016 
     1017            case 2 : 
     1018                $sidebars = array_keys( $wp_registered_sidebars ); 
     1019                if ( !empty( $sidebars ) ) { 
     1020                    // Move the known-good ones first 
     1021                    foreach ( (array) $sidebars as $id ) { 
     1022                        if ( array_key_exists( $id, $sidebars_widgets ) ) { 
     1023                            $_sidebars_widgets[$id] = $sidebars_widgets[$id]; 
     1024                            unset($sidebars_widgets[$id], $sidebars[$id]); 
     1025                        } 
     1026                    } 
     1027 
     1028                    // move the rest to wp_inactive_widgets 
     1029                    if ( !isset($_sidebars_widgets['wp_inactive_widgets']) ) 
     1030                        $_sidebars_widgets['wp_inactive_widgets'] = array(); 
     1031 
     1032                    if ( !empty($sidebars_widgets) ) { 
     1033                        foreach ( $sidebars_widgets as $lost => $val ) { 
     1034                            if ( is_array($val) ) 
     1035                                $_sidebars_widgets['wp_inactive_widgets'] = array_merge( (array) $_sidebars_widgets['wp_inactive_widgets'], $val ); 
     1036                        } 
     1037                    } 
     1038 
     1039                    $sidebars_widgets = $_sidebars_widgets; 
     1040                    unset($_sidebars_widgets); 
     1041                } 
     1042        } 
    10391043    } 
    10401044 
     
    10871091 */ 
    10881092function wp_convert_widget_settings($base_name, $option_name, $settings) { 
    1089     global $_wp_sidebars_widgets; 
    10901093    // This test may need expanding. 
    1091     $single = false; 
     1094    $single = $changed = false; 
    10921095    if ( empty($settings) ) { 
    10931096        $single = true; 
     
    11111114        } else { 
    11121115            if ( empty($GLOBALS['_wp_sidebars_widgets']) ) 
    1113                 $GLOBALS['_wp_sidebars_widgets'] = get_option('sidebars_widgets'); 
     1116                $GLOBALS['_wp_sidebars_widgets'] = get_option('sidebars_widgets', array()); 
    11141117            $sidebars_widgets = &$GLOBALS['_wp_sidebars_widgets']; 
    11151118        } 
     
    11201123                    if ( $base_name == $name ) { 
    11211124                        $sidebars_widgets[$index][$i] = "$name-2"; 
     1125                        $changed = true; 
    11221126                        break 2; 
    11231127                    } 
     
    11261130        } 
    11271131 
    1128         if ( is_admin() ) 
     1132        if ( is_admin() && $changed ) 
    11291133            update_option('sidebars_widgets', $sidebars_widgets); 
    11301134    } 
Note: See TracChangeset for help on using the changeset viewer.