PageRenderTime 53ms CodeModel.GetById 26ms RepoModel.GetById 0ms app.codeStats 0ms

/Websites/webkit.org/blog/wp-admin/includes/widgets.php

https://bitbucket.org/zenoalbisser/webkit
PHP | 210 lines | 137 code | 29 blank | 44 comment | 18 complexity | c9d23e1e5f11155b9cb14f9bb9ca6522 MD5 | raw file
  1. <?php
  2. /**
  3. * WordPress Widgets Administration API
  4. *
  5. * @package WordPress
  6. * @subpackage Administration
  7. */
  8. /**
  9. * Display list of the available widgets, either all or matching search.
  10. *
  11. * The search parameter are search terms separated by spaces.
  12. *
  13. * @since unknown
  14. *
  15. * @param string $show Optional, default is all. What to display, can be 'all', 'unused', or 'used'.
  16. * @param string $_search Optional. Search for widgets. Should be unsanitized.
  17. */
  18. function wp_list_widgets() {
  19. global $wp_registered_widgets, $sidebars_widgets, $wp_registered_widget_controls;
  20. $sort = $wp_registered_widgets;
  21. usort( $sort, create_function( '$a, $b', 'return strnatcasecmp( $a["name"], $b["name"] );' ) );
  22. $done = array();
  23. foreach ( $sort as $widget ) {
  24. if ( in_array( $widget['callback'], $done, true ) ) // We already showed this multi-widget
  25. continue;
  26. $sidebar = is_active_widget( $widget['callback'], $widget['id'], false, false );
  27. $done[] = $widget['callback'];
  28. if ( ! isset( $widget['params'][0] ) )
  29. $widget['params'][0] = array();
  30. $args = array( 'widget_id' => $widget['id'], 'widget_name' => $widget['name'], '_display' => 'template' );
  31. if ( isset($wp_registered_widget_controls[$widget['id']]['id_base']) && isset($widget['params'][0]['number']) ) {
  32. $id_base = $wp_registered_widget_controls[$widget['id']]['id_base'];
  33. $args['_temp_id'] = "$id_base-__i__";
  34. $args['_multi_num'] = next_widget_id_number($id_base);
  35. $args['_add'] = 'multi';
  36. } else {
  37. $args['_add'] = 'single';
  38. if ( $sidebar )
  39. $args['_hide'] = '1';
  40. }
  41. $args = wp_list_widget_controls_dynamic_sidebar( array( 0 => $args, 1 => $widget['params'][0] ) );
  42. call_user_func_array( 'wp_widget_control', $args );
  43. }
  44. }
  45. /**
  46. * {@internal Missing Short Description}}
  47. *
  48. * @since unknown
  49. *
  50. * @param string $sidebar
  51. */
  52. function wp_list_widget_controls( $sidebar ) {
  53. add_filter( 'dynamic_sidebar_params', 'wp_list_widget_controls_dynamic_sidebar' );
  54. echo "\t<div id='$sidebar' class='widgets-sortables'>\n";
  55. dynamic_sidebar( $sidebar );
  56. echo "\t</div>\n";
  57. }
  58. /**
  59. * {@internal Missing Short Description}}
  60. *
  61. * @since unknown
  62. *
  63. * @param array $params
  64. * @return array
  65. */
  66. function wp_list_widget_controls_dynamic_sidebar( $params ) {
  67. global $wp_registered_widgets;
  68. static $i = 0;
  69. $i++;
  70. $widget_id = $params[0]['widget_id'];
  71. $id = isset($params[0]['_temp_id']) ? $params[0]['_temp_id'] : $widget_id;
  72. $hidden = isset($params[0]['_hide']) ? ' style="display:none;"' : '';
  73. $params[0]['before_widget'] = "<div id='widget-${i}_$id' class='widget'$hidden>";
  74. $params[0]['after_widget'] = "</div>";
  75. $params[0]['before_title'] = "%BEG_OF_TITLE%"; // deprecated
  76. $params[0]['after_title'] = "%END_OF_TITLE%"; // deprecated
  77. if ( is_callable( $wp_registered_widgets[$widget_id]['callback'] ) ) {
  78. $wp_registered_widgets[$widget_id]['_callback'] = $wp_registered_widgets[$widget_id]['callback'];
  79. $wp_registered_widgets[$widget_id]['callback'] = 'wp_widget_control';
  80. }
  81. return $params;
  82. }
  83. function next_widget_id_number($id_base) {
  84. global $wp_registered_widgets;
  85. $number = 1;
  86. foreach ( $wp_registered_widgets as $widget_id => $widget ) {
  87. if ( preg_match( '/' . $id_base . '-([0-9]+)$/', $widget_id, $matches ) )
  88. $number = max($number, $matches[1]);
  89. }
  90. $number++;
  91. return $number;
  92. }
  93. /**
  94. * Meta widget used to display the control form for a widget.
  95. *
  96. * Called from dynamic_sidebar().
  97. *
  98. * @since unknown
  99. *
  100. * @param array $sidebar_args
  101. * @return array
  102. */
  103. function wp_widget_control( $sidebar_args ) {
  104. global $wp_registered_widgets, $wp_registered_widget_controls, $sidebars_widgets;
  105. $widget_id = $sidebar_args['widget_id'];
  106. $sidebar_id = isset($sidebar_args['id']) ? $sidebar_args['id'] : false;
  107. $key = $sidebar_id ? array_search( $widget_id, $sidebars_widgets[$sidebar_id] ) : '-1'; // position of widget in sidebar
  108. $control = isset($wp_registered_widget_controls[$widget_id]) ? $wp_registered_widget_controls[$widget_id] : array();
  109. $widget = $wp_registered_widgets[$widget_id];
  110. $id_format = $widget['id'];
  111. $widget_number = isset($control['params'][0]['number']) ? $control['params'][0]['number'] : '';
  112. $id_base = isset($control['id_base']) ? $control['id_base'] : $widget_id;
  113. $multi_number = isset($sidebar_args['_multi_num']) ? $sidebar_args['_multi_num'] : '';
  114. $add_new = isset($sidebar_args['_add']) ? $sidebar_args['_add'] : '';
  115. $query_arg = array( 'editwidget' => $widget['id'] );
  116. if ( $add_new ) {
  117. $query_arg['addnew'] = 1;
  118. if ( $multi_number ) {
  119. $query_arg['num'] = $multi_number;
  120. $query_arg['base'] = $id_base;
  121. }
  122. } else {
  123. $query_arg['sidebar'] = $sidebar_id;
  124. $query_arg['key'] = $key;
  125. }
  126. // We aren't showing a widget control, we're outputing a template for a mult-widget control
  127. if ( isset($sidebar_args['_display']) && 'template' == $sidebar_args['_display'] && $widget_number ) {
  128. // number == -1 implies a template where id numbers are replaced by a generic '__i__'
  129. $control['params'][0]['number'] = -1;
  130. // with id_base widget id's are constructed like {$id_base}-{$id_number}
  131. if ( isset($control['id_base']) )
  132. $id_format = $control['id_base'] . '-__i__';
  133. }
  134. $wp_registered_widgets[$widget_id]['callback'] = $wp_registered_widgets[$widget_id]['_callback'];
  135. unset($wp_registered_widgets[$widget_id]['_callback']);
  136. $widget_title = esc_html( strip_tags( $sidebar_args['widget_name'] ) );
  137. $has_form = 'noform';
  138. echo $sidebar_args['before_widget']; ?>
  139. <div class="widget-top">
  140. <div class="widget-title-action">
  141. <a class="widget-action hide-if-no-js" href="#available-widgets"></a>
  142. <a class="widget-control-edit hide-if-js" href="<?php echo esc_url( add_query_arg( $query_arg ) ); ?>"><span class="edit"><?php _e('Edit'); ?></span><span class="add"><?php _e('Add'); ?></span></a>
  143. </div>
  144. <div class="widget-title"><h4><?php echo $widget_title ?><span class="in-widget-title"></span></h4></div>
  145. </div>
  146. <div class="widget-inside">
  147. <form action="" method="post">
  148. <div class="widget-content">
  149. <?php
  150. if ( isset($control['callback']) )
  151. $has_form = call_user_func_array( $control['callback'], $control['params'] );
  152. else
  153. echo "\t\t<p>" . __('There are no options for this widget.') . "</p>\n"; ?>
  154. </div>
  155. <input type="hidden" name="widget-id" class="widget-id" value="<?php echo esc_attr($id_format); ?>" />
  156. <input type="hidden" name="id_base" class="id_base" value="<?php echo esc_attr($id_base); ?>" />
  157. <input type="hidden" name="widget-width" class="widget-width" value="<?php echo esc_attr($control['width']); ?>" />
  158. <input type="hidden" name="widget-height" class="widget-height" value="<?php echo esc_attr($control['height']); ?>" />
  159. <input type="hidden" name="widget_number" class="widget_number" value="<?php echo esc_attr($widget_number); ?>" />
  160. <input type="hidden" name="multi_number" class="multi_number" value="<?php echo esc_attr($multi_number); ?>" />
  161. <input type="hidden" name="add_new" class="add_new" value="<?php echo esc_attr($add_new); ?>" />
  162. <div class="widget-control-actions">
  163. <div class="alignleft">
  164. <a class="widget-control-remove" href="#remove"><?php _e('Remove'); ?></a> |
  165. <a class="widget-control-close" href="#close"><?php _e('Close'); ?></a>
  166. </div>
  167. <div class="alignright<?php if ( 'noform' === $has_form ) echo ' widget-control-noform'; ?>">
  168. <img src="images/wpspin_light.gif" class="ajax-feedback " title="" alt="" />
  169. <input type="submit" name="savewidget" class="button-primary widget-control-save" value="<?php esc_attr_e('Save'); ?>" />
  170. </div>
  171. <br class="clear" />
  172. </div>
  173. </form>
  174. </div>
  175. <div class="widget-description">
  176. <?php echo ( $widget_description = wp_widget_description($widget_id) ) ? "$widget_description\n" : "$widget_title\n"; ?>
  177. </div>
  178. <?php
  179. echo $sidebar_args['after_widget'];
  180. return $sidebar_args;
  181. }