- 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();
- }
-
- if ( !in_array( $show, array( 'all', 'unused', 'used' ) ) )
- $show = 'all';
-?>
-
- <ul id='widget-list'>
- <?php
- $no_widgets_shown = true;
- $already_shown = array();
- foreach ( $wp_registered_widgets as $name => $widget ) :
- if ( 'all' == $show && in_array( $widget['callback'], $already_shown ) ) // We already showed this multi-widget
- continue;
-
- if ( $search_terms ) {
- $hit = false;
- // Simple case-insensitive search. Boolean OR.
- $search_text = preg_replace( '/[^\w]/', '', $widget['name'] );
- if ( isset($widget['description']) )
- $search_text .= preg_replace( '/[^\w]/', '', $widget['description'] );
-
- foreach ( $search_terms as $search_term ) {
- if ( stristr( $search_text, $search_term ) ) {
- $hit = true;
- break;
- }
- }
- if ( !$hit )
- continue;
- }
-
- $sidebar = is_active_widget( $widget['callback'], $widget['id'] );
-
- if ( ( 'unused' == $show && $sidebar ) || ( 'used' == $show && !$sidebar ) )
- continue;
-
- ob_start();
- $args = wp_list_widget_controls_dynamic_sidebar( array( 0 => array( 'widget_id' => $widget['id'], 'widget_name' => $widget['name'], '_display' => 'template', '_show' => $show ), 1 => $widget['params'][0] ) );
- $sidebar_args = call_user_func_array( 'wp_widget_control', $args );
- $widget_control_template = ob_get_contents();
- ob_end_clean();
-
- $widget_id = $widget['id']; // save this for later in case we mess with $widget['id']
-
- $is_multi = false !== strpos( $widget_control_template, '%i%' );
- if ( !$sidebar || $is_multi ) {
- $add_query = array(
- 'sidebar' => $sidebar,
- 'key' => false,
- 'edit' => false
- );
- if ( 'all' == $show && $is_multi ) {
- // it's a multi-widget. We only need to show it in the list once.
- $already_shown[] = $widget['callback'];
- $num = (int) array_pop( $ids = explode( '-', $widget['id'] ) );
- $id_base = $wp_registered_widget_controls[$widget['id']]['id_base'];
- // so that we always add a new one when clicking "add"
- while ( isset($wp_registered_widgets["$id_base-$num"]) )
- $num++;
- $widget['id'] = "$id_base-$num";
- $add_query['base'] = $id_base;
- $add_query['key'] = $num;
- $add_query['sidebar'] = $GLOBALS['sidebar'];
- }
- $add_query['add'] = $widget['id'];
- $action = 'add';
- $add_url = clean_url( wp_nonce_url( add_query_arg( $add_query ), "add-widget_$widget[id]" ) );
- } else {
- $action = 'edit';
- $edit_url = clean_url( add_query_arg( array(
- 'sidebar' => $sidebar,
- 'edit' => $widget['id'],
- 'key' => array_search( $widget['id'], $sidebars_widgets[$sidebar] ),
- ) ) );
-
- $widget_control_template = '<textarea rows="1" cols="1">' . htmlspecialchars( $widget_control_template ) . '</textarea>';
- }
-
- $widget_control_template = $sidebar_args['before_widget'] . $widget_control_template . $sidebar_args['after_widget'];
-
- $no_widgets_shown = false;
-
-
- if ( 'all' != $show && $sidebar_args['_widget_title'] )
- $widget_title = $sidebar_args['_widget_title'];
- else
- $widget_title = $widget['name'];
- ?>
-
- <li id="widget-list-item-<?php echo attribute_escape( $widget['id'] ); ?>" class="widget-list-item">
- <h4 class="widget-title widget-draggable">
-
- <span><?php echo $widget_title; ?></span>
-
- <?php if ( 'add' == $action ) : ?>
-
- <a class="widget-action widget-control-add" href="<?php echo $add_url; ?>"><?php _e( 'Add' ); ?></a>
-
- <?php elseif ( 'edit' == $action ) :
- // We echo a hidden edit link for the sake of the JS. Edit links are shown (needlessly?) after a widget is added.
- ?>