X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/16b9f61a8ab25bd6c9fbfd0cea00c7bda22f6a71..5d244c8fd9a27c9f89dd08da2af6fbc67d4fce63:/wp-admin/includes/template.php diff --git a/wp-admin/includes/template.php b/wp-admin/includes/template.php index 39f703a2..1087837c 100644 --- a/wp-admin/includes/template.php +++ b/wp-admin/includes/template.php @@ -8,514 +8,219 @@ * @subpackage Administration */ -// Ugly recursive category stuff. -/** - * {@internal Missing Short Description}} - * - * @since unknown - * - * @param unknown_type $parent - * @param unknown_type $level - * @param unknown_type $categories - * @param unknown_type $page - * @param unknown_type $per_page - */ -function cat_rows( $parent = 0, $level = 0, $categories = 0, $page = 1, $per_page = 20 ) { - - $count = 0; - - if ( empty($categories) ) { - - $args = array('hide_empty' => 0); - if ( !empty($_GET['s']) ) - $args['search'] = $_GET['s']; - - $categories = get_categories( $args ); - - if ( empty($categories) ) - return false; - } - - $children = _get_term_hierarchy('category'); - - _cat_rows( $parent, $level, $categories, $children, $page, $per_page, $count ); - -} - -/** - * {@internal Missing Short Description}} - * - * @since unknown - * - * @param unknown_type $categories - * @param unknown_type $count - * @param unknown_type $parent - * @param unknown_type $level - * @param unknown_type $page - * @param unknown_type $per_page - * @return unknown - */ -function _cat_rows( $parent = 0, $level = 0, $categories, &$children, $page = 1, $per_page = 20, &$count ) { - - $start = ($page - 1) * $per_page; - $end = $start + $per_page; - ob_start(); - - foreach ( $categories as $key => $category ) { - if ( $count >= $end ) - break; - - if ( $category->parent != $parent && empty($_GET['s']) ) - continue; - - // If the page starts in a subtree, print the parents. - if ( $count == $start && $category->parent > 0 ) { - - $my_parents = array(); - $p = $category->parent; - while ( $p ) { - $my_parent = get_category( $p ); - $my_parents[] = $my_parent; - if ( $my_parent->parent == 0 ) - break; - $p = $my_parent->parent; - } - - $num_parents = count($my_parents); - while( $my_parent = array_pop($my_parents) ) { - echo "\t" . _cat_row( $my_parent, $level - $num_parents ); - $num_parents--; - } - } - - if ( $count >= $start ) - echo "\t" . _cat_row( $category, $level ); - - unset( $categories[ $key ] ); - - $count++; - - if ( isset($children[$category->term_id]) ) - _cat_rows( $category->term_id, $level + 1, $categories, $children, $page, $per_page, $count ); - } - - $output = ob_get_contents(); - ob_end_clean(); - - echo $output; -} - -/** - * {@internal Missing Short Description}} - * - * @since unknown - * - * @param unknown_type $category - * @param unknown_type $level - * @param unknown_type $name_override - * @return unknown - */ -function _cat_row( $category, $level, $name_override = false ) { - static $row_class = ''; - - $category = get_category( $category, OBJECT, 'display' ); - - $default_cat_id = (int) get_option( 'default_category' ); - $pad = str_repeat( '— ', max(0, $level) ); - $name = ( $name_override ? $name_override : $pad . ' ' . $category->name ); - $edit_link = "categories.php?action=edit&cat_ID=$category->term_id"; - if ( current_user_can( 'manage_categories' ) ) { - $edit = "name)) . "'>" . esc_attr( $name ) . '
'; - $actions = array(); - $actions['edit'] = '' . __('Edit') . ''; - $actions['inline hide-if-no-js'] = '' . __('Quick Edit') . ''; - if ( $default_cat_id != $category->term_id ) - $actions['delete'] = "term_id) . "'>" . __('Delete') . ""; - $actions = apply_filters('cat_row_actions', $actions, $category); - $action_count = count($actions); - $i = 0; - $edit .= '
'; - foreach ( $actions as $action => $link ) { - ++$i; - ( $i == $action_count ) ? $sep = '' : $sep = ' | '; - $edit .= "$link$sep"; - } - $edit .= '
'; - } else { - $edit = $name; - } - - $row_class = 'alternate' == $row_class ? '' : 'alternate'; - $qe_data = get_category_to_edit($category->term_id); - - $category->count = number_format_i18n( $category->count ); - $posts_count = ( $category->count > 0 ) ? "$category->count" : $category->count; - $output = ""; - - $columns = get_column_headers('categories'); - $hidden = get_hidden_columns('categories'); - foreach ( $columns as $column_name => $column_display_name ) { - $class = "class=\"$column_name column-$column_name\""; - - $style = ''; - if ( in_array($column_name, $hidden) ) - $style = ' style="display:none;"'; - - $attributes = "$class$style"; - - switch ($column_name) { - case 'cb': - $output .= ""; - if ( $default_cat_id != $category->term_id ) { - $output .= ""; - } else { - $output .= " "; - } - $output .= ''; - break; - case 'name': - $output .= "$edit"; - $output .= ''; - break; - case 'description': - $output .= "$category->description"; - break; - case 'slug': - $output .= "" . apply_filters('editable_slug', $category->slug) . ""; - break; - case 'posts': - $attributes = 'class="posts column-posts num"' . $style; - $output .= "$posts_count\n"; - break; - default: - $output .= ""; - $output .= apply_filters('manage_categories_custom_column', '', $column_name, $category->term_id); - $output .= ""; - } - } - $output .= ''; - - return $output; -} - -/** - * {@internal Missing Short Description}} - * - * @since 2.7 - * - * Outputs the HTML for the hidden table rows used in Categories, Link Caregories and Tags quick edit. - * - * @param string $type "tag", "category" or "link-category" - * @return - */ -function inline_edit_term_row($type) { - - if ( ! current_user_can( 'manage_categories' ) ) - return; - - $is_tag = $type == 'edit-tags'; - $columns = get_column_headers($type); - $hidden = array_intersect( array_keys( $columns ), array_filter( get_hidden_columns($type) ) ); - $col_count = count($columns) - count($hidden); - ?> - -
- -
-name ); - $edit_link = "link-category.php?action=edit&cat_ID=$category->term_id"; - if ( current_user_can( 'manage_categories' ) ) { - $edit = "name)) . "'>$name
"; - $actions = array(); - $actions['edit'] = '' . __('Edit') . ''; - $actions['inline hide-if-no-js'] = '' . __('Quick Edit') . ''; - if ( $default_cat_id != $category->term_id ) - $actions['delete'] = "term_id) . "'>" . __('Delete') . ""; - $actions = apply_filters('link_cat_row_actions', $actions, $category); - $action_count = count($actions); - $i = 0; - $edit .= '
'; - foreach ( $actions as $action => $link ) { - ++$i; - ( $i == $action_count ) ? $sep = '' : $sep = ' | '; - $edit .= "$link$sep"; - } - $edit .= '
'; - } else { - $edit = $name; - } - - $row_class = 'alternate' == $row_class ? '' : 'alternate'; - $qe_data = get_term_to_edit($category->term_id, 'link_category'); - - $category->count = number_format_i18n( $category->count ); - $count = ( $category->count > 0 ) ? "$category->count" : $category->count; - $output = ""; - $columns = get_column_headers('edit-link-categories'); - $hidden = get_hidden_columns('edit-link-categories'); - foreach ( $columns as $column_name => $column_display_name ) { - $class = "class=\"$column_name column-$column_name\""; - - $style = ''; - if ( in_array($column_name, $hidden) ) - $style = ' style="display:none;"'; - - $attributes = "$class$style"; - - switch ($column_name) { - case 'cb': - $output .= ""; - if ( absint( get_option( 'default_link_category' ) ) != $category->term_id ) { - $output .= ""; - } else { - $output .= " "; - } - $output .= ""; - break; - case 'name': - $output .= "$edit"; - $output .= ''; - break; - case 'description': - $output .= "$category->description"; - break; - case 'slug': - $output .= "" . apply_filters('editable_slug', $category->slug) . ""; - break; - case 'links': - $attributes = 'class="links column-links num"' . $style; - $output .= "$count"; - break; - default: - $output .= ""; - $output .= apply_filters('manage_link_categories_custom_column', '', $column_name, $category->term_id); - $output .= ""; - } - } - $output .= ''; - - return $output; -} - -/** - * Outputs the html checked attribute. - * - * Compares the first two arguments and if identical marks as checked - * - * @since 1.0 - * - * @param any $checked One of the values to compare - * @param any $current (true) The other value to compare if not just true - * @param bool $echo Whether or not to echo or just return the string - */ -function checked( $checked, $current = true, $echo = true) { - return __checked_selected_helper( $checked, $current, $echo, 'checked' ); -} - -/** - * Outputs the html selected attribute. - * - * Compares the first two arguments and if identical marks as selected - * - * @since 1.0 - * - * @param any selected One of the values to compare - * @param any $current (true) The other value to compare if not just true - * @param bool $echo Whether or not to echo or just return the string - */ -function selected( $selected, $current = true, $echo = true) { - return __checked_selected_helper( $selected, $current, $echo, 'selected' ); -} - -/** - * Private helper function for checked and selected. - * - * Compares the first two arguments and if identical marks as $type - * - * @since 2.8 - * @access private - * - * @param any $helper One of the values to compare - * @param any $current (true) The other value to compare if not just true - * @param bool $echo Whether or not to echo or just return the string - * @param string $type The type of checked|selected we are doing. - */ -function __checked_selected_helper( $helper, $current, $echo, $type) { - if ( (string) $helper === (string) $current) - $result = " $type='$type'"; - else - $result = ''; - - if ($echo) - echo $result; - - return $result; -} - // // Category Checklists // /** - * {@internal Missing Short Description}} + * Walker to output an unordered list of category checkbox input elements. * - * @since unknown - * @deprecated Use {@link wp_link_category_checklist()} - * @see wp_link_category_checklist() + * @since 2.5.1 * - * @param unknown_type $default - * @param unknown_type $parent - * @param unknown_type $popular_ids - */ -function dropdown_categories( $default = 0, $parent = 0, $popular_ids = array() ) { - global $post_ID; - wp_category_checklist($post_ID); -} - -/** - * {@internal Missing Short Description}} - * - * @since unknown + * @see Walker + * @see wp_category_checklist() + * @see wp_terms_checklist() */ 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) { + public $tree_type = 'category'; + public $db_fields = array ('parent' => 'parent', 'id' => 'term_id'); //TODO: decouple this + + /** + * Starts the list before the elements are added. + * + * @see Walker:start_lvl() + * + * @since 2.5.1 + * + * @param string $output Passed by reference. Used to append additional content. + * @param int $depth Depth of category. Used for tab indentation. + * @param array $args An array of arguments. @see wp_terms_checklist() + */ + public function start_lvl( &$output, $depth = 0, $args = array() ) { $indent = str_repeat("\t", $depth); $output .= "$indent\n"; } - function start_el(&$output, $category, $depth, $args) { - extract($args); - - $class = in_array( $category->term_id, $popular_cats ) ? ' class="popular-category"' : ''; - $output .= "\n
  • " . ''; - } + /** + * Start the element output. + * + * @see Walker::start_el() + * + * @since 2.5.1 + * + * @param string $output Passed by reference. Used to append additional content. + * @param object $category The current term object. + * @param int $depth Depth of the term in reference to parents. Default 0. + * @param array $args An array of arguments. @see wp_terms_checklist() + * @param int $id ID of the current term. + */ + public function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) { + if ( empty( $args['taxonomy'] ) ) { + $taxonomy = 'category'; + } else { + $taxonomy = $args['taxonomy']; + } - function end_el(&$output, $category, $depth, $args) { + if ( $taxonomy == 'category' ) { + $name = 'post_category'; + } else { + $name = 'tax_input[' . $taxonomy . ']'; + } + $args['popular_cats'] = empty( $args['popular_cats'] ) ? array() : $args['popular_cats']; + $class = in_array( $category->term_id, $args['popular_cats'] ) ? ' class="popular-category"' : ''; + + $args['selected_cats'] = empty( $args['selected_cats'] ) ? array() : $args['selected_cats']; + + /** This filter is documented in wp-includes/category-template.php */ + $output .= "\n
  • " . + ''; + } + + /** + * Ends the element output, if needed. + * + * @see Walker::end_el() + * + * @since 2.5.1 + * + * @param string $output Passed by reference. Used to append additional content. + * @param object $category The current term object. + * @param int $depth Depth of the term in reference to parents. Default 0. + * @param array $args An array of arguments. @see wp_terms_checklist() + */ + public function end_el( &$output, $category, $depth = 0, $args = array() ) { $output .= "
  • \n"; } } /** - * {@internal Missing Short Description}} + * Output an unordered list of checkbox input elements labelled + * with category names. + * + * @since 2.5.1 + * + * @todo Properly document optional arguments as such. * - * @since unknown + * @see wp_terms_checklist() * - * @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 ) { - if ( empty($walker) || !is_a($walker, 'Walker') ) - $walker = new Walker_Category_Checklist; + 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 + ) ); +} + +/** + * Output an unordered list of checkbox input elements labelled with term names. + * + * Taxonomy independent version of {@see wp_category_checklist()}. + * + * @since 3.0.0 + * + * @todo Properly document optional default arguments. + * + * @param int $post_id Post ID. + * @param array $args Arguments to form the terms checklist. + */ +function wp_terms_checklist( $post_id = 0, $args = array() ) { + $defaults = array( + 'descendants_and_self' => 0, + 'selected_cats' => false, + 'popular_cats' => false, + 'walker' => null, + 'taxonomy' => 'category', + 'checked_ontop' => true + ); + + /** + * Filter the taxonomy terms checklist arguments. + * + * @since 3.4.0 + * + * @see wp_terms_checklist() + * + * @param array $args An array of arguments. + * @param int $post_id The post ID. + */ + $params = apply_filters( 'wp_terms_checklist_args', $args, $post_id ); - $descendants_and_self = (int) $descendants_and_self; + $r = wp_parse_args( $params, $defaults ); + + if ( empty( $r['walker'] ) || ! is_a( $r['walker'], 'Walker' ) ) { + $walker = new Walker_Category_Checklist; + } else { + $walker = $r['walker']; + } - $args = array(); + $taxonomy = $r['taxonomy']; + $descendants_and_self = (int) $r['descendants_and_self']; - if ( is_array( $selected_cats ) ) - $args['selected_cats'] = $selected_cats; - elseif ( $post_id ) - $args['selected_cats'] = wp_get_post_categories($post_id); - else - $args['selected_cats'] = array(); + $args = array( 'taxonomy' => $taxonomy ); - if ( is_array( $popular_cats ) ) - $args['popular_cats'] = $popular_cats; - else - $args['popular_cats'] = get_terms( 'category', array( 'fields' => 'ids', 'orderby' => 'count', 'order' => 'DESC', 'number' => 10, 'hierarchical' => false ) ); + $tax = get_taxonomy( $taxonomy ); + $args['disabled'] = ! current_user_can( $tax->cap->assign_terms ); + if ( is_array( $r['selected_cats'] ) ) { + $args['selected_cats'] = $r['selected_cats']; + } elseif ( $post_id ) { + $args['selected_cats'] = wp_get_object_terms( $post_id, $taxonomy, array_merge( $args, array( 'fields' => 'ids' ) ) ); + } else { + $args['selected_cats'] = array(); + } + if ( is_array( $r['popular_cats'] ) ) { + $args['popular_cats'] = $r['popular_cats']; + } else { + $args['popular_cats'] = get_terms( $taxonomy, array( + 'fields' => 'ids', + 'orderby' => 'count', + 'order' => 'DESC', + 'number' => 10, + 'hierarchical' => false + ) ); + } if ( $descendants_and_self ) { - $categories = get_categories( "child_of=$descendants_and_self&hierarchical=0&hide_empty=0" ); - $self = get_category( $descendants_and_self ); + $categories = (array) get_terms( $taxonomy, array( + 'child_of' => $descendants_and_self, + 'hierarchical' => 0, + 'hide_empty' => 0 + ) ); + $self = get_term( $descendants_and_self, $taxonomy ); array_unshift( $categories, $self ); } else { - $categories = get_categories('get=all'); + $categories = (array) get_terms( $taxonomy, array( 'get' => 'all' ) ); } - if ( $checked_ontop ) { + if ( $r['checked_ontop'] ) { // Post process $categories rather than adding an exclude to the get_terms() query to keep the query the same across all posts (for any query cache) $checked_categories = array(); $keys = array_keys( $categories ); @@ -528,46 +233,56 @@ function wp_category_checklist( $post_id = 0, $descendants_and_self = 0, $select } // Put checked cats on top - echo call_user_func_array(array(&$walker, 'walk'), array($checked_categories, 0, $args)); + echo call_user_func_array( array( $walker, 'walk' ), array( $checked_categories, 0, $args ) ); } // Then the rest of them - echo call_user_func_array(array(&$walker, 'walk'), array($categories, 0, $args)); + echo call_user_func_array( array( $walker, 'walk' ), array( $categories, 0, $args ) ); } /** - * {@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 unknown + * @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_categories = wp_get_post_categories($post_ID); + if ( $post && $post->ID ) + $checked_terms = wp_get_object_terms($post->ID, $taxonomy, array('fields'=>'ids')); else - $checked_categories = array(); + $checked_terms = array(); - $categories = get_terms( $taxonomy, array( 'orderby' => 'count', 'order' => 'DESC', 'number' => $number, 'hierarchical' => false ) ); + $terms = get_terms( $taxonomy, array( 'orderby' => 'count', 'order' => 'DESC', 'number' => $number, 'hierarchical' => false ) ); + + $tax = get_taxonomy($taxonomy); $popular_ids = array(); - foreach ( (array) $categories as $category ) { - $popular_ids[] = $category->term_id; + foreach ( (array) $terms as $term ) { + $popular_ids[] = $term->term_id; if ( !$echo ) // hack for AJAX use continue; - $id = "popular-category-$category->term_id"; - $checked = in_array( $category->term_id, $checked_categories ) ? 'checked="checked"' : ''; + $id = "popular-$taxonomy-$term->term_id"; + $checked = in_array( $term->term_id, $checked_terms ) ? 'checked="checked"' : ''; ?> @@ -579,1782 +294,196 @@ function wp_popular_terms_checklist( $taxonomy, $default = 0, $number = 10, $ech /** * {@internal Missing Short Description}} * - * @since unknown - * @deprecated Use {@link wp_link_category_checklist()} - * @see wp_link_category_checklist() - * - * @param unknown_type $default - */ -function dropdown_link_categories( $default = 0 ) { - global $link_id; - - wp_link_category_checklist($link_id); -} - -/** - * {@internal Missing Short Description}} - * - * @since unknown + * @since 2.5.1 * - * @param unknown_type $link_id + * @param int $link_id */ function wp_link_category_checklist( $link_id = 0 ) { $default = 1; if ( $link_id ) { - $checked_categories = wp_get_link_cats($link_id); - - if ( count( $checked_categories ) == 0 ) { - // No selected categories, strange + $checked_categories = wp_get_link_cats( $link_id ); + // No selected categories, strange + if ( ! count( $checked_categories ) ) $checked_categories[] = $default; - } } else { $checked_categories[] = $default; } - $categories = get_terms('link_category', 'orderby=count&hide_empty=0'); + $categories = get_terms( 'link_category', array( 'orderby' => 'name', 'hide_empty' => 0 ) ); - if ( empty($categories) ) + if ( empty( $categories ) ) return; foreach ( $categories as $category ) { $cat_id = $category->term_id; - $name = esc_html( apply_filters('the_category', $category->name)); - $checked = in_array( $cat_id, $checked_categories ); - echo '"; + + /** This filter is documented in wp-includes/category-template.php */ + $name = esc_html( apply_filters( 'the_category', $category->name ) ); + $checked = in_array( $cat_id, $checked_categories ) ? ' checked="checked"' : ''; + echo '"; } } -// Tag stuff - -// Returns a single tag row (see tag_rows below) -// Note: this is also used in admin-ajax.php! +// adds hidden fields with the data for use in the inline editor for posts and pages /** * {@internal Missing Short Description}} * - * @since unknown + * @since 2.7.0 * - * @param unknown_type $tag - * @param unknown_type $class - * @return unknown + * @param WP_Post $post */ -function _tag_row( $tag, $class = '', $taxonomy = 'post_tag' ) { - $count = number_format_i18n( $tag->count ); - $tagsel = ($taxonomy == 'post_tag' ? 'tag' : $taxonomy); - $count = ( $count > 0 ) ? "$count" : $count; - - $name = apply_filters( 'term_name', $tag->name ); - $qe_data = get_term($tag->term_id, $taxonomy, object, 'edit'); - $edit_link = "edit-tags.php?action=edit&taxonomy=$taxonomy&tag_ID=$tag->term_id"; - $out = ''; - $out .= ''; - $columns = get_column_headers('edit-tags'); - $hidden = get_hidden_columns('edit-tags'); - foreach ( $columns as $column_name => $column_display_name ) { - $class = "class=\"$column_name column-$column_name\""; - - $style = ''; - if ( in_array($column_name, $hidden) ) - $style = ' style="display:none;"'; - - $attributes = "$class$style"; - - switch ($column_name) { - case 'cb': - $out .= ' '; - break; - case 'name': - $out .= '' . $name . '
    '; - $actions = array(); - $actions['edit'] = '' . __('Edit') . ''; - $actions['inline hide-if-no-js'] = '' . __('Quick Edit') . ''; - $actions['delete'] = "term_id) . "'>" . __('Delete') . ""; - $actions = apply_filters('tag_row_actions', $actions, $tag); - $action_count = count($actions); - $i = 0; - $out .= '
    '; - foreach ( $actions as $action => $link ) { - ++$i; - ( $i == $action_count ) ? $sep = '' : $sep = ' | '; - $out .= "$link$sep"; - } - $out .= '
    '; - $out .= ''; - break; - case 'description': - $out .= "$tag->description"; - break; - case 'slug': - $out .= "" . apply_filters('editable_slug', $tag->slug) . ""; - break; - case 'posts': - $attributes = 'class="posts column-posts num"' . $style; - $out .= "$count"; - break; - default: - $out .= ""; - $out .= apply_filters("manage_${taxonomy}_custom_column", '', $column_name, $tag->term_id); - $out .= ""; - } - } - - $out .= ''; +function get_inline_data($post) { + $post_type_object = get_post_type_object($post->post_type); + if ( ! current_user_can( 'edit_post', $post->ID ) ) + return; - return $out; -} + $title = esc_textarea( trim( $post->post_title ) ); -// Outputs appropriate rows for the Nth page of the Tag Management screen, -// assuming M tags displayed at a time on the page -// Returns the number of tags displayed -/** - * {@internal Missing Short Description}} - * - * @since unknown - * - * @param unknown_type $page - * @param unknown_type $pagesize - * @param unknown_type $searchterms - * @return unknown - */ -function tag_rows( $page = 1, $pagesize = 20, $searchterms = '', $taxonomy = 'post_tag' ) { + /** This filter is documented in wp-admin/edit-tag-form.php */ + echo ' +'; } /** * {@internal Missing Short Description}} * - * @since unknown + * @since 2.7.0 * - * @param unknown_type $position - * @param unknown_type $checkbox - * @param unknown_type $mode + * @param int $position + * @param bool $checkbox + * @param string $mode + * @param bool $table_row */ function wp_comment_reply($position = '1', $checkbox = false, $mode = 'single', $table_row = true) { - global $current_user; - // allow plugin to replace the popup content - $content = apply_filters( 'wp_comment_reply', '', array('position' => $position, 'checkbox' => $checkbox, 'mode' => $mode) ); + /** + * Filter the in-line comment reply-to form output in the Comments + * list table. + * + * Returning a non-empty value here will short-circuit display + * of the in-line comment-reply form in the Comments list table, + * echoing the returned value instead. + * + * @since 2.7.0 + * + * @see wp_comment_reply() + * + * @param string $content The reply-to form content. + * @param array $args An array of default args. + */ + $content = apply_filters( 'wp_comment_reply', '', array( 'position' => $position, 'checkbox' => $checkbox, 'mode' => $mode ) ); if ( ! empty($content) ) { echo $content; return; } - $columns = get_column_headers('edit-comments'); - $hidden = array_intersect( array_keys( $columns ), array_filter( get_hidden_columns('edit-comments') ) ); - $col_count = count($columns) - count($hidden); + if ( $mode == 'single' ) { + $wp_list_table = _get_list_table('WP_Post_Comments_List_Table'); + } else { + $wp_list_table = _get_list_table('WP_Comments_List_Table'); + } ?>
    -'; + echo ''; if ( !empty($field['args']['label_for']) ) - echo ''; + echo ''; else echo ''; echo '
    ' . $field['title'] . ''; @@ -3183,174 +1301,193 @@ function do_settings_fields($page, $section) { } /** - * {@internal Missing Short Description}} + * Register a settings error to be displayed to the user + * + * Part of the Settings API. Use this to show messages to users about settings validation + * problems, missing settings or anything else. * - * @since unknown + * Settings errors should be added inside the $sanitize_callback function defined in + * register_setting() for a given setting to give feedback about the submission. * - * @param unknown_type $page + * By default messages will show immediately after the submission that generated the error. + * Additional calls to settings_errors() can be used to show errors even when the settings + * page is first accessed. + * + * @since 3.0.0 + * + * @todo Properly document optional arguments as such. + * + * @global array $wp_settings_errors Storage array of errors registered during this pageload + * + * @param string $setting Slug title of the setting to which this error applies + * @param string $code Slug-name to identify the error. Used as part of 'id' attribute in HTML output. + * @param string $message The formatted message text to display to the user (will be shown inside styled + * `
    ` and `

    ` tags). + * @param string $type The type of message it is, controls HTML class. Use 'error' or 'updated'. */ -function manage_columns_prefs($page) { - $columns = get_column_headers($page); +function add_settings_error( $setting, $code, $message, $type = 'error' ) { + global $wp_settings_errors; - $hidden = get_hidden_columns($page); + $wp_settings_errors[] = array( + 'setting' => $setting, + 'code' => $code, + 'message' => $message, + 'type' => $type + ); +} - foreach ( $columns as $column => $title ) { - // Can't hide these - if ( 'cb' == $column || 'title' == $column || 'name' == $column || 'username' == $column || 'media' == $column || 'comment' == $column ) - continue; - if ( empty($title) ) - continue; +/** + * Fetch settings errors registered by add_settings_error() + * + * Checks the $wp_settings_errors array for any errors declared during the current + * pageload and returns them. + * + * If changes were just submitted ($_GET['settings-updated']) and settings errors were saved + * to the 'settings_errors' transient then those errors will be returned instead. This + * is used to pass errors back across pageloads. + * + * Use the $sanitize argument to manually re-sanitize the option before returning errors. + * This is useful if you have errors or notices you want to show even when the user + * hasn't submitted data (i.e. when they first load an options page, or in admin_notices action hook) + * + * @since 3.0.0 + * + * @global array $wp_settings_errors Storage array of errors registered during this pageload + * + * @param string $setting Optional slug title of a specific setting who's errors you want. + * @param boolean $sanitize Whether to re-sanitize the setting value before returning errors. + * @return array Array of settings errors + */ +function get_settings_errors( $setting = '', $sanitize = false ) { + global $wp_settings_errors; + + /* + * If $sanitize is true, manually re-run the sanitization for this option + * This allows the $sanitize_callback from register_setting() to run, adding + * any settings errors you want to show by default. + */ + if ( $sanitize ) + sanitize_option( $setting, get_option( $setting ) ); + + // If settings were passed back from options.php then use them. + if ( isset( $_GET['settings-updated'] ) && $_GET['settings-updated'] && get_transient( 'settings_errors' ) ) { + $wp_settings_errors = array_merge( (array) $wp_settings_errors, get_transient( 'settings_errors' ) ); + delete_transient( 'settings_errors' ); + } + + // Check global in case errors have been added on this pageload. + if ( ! count( $wp_settings_errors ) ) + return array(); + + // Filter the results to those of a specific setting if one was set. + if ( $setting ) { + $setting_errors = array(); + foreach ( (array) $wp_settings_errors as $key => $details ) { + if ( $setting == $details['setting'] ) + $setting_errors[] = $wp_settings_errors[$key]; + } + return $setting_errors; + } + + return $wp_settings_errors; +} + +/** + * Display settings errors registered by {@see add_settings_error()}. + * + * Part of the Settings API. Outputs a div for each error retrieved by + * {@see get_settings_errors()}. + * + * This is called automatically after a settings page based on the + * Settings API is submitted. Errors should be added during the validation + * callback function for a setting defined in {@see register_setting()} + * + * The $sanitize option is passed into {@see get_settings_errors()} and will + * re-run the setting sanitization + * on its current value. + * + * The $hide_on_update option will cause errors to only show when the settings + * page is first loaded. if the user has already saved new values it will be + * hidden to avoid repeating messages already shown in the default error + * reporting after submission. This is useful to show general errors like + * missing settings when the user arrives at the settings page. + * + * @since 3.0.0 + * + * @param string $setting Optional slug title of a specific setting who's errors you want. + * @param boolean $sanitize Whether to re-sanitize the setting value before returning errors. + * @param boolean $hide_on_update If set to true errors will not be shown if the settings page has already been submitted. + */ +function settings_errors( $setting = '', $sanitize = false, $hide_on_update = false ) { + + if ( $hide_on_update && ! empty( $_GET['settings-updated'] ) ) + return; + + $settings_errors = get_settings_errors( $setting, $sanitize ); + + if ( empty( $settings_errors ) ) + return; - if ( 'comments' == $column ) - $title = __('Comments'); - $id = "$column-hide"; - echo '\n"; + $output = ''; + foreach ( $settings_errors as $key => $details ) { + $css_id = 'setting-error-' . $details['code']; + $css_class = $details['type'] . ' settings-error'; + $output .= "

    \n"; + $output .= "

    {$details['message']}

    "; + $output .= "
    \n"; } + echo $output; } /** * {@internal Missing Short Description}} * - * @since unknown + * @since 2.7.0 * - * @param unknown_type $found_action + * @param string $found_action */ function find_posts_div($found_action = '') { ?> -