X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/7688c6ba71852cd89123b62b2d57683535e4702a..HEAD:/wp-admin/widgets.php
diff --git a/wp-admin/widgets.php b/wp-admin/widgets.php
index a33dc846..6e0aee1b 100644
--- a/wp-admin/widgets.php
+++ b/wp-admin/widgets.php
@@ -1,360 +1,518 @@
' . __( 'Cheatin’ uh?' ) . '' .
+ '
' . __( 'Sorry, you are not allowed to edit theme options on this site.' ) . '
',
+ 403
+ );
+}
-require_once 'admin.php';
+$widgets_access = get_user_setting( 'widgets_access' );
+if ( isset($_GET['widgets-access']) ) {
+ check_admin_referer( 'widgets-access' );
-if ( ! current_user_can('switch_themes') )
- wp_die( __( 'Cheatin’ uh?' ));
+ $widgets_access = 'on' == $_GET['widgets-access'] ? 'on' : 'off';
+ set_user_setting( 'widgets_access', $widgets_access );
+}
-wp_enqueue_script('interface');
+if ( 'on' == $widgets_access ) {
+ add_filter( 'admin_body_class', 'wp_widgets_access_body_class' );
+} else {
+ wp_enqueue_script('admin-widgets');
-function wp_widgets_admin_head() {
- global $wp_registered_sidebars, $wp_registered_widgets, $wp_registered_widget_controls;
-?>
-
-
- $sidebar ) {
- $cols[] = '\'' . $index . '\'';
- }
- $cols = implode( ', ', $cols );
+/**
+ * Fires early before the Widgets administration screen loads,
+ * after scripts are enqueued.
+ *
+ * @since 2.2.0
+ */
+do_action( 'sidebar_admin_setup' );
- $widgets = array();
- foreach ( $wp_registered_widgets as $name => $widget ) {
- $widgets[] = '\'' . $widget['id'] . '\'';
- }
- $widgets = implode( ', ', $widgets );
-?>
-
- __('Inactive Widgets'),
+ 'id' => 'wp_inactive_widgets',
+ 'class' => 'inactive-sidebar',
+ 'description' => __( 'Drag widgets here to remove them from the sidebar but keep their settings.' ),
+ 'before_widget' => '',
+ 'after_widget' => '',
+ 'before_title' => '',
+ 'after_title' => '',
+));
+
+retrieve_widgets();
+
+// We're saving a widget without js
+if ( isset($_POST['savewidget']) || isset($_POST['removewidget']) ) {
+ $widget_id = $_POST['widget-id'];
+ check_admin_referer("save-delete-widget-$widget_id");
+
+ $number = isset($_POST['multi_number']) ? (int) $_POST['multi_number'] : '';
+ if ( $number ) {
+ foreach ( $_POST as $key => $val ) {
+ if ( is_array($val) && preg_match('/__i__|%i%/', key($val)) ) {
+ $_POST[$key] = array( $number => array_shift($val) );
+ break;
+ }
+ }
}
- $sanitized_name = sanitize_title( $wp_registered_widgets[$name]['id'] );
- $link_title = __( 'Configure' );
- $popper = ( isset( $wp_registered_widget_controls[$name] ) )
- ? ' ≡
'
- : '';
+ $sidebar_id = $_POST['sidebar'];
+ $position = isset($_POST[$sidebar_id . '_position']) ? (int) $_POST[$sidebar_id . '_position'] - 1 : 0;
- $output = '%2$s';
+ $id_base = $_POST['id_base'];
+ $sidebar = isset($sidebars_widgets[$sidebar_id]) ? $sidebars_widgets[$sidebar_id] : array();
- printf( $output, $sanitized_name, $wp_registered_widgets[$name]['name'] . $popper );
-}
+ // Delete.
+ if ( isset($_POST['removewidget']) && $_POST['removewidget'] ) {
-$title = __( 'Widgets' );
-$parent_file = 'themes.php';
+ if ( !in_array($widget_id, $sidebar, true) ) {
+ wp_redirect( admin_url('widgets.php?error=0') );
+ exit;
+ }
-require_once 'admin-header.php';
+ $sidebar = array_diff( $sidebar, array($widget_id) );
+ $_POST = array('sidebar' => $sidebar_id, 'widget-' . $id_base => array(), 'the-widget-id' => $widget_id, 'delete_widget' => '1');
+
+ /**
+ * Fires immediately after a widget has been marked for deletion.
+ *
+ * @since 4.4.0
+ *
+ * @param string $widget_id ID of the widget marked for deletion.
+ * @param string $sidebar_id ID of the sidebar the widget was deleted from.
+ * @param string $id_base ID base for the widget.
+ */
+ do_action( 'delete_widget', $widget_id, $sidebar_id, $id_base );
+ }
-if ( count( $wp_registered_sidebars ) < 1 ) {
-?>
-
-
+ $_POST['widget-id'] = $sidebar;
-
follow these instructions.' ); /* TODO: article on codex */; ?>
-
- $control ) {
+ if ( $name != $id_base || !is_callable($control['callback']) )
+ continue;
+
+ ob_start();
+ call_user_func_array( $control['callback'], $control['params'] );
+ ob_end_clean();
+
+ break;
+ }
+
+ $sidebars_widgets[$sidebar_id] = $sidebar;
- require_once 'admin-footer.php';
+ // Remove old position.
+ if ( !isset($_POST['delete_widget']) ) {
+ foreach ( $sidebars_widgets as $key => $sb ) {
+ if ( is_array($sb) )
+ $sidebars_widgets[$key] = array_diff( $sb, array($widget_id) );
+ }
+ array_splice( $sidebars_widgets[$sidebar_id], $position, 0, $widget_id );
+ }
+
+ wp_set_sidebars_widgets($sidebars_widgets);
+ wp_redirect( admin_url('widgets.php?message=0') );
exit;
}
-$sidebars_widgets = wp_get_sidebars_widgets();
+// Remove inactive widgets without js
+if ( isset( $_POST['removeinactivewidgets'] ) ) {
+ check_admin_referer( 'remove-inactive-widgets', '_wpnonce_remove_inactive_widgets' );
+
+ if ( $_POST['removeinactivewidgets'] ) {
+ foreach ( $sidebars_widgets['wp_inactive_widgets'] as $key => $widget_id ) {
+ $pieces = explode( '-', $widget_id );
+ $multi_number = array_pop( $pieces );
+ $id_base = implode( '-', $pieces );
+ $widget = get_option( 'widget_' . $id_base );
+ unset( $widget[$multi_number] );
+ update_option( 'widget_' . $id_base, $widget );
+ unset( $sidebars_widgets['wp_inactive_widgets'][$key] );
+ }
-if ( empty( $sidebars_widgets ) ) {
- $sidebars_widgets = wp_get_widget_defaults();
+ wp_set_sidebars_widgets( $sidebars_widgets );
+ }
+
+ wp_redirect( admin_url( 'widgets.php?message=0' ) );
+ exit;
}
-if ( isset( $_POST['action'] ) ) {
- check_admin_referer( 'widgets-save-widget-order' );
+// Output the widget form without js
+if ( isset($_GET['editwidget']) && $_GET['editwidget'] ) {
+ $widget_id = $_GET['editwidget'];
+
+ if ( isset($_GET['addnew']) ) {
+ // Default to the first sidebar
+ $keys = array_keys( $wp_registered_sidebars );
+ $sidebar = reset( $keys );
+
+ if ( isset($_GET['base']) && isset($_GET['num']) ) { // multi-widget
+ // Copy minimal info from an existing instance of this widget to a new instance
+ foreach ( $wp_registered_widget_controls as $control ) {
+ if ( $_GET['base'] === $control['id_base'] ) {
+ $control_callback = $control['callback'];
+ $multi_number = (int) $_GET['num'];
+ $control['params'][0]['number'] = -1;
+ $widget_id = $control['id'] = $control['id_base'] . '-' . $multi_number;
+ $wp_registered_widget_controls[$control['id']] = $control;
+ break;
+ }
+ }
+ }
+ }
- switch ( $_POST['action'] ) {
- case 'default' :
- $sidebars_widgets = wp_get_widget_defaults();
- wp_set_sidebars_widgets( $sidebars_widgets );
- break;
+ if ( isset($wp_registered_widget_controls[$widget_id]) && !isset($control) ) {
+ $control = $wp_registered_widget_controls[$widget_id];
+ $control_callback = $control['callback'];
+ } elseif ( !isset($wp_registered_widget_controls[$widget_id]) && isset($wp_registered_widgets[$widget_id]) ) {
+ $name = esc_html( strip_tags($wp_registered_widgets[$widget_id]['name']) );
+ }
- case 'save_widget_order' :
- $sidebars_widgets = array();
+ if ( !isset($name) )
+ $name = esc_html( strip_tags($control['name']) );
- foreach ( $wp_registered_sidebars as $index => $sidebar ) {
- $postindex = $index . 'order';
+ if ( !isset($sidebar) )
+ $sidebar = isset($_GET['sidebar']) ? $_GET['sidebar'] : 'wp_inactive_widgets';
- parse_str( $_POST[$postindex], $order );
+ if ( !isset($multi_number) )
+ $multi_number = isset($control['params'][0]['number']) ? $control['params'][0]['number'] : '';
- $new_order = $order[$index];
+ $id_base = isset($control['id_base']) ? $control['id_base'] : $control['id'];
- if ( is_array( $new_order ) ) {
- foreach ( $new_order as $sanitized_name ) {
- foreach ( $wp_registered_widgets as $name => $widget ) {
- if ( $sanitized_name == $widget['id'] ) {
- $sidebars_widgets[$index][] = $name;
- }
- }
- }
- }
+ // Show the widget form.
+ $width = ' style="width:' . max($control['width'], 350) . 'px"';
+ $key = isset($_GET['key']) ? (int) $_GET['key'] : 0;
+
+ require_once( ABSPATH . 'wp-admin/admin-header.php' ); ?>
+
+ $widget ) {
- $is_active = false;
+require_once( ABSPATH . 'wp-admin/admin-header.php' ); ?>
- foreach ( $wp_registered_sidebars as $index => $sidebar ) {
- if ( is_array( $sidebars_widgets[$index] ) && in_array( $name, $sidebars_widgets[$index] ) ) {
- $is_active = true;
- break;
- }
+
+
+%2$s',
+ esc_url( add_query_arg(
+ array(
+ array( 'autofocus' => array( 'panel' => 'widgets' ) ),
+ 'return' => urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) )
+ ),
+ admin_url( 'customize.php' )
+ ) ),
+ __( 'Manage with Live Preview' )
+ );
}
+?>
+
- if ( !$is_active ) {
- $inactive_widgets[] = $name;
- }
-}
+
+
+
+
+
+
-$containers = array( 'palette' );
+
+
+
1 ) {
+ $split = ceil( $sidebars_count / 2 );
+} else {
+ $single_sidebar_class = ' single-sidebar';
}
-?>
-
+
+
+
+
+
+
+
+
+/**
+ * Fires after the available widgets and sidebars have loaded, before the admin footer.
+ *
+ * @since 2.2.0
+ */
+do_action( 'sidebar_admin_page' );
+require_once( ABSPATH . 'wp-admin/admin-footer.php' );