X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/3e7fab96d7874067884348df10bbdcdefa4a89ad..fef8173b8c3bad08f495551e43cfdeac1cae6021:/wp-admin/widgets.php diff --git a/wp-admin/widgets.php b/wp-admin/widgets.php index a33dc846..4ae5478f 100644 --- a/wp-admin/widgets.php +++ b/wp-admin/widgets.php @@ -1,360 +1,413 @@ - - - $sidebar ) { - $cols[] = '\'' . $index . '\''; - } - $cols = implode( ', ', $cols ); +if ( 'on' == $widgets_access ) + add_filter( 'admin_body_class', create_function('', '{return " widgets_access ";}') ); +else + wp_enqueue_script('admin-widgets'); - $widgets = array(); - foreach ( $wp_registered_widgets as $name => $widget ) { - $widgets[] = '\'' . $widget['id'] . '\''; - } - $widgets = implode( ', ', $widgets ); -?> - - $widgets ) { + if ( !is_array($widgets) ) + continue; - if ( !isset( $wp_registered_widgets[$name] ) ) { - return; + $_widgets = array(); + foreach ( $widgets as $widget ) { + if ( isset($wp_registered_widgets[$widget]) ) + $_widgets[] = $widget; + } + $_sidebars_widgets[$sidebar] = $_widgets; + $shown_widgets = array_merge($shown_widgets, $_widgets); } - $sanitized_name = sanitize_title( $wp_registered_widgets[$name]['id'] ); - $link_title = __( 'Configure' ); - $popper = ( isset( $wp_registered_widget_controls[$name] ) ) - ? '
' - : ''; + $sidebars_widgets = $_sidebars_widgets; + unset($_sidebars_widgets, $_widgets); - $output = '
  • %2$s
  • '; + // find hidden/lost multi-widget instances + $lost_widgets = array(); + foreach ( $wp_registered_widgets as $key => $val ) { + if ( in_array($key, $shown_widgets, true) ) + continue; - printf( $output, $sanitized_name, $wp_registered_widgets[$name]['name'] . $popper ); -} + $number = preg_replace('/.+?-([0-9]+)$/', '$1', $key); -$title = __( 'Widgets' ); -$parent_file = 'themes.php'; + if ( 2 > (int) $number ) + continue; + + $lost_widgets[] = $key; + } -require_once 'admin-header.php'; + $sidebars_widgets['wp_inactive_widgets'] = array_merge($lost_widgets, (array) $sidebars_widgets['wp_inactive_widgets']); + wp_set_sidebars_widgets($sidebars_widgets); +} +retrieve_widgets(); -if ( count( $wp_registered_sidebars ) < 1 ) { +if ( count($wp_registered_sidebars) == 1 ) { + // If only "wp_inactive_widgets" is defined the theme has no sidebars, die. + require_once( './admin-header.php' ); ?> -
    -

    -

    follow these instructions.' ); /* TODO: article on codex */; ?>

    +
    + +

    +
    +

    +
    +

    follow these instructions.' ); ?>

    - $val ) { + if ( is_array($val) && preg_match('/__i__|%i%/', key($val)) ) { + $_POST[$key] = array( $number => array_shift($val) ); + break; + } + } + } -if ( empty( $sidebars_widgets ) ) { - $sidebars_widgets = wp_get_widget_defaults(); -} + $sidebar_id = $_POST['sidebar']; + $position = isset($_POST[$sidebar_id . '_position']) ? (int) $_POST[$sidebar_id . '_position'] - 1 : 0; -if ( isset( $_POST['action'] ) ) { - check_admin_referer( 'widgets-save-widget-order' ); + $id_base = $_POST['id_base']; + $sidebar = isset($sidebars_widgets[$sidebar_id]) ? $sidebars_widgets[$sidebar_id] : array(); - switch ( $_POST['action'] ) { - case 'default' : - $sidebars_widgets = wp_get_widget_defaults(); - wp_set_sidebars_widgets( $sidebars_widgets ); - break; + // delete + if ( isset($_POST['removewidget']) && $_POST['removewidget'] ) { - case 'save_widget_order' : - $sidebars_widgets = array(); + if ( !in_array($widget_id, $sidebar, true) ) { + wp_redirect( admin_url('widgets.php?error=0') ); + exit; + } - foreach ( $wp_registered_sidebars as $index => $sidebar ) { - $postindex = $index . 'order'; + $sidebar = array_diff( $sidebar, array($widget_id) ); + $_POST = array('sidebar' => $sidebar_id, 'widget-' . $id_base => array(), 'the-widget-id' => $widget_id, 'delete_widget' => '1'); + } - parse_str( $_POST[$postindex], $order ); + $_POST['widget-id'] = $sidebar; - $new_order = $order[$index]; + foreach ( (array) $wp_registered_widget_updates as $name => $control ) { + if ( $name != $id_base || !is_callable($control['callback']) ) + continue; - 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; - } - } - } - } - } + ob_start(); + call_user_func_array( $control['callback'], $control['params'] ); + ob_end_clean(); - wp_set_sidebars_widgets( $sidebars_widgets ); break; } -} -ksort( $wp_registered_widgets ); + $sidebars_widgets[$sidebar_id] = $sidebar; -$inactive_widgets = array(); + // 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 ); + } -foreach ( $wp_registered_widgets as $name => $widget ) { - $is_active = false; + wp_set_sidebars_widgets($sidebars_widgets); + wp_redirect( admin_url('widgets.php?message=0') ); + exit; +} - foreach ( $wp_registered_sidebars as $index => $sidebar ) { - if ( is_array( $sidebars_widgets[$index] ) && in_array( $name, $sidebars_widgets[$index] ) ) { - $is_active = true; - break; +// 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 + $sidebar = array_shift( $keys = array_keys($wp_registered_sidebars) ); + + 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; + } + } } } - if ( !$is_active ) { - $inactive_widgets[] = $name; + 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']) ); } -} -$containers = array( 'palette' ); + if ( !isset($name) ) + $name = esc_html( strip_tags($control['name']) ); -foreach ( $wp_registered_sidebars as $index => $sidebar ) { - $containers[] = $index; -} + if ( !isset($sidebar) ) + $sidebar = isset($_GET['sidebar']) ? $_GET['sidebar'] : 'wp_inactive_widgets'; -$c_string = ''; + if ( !isset($multi_number) ) + $multi_number = isset($control['params'][0]['number']) ? $control['params'][0]['number'] : ''; -foreach ( $containers as $container ) { - $c_string .= '"' . $container . '",'; -} + $id_base = isset($control['id_base']) ? $control['id_base'] : $control['id']; -$c_string = substr( $c_string, 0, -1 ); + // show the widget form + $width = ' style="width:' . max($control['width'], 350) . 'px"'; + $key = isset($_GET['key']) ? (int) $_GET['key'] : 0; -if ( isset( $_POST['action'] ) ) { -?> -
    -

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

    + require_once( './admin-header.php' ); ?> +
    + +

    +
    > +

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

    \n"; ?>
    + +

    +
    + + $sbvalue ) { + echo "\t\t\n"; + } ?> +
    "; + if ( 'wp_inactive_widgets' == $sbname ) { + 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 "
    +
    + +
    + + + + + + +
    +
    +
    +
    +
    + -
    -

    - -

    - -
    -

    - -

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

    - -
    - -

    - -
    -
    - -
      - -
    -
    - - -
    - -
    -

    - -
      - -
    -
    - - - -

    - - - -

    - -
    - $widget ) { ?> - - -
    -
    +$messages = array( + __('Changes saved.') +); + +$errors = array( + __('Error while saving.'), + __('Error in displaying the widget settings form.') +); + +require_once( './admin-header.php' ); ?> + +
    + +

    + + +

    + + +

    + + + + +
    +
    +
    + +
    +

    +
    + +
    +
    +

    -
    +
    + +
    +

    + +
    +
    +
    +
    +
    - +
    +
    + $registered_sidebar ) { + if ( 'wp_inactive_widgets' == $sidebar ) + continue; + $closed = $i ? ' closed' : ''; ?> +
    + + +
    + +
    +
    +
    + +
    +
    +
    - +