X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/11be8dc178e77d0b46189bbd8e33a216a9b90942..53f4633144ed68c8b8fb5861f992b5489894a940:/wp-admin/includes/widgets.php?ds=sidebyside diff --git a/wp-admin/includes/widgets.php b/wp-admin/includes/widgets.php index 9e15d548..36cf6449 100644 --- a/wp-admin/includes/widgets.php +++ b/wp-admin/includes/widgets.php @@ -7,188 +7,106 @@ */ /** - * Display list of widgets, either all or matching search. + * Display list of the available widgets. * - * The search parameter are search terms separated by spaces. + * @since 2.5.0 * - * @since unknown - * - * @param string $show Optional, default is all. What to display, can be 'all', 'unused', or 'used'. - * @param string $_search Optional. Search for widgets. Should be unsanitized. + * @global array $wp_registered_widgets + * @global array $wp_registered_widget_controls */ -function wp_list_widgets( $show = 'all', $_search = false ) { - global $wp_registered_widgets, $sidebars_widgets, $wp_registered_widget_controls; - if ( $_search ) { - // sanitize - $search = preg_replace( '/[^\w\s]/', '', $_search ); - // array of terms - $search_terms = preg_split( '/[\s]/', $search, -1, PREG_SPLIT_NO_EMPTY ); - } else { - $search_terms = array(); +function wp_list_widgets() { + global $wp_registered_widgets, $wp_registered_widget_controls; + + $sort = $wp_registered_widgets; + usort( $sort, '_sort_name_callback' ); + $done = array(); + + foreach ( $sort as $widget ) { + if ( in_array( $widget['callback'], $done, true ) ) // We already showed this multi-widget + continue; + + $sidebar = is_active_widget( $widget['callback'], $widget['id'], false, false ); + $done[] = $widget['callback']; + + if ( ! isset( $widget['params'][0] ) ) + $widget['params'][0] = array(); + + $args = array( 'widget_id' => $widget['id'], 'widget_name' => $widget['name'], '_display' => 'template' ); + + if ( isset($wp_registered_widget_controls[$widget['id']]['id_base']) && isset($widget['params'][0]['number']) ) { + $id_base = $wp_registered_widget_controls[$widget['id']]['id_base']; + $args['_temp_id'] = "$id_base-__i__"; + $args['_multi_num'] = next_widget_id_number($id_base); + $args['_add'] = 'multi'; + } else { + $args['_add'] = 'single'; + if ( $sidebar ) + $args['_hide'] = '1'; + } + + $args = wp_list_widget_controls_dynamic_sidebar( array( 0 => $args, 1 => $widget['params'][0] ) ); + call_user_func_array( 'wp_widget_control', $args ); } +} - if ( !in_array( $show, array( 'all', 'unused', 'used' ) ) ) - $show = 'all'; -?> - - - - + if ( $sidebar_name ) { + ?> + + '; + + if ( ! empty( $description ) ) { + echo '

' . $description . '

'; + } + + echo ''; + + dynamic_sidebar( $sidebar ); + + echo ''; } /** * {@internal Missing Short Description}} * - * @since unknown + * @since 2.5.0 + * + * @global array $wp_registered_widgets + * + * @staticvar int $i * * @param array $params * @return array @@ -199,142 +117,149 @@ function wp_list_widget_controls_dynamic_sidebar( $params ) { $i++; $widget_id = $params[0]['widget_id']; + $id = isset($params[0]['_temp_id']) ? $params[0]['_temp_id'] : $widget_id; + $hidden = isset($params[0]['_hide']) ? ' style="display:none;"' : ''; - $params[0]['before_widget'] = "
  • \n"; - $params[0]['after_widget'] = "
  • "; - $params[0]['before_title'] = "%BEG_OF_TITLE%"; - $params[0]['after_title'] = "%END_OF_TITLE%"; + $params[0]['before_widget'] = "
    "; + $params[0]['after_widget'] = "
    "; + $params[0]['before_title'] = "%BEG_OF_TITLE%"; // deprecated + $params[0]['after_title'] = "%END_OF_TITLE%"; // deprecated if ( is_callable( $wp_registered_widgets[$widget_id]['callback'] ) ) { $wp_registered_widgets[$widget_id]['_callback'] = $wp_registered_widgets[$widget_id]['callback']; $wp_registered_widgets[$widget_id]['callback'] = 'wp_widget_control'; } + return $params; } +/** + * + * @global array $wp_registered_widgets + * + * @param string $id_base + * @return int + */ +function next_widget_id_number( $id_base ) { + global $wp_registered_widgets; + $number = 1; + + foreach ( $wp_registered_widgets as $widget_id => $widget ) { + if ( preg_match( '/' . $id_base . '-([0-9]+)$/', $widget_id, $matches ) ) + $number = max($number, $matches[1]); + } + $number++; + + return $number; +} + /** * Meta widget used to display the control form for a widget. * * Called from dynamic_sidebar(). * - * @since unknown + * @since 2.5.0 + * + * @global array $wp_registered_widgets + * @global array $wp_registered_widget_controls + * @global array $sidebars_widgets * * @param array $sidebar_args * @return array */ function wp_widget_control( $sidebar_args ) { - global $wp_registered_widgets, $wp_registered_widget_controls, $sidebars_widgets, $edit_widget; + global $wp_registered_widgets, $wp_registered_widget_controls, $sidebars_widgets; + $widget_id = $sidebar_args['widget_id']; $sidebar_id = isset($sidebar_args['id']) ? $sidebar_args['id'] : false; - - $control = isset($wp_registered_widget_controls[$widget_id]) ? $wp_registered_widget_controls[$widget_id] : 0; - $widget = $wp_registered_widgets[$widget_id]; - - $key = $sidebar_id ? array_search( $widget_id, $sidebars_widgets[$sidebar_id] ) : 'no-key'; // position of widget in sidebar - - $edit = -1 < $edit_widget && is_numeric($key) && $edit_widget === $key; // (bool) are we currently editing this widget + $key = $sidebar_id ? array_search( $widget_id, $sidebars_widgets[$sidebar_id] ) : '-1'; // position of widget in sidebar + $control = isset($wp_registered_widget_controls[$widget_id]) ? $wp_registered_widget_controls[$widget_id] : array(); + $widget = $wp_registered_widgets[$widget_id]; $id_format = $widget['id']; + $widget_number = isset($control['params'][0]['number']) ? $control['params'][0]['number'] : ''; + $id_base = isset($control['id_base']) ? $control['id_base'] : $widget_id; + $multi_number = isset($sidebar_args['_multi_num']) ? $sidebar_args['_multi_num'] : ''; + $add_new = isset($sidebar_args['_add']) ? $sidebar_args['_add'] : ''; + + $query_arg = array( 'editwidget' => $widget['id'] ); + if ( $add_new ) { + $query_arg['addnew'] = 1; + if ( $multi_number ) { + $query_arg['num'] = $multi_number; + $query_arg['base'] = $id_base; + } + } else { + $query_arg['sidebar'] = $sidebar_id; + $query_arg['key'] = $key; + } - if ( ! isset( $sidebar_args['_show'] ) ) - $sidebar_args['_show'] = ''; - - if ( ! isset( $sidebar_args['_display'] ) ) - $sidebar_args['_display'] = ''; - - // We aren't showing a widget control, we're outputing a template for a mult-widget control - if ( 'all' == $sidebar_args['_show'] && 'template' == $sidebar_args['_display'] && isset($control['params'][0]['number']) ) { - // number == -1 implies a template where id numbers are replaced by a generic '%i%' + /* + * We aren't showing a widget control, we're outputting a template + * for a multi-widget control. + */ + if ( isset($sidebar_args['_display']) && 'template' == $sidebar_args['_display'] && $widget_number ) { + // number == -1 implies a template where id numbers are replaced by a generic '__i__' $control['params'][0]['number'] = -1; - // if given, id_base means widget id's should be constructed like {$id_base}-{$id_number} + // With id_base widget id's are constructed like {$id_base}-{$id_number}. if ( isset($control['id_base']) ) - $id_format = $control['id_base'] . '-%i%'; + $id_format = $control['id_base'] . '-__i__'; } - $widget_title = ''; - // We grab the normal widget output to find the widget's title - if ( ( 'all' != $sidebar_args['_show'] || 'template' != $sidebar_args['_display'] ) && is_callable( $widget['_callback'] ) ) { - ob_start(); - $args = func_get_args(); - call_user_func_array( $widget['_callback'], $args ); - $widget_title = ob_get_clean(); - $widget_title = wp_widget_control_ob_filter( $widget_title ); - } $wp_registered_widgets[$widget_id]['callback'] = $wp_registered_widgets[$widget_id]['_callback']; unset($wp_registered_widgets[$widget_id]['_callback']); - if ( $widget_title && $widget_title != $sidebar_args['widget_name'] ) - $widget_title = sprintf( _c('%1$s: %2$s|1: widget name, 2: widget title' ), $sidebar_args['widget_name'], $widget_title ); + $widget_title = esc_html( strip_tags( $sidebar_args['widget_name'] ) ); + $has_form = 'noform'; + + echo $sidebar_args['before_widget']; ?> +
    +
    + + + + + + +
    +

    +
    + +
    +
    +
    + -
    -

    - - - - - - - - - - - -
    - -

    - -
    > - - ' . __('There are no options for this widget.') . '

    '; - ?> - - - - -
    - - - - - - - - "> -
    -
    + echo "\t\t

    " . __('There are no options for this widget.') . "

    \n"; ?> +
    + + + + + + + + +
    +
    + | + +
    +
    + 'widget-' . esc_attr( $id_format ) . '-savewidget' ) ); ?> +
    +
    +
    + +
    + +
    + +
    \ No newline at end of file