WordPress.org

Make WordPress Core

Changeset 6717


Ignore:
Timestamp:
02/04/2008 08:38:48 PM (10 years ago)
Author:
ryan
Message:

Dashboard fixes from mdawaffe. No longer stomps sidebar. see #5750

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/includes/dashboard.php

    r6705 r6717  
    109109    $dashboard_widgets = apply_filters( 'wp_dashboard_widgets', $dashboard_widgets );
    110110
    111     $wp_dashboard_sidebars = array( 'wp_dashboard' => $dashboard_widgets );
     111    $wp_dashboard_sidebars = array( 'wp_dashboard' => $dashboard_widgets, 'array_version' => 3.5 );
    112112
    113113    add_filter( 'dynamic_sidebar_params', 'wp_dashboard_dynamic_sidebar_params' );
  • trunk/wp-admin/includes/widgets.php

    r6679 r6717  
    2222        $already_shown = array();
    2323        foreach ( $wp_registered_widgets as $name => $widget ) :
    24             if ( in_array( $widget['callback'], $already_shown ) )
     24            if ( in_array( $widget['callback'], $already_shown ) ) // We already showed this multi-widget
    2525                continue;
    26             $already_shown[] = $widget['callback'];
    2726
    2827            if ( $search_terms ) {
     
    5352
    5453            if ( !$sidebar || false !== strpos( $widget_control_template, '%i%' ) ) {
     54                $already_shown[] = $widget['callback']; // it's a multi-widget.  We only need to show it in the list once.
    5555                $action = 'add';
    5656                $add_url = wp_nonce_url( add_query_arg( array(
     
    6767                    'key' => array_search( $widget['id'], $sidebars_widgets[$sidebar] ),
    6868                ) );
    69                 $widget_control_template = "<textarea>$widget_control_template</textarea>";
     69                $widget_control_template = '<textarea>' . htmlspecialchars( $widget_control_template ) . '</textarea>';
    7070            }
    7171
  • trunk/wp-admin/widgets.php

    r6556 r6717  
    5353    /* Hack #1
    5454     * The widget_control is overloaded.  It updates the widget's options AND echoes out the widget's HTML form.
    55      * Since we want to update before sending out any headers, we have to catchi it with an output buffer
     55     * Since we want to update before sending out any headers, we have to catch it with an output buffer,
    5656     */
    5757    ob_start();
    5858        /* There can be multiple widgets of the same type, but the widget_control for that
    59          * widget type needs only be called once.
     59         * widget type needs only be called once if it's a multi-widget.
    6060         */
    6161        $already_done = array();
     
    6565                continue;
    6666
    67             if ( is_callable( $control['callback'] ) )
     67            if ( is_callable( $control['callback'] ) ) {
    6868                call_user_func_array( $control['callback'], $control['params'] );
     69                $control_output = ob_get_contents();
     70                if ( false !== strpos( $control_output, '%i%' ) ) // if it's a multi-widget, only call control function once.
     71                    $already_done[] = $control['callback'];
     72            }
     73
     74            ob_clean();
    6975        }
    7076    ob_end_clean();
     
    7682
    7783    // Reset the key numbering and stare
    78     $new_sidebar = array_values( $_POST['widget-id'] );
     84    $new_sidebar = isset( $_POST['widget-id'] ) && is_array( $_POST['widget-id'] ) ? array_values( $_POST['widget-id'] ) : array();
    7985    $sidebars_widgets[$_POST['sidebar']] = $new_sidebar;
    8086    wp_set_sidebars_widgets( $sidebars_widgets );
  • trunk/wp-includes/widgets.php

    r6705 r6717  
    160160 *   height: never used
    161161 *   width:  width of fully expanded control form.  Try hard to use the default width.
    162  *   id_base: for widgets which allow multiple instances (such as the text widget), an id_base must be provided.
     162 *   id_base: for multi-widgets (widgets which allow multiple instances such as the text widget), an id_base must be provided.
    163163 *            the widget id will ennd up looking like {$id_base}-{$unique_number}
    164164 */
     
    13901390add_action('init', 'wp_widgets_init', 1);
    13911391
    1392 /* Pattern for widget which allows multiple instances (such as the text widget)
     1392/* Pattern for multi-widget (allows multiple instances such as the text widget).
    13931393
    13941394// Displays widget on blag
Note: See TracChangeset for help on using the changeset viewer.