X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/f9001779751f83dc8a10e478bfecb4d8dd5f964c..61343b82c4f0da4c68e4c6373daafff4a81efdd1:/wp-admin/includes/template.php diff --git a/wp-admin/includes/template.php b/wp-admin/includes/template.php index b345c36b..d8d82a0c 100644 --- a/wp-admin/includes/template.php +++ b/wp-admin/includes/template.php @@ -8,31 +8,33 @@ * @subpackage Administration */ - // // Category Checklists // /** - * {@internal Missing Short Description}} + * Walker to output an unordered list of category checkbox elements. * + * @see Walker + * @see wp_category_checklist() + * @see wp_terms_checklist() * @since 2.5.1 */ class Walker_Category_Checklist extends Walker { var $tree_type = 'category'; var $db_fields = array ('parent' => 'parent', 'id' => 'term_id'); //TODO: decouple this - function start_lvl(&$output, $depth, $args) { + function start_lvl( &$output, $depth = 0, $args = array() ) { $indent = str_repeat("\t", $depth); $output .= "$indent\n"; } - function start_el(&$output, $category, $depth, $args) { + function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) { extract($args); if ( empty($taxonomy) ) $taxonomy = 'category'; @@ -46,35 +48,39 @@ class Walker_Category_Checklist extends Walker { $output .= "\n
  • " . ''; } - function end_el(&$output, $category, $depth, $args) { + function end_el( &$output, $category, $depth = 0, $args = array() ) { $output .= "
  • \n"; } } /** - * {@internal Missing Short Description}} + * Output an unordered list of checkbox elements labelled + * with category names. * + * @see wp_terms_checklist() * @since 2.5.1 * - * @param unknown_type $post_id - * @param unknown_type $descendants_and_self - * @param unknown_type $selected_cats - * @param unknown_type $popular_cats + * @param int $post_id Mark categories associated with this post as checked. $selected_cats must not be an array. + * @param int $descendants_and_self ID of the category to output along with its descendents. + * @param bool|array $selected_cats List of categories to mark as checked. + * @param bool|array $popular_cats Override the list of categories that receive the "popular-category" class. + * @param object $walker Walker object to use to build the output. + * @param bool $checked_ontop Move checked items out of the hierarchy and to the top of the list. */ function wp_category_checklist( $post_id = 0, $descendants_and_self = 0, $selected_cats = false, $popular_cats = false, $walker = null, $checked_ontop = true ) { - wp_terms_checklist($post_id, - array( - 'taxonomy' => 'category', - 'descendants_and_self' => $descendants_and_self, - 'selected_cats' => $selected_cats, - 'popular_cats' => $popular_cats, - 'walker' => $walker, - 'checked_ontop' => $checked_ontop - )); + wp_terms_checklist( $post_id, array( + 'taxonomy' => 'category', + 'descendants_and_self' => $descendants_and_self, + 'selected_cats' => $selected_cats, + 'popular_cats' => $popular_cats, + 'walker' => $walker, + 'checked_ontop' => $checked_ontop + ) ); } /** - * Taxonomy independent version of wp_category_checklist + * Output an unordered list of checkbox elements labelled + * with term names. Taxonomy independent version of wp_category_checklist(). * * @since 3.0.0 * @@ -90,6 +96,8 @@ function wp_terms_checklist($post_id = 0, $args = array()) { 'taxonomy' => 'category', 'checked_ontop' => true ); + $args = apply_filters( 'wp_terms_checklist_args', $args, $post_id ); + extract( wp_parse_args($args, $defaults), EXTR_SKIP ); if ( empty($walker) || !is_a($walker, 'Walker') ) @@ -142,31 +150,32 @@ function wp_terms_checklist($post_id = 0, $args = array()) { } /** - * {@internal Missing Short Description}} + * Retrieve a list of the most popular terms from the specified taxonomy. + * + * If the $echo argument is true then the elements for a list of checkbox + * elements labelled with the names of the selected terms is output. + * If the $post_ID global isn't empty then the terms associated with that + * post will be marked as checked. * * @since 2.5.0 * - * @param unknown_type $taxonomy - * @param unknown_type $default - * @param unknown_type $number - * @param unknown_type $echo - * @return unknown + * @param string $taxonomy Taxonomy to retrieve terms from. + * @param int $default Unused. + * @param int $number Number of terms to retrieve. Defaults to 10. + * @param bool $echo Optionally output the list as well. Defaults to true. + * @return array List of popular term IDs. */ function wp_popular_terms_checklist( $taxonomy, $default = 0, $number = 10, $echo = true ) { - global $post_ID; + $post = get_post(); - if ( $post_ID ) - $checked_terms = wp_get_object_terms($post_ID, $taxonomy, array('fields'=>'ids')); + if ( $post && $post->ID ) + $checked_terms = wp_get_object_terms($post->ID, $taxonomy, array('fields'=>'ids')); else $checked_terms = array(); $terms = get_terms( $taxonomy, array( 'orderby' => 'count', 'order' => 'DESC', 'number' => $number, 'hierarchical' => false ) ); $tax = get_taxonomy($taxonomy); - if ( ! current_user_can($tax->cap->assign_terms) ) - $disabled = 'disabled="disabled"'; - else - $disabled = ''; $popular_ids = array(); foreach ( (array) $terms as $term ) { @@ -179,7 +188,7 @@ function wp_popular_terms_checklist( $taxonomy, $default = 0, $number = 10, $ech @@ -221,42 +230,6 @@ function wp_link_category_checklist( $link_id = 0 ) { } } -/** - * Get the column headers for a screen - * - * @since 2.7.0 - * - * @param string|object $screen The screen you want the headers for - * @return array Containing the headers in the format id => UI String - */ -function get_column_headers( $screen ) { - if ( is_string( $screen ) ) - $screen = convert_to_screen( $screen ); - - global $_wp_column_headers; - - if ( !isset( $_wp_column_headers[ $screen->id ] ) ) { - $_wp_column_headers[ $screen->id ] = apply_filters( 'manage_' . $screen->id . '_columns', array() ); - } - - return $_wp_column_headers[ $screen->id ]; -} - -/** - * Get a list of hidden columns. - * - * @since 2.7.0 - * - * @param string|object $screen The screen you want the hidden columns for - * @return array - */ -function get_hidden_columns( $screen ) { - if ( is_string( $screen ) ) - $screen = convert_to_screen( $screen ); - - return (array) get_user_option( 'manage' . $screen->id . 'columnshidden' ); -} - // adds hidden fields with the data for use in the inline editor for posts and pages /** * {@internal Missing Short Description}} @@ -267,7 +240,7 @@ function get_hidden_columns( $screen ) { */ function get_inline_data($post) { $post_type_object = get_post_type_object($post->post_type); - if ( ! current_user_can($post_type_object->cap->edit_post, $post->ID) ) + if ( ! current_user_can( 'edit_post', $post->ID ) ) return; $title = esc_textarea( trim( $post->post_title ) ); @@ -294,22 +267,28 @@ function get_inline_data($post) { if ( $post->post_type == 'page' ) echo '
    ' . esc_html( get_post_meta( $post->ID, '_wp_page_template', true ) ) . '
    '; - if ( $post_type_object->hierarchical ) + if ( post_type_supports( $post->post_type, 'page-attributes' ) ) echo ''; $taxonomy_names = get_object_taxonomies( $post->post_type ); foreach ( $taxonomy_names as $taxonomy_name) { $taxonomy = get_taxonomy( $taxonomy_name ); - if ( $taxonomy->hierarchical && $taxonomy->show_ui ) - echo '
    ' . implode( ',', wp_get_object_terms( $post->ID, $taxonomy_name, array('fields'=>'ids')) ) . '
    '; - elseif ( $taxonomy->show_ui ) - echo '
    ' . esc_html( str_replace( ',', ', ', get_terms_to_edit($post->ID, $taxonomy_name) ) ) . '
    '; + if ( $taxonomy->hierarchical && $taxonomy->show_ui ) { + echo '
    ' + . implode( ',', wp_get_object_terms( $post->ID, $taxonomy_name, array( 'fields' => 'ids' ) ) ) . '
    '; + } elseif ( $taxonomy->show_ui ) { + echo '
    ' + . esc_html( str_replace( ',', ', ', get_terms_to_edit( $post->ID, $taxonomy_name ) ) ) . '
    '; + } } if ( !$post_type_object->hierarchical ) echo '
    ' . (is_sticky($post->ID) ? 'sticky' : '') . '
    '; + if ( post_type_supports( $post->post_type, 'post-formats' ) ) + echo '
    ' . esc_html( get_post_format( $post->ID ) ) . '
    '; + echo ''; } @@ -344,34 +323,40 @@ function wp_comment_reply($position = '1', $checkbox = false, $mode = 'single', @@ -1383,120 +1372,9 @@ function find_posts_div($found_action = '') { * @since 2.7.0 */ function the_post_password() { - global $post; - if ( isset( $post->post_password ) ) echo esc_attr( $post->post_password ); -} - -/** - * {@internal Missing Short Description}} - * - * @since 2.7.0 - */ -function favorite_actions( $screen = null ) { - $default_action = false; - - if ( is_string($screen) ) - $screen = convert_to_screen($screen); - - if ( $screen->is_user ) - return; - - if ( isset($screen->post_type) ) { - $post_type_object = get_post_type_object($screen->post_type); - if ( 'add' != $screen->action ) - $default_action = array('post-new.php?post_type=' . $post_type_object->name => array($post_type_object->labels->new_item, $post_type_object->cap->edit_posts)); - else - $default_action = array('edit.php?post_type=' . $post_type_object->name => array($post_type_object->labels->name, $post_type_object->cap->edit_posts)); - } - - if ( !$default_action ) { - if ( $screen->is_network ) { - $default_action = array('sites.php' => array( __('Sites'), 'manage_sites')); - } else { - switch ( $screen->id ) { - case 'upload': - $default_action = array('media-new.php' => array(__('New Media'), 'upload_files')); - break; - case 'media': - $default_action = array('upload.php' => array(__('Edit Media'), 'upload_files')); - break; - case 'link-manager': - case 'link': - if ( 'add' != $screen->action ) - $default_action = array('link-add.php' => array(__('New Link'), 'manage_links')); - else - $default_action = array('link-manager.php' => array(__('Edit Links'), 'manage_links')); - break; - case 'users': - $default_action = array('user-new.php' => array(__('New User'), 'create_users')); - break; - case 'user': - $default_action = array('users.php' => array(__('Edit Users'), 'edit_users')); - break; - case 'plugins': - $default_action = array('plugin-install.php' => array(__('Install Plugins'), 'install_plugins')); - break; - case 'plugin-install': - $default_action = array('plugins.php' => array(__('Manage Plugins'), 'activate_plugins')); - break; - case 'themes': - $default_action = array('theme-install.php' => array(__('Install Themes'), 'install_themes')); - break; - case 'theme-install': - $default_action = array('themes.php' => array(__('Manage Themes'), 'switch_themes')); - break; - default: - $default_action = array('post-new.php' => array(__('New Post'), 'edit_posts')); - break; - } - } - } - - if ( !$screen->is_network ) { - $actions = array( - 'post-new.php' => array(__('New Post'), 'edit_posts'), - 'edit.php?post_status=draft' => array(__('Drafts'), 'edit_posts'), - 'post-new.php?post_type=page' => array(__('New Page'), 'edit_pages'), - 'media-new.php' => array(__('Upload'), 'upload_files'), - 'edit-comments.php' => array(__('Comments'), 'moderate_comments') - ); - } else { - $actions = array( - 'sites.php' => array( __('Sites'), 'manage_sites'), - 'users.php' => array( __('Users'), 'manage_network_users') - ); - } - - $default_key = array_keys($default_action); - $default_key = $default_key[0]; - if ( isset($actions[$default_key]) ) - unset($actions[$default_key]); - $actions = array_merge($default_action, $actions); - $actions = apply_filters( 'favorite_actions', $actions, $screen ); - - $allowed_actions = array(); - foreach ( $actions as $action => $data ) { - if ( current_user_can($data[1]) ) - $allowed_actions[$action] = $data[0]; - } - - if ( empty($allowed_actions) ) - return; - - $first = array_keys($allowed_actions); - $first = $first[0]; - echo '
    '; - echo '
    ' . $allowed_actions[$first] . '

    '; - echo '
    '; - - array_shift($allowed_actions); - - foreach ( $allowed_actions as $action => $label) { - echo "\n"; - } - echo "
    \n"; + $post = get_post(); + if ( isset( $post->post_password ) ) + echo esc_attr( $post->post_password ); } /** @@ -1506,13 +1384,13 @@ function favorite_actions( $screen = null ) { * returned. * * @since 2.7.0 - * @param int $post_id The post id. If not supplied the global $post is used. + * @param mixed $post Post id or object. If not supplied the global $post is used. * @return string The post title if set */ -function _draft_or_post_title( $post_id = 0 ) { - $title = get_the_title($post_id); - if ( empty($title) ) - $title = __('(no title)'); +function _draft_or_post_title( $post = 0 ) { + $title = get_the_title( $post ); + if ( empty( $title ) ) + $title = __( '(no title)' ); return $title; } @@ -1527,7 +1405,7 @@ function _draft_or_post_title( $post_id = 0 ) { * */ function _admin_search_query() { - echo isset($_REQUEST['s']) ? esc_attr( stripslashes( $_REQUEST['s'] ) ) : ''; + echo isset($_REQUEST['s']) ? esc_attr( wp_unslash( $_REQUEST['s'] ) ) : ''; } /** @@ -1540,33 +1418,25 @@ function _admin_search_query() { */ function iframe_header( $title = '', $limit_styles = false ) { show_admin_bar( false ); - global $hook_suffix, $current_screen, $current_user, $admin_body_class, $wp_locale; + global $hook_suffix, $current_user, $admin_body_class, $wp_locale; $admin_body_class = preg_replace('/[^a-z0-9_-]+/i', '-', $hook_suffix); - $admin_body_class .= ' iframe'; -?> - > - - + $current_screen = get_current_screen(); + + @header( 'Content-Type: ' . get_option( 'html_type' ) . '; charset=' . get_option( 'blog_charset' ) ); + _wp_admin_html_begin(); +?> <?php bloginfo('name') ?> › <?php echo $title ?> — <?php _e('WordPress'); ?> + ' . __( 'New Feature: Toolbar' ) . ''; + $content .= '

    ' . __( 'We’ve combined the admin bar and the old Dashboard header into one persistent toolbar. Hover over the toolbar items to see what’s new.' ) . '

    '; + + if ( is_multisite() && is_super_admin() ) + $content .= '

    ' . __( 'Network Admin is now located in the My Sites menu.' ) . '

    '; + + WP_Internal_Pointers::print_js( 'wp330_toolbar', '#wpadminbar', array( + 'content' => $content, + 'position' => array( 'edge' => 'top', 'align' => 'center' ), + ) ); + } + + /** + * Print 'Updated Media Uploader' for 3.3.0. + * + * @since 3.3.0 + */ + public static function pointer_wp330_media_uploader() {} + + /** + * Print 'New Feature: Saving Widgets' for 3.3.0. + * + * @since 3.3.0 + */ + public static function pointer_wp330_saving_widgets() { + $content = '

    ' . __( 'New Feature: Saving Widgets' ) . '

    '; + $content .= '

    ' . __( 'If you change your mind and revert to your previous theme, we’ll put the widgets back the way you had them.' ) . '

    '; + + WP_Internal_Pointers::print_js( 'wp330_saving_widgets', '#message2', array( + 'content' => $content, + 'position' => array( 'edge' => 'top', 'align' => is_rtl() ? 'right' : 'left' ), + ) ); + } + + /** + * Print 'New Feature: Current Theme Customize Link' for 3.4.0. + * + * @since 3.4.0 + */ + public static function pointer_wp340_customize_current_theme_link() { + $content = '

    ' . __( 'New Feature: Customizer' ) . '

    '; + $content .= '

    ' . __( 'Click Customize to change the header, background, title and menus of the current theme, all in one place.' ) . '

    '; + $content .= '

    ' . __( 'Click the Live Preview links in the Available Themes list below to customize and preview another theme before activating it.' ) . '

    '; + + WP_Internal_Pointers::print_js( 'wp340_customize_current_theme_link', '#customize-current-theme-link', array( + 'content' => $content, + 'position' => array( 'edge' => 'top', 'align' => is_rtl() ? 'right' : 'left', 'offset' => is_rtl() ? '32 0' : '-32 0' ), + ) ); + } + + /** + * Print 'New Feature: Choose Image from Library' for 3.4.0. + * + * @since 3.4.0 + */ + public static function pointer_wp340_choose_image_from_library() { + $content = '

    ' . __( 'New Feature: Choose Image from Library' ) . '

    '; + $content .= '

    ' . __( 'Want to use an image you uploaded earlier? Select it from your media library instead of uploading it again.' ) . '

    '; + + WP_Internal_Pointers::print_js( 'wp340_choose_image_from_library', '#choose-from-library-link', array( + 'content' => $content, + 'position' => array( 'edge' => 'top', 'align' => is_rtl() ? 'right' : 'left', 'defer_loading' => true ), + ) ); + } + + public static function pointer_wp350_media() { + $content = '

    ' . __( 'New Media Manager' ) . '

    '; + $content .= '

    ' . __( 'Uploading files and creating image galleries has a whole new look. Check it out!' ) . '

    '; + + self::print_js( 'wp350_media', '.insert-media', array( + 'content' => $content, + 'position' => array( 'edge' => is_rtl() ? 'right' : 'left', 'align' => 'center' ), + ) ); + } + + public static function pointer_wp360_revisions() { + $content = '

    ' . __( 'Compare Revisions' ) . '

    '; + $content .= '

    ' . __( 'View, compare, and restore other versions of this content on the improved revisions screen.' ) . '

    '; + + self::print_js( 'wp360_revisions', '.misc-pub-section.num-revisions', array( + 'content' => $content, + 'position' => array( 'edge' => is_rtl() ? 'left' : 'right', 'align' => 'center', 'my' => is_rtl() ? 'left' : 'right-14px' ), + ) ); + } + + public static function pointer_wp360_locks() { + $content = '

    ' . __( 'Edit Lock' ) . '

    '; + $content .= '

    ' . __( 'Someone else is editing this. No need to refresh; the lock will disappear when they’re done.' ) . '

    '; + + if ( ! is_multi_author() ) + return; + + self::print_js( 'wp360_locks', 'tr.wp-locked .locked-indicator', array( + 'content' => $content, + 'position' => array( 'edge' => 'left', 'align' => 'left' ), + ) ); + } + + /** + * Prevents new users from seeing existing 'new feature' pointers. + * + * @since 3.3.0 + */ + public static function dismiss_pointers_for_new_users( $user_id ) { + add_user_meta( $user_id, 'dismissed_wp_pointers', 'wp330_toolbar,wp330_saving_widgets,wp340_choose_image_from_library,wp340_customize_current_theme_link,wp350_media,wp360_revisions,wp360_locks' ); + } +} + +add_action( 'admin_enqueue_scripts', array( 'WP_Internal_Pointers', 'enqueue_scripts' ) ); +add_action( 'user_register', array( 'WP_Internal_Pointers', 'dismiss_pointers_for_new_users' ) ); + +/** + * Convert a screen string to a screen object + * + * @since 3.0.0 + * + * @param string $hook_name The hook name (also known as the hook suffix) used to determine the screen. + * @return WP_Screen Screen object. + */ +function convert_to_screen( $hook_name ) { + if ( ! class_exists( 'WP_Screen' ) ) { + _doing_it_wrong( 'convert_to_screen(), add_meta_box()', __( "Likely direct inclusion of wp-admin/includes/template.php in order to use add_meta_box(). This is very wrong. Hook the add_meta_box() call into the add_meta_boxes action instead." ), '3.3' ); + return (object) array( 'id' => '_invalid', 'base' => '_are_belong_to_us' ); + } + + return WP_Screen::get( $hook_name ); +} + +/** + * Output the HTML for restoring the post data from DOM storage + * + * @since 3.6 + * @access private + */ +function _local_storage_notice() { + ?> + +