Changeset 10912 for trunk/wp-admin/includes/widgets.php
- Timestamp:
- 04/11/2009 02:37:24 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/wp-admin/includes/widgets.php
r10680 r10912 8 8 9 9 /** 10 * Display list of widgets, either all or matching search.10 * Display list of the available widgets, either all or matching search. 11 11 * 12 12 * The search parameter are search terms separated by spaces. … … 19 19 function wp_list_widgets( $show = 'all', $_search = false ) { 20 20 global $wp_registered_widgets, $sidebars_widgets, $wp_registered_widget_controls; 21 if ( $_search ) { 21 22 if ( $_search ) { 22 23 // sanitize 23 24 $search = preg_replace( '/[^\w\s]/', '', $_search ); … … 32 33 ?> 33 34 34 <ul id= 'widget-list'>35 35 <ul id="widget-list"> 36 <?php 36 37 $no_widgets_shown = true; 37 38 $already_shown = array(); 38 foreach ( $wp_registered_widgets as $name => $widget ) :39 foreach ( $wp_registered_widgets as $name => $widget ) { 39 40 if ( 'all' == $show && in_array( $widget['callback'], $already_shown ) ) // We already showed this multi-widget 40 41 continue; … … 64 65 if ( ! isset( $widget['params'][0] ) ) 65 66 $widget['params'][0] = array(); 66 ob_start(); 67 $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] ) ); 68 $sidebar_args = call_user_func_array( 'wp_widget_control', $args ); 69 $widget_control_template = ob_get_contents(); 70 ob_end_clean(); 71 72 $widget_id = $widget['id']; // save this for later in case we mess with $widget['id'] 73 74 $is_multi = false !== strpos( $widget_control_template, '%i%' ); 75 if ( !$sidebar || $is_multi ) { 76 $add_query = array( 77 'sidebar' => $sidebar, 78 'key' => false, 79 'edit' => false 80 ); 81 if ( 'all' == $show && $is_multi ) { 82 // it's a multi-widget. We only need to show it in the list once. 83 $already_shown[] = $widget['callback']; 84 $num = (int) array_pop( $ids = explode( '-', $widget['id'] ) ); 85 $id_base = $wp_registered_widget_controls[$widget['id']]['id_base']; 86 // so that we always add a new one when clicking "add" 87 while ( isset($wp_registered_widgets["$id_base-$num"]) ) 88 $num++; 89 $widget['id'] = "$id_base-$num"; 90 $add_query['base'] = $id_base; 91 $add_query['key'] = $num; 92 $add_query['sidebar'] = $GLOBALS['sidebar']; 93 } 94 $add_query['add'] = $widget['id']; 95 $action = 'add'; 96 $add_url = clean_url( wp_nonce_url( add_query_arg( $add_query ), "add-widget_$widget[id]" ) ); 67 68 $already_shown[] = $widget['callback']; 69 $no_widgets_shown = false; 70 71 $args = array( 'widget_id' => $widget['id'], 'widget_name' => $widget['name'], '_display' => 'template' ); 72 73 if ( isset($wp_registered_widget_controls[$widget['id']]['id_base']) && isset($widget['params'][0]['number']) ) { 74 $id_base = $wp_registered_widget_controls[$widget['id']]['id_base']; 75 $args['_temp_id'] = "$id_base-__i__"; 76 $args['_multi_num'] = next_widget_id_number($id_base); 77 $args['_add'] = 'multi'; 97 78 } else { 98 $action = 'edit'; 99 $edit_url = clean_url( add_query_arg( array( 100 'sidebar' => $sidebar, 101 'edit' => $widget['id'], 102 'key' => array_search( $widget['id'], $sidebars_widgets[$sidebar] ), 103 ) ) ); 104 105 $widget_control_template = '<textarea rows="1" cols="1">' . htmlspecialchars( $widget_control_template ) . '</textarea>'; 79 $args['_add'] = 'single'; 80 if ( $sidebar ) 81 $args['_hide'] = '1'; 106 82 } 107 83 108 $widget_control_template = $sidebar_args['before_widget'] . $widget_control_template . $sidebar_args['after_widget']; 109 110 $no_widgets_shown = false; 111 112 113 if ( 'all' != $show && $sidebar_args['_widget_title'] ) 114 $widget_title = $sidebar_args['_widget_title']; 115 else 116 $widget_title = $widget['name']; 117 ?> 118 119 <li id="widget-list-item-<?php echo attribute_escape( $widget['id'] ); ?>" class="widget-list-item"> 120 <h4 class="widget-title widget-draggable"> 121 122 <span><?php echo $widget_title; ?></span> 123 124 <?php if ( 'add' == $action ) : ?> 125 126 <a class="widget-action widget-control-add" href="<?php echo $add_url; ?>"><?php _e( 'Add' ); ?></a> 127 128 <?php elseif ( 'edit' == $action ) : 129 // We echo a hidden edit link for the sake of the JS. Edit links are shown (needlessly?) after a widget is added. 130 ?> 131 132 <a class="widget-action widget-control-edit" href="<?php echo $edit_url; ?>" style="display: none;"><?php _e( 'Edit' ); ?></a> 133 134 <?php endif; ?> 135 136 <br class="clear" /> 137 138 </h4> 139 140 141 <ul id="widget-control-info-<?php echo $widget['id']; ?>" class="widget-control-info"> 142 143 <?php echo $widget_control_template; ?> 144 145 </ul> 146 147 <?php if ( 'add' == $action ) : ?> 148 <?php endif; ?> 149 150 <div class="widget-description"> 151 <?php echo ( $widget_description = wp_widget_description( $widget_id ) ) ? $widget_description : ' '; ?> 152 </div> 153 154 <br class="clear" /> 155 156 </li> 157 158 <?php endforeach; if ( $no_widgets_shown ) : ?> 159 160 <li><?php _e( 'No matching widgets' ); ?></li> 161 162 <?php endif; ?> 163 84 $args = wp_list_widget_controls_dynamic_sidebar( array( 0 => $args, 1 => $widget['params'][0] ) ); 85 call_user_func_array( 'wp_widget_control', $args ); 86 } 87 88 if ( $no_widgets_shown ) 89 echo '<li>' . __( 'No matching widgets' ) . "</li>\n"; 90 ?> 164 91 </ul> 165 92 <?php … … 173 100 * @param string $sidebar 174 101 */ 175 function wp_list_widget_controls( $sidebar ) {102 function wp_list_widget_controls( $sidebar, $hide = false ) { 176 103 add_filter( 'dynamic_sidebar_params', 'wp_list_widget_controls_dynamic_sidebar' ); 177 104 ?> 178 105 179 <ul class="widget-control-list"> 180 181 <?php if ( !dynamic_sidebar( $sidebar ) ) echo "<li />"; ?> 182 106 <ul class="widgets-sortables<?php echo $hide ? ' hide-if-js' : ''; ?>"> 107 <?php dynamic_sidebar( $sidebar ); ?> 183 108 </ul> 184 109 … … 200 125 201 126 $widget_id = $params[0]['widget_id']; 202 203 $params[0]['before_widget'] = "<li id='widget-list-control-item-$i-$widget_id' class='widget-list-control-item widget-sortable'>\n"; 127 $id = isset($params[0]['_temp_id']) ? $params[0]['_temp_id'] : $widget_id; 128 $hidden = isset($params[0]['_hide']) ? ' style="display:none;"' : ''; 129 130 $params[0]['before_widget'] = "<li id='widget-${i}_$id' class='widget'$hidden>"; 204 131 $params[0]['after_widget'] = "</li>"; 205 $params[0]['before_title'] = "%BEG_OF_TITLE%"; 206 $params[0]['after_title'] = "%END_OF_TITLE%"; 132 $params[0]['before_title'] = "%BEG_OF_TITLE%"; // deprecated 133 $params[0]['after_title'] = "%END_OF_TITLE%"; // deprecated 207 134 if ( is_callable( $wp_registered_widgets[$widget_id]['callback'] ) ) { 208 135 $wp_registered_widgets[$widget_id]['_callback'] = $wp_registered_widgets[$widget_id]['callback']; 209 136 $wp_registered_widgets[$widget_id]['callback'] = 'wp_widget_control'; 210 137 } 138 211 139 return $params; 140 } 141 142 function next_widget_id_number($id_base) { 143 global $wp_registered_widgets; 144 $number = 2; 145 146 while ( isset($wp_registered_widgets["$id_base-$number"]) ) 147 $number++; 148 149 return $number; 212 150 } 213 151 … … 223 161 */ 224 162 function wp_widget_control( $sidebar_args ) { 225 global $wp_registered_widgets, $wp_registered_widget_controls, $sidebars_widgets, $edit_widget; 163 global $wp_registered_widgets, $wp_registered_widget_controls, $sidebars_widgets; 164 226 165 $widget_id = $sidebar_args['widget_id']; 227 166 $sidebar_id = isset($sidebar_args['id']) ? $sidebar_args['id'] : false; 228 167 229 $control = isset($wp_registered_widget_controls[$widget_id]) ? $wp_registered_widget_controls[$widget_id] : 0;168 $control = isset($wp_registered_widget_controls[$widget_id]) ? $wp_registered_widget_controls[$widget_id] : array(); 230 169 $widget = $wp_registered_widgets[$widget_id]; 231 170 232 171 $key = $sidebar_id ? array_search( $widget_id, $sidebars_widgets[$sidebar_id] ) : 'no-key'; // position of widget in sidebar 233 172 234 $edit = -1 < $edit_widget && is_numeric($key) && $edit_widget === $key; // (bool) are we currently editing this widget 173 $edit = isset($_GET['editwidget']); // editing without js 174 $nonce = $edit ? wp_create_nonce("edit-widget_$widget_id") : ''; 235 175 236 176 $id_format = $widget['id']; 237 177 238 if ( ! isset( $sidebar_args['_show'] ) ) 239 $sidebar_args['_show'] = ''; 240 241 if ( ! isset( $sidebar_args['_display'] ) ) 242 $sidebar_args['_display'] = ''; 178 $widget_number = isset($control['params'][0]['number']) ? $control['params'][0]['number'] : ''; 179 $add_new = $sidebar_args['_add']; 180 $id_base = isset($control['id_base']) ? $control['id_base'] : $widget_id; 243 181 244 182 // We aren't showing a widget control, we're outputing a template for a mult-widget control 245 if ( 'all' == $sidebar_args['_show'] && 'template' == $sidebar_args['_display'] && isset($control['params'][0]['number'])) {246 // number == -1 implies a template where id numbers are replaced by a generic ' %i%'183 if ( isset($sidebar_args['_display']) && 'template' == $sidebar_args['_display'] && $widget_number ) { 184 // number == -1 implies a template where id numbers are replaced by a generic '__i__' 247 185 $control['params'][0]['number'] = -1; 248 186 // if given, id_base means widget id's should be constructed like {$id_base}-{$id_number} 249 187 if ( isset($control['id_base']) ) 250 $id_format = $control['id_base'] . '-%i%'; 188 $id_format = $control['id_base'] . '-__i__'; 189 190 $multi_number = $sidebar_args['_multi_num']; 251 191 } 252 192 253 $widget_title = '';254 // We grab the normal widget output to find the widget's title255 if ( ( 'all' != $sidebar_args['_show'] || 'template' != $sidebar_args['_display'] ) && is_callable( $widget['_callback'] ) ) {256 ob_start();257 $args = func_get_args();258 call_user_func_array( $widget['_callback'], $args );259 $widget_title = ob_get_clean();260 $widget_title = wp_widget_control_ob_filter( $widget_title );261 }262 193 $wp_registered_widgets[$widget_id]['callback'] = $wp_registered_widgets[$widget_id]['_callback']; 263 194 unset($wp_registered_widgets[$widget_id]['_callback']); 264 195 265 if ( $widget_title && $widget_title != $sidebar_args['widget_name'] ) 266 /* translators: 1: widget name, 2: widget title */ 267 $widget_title = sprintf( _x('%1$s: %2$s', 'widget' ), $sidebar_args['widget_name'], $widget_title ); 268 else 269 $widget_title = wp_specialchars( strip_tags( $sidebar_args['widget_name'] ) ); 270 271 $sidebar_args['_widget_title'] = $widget_title; 272 273 if ( empty($sidebar_args['_display']) || 'template' != $sidebar_args['_display'] ) 274 echo $sidebar_args['before_widget']; 275 ?> 196 $widget_title = wp_specialchars( strip_tags( $sidebar_args['widget_name'] ) ); 197 198 echo $sidebar_args['before_widget']; ?> 276 199 <div class="widget-top"> 277 <h4 class="widget-title"><span><?php echo $widget_title ?></span> 278 279 <?php if ( $edit ) : ?> 280 281 <a class="widget-action widget-control-edit" href="<?php echo clean_url( remove_query_arg( array( 'edit', 'key' ) ) ); ?>"><?php _e('Cancel'); ?></a> 282 283 <?php else : ?> 284 285 <a class="widget-action widget-control-edit" href="<?php echo clean_url( add_query_arg( array( 'edit' => $id_format, 'key' => $key ) ) ); ?>"><?php _e('Edit'); ?></a> 286 287 <?php endif; ?> 288 289 <br class="clear" /> 290 291 </h4></div> 292 293 <div class="widget-control"<?php if ( $edit ) echo ' style="display: block;"'; ?>> 294 295 <?php 296 if ( $control ) 200 <div class="widget-title-action"> 201 <?php if ( !$edit ) { ?> 202 <a class="widget-action widget-control-edit" href="<?php echo clean_url( add_query_arg( array( 'edit' => $id_format, 'key' => $key ) ) ); ?>"></a> 203 <?php } ?> 204 </div> 205 <div class="widget-title"><h4><?php echo $widget_title ?></h4></div> 206 </div> 207 208 <div class="widget-inside"> 209 <form action="" method="post"> 210 <div class="widget-control"> 211 <?php 212 if ( isset($control['callback']) ) 297 213 call_user_func_array( $control['callback'], $control['params'] ); 298 214 else 299 echo '<p>' . __('There are no options for this widget.') . '</p>'; 300 ?> 301 302 <input type="hidden" name="widget-id[]" value="<?php echo $id_format; ?>" /> 303 <input type="hidden" class="widget-width" value="<?php echo $control['width']; ?>" /> 215 echo "\t\t<p>" . __('There are no options for this widget.') . "</p>\n"; ?> 216 217 <input type="hidden" name="widget-id" class="widget-id" value="<?php echo $id_format; ?>" /> 218 <input type="hidden" name="id_base" class="id_base" value="<?php echo $id_base; ?>" /> 219 <input type="hidden" name="widget-width" value="<?php echo $control['width']; ?>" /> 220 <input type="hidden" name="widget-height" value="<?php echo $control['height']; ?>" /> 221 <input type="hidden" name="widget_number" class="widget_number" value="<?php echo $widget_number; ?>" /> 222 <input type="hidden" name="add_new" class="add_new" value="<?php echo $add_new; ?>" /> 223 <?php 224 if ( isset($multi_number) ) 225 echo "\t\t\t<input type='hidden' name='multi_number' class='multi_number' value='$multi_number' />\n"; ?> 304 226 305 227 <div class="widget-control-actions"> 306 307 <?php if ( $control ) : ?> 308 309 <a class="button widget-action widget-control-save hide-if-no-js edit alignleft" href="#save:<?php echo $id_format; ?>"><?php _e('Done'); ?></a> 310 311 <?php endif; ?> 312 313 <a class="button widget-action widget-control-remove alignright" href="<?php echo clean_url( wp_nonce_url( add_query_arg( array( 'remove' => $id_format, 'key' => $key ) ), "remove-widget_$widget[id]" ) ); ?>"><?php _e('Remove'); ?></a> 228 <a class="button widget-control-remove alignleft" href="<?php echo $edit ? clean_url( add_query_arg( array( 'remove' => $id_format, 'key' => $key, '_wpnonce' => $nonce ) ) ) : '#remove'; ?>"><?php _e('Remove'); ?></a> 229 <?php if ( !empty($control) ) { ?> 230 <a class="button-primary widget-control-save alignright" href="<?php echo $edit ? clean_url( add_query_arg( array( 'save' => $id_format, 'key' => $key, '_wpnonce' => $nonce ) ) ) : '#save'; ?>"><?php _e('Save'); ?></a> 231 <?php } ?> 314 232 <br class="clear" /> 315 233 </div> 316 234 </div> 317 <?php 318 if ( empty($sidebar_args['_display']) || 'template' != $sidebar_args['_display'] ) 319 echo $sidebar_args['after_widget']; 235 </form> 236 <div class="widget-description"> 237 <?php echo ( $widget_description = wp_widget_description($widget_id) ) ? "$widget_description\n" : "$widget_title\n"; ?> 238 </div> 239 </div> 240 <?php 241 echo $sidebar_args['after_widget']; 242 320 243 return $sidebar_args; 321 244 } 322 245 323 /**324 * {@internal Missing Short Description}}325 *326 * @since unknown327 *328 * @param string $string329 * @return string330 */331 function wp_widget_control_ob_filter( $string ) {332 if ( false === $beg = strpos( $string, '%BEG_OF_TITLE%' ) )333 return '';334 if ( false === $end = strpos( $string, '%END_OF_TITLE%' ) )335 return '';336 $string = substr( $string, $beg + 14 , $end - $beg - 14);337 $string = str_replace( ' ', ' ', $string );338 return trim( wp_specialchars( strip_tags( $string ) ) );339 }340 341 ?>
Note: See TracChangeset
for help on using the changeset viewer.