X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/7688c6ba71852cd89123b62b2d57683535e4702a..3d39054f012aefe514b3f5509e32f09fc4feda44:/wp-admin/widgets.php diff --git a/wp-admin/widgets.php b/wp-admin/widgets.php index a33dc846..a9876b89 100644 --- a/wp-admin/widgets.php +++ b/wp-admin/widgets.php @@ -1,360 +1,516 @@ ' . __( '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']) ) { + $widgets_access = 'on' == $_GET['widgets-access'] ? 'on' : 'off'; + set_user_setting( 'widgets_access', $widgets_access ); +} -if ( ! current_user_can('switch_themes') ) - wp_die( __( 'Cheatin’ uh?' )); +if ( 'on' == $widgets_access ) { + add_filter( 'admin_body_class', 'wp_widgets_access_body_class' ); +} else { + wp_enqueue_script('admin-widgets'); -wp_enqueue_script('interface'); + if ( wp_is_mobile() ) + wp_enqueue_script( 'jquery-touch-punch' ); +} -function wp_widgets_admin_head() { - global $wp_registered_sidebars, $wp_registered_widgets, $wp_registered_widget_controls; -?> - - - $sidebar ) { - $cols[] = '\'' . $index . '\''; - } - $cols = implode( ', ', $cols ); +$title = __( 'Widgets' ); +$parent_file = 'themes.php'; - $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; + } - require_once 'admin-footer.php'; + $sidebars_widgets[$sidebar_id] = $sidebar; + + // 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' ); ?> +
    +

    +
    > +

    + +
    +
    +' . __('There are no options for this widget.') . "

    \n"; ?> +
    + +

    +
    + + $sbvalue ) { + echo "\t\t\n"; + } ?> +
    "; + if ( 'wp_inactive_widgets' == $sbname || 'orphaned_widgets' == substr( $sbname, 0, 16 ) ) { + echo ' '; + } else { + if ( !isset($sidebars_widgets[$sbname]) || !is_array($sidebars_widgets[$sbname]) ) { + $j = 1; + $sidebars_widgets[$sbname] = array(); + } else { + $j = count($sidebars_widgets[$sbname]); + if ( isset($_GET['addnew']) || !in_array($widget_id, $sidebars_widgets[$sbname], true) ) + $j++; } + $selected = ''; + echo "\t\t\n"; + } + echo "
    +
    - wp_set_sidebars_widgets( $sidebars_widgets ); - break; +
    + + + + + + + +
    +
    +
    +
    +
    + $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' ); + + +
    +
    +
    + +
    + +
    + +
    +
    +
    +
    +
    -foreach ( $wp_registered_sidebars as $index => $sidebar ) { - $containers[] = $index; -} + $registered_sidebar ) { + if ( false !== strpos( $registered_sidebar['class'], 'inactive-sidebar' ) || 'orphaned_widgets' == substr( $sidebar, 0, 16 ) ) { + $wrap_class = 'widgets-holder-wrap'; + if ( !empty( $registered_sidebar['class'] ) ) + $wrap_class .= ' ' . $registered_sidebar['class']; + + $is_inactive_widgets = 'wp_inactive_widgets' == $registered_sidebar['id']; + ?> +
    +
    + + + +
    +
    +

    + 'inactive-widgets-control-remove' ); + + if ( empty($sidebars_widgets['wp_inactive_widgets']) ) { + $attributes['disabled'] = ''; + } -foreach ( $containers as $container ) { - $c_string .= '"' . $container . '",'; -} + submit_button( __( 'Clear Inactive Widgets' ), 'delete', 'removeinactivewidgets', false, $attributes ); + ?> + +

    + +
    +
    + +
    + +

    + +
    + -
    -

    View site »' ), get_bloginfo( 'url' ) . '/' ); ?>

    -
    +
    +
    1 ) { + $split = ceil( $sidebars_count / 2 ); +} else { + $single_sidebar_class = ' single-sidebar'; } -?> -
    -

    - -

    - -
    -

    - -

    -
    - $sidebar ) { - ?> - - -
    -

    - -
    - -

    - -
    -
    - -
      - -
    -
    - -
    +?> +
    +
    + + if ( $i > 0 ) + $wrap_class .= ' closed'; - - -

    - - - -

    - -
    - $widget ) { ?> - - -
    - + if ( $split && $i == $split ) { + ?> +
    + $i++; +} - +?> +
    +
    +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + + +/** + * 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' );