2007-04-23 21:05:17 -04:00
< ? php
2008-01-04 18:34:33 -05:00
require_once ( 'admin.php' );
2007-04-23 21:05:17 -04:00
2007-05-19 19:44:37 -04:00
if ( ! current_user_can ( 'switch_themes' ) )
2007-05-04 13:52:22 -04:00
wp_die ( __ ( 'Cheatin’ uh?' ));
2008-01-04 18:34:33 -05:00
wp_enqueue_script ( array ( 'wp-lists' , 'admin-widgets' ) );
2007-04-23 21:05:17 -04:00
2008-01-04 18:34:33 -05:00
do_action ( 'sidebar_admin_setup' );
2007-06-13 22:25:30 -04:00
2008-01-04 18:34:33 -05:00
$title = __ ( 'Widgets' );
$parent_file = 'themes.php' ;
2007-06-13 22:25:30 -04:00
2008-01-04 18:34:33 -05:00
// $sidebar = What sidebar are we editing?
if ( isset ( $_GET [ 'sidebar' ]) && isset ( $wp_registered_sidebars [ $_GET [ 'sidebar' ]]) ) {
$sidebar = attribute_escape ( $_GET [ 'sidebar' ] );
} elseif ( is_array ( $wp_registered_sidebars ) && ! empty ( $wp_registered_sidebars ) ) {
// By default we look at the first defined sidebar
$sidebar = array_shift ( array_keys ( $wp_registered_sidebars ) );
} else {
// If no sidebars, die.
require_once ( 'admin-header.php' );
2007-04-29 16:16:26 -04:00
?>
2008-01-04 18:34:33 -05:00
< div class = " error " >
< p >< ? php _e ( 'No Sidebars Defined' ); ?> </p>
</ div >
< div class = " wrap " >
< p >< ? php _e ( 'You are seeing this message because the theme you are currently using isn’t widget-aware, meaning that it has no sidebars that you are able to change. For information on making your theme widget-aware, please <a href="http://automattic.com/code/widgets/themes/">follow these instructions</a>.' ); /* TODO: article on codex */ ; ?> </p>
</ div >
2007-04-29 16:16:26 -04:00
< ? php
2008-01-04 18:34:33 -05:00
require_once ( 'admin-footer.php' );
exit ;
2007-04-23 21:05:17 -04:00
}
2008-01-04 18:34:33 -05:00
// These are the widgets grouped by sidebar
$sidebars_widgets = wp_get_sidebars_widgets ();
if ( empty ( $sidebars_widgets ) )
$sidebars_widgets = wp_get_widget_defaults ();
2007-06-13 22:25:30 -04:00
2008-01-04 18:34:33 -05:00
// for the sake of PHP warnings
if ( empty ( $sidebars_widgets [ $sidebar ] ) )
$sidebars_widgets [ $sidebar ] = array ();
2007-06-13 22:25:30 -04:00
2008-01-04 18:34:33 -05:00
$http_post = ( 'POST' == $_SERVER [ 'REQUEST_METHOD' ] );
2007-06-13 22:25:30 -04:00
2008-01-04 18:34:33 -05:00
// We're updating a sidebar
if ( $http_post && isset ( $sidebars_widgets [ $_POST [ 'sidebar' ]]) ) {
2007-06-13 22:25:30 -04:00
2008-01-04 18:34:33 -05:00
/* Hack #1
* The widget_control is overloaded . It updates the widget 's options AND echoes out the widget' s HTML form .
* Since we want to update before sending out any headers , we have to catchi it with an output buffer
*/
ob_start ();
/* There can be multiple widgets of the same type , but the widget_control for that
* widget type needs only be called once .
*/
$already_done = array ();
2007-04-23 21:05:17 -04:00
2008-01-04 18:34:33 -05:00
foreach ( $wp_registered_widget_controls as $name => $control ) {
if ( in_array ( $control [ 'callback' ], $already_done ) )
continue ;
2007-04-23 21:05:17 -04:00
2008-01-04 18:34:33 -05:00
if ( is_callable ( $control [ 'callback' ] ) )
call_user_func_array ( $control [ 'callback' ], $control [ 'params' ] );
}
ob_end_clean ();
2007-04-23 21:05:17 -04:00
2008-01-04 18:34:33 -05:00
// Prophylactic. Take out empty ids.
foreach ( ( array ) $_POST [ 'widget-id' ] as $key => $val )
if ( ! $val )
unset ( $_POST [ 'widget-id' ][ $key ]);
2007-06-13 22:25:30 -04:00
2008-01-04 18:34:33 -05:00
// Reset the key numbering and stare
$new_sidebar = array_values ( $_POST [ 'widget-id' ] );
$sidebars_widgets [ $_POST [ 'sidebar' ]] = $new_sidebar ;
wp_set_sidebars_widgets ( $sidebars_widgets );
// Re-register just in case
wp_widgets_init ();
2007-06-13 22:25:30 -04:00
2008-01-04 18:34:33 -05:00
wp_redirect ( add_query_arg ( 'message' , 'updated' ) );
2007-04-23 21:05:17 -04:00
exit ;
}
2008-01-04 18:34:33 -05:00
// What widget (if any) are we editing
$edit_widget = - 1 ;
$query_args = array ( 'add' , 'remove' , 'key' , 'edit' , '_wpnonce' , 'message' );
if ( isset ( $_GET [ 'add' ]) && $_GET [ 'add' ] ) {
// Add to the end of the sidebar
if ( isset ( $wp_registered_widgets [ $_GET [ 'add' ]]) ) {
check_admin_referer ( " add-widget_ $_GET[add] " );
$sidebars_widgets [ $sidebar ][] = $_GET [ 'add' ];
wp_set_sidebars_widgets ( $sidebars_widgets );
}
wp_redirect ( remove_query_arg ( $query_args ) );
exit ;
} elseif ( isset ( $_GET [ 'remove' ]) && $_GET [ 'remove' ] && isset ( $_GET [ 'key' ]) && is_numeric ( $_GET [ 'key' ]) ) {
// Remove from sidebar the widget of type $_GET['remove'] and in position $_GET['key']
$key = ( int ) $_GET [ 'key' ];
if ( - 1 < $key && ( $keys = array_keys ( $sidebars_widgets [ $sidebar ], $_GET [ 'remove' ]) ) && in_array ( $key , $keys ) ) {
check_admin_referer ( " remove-widget_ $_GET[remove] " );
unset ( $sidebars_widgets [ $sidebar ][ $key ]);
$sidebars_widgets [ $sidebar ] = array_values ( $sidebars_widgets [ $sidebar ]);
wp_set_sidebars_widgets ( $sidebars_widgets );
}
wp_redirect ( remove_query_arg ( $query_args ) );
exit ;
} elseif ( isset ( $_GET [ 'edit' ]) && $_GET [ 'edit' ] && isset ( $_GET [ 'key' ]) && is_numeric ( $_GET [ 'key' ]) ) {
// Edit widget of type $_GET['edit'] and position $_GET['key']
$key = ( int ) $_GET [ 'key' ];
if ( - 1 < $key && ( $keys = array_keys ( $sidebars_widgets [ $sidebar ], $_GET [ 'edit' ]) ) && in_array ( $key , $keys ) )
$edit_widget = $key ;
2007-04-23 21:05:17 -04:00
}
2008-01-04 18:34:33 -05:00
// Total number of registered sidebars
$sidebar_widget_count = count ( $sidebars_widgets [ $sidebar ]);
2007-06-13 22:25:30 -04:00
2008-01-04 18:34:33 -05:00
// This is sort of lame since "widget" won't be converted to "widgets" in the JS
if ( 1 < $sidebars_count = count ( $wp_registered_sidebars ) )
$sidebar_info_text = __ngettext ( 'You are using %1$s widget in the "%2$s" sidebar.' , 'You are using %1$s widgets in the "%2$s" sidebar.' , $sidebar_widget_count );
else
$sidebar_info_text = __ngettext ( 'You are using %1$s widget in the sidebar.' , 'You are using %1$s widgets in the sidebar.' , $sidebar_widget_count );
2007-06-13 22:25:30 -04:00
2008-01-04 18:34:33 -05:00
$sidebar_info_text = sprintf ( wp_specialchars ( $sidebar_info_text ), " <span id='widget-count'> $sidebar_widget_count </span> " , $wp_registered_sidebars [ $sidebar ][ 'name' ] );
2007-06-13 22:25:30 -04:00
2008-01-04 18:34:33 -05:00
$page = isset ( $_GET [ 'apage' ]) ? abs ( ( int ) $_GET [ 'apage' ] ) : 1 ;
2007-06-13 22:25:30 -04:00
2008-01-04 18:34:33 -05:00
/* TODO : Paginate widgets list
$page_links = paginate_links ( array (
'base' => add_query_arg ( 'apage' , '%#%' ),
'format' => '' ,
'total' => ceil (( $total = 105 ) / 10 ),
'current' => $page
));
*/
$page_links = false ;
2007-06-13 22:25:30 -04:00
2008-01-04 18:34:33 -05:00
// Unsanitized!
$widget_search = isset ( $_GET [ 's' ]) ? $_GET [ 's' ] : false ;
2007-06-13 22:25:30 -04:00
2008-01-04 18:34:33 -05:00
// Not entirely sure what all should be here
$show_values = array (
'' => $widget_search ? __ ( 'Show any widgets' ) : __ ( 'Show all widgets' ),
'unused' => __ ( 'Show unused widgets' ),
'used' => __ ( 'Show used widgets' )
);
2007-04-23 21:05:17 -04:00
2008-01-04 18:34:33 -05:00
$show = isset ( $_GET [ 'show' ]) && isset ( $show_values [ $_GET [ 'show' ]]) ? attribute_escape ( $_GET [ 'show' ] ) : false ;
2007-04-23 21:05:17 -04:00
2008-01-04 18:34:33 -05:00
$messages = array (
'updated' => __ ( 'Changes saved.' )
);
2007-06-13 22:25:30 -04:00
2008-01-04 18:34:33 -05:00
require_once ( 'admin-header.php' );
2007-06-13 22:25:30 -04:00
2008-01-04 18:34:33 -05:00
if ( isset ( $_GET [ 'message' ]) && isset ( $messages [ $_GET [ 'message' ]]) ) : ?>
2007-04-23 21:05:17 -04:00
2008-01-04 18:34:33 -05:00
< div id = " message " class = " updated fade " >< p >< ? php echo $messages [ $_GET [ 'message' ]]; ?> </p></div>
2007-04-23 21:05:17 -04:00
2008-01-04 18:34:33 -05:00
< ? php endif ; ?>
2007-04-23 21:05:17 -04:00
2008-01-04 18:34:33 -05:00
< div class = " wrap " >
2007-04-23 21:05:17 -04:00
2008-01-04 18:34:33 -05:00
< form id = " widgets-filter " action = " " method = " get " >
2007-04-23 21:05:17 -04:00
2008-01-04 18:34:33 -05:00
< h2 >< ? php _e ( 'Widgets' ); ?> </h2>
< p id = " widget-search " >
< input type = " text " id = " widget-search-input " name = " s " value = " <?php echo attribute_escape( $widget_search ); ?> " />
< input type = " submit " value = " <?php _e( 'Search Widgets' ); ?> " />
</ p >
2007-04-23 21:05:17 -04:00
2008-01-04 18:34:33 -05:00
< div class = " widget-liquid-left-holder " >
< div id = " available-widgets-filter " class = " widget-liquid-left " >
< h3 >< ? php printf ( __ ( 'Available Widgets %s' ), '<a href="#help:avaliable-widgets" class="wp-context-help">?</a>' ); ?> </h3>
< p >
< select name = " show " >
< ? php foreach ( $show_values as $show_value => $show_text ) : $show_value = attribute_escape ( $show_value ); ?>
< option value = '<?php echo $show_value; ?>' < ? php selected ( $show_value , $show ); ?> ><?php echo wp_specialchars( $show_text ); ?></option>
< ? php endforeach ; ?>
</ select >
< input type = " submit " value = " <?php _e('Show' ); ?> " />
</ p >
< ? php if ( $page_links ) : ?>
< p class = " pagenav " >
< ? php echo $page_links ; ?>
</ p >
< ? php endif ; ?>
</ div >
2007-04-23 21:05:17 -04:00
</ div >
2007-06-13 22:25:30 -04:00
2008-01-04 18:34:33 -05:00
< div id = " available-sidebars " class = " widget-liquid-right " >
< h3 >< ? php printf ( __ ( 'Current Widgets %s' ), '<a href="#help:current-widgets" class="wp-context-help">?</a>' ); ?> </h3>
< ? php if ( 1 < $sidebars_count ) : ?>
< p >
< select id = " sidebar-selector " name = " sidebar " >
< ? php foreach ( $wp_registered_sidebars as $sidebar_id => $registered_sidebar ) : $sidebar_id = attribute_escape ( $sidebar_id ); ?>
< option value = '<?php echo $sidebar_id; ?>' < ? php selected ( $sidebar_id , $sidebar ); ?> ><?php echo wp_specialchars( $registered_sidebar['name'] ); ?></option>
< ? php endforeach ; ?>
</ select >
< input type = " submit " value = " <?php _e('Go' ); ?> " />
</ p >
< ? php endif ; ?>
</ div >
</ form >
< div id = " widget-content " class = " widget-liquid-left-holder " >
< div id = " available-widgets " class = " widget-liquid-left " >
< ? php wp_list_widgets ( $show , $widget_search ); // This lists all the widgets for the query ( $show, $search ) ?>
< ? php if ( $page_links ) : ?>
< p class = " pagenav " >
< ? php echo $page_links ; ?>
2007-06-13 22:25:30 -04:00
2007-04-23 21:05:17 -04:00
</ p >
2008-01-04 18:34:33 -05:00
< ? php endif ; ?>
2007-06-13 22:25:30 -04:00
2008-01-04 18:34:33 -05:00
</ div >
2007-04-23 21:05:17 -04:00
</ div >
2007-06-13 22:25:30 -04:00
2008-01-04 18:34:33 -05:00
< form id = " widget-controls " action = " " method = " post " >
< div id = " current-widgets-head " class = " widget-liquid-right " >
< div id = " sidebar-info " >
< p >< ? php echo $sidebar_info_text ; ?> </p>
< p >< ? php _e ( 'Add more from the Available Widgets section.' ); ?> </p>
</ div >
</ div >
< div id = " current-widgets " class = " widget-liquid-right " >
< input type = " hidden " id = 'sidebar' name = 'sidebar' value = " <?php echo $sidebar ; ?> " />
< div id = " current-sidebar " >
< ? php wp_list_widget_controls ( $sidebars_widgets [ $sidebar ], $edit_widget ); // Show the control forms for each of the widgets in this sidebar ?>
</ div >
</ div >
< p class = " submit " >
< input type = " hidden " id = " generated-time " name = " generated-time " value = " <?php echo time(); ?> " />
< input type = " submit " name = " save-widgets " value = " <?php _e( 'Save Changes' ); ?> " />
</ p >
</ form >
</ div >
< ? php do_action ( 'sidebar_admin_page' ); ?>
2007-06-13 22:25:30 -04:00
2008-01-04 18:34:33 -05:00
< ? php require_once ( 'admin-footer.php' ); ?>
2007-04-23 21:05:17 -04:00