X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/699231ae09f7057a4d0000cdf32e50a3df6a04ca..refs/tags/wordpress-3.5.1:/wp-admin/includes/template.php diff --git a/wp-admin/includes/template.php b/wp-admin/includes/template.php index e3981f22..788a4bd5 100644 --- a/wp-admin/includes/template.php +++ b/wp-admin/includes/template.php @@ -8,194 +8,33 @@ * @subpackage Administration */ -/** - * {@internal Missing Short Description}} - * - * @since 2.7 - * - * Outputs the HTML for the hidden table rows used in Categories, Link Categories and Tags quick edit. - * - * @param string $type "edit-tags", "categoried" or "edit-link-categories" - * @param string $taxonomy The taxonomy of the row. - * @return - */ -function inline_edit_term_row($type, $taxonomy) { - - $tax = get_taxonomy($taxonomy); - if ( ! current_user_can( $tax->cap->edit_terms ) ) - return; - - $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; -} - // // Category Checklists // /** - * {@internal Missing Short Description}} + * Walker to output an unordered list of category checkbox elements. * - * @since unknown + * @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, $args, $id = 0 ) { extract($args); if ( empty($taxonomy) ) $taxonomy = 'category'; @@ -209,35 +48,41 @@ 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. * - * @since unknown + * @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 * * @param int $post_id * @param array $args @@ -251,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') ) @@ -258,1975 +105,207 @@ function wp_terms_checklist($post_id = 0, $args = array()) { $descendants_and_self = (int) $descendants_and_self; - $args = array('taxonomy' => $taxonomy); - - $tax = get_taxonomy($taxonomy); - $args['disabled'] = !current_user_can($tax->cap->assign_terms); - - if ( is_array( $selected_cats ) ) - $args['selected_cats'] = $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( $popular_cats ) ) - $args['popular_cats'] = $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 = (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 = (array) get_terms($taxonomy, array('get' => 'all')); - } - - if ( $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 ); - - foreach( $keys as $k ) { - if ( in_array( $categories[$k]->term_id, $args['selected_cats'] ) ) { - $checked_categories[] = $categories[$k]; - unset( $categories[$k] ); - } - } - - // Put checked cats on top - 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)); -} - -/** - * {@internal Missing Short Description}} - * - * @since unknown - * - * @param unknown_type $taxonomy - * @param unknown_type $default - * @param unknown_type $number - * @param unknown_type $echo - * @return unknown - */ -function wp_popular_terms_checklist( $taxonomy, $default = 0, $number = 10, $echo = true ) { - global $post_ID; - - if ( $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 ) { - $popular_ids[] = $term->term_id; - if ( !$echo ) // hack for AJAX use - continue; - $id = "popular-$taxonomy-$term->term_id"; - $checked = in_array( $term->term_id, $checked_terms ) ? 'checked="checked"' : ''; - ?> - - - - 'name', 'hide_empty' => 0 ) ); - - 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 ) ? ' checked="checked"' : ''; - echo '"; - } -} - -// Tag stuff - -// Returns a single tag row (see tag_rows below) -// Note: this is also used in admin-ajax.php! -/** - * {@internal Missing Short Description}} - * - * @since unknown - * - * @param unknown_type $tag - * @param unknown_type $class - * @return unknown - */ -function _tag_row( $tag, $level, $taxonomy = 'post_tag' ) { - global $post_type, $current_screen; - static $row_class = ''; - $row_class = ($row_class == '' ? ' class="alternate"' : ''); - - $count = number_format_i18n( $tag->count ); - $tax = get_taxonomy($taxonomy); - - if ( 'post_tag' == $taxonomy ) { - $tagsel = 'tag'; - } elseif ( 'category' == $taxonomy ) { - $tagsel = 'category_name'; - } elseif ( ! empty($tax->query_var) ) { - $tagsel = $tax->query_var; - } else { - $tagsel = $taxonomy; - } - - $pad = str_repeat( '— ', max(0, $level) ); - $name = apply_filters( 'term_name', $pad . ' ' . $tag->name, $tag ); - $qe_data = get_term($tag->term_id, $taxonomy, object, 'edit'); - $edit_link = "edit-tags.php?action=edit&taxonomy=$taxonomy&post_type=$post_type&tag_ID=$tag->term_id"; - - $out = ''; - $out .= ''; - - - $columns = get_column_headers($current_screen); - $hidden = get_hidden_columns($current_screen); - $default_term = get_option('default_' . $taxonomy); - 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': - if ( current_user_can($tax->cap->delete_terms) && $tag->term_id != $default_term ) - $out .= ' '; - else - $out .= ' '; - break; - case 'name': - $out .= '' . $name . '
    '; - $actions = array(); - if ( current_user_can($tax->cap->edit_terms) ) { - $actions['edit'] = '' . __('Edit') . ''; - $actions['inline hide-if-no-js'] = '' . __('Quick Edit') . ''; - } - if ( current_user_can($tax->cap->delete_terms) && $tag->term_id != $default_term ) - $actions['delete'] = "term_id) . "'>" . __('Delete') . ""; - - $actions = apply_filters('tag_row_actions', $actions, $tag); - $actions = apply_filters("${taxonomy}_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 .= "\n"; - - return $out; -} - -// 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' ) { - - // Get a page worth of tags - $start = ($page - 1) * $pagesize; - - $args = array('offset' => $start, 'number' => $pagesize, 'hide_empty' => 0); - - if ( !empty( $searchterms ) ) - $args['search'] = $searchterms; - - // convert it to table rows - $out = ''; - $count = 0; - if ( is_taxonomy_hierarchical($taxonomy) ) { - // We'll need the full set of terms then. - $args['number'] = $args['offset'] = 0; - - $terms = get_terms( $taxonomy, $args ); - if ( !empty( $searchterms ) ) // Ignore children on searches. - $children = array(); - else - $children = _get_term_hierarchy($taxonomy); - - // Some funky recursion to get the job done(Paging & parents mainly) is contained within, Skip it for non-hierarchical taxonomies for performance sake - $out .= _term_rows($taxonomy, $terms, $children, $page, $pagesize, $count); - } else { - $terms = get_terms( $taxonomy, $args ); - foreach( $terms as $term ) - $out .= _tag_row( $term, 0, $taxonomy ); - $count = $pagesize; // Only displaying a single page. - } - - echo $out; - return $count; -} - -function _term_rows( $taxonomy, $terms, &$children, $page = 1, $per_page = 20, &$count, $parent = 0, $level = 0 ) { - - $start = ($page - 1) * $per_page; - $end = $start + $per_page; - - $output = ''; - foreach ( $terms as $key => $term ) { - - if ( $count >= $end ) - break; - - if ( $term->parent != $parent && empty($_GET['s']) ) - continue; - - // If the page starts in a subtree, print the parents. - if ( $count == $start && $term->parent > 0 && empty($_GET['s']) ) { - $my_parents = $parent_ids = array(); - $p = $term->parent; - while ( $p ) { - $my_parent = get_term( $p, $taxonomy ); - $my_parents[] = $my_parent; - $p = $my_parent->parent; - if ( in_array($p, $parent_ids) ) // Prevent parent loops. - break; - $parent_ids[] = $p; - } - unset($parent_ids); - - $num_parents = count($my_parents); - while ( $my_parent = array_pop($my_parents) ) { - $output .= "\t" . _tag_row( $my_parent, $level - $num_parents, $taxonomy ); - $num_parents--; - } - } - - if ( $count >= $start ) - $output .= "\t" . _tag_row( $term, $level, $taxonomy ); - - ++$count; - - unset($terms[$key]); - - if ( isset($children[$term->term_id]) && empty($_GET['s']) ) - $output .= _term_rows( $taxonomy, $terms, $children, $page, $per_page, $count, $term->term_id, $level + 1 ); - } - - return $output; -} - -// define the columns to display, the syntax is 'internal name' => 'display name' -/** - * {@internal Missing Short Description}} - * - * @since unknown - * - * @return unknown - */ -function wp_manage_posts_columns( $screen = '') { - if ( empty($screen) ) - $post_type = 'post'; - else - $post_type = $screen->post_type; - - $posts_columns = array(); - $posts_columns['cb'] = ''; - /* translators: manage posts column name */ - $posts_columns['title'] = _x('Title', 'column name'); - $posts_columns['author'] = __('Author'); - if ( empty($post_type) || is_object_in_taxonomy($post_type, 'category') ) - $posts_columns['categories'] = __('Categories'); - if ( empty($post_type) || is_object_in_taxonomy($post_type, 'post_tag') ) - $posts_columns['tags'] = __('Tags'); - $post_status = !empty($_REQUEST['post_status']) ? $_REQUEST['post_status'] : 'all'; - if ( !in_array( $post_status, array('pending', 'draft', 'future') ) && ( empty($post_type) || post_type_supports($post_type, 'comments') ) ) - $posts_columns['comments'] = '
    Comments
    '; - $posts_columns['date'] = __('Date'); - - if ( 'page' == $post_type ) - $posts_columns = apply_filters( 'manage_pages_columns', $posts_columns ); - else - $posts_columns = apply_filters( 'manage_posts_columns', $posts_columns, $post_type ); - $posts_columns = apply_filters( "manage_{$post_type}_posts_columns", $posts_columns ); - - return $posts_columns; -} - -// define the columns to display, the syntax is 'internal name' => 'display name' -/** - * {@internal Missing Short Description}} - * - * @since unknown - * - * @return unknown - */ -function wp_manage_media_columns() { - $posts_columns = array(); - $posts_columns['cb'] = ''; - $posts_columns['icon'] = ''; - /* translators: column name */ - $posts_columns['media'] = _x('File', 'column name'); - $posts_columns['author'] = __('Author'); - //$posts_columns['tags'] = _x('Tags', 'column name'); - /* translators: column name */ - $posts_columns['parent'] = _x('Attached to', 'column name'); - $posts_columns['comments'] = '
    Comments
    '; - //$posts_columns['comments'] = __('Comments'); - /* translators: column name */ - $posts_columns['date'] = _x('Date', 'column name'); - $posts_columns = apply_filters('manage_media_columns', $posts_columns); - - return $posts_columns; -} - -/** - * {@internal Missing Short Description}} - * - * @since unknown - * - * @return unknown - */ -function wp_manage_pages_columns() { - return wp_manage_posts_columns(); -} - -/** - * Get the column headers for a screen - * - * @since unknown - * - * @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) { - global $_wp_column_headers; - - if ( !isset($_wp_column_headers) ) - $_wp_column_headers = array(); - - if ( is_string($screen) ) - $screen = convert_to_screen($screen); - - // Store in static to avoid running filters on each call - if ( isset($_wp_column_headers[$screen->id]) ) - return $_wp_column_headers[$screen->id]; - - switch ($screen->base) { - case 'edit': - $_wp_column_headers[$screen->id] = wp_manage_posts_columns( $screen ); - break; - case 'edit-comments': - $_wp_column_headers[$screen->id] = array( - 'cb' => '', - 'author' => __('Author'), - /* translators: column name */ - 'comment' => _x('Comment', 'column name'), - //'date' => __('Submitted'), - 'response' => __('In Response To') - ); - - break; - case 'link-manager': - $_wp_column_headers[$screen->id] = array( - 'cb' => '', - 'name' => __('Name'), - 'url' => __('URL'), - 'categories' => __('Categories'), - 'rel' => __('Relationship'), - 'visible' => __('Visible'), - 'rating' => __('Rating') - ); - - break; - case 'upload': - $_wp_column_headers[$screen->id] = wp_manage_media_columns(); - break; - case 'categories': - $_wp_column_headers[$screen->id] = array( - 'cb' => '', - 'name' => __('Name'), - 'description' => __('Description'), - 'slug' => __('Slug'), - 'posts' => __('Posts') - ); - - break; - case 'edit-link-categories': - $_wp_column_headers[$screen->id] = array( - 'cb' => '', - 'name' => __('Name'), - 'description' => __('Description'), - 'slug' => __('Slug'), - 'links' => __('Links') - ); - - break; - case 'edit-tags': - $_wp_column_headers[$screen->id] = array( - 'cb' => '', - 'name' => __('Name'), - 'description' => __('Description'), - 'slug' => __('Slug'), - 'posts' => __('Posts') - ); - - break; - case 'users': - $_wp_column_headers[$screen->id] = array( - 'cb' => '', - 'username' => __('Username'), - 'name' => __('Name'), - 'email' => __('E-mail'), - 'role' => __('Role'), - 'posts' => __('Posts') - ); - break; - default : - $_wp_column_headers[$screen->id] = array(); - } - - $_wp_column_headers[$screen->id] = apply_filters('manage_' . $screen->id . '_columns', $_wp_column_headers[$screen->id]); - return $_wp_column_headers[$screen->id]; -} - -/** - * {@internal Missing Short Description}} - * - * @since unknown - * - * @param unknown_type $screen - * @param unknown_type $id - */ -function print_column_headers( $screen, $id = true ) { - if ( is_string($screen) ) - $screen = convert_to_screen($screen); - - $columns = get_column_headers( $screen ); - $hidden = get_hidden_columns($screen); - $styles = array(); - - foreach ( $columns as $column_key => $column_display_name ) { - $class = ' class="manage-column'; - - $class .= " column-$column_key"; - - if ( 'cb' == $column_key ) - $class .= ' check-column'; - elseif ( in_array($column_key, array('posts', 'comments', 'links')) ) - $class .= ' num'; - - $class .= '"'; - - $style = ''; - if ( in_array($column_key, $hidden) ) - $style = 'display:none;'; - - if ( isset($styles[$screen->id]) && isset($styles[$screen->id][$column_key]) ) - $style .= ' ' . $styles[$screen>id][$column_key]; - $style = ' style="' . $style . '"'; -?> - > -id] = $columns; -} - -/** - * {@internal Missing Short Description}} - * - * @since unknown - * - * @param unknown_type $screen - */ -function get_hidden_columns($screen) { - if ( is_string($screen) ) - $screen = convert_to_screen($screen); - - return (array) get_user_option( 'manage' . $screen->id. 'columnshidden' ); -} - -/** - * {@internal Missing Short Description}} - * - * Outputs the quick edit and bulk edit table rows for posts and pages - * - * @since 2.7 - * - * @param string $screen - */ -function inline_edit_row( $screen ) { - global $current_user, $mode; - - if ( is_string($screen) ) { - $screen = array('id' => 'edit-' . $screen, 'base' => 'edit', 'post_type' => $screen ); - $screen = (object) $screen; - } - - $post = get_default_post_to_edit( $screen->post_type ); - $post_type_object = get_post_type_object( $screen->post_type ); - - $taxonomy_names = get_object_taxonomies( $screen->post_type ); - $hierarchical_taxonomies = array(); - $flat_taxonomies = array(); - foreach ( $taxonomy_names as $taxonomy_name ) { - $taxonomy = get_taxonomy( $taxonomy_name); - - if ( !$taxonomy->show_ui ) - continue; - - if ( $taxonomy->hierarchical ) - $hierarchical_taxonomies[] = $taxonomy; - else - $flat_taxonomies[] = $taxonomy; - } - - $columns = wp_manage_posts_columns($screen); - $hidden = array_intersect( array_keys( $columns ), array_filter( get_hidden_columns($screen) ) ); - $col_count = count($columns) - count($hidden); - $m = ( isset($mode) && 'excerpt' == $mode ) ? 'excerpt' : 'list'; - $can_publish = current_user_can($post_type_object->cap->publish_posts); - $core_columns = array( 'cb' => true, 'date' => true, 'title' => true, 'categories' => true, 'tags' => true, 'comments' => true, 'author' => true ); - -?> - -
    - - - post_type "; - echo $bulk ? "bulk-edit-row bulk-edit-row-$hclass bulk-edit-$screen->post_type" : "quick-edit-row quick-edit-row-$hclass inline-edit-$screen->post_type"; - ?>" style="display: none"> - -
    - -
    -

    - - -post_type, 'title' ) ) : - if ( $bulk ) : ?> -
    -
    -
    - - - - - - - - - - - -
    - -
    -
    - -post_type, 'author' ) ) : - $authors = get_editable_user_ids( $current_user->id, true, $screen->post_type ); // TODO: ROLE SYSTEM - $authors_dropdown = ''; - if ( $authors && count( $authors ) > 1 ) : - $users_opt = array('include' => $authors, 'name' => 'post_author', 'class'=> 'authors', 'multi' => 1, 'echo' => 0); - if ( $bulk ) - $users_opt['show_option_none'] = __('— No Change —'); - $authors_dropdown = ''; - - endif; // authors -?> - - - -
    - - - - - - -
    - - - -
    - - - -
    - - - - labels->name) ?> - - - - -
      - $taxonomy->name)) ?> -
    - - - -
    - - - -
    - -post_type, 'author' ) && $bulk ) - echo $authors_dropdown; -?> - -hierarchical ) : ?> - - - -post_type, 'page-attributes' ) ) : - if ( !$bulk ) : ?> - - - - - - - -hierarchical ?> - - - - - - - - - - - -post_type, 'comments' ) || post_type_supports( $screen->post_type, 'trackbacks' ) ) : - if ( $bulk ) : ?> - -
    - post_type, 'comments' ) ) : ?> - - post_type, 'trackbacks' ) ) : ?> - - -
    - - - -
    - post_type, 'comments' ) ) : ?> - - post_type, 'trackbacks' ) ) : ?> - - -
    - - - -
    - - -post_type && $can_publish && current_user_can( $post_type_object->cap->edit_others_posts ) ) : ?> - - - - - - - - - - - - - -
    - -
    - - $column_display_name ) { - if ( isset( $core_columns[$column_name] ) ) - continue; - do_action( $bulk ? 'bulk_edit_custom_box' : 'quick_edit_custom_box', $column_name, $screen->post_type ); - } -?> -

    - - - - - - - - - -
    -

    -
    -post_type); - if ( ! current_user_can($post_type_object->cap->edit_post, $post->ID) ) - return; - - $title = esc_attr( get_the_title( $post->ID ) ); - - echo ' -'; -} - -/** - * {@internal Missing Short Description}} - * - * @since unknown - * - * @param unknown_type $posts - */ -function post_rows( $posts = array() ) { - global $wp_query, $post, $mode; - - add_filter('the_title','esc_html'); - - // Create array of post IDs. - $post_ids = array(); - - if ( empty($posts) ) - $posts = &$wp_query->posts; - - foreach ( $posts as $a_post ) - $post_ids[] = $a_post->ID; - - $comment_pending_count = get_pending_comments_num($post_ids); - - foreach ( $posts as $post ) { - if ( empty($comment_pending_count[$post->ID]) ) - $comment_pending_count[$post->ID] = 0; - - _post_row($post, $comment_pending_count[$post->ID], $mode); - } -} - -/** - * {@internal Missing Short Description}} - * - * @since unknown - * - * @param unknown_type $a_post - * @param unknown_type $pending_comments - * @param unknown_type $mode - */ -function _post_row($a_post, $pending_comments, $mode) { - global $post, $current_user, $current_screen; - static $rowclass; - - $global_post = $post; - $post = $a_post; - setup_postdata($post); - - $rowclass = 'alternate' == $rowclass ? '' : 'alternate'; - $post_owner = ( $current_user->ID == $post->post_author ? 'self' : 'other' ); - $edit_link = get_edit_post_link( $post->ID ); - $title = _draft_or_post_title(); - $post_type_object = get_post_type_object($post->post_type); -?> - post_status ); ?> iedit' valign="top"> -$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': - ?> - cap->edit_post, $post->ID ) ) { ?> - post_date && 'date' == $column_name ) { - $t_time = $h_time = __('Unpublished'); - $time_diff = 0; - } else { - $t_time = get_the_time(__('Y/m/d g:i:s A')); - $m_time = $post->post_date; - $time = get_post_time('G', true, $post); - - $time_diff = time() - $time; - - if ( $time_diff > 0 && $time_diff < 24*60*60 ) - $h_time = sprintf( __('%s ago'), human_time_diff( $time ) ); - else - $h_time = mysql2date(__('Y/m/d'), $m_time); - } - - echo ''; - if ( 'excerpt' == $mode ) - echo apply_filters('post_date_column_time', $t_time, $post, $column_name, $mode); - else - echo '' . apply_filters('post_date_column_time', $h_time, $post, $column_name, $mode) . ''; - echo '
    '; - if ( 'publish' == $post->post_status ) { - _e('Published'); - } elseif ( 'future' == $post->post_status ) { - if ( $time_diff > 0 ) - echo '' . __('Missed schedule') . ''; - else - _e('Scheduled'); - } else { - _e('Last Modified'); - } - echo ''; - break; - - case 'title': - $attributes = 'class="post-title column-title"' . $style; - ?> - >cap->edit_post, $post->ID) && $post->post_status != 'trash' ) { ?> - cap->edit_post, $post->ID) && 'trash' != $post->post_status ) { - $actions['edit'] = '' . __('Edit') . ''; - $actions['inline hide-if-no-js'] = '' . __('Quick Edit') . ''; - } - if ( current_user_can($post_type_object->cap->delete_post, $post->ID) ) { - if ( 'trash' == $post->post_status ) - $actions['untrash'] = "ID) ), 'untrash-' . $post->post_type . '_' . $post->ID ) . "'>" . __('Restore') . ""; - elseif ( EMPTY_TRASH_DAYS ) - $actions['trash'] = "" . __('Trash') . ""; - if ( 'trash' == $post->post_status || !EMPTY_TRASH_DAYS ) - $actions['delete'] = "" . __('Delete Permanently') . ""; - } - if ( in_array($post->post_status, array('pending', 'draft')) ) { - if ( current_user_can($post_type_object->cap->edit_post, $post->ID) ) - $actions['view'] = '' . __('Preview') . ''; - } elseif ( 'trash' != $post->post_status ) { - $actions['view'] = '' . __('View') . ''; - } - $actions = apply_filters('post_row_actions', $actions, $post); - $action_count = count($actions); - $i = 0; - echo '
    '; - foreach ( $actions as $action => $link ) { - ++$i; - ( $i == $action_count ) ? $sep = '' : $sep = ' | '; - echo "$link$sep"; - } - echo '
    '; - - get_inline_data($post); - ?> - - - >slug'> " . esc_html(sanitize_term_field('name', $c->name, $c->term_id, 'category', 'display')) . ""; - echo join( ', ', $out ); - } else { - _e('Uncategorized'); - } - ?> - - >ID); - if ( !empty( $tags ) ) { - $out = array(); - foreach ( $tags as $c ) - $out[] = " " . esc_html(sanitize_term_field('name', $c->name, $c->term_id, 'post_tag', 'display')) . ""; - echo join( ', ', $out ); - } else { - _e('No Tags'); - } - ?> - - >
    - '; - comments_number("" . /* translators: comment count link */ _x('0', 'comment count') . '', "" . /* translators: comment count link */ _x('1', 'comment count') . '', "" . /* translators: comment count link: % will be substituted by comment count */ _x('%', 'comment count') . ''); - if ( $pending_comments ) - echo ''; - ?> -
    - - > - - - - cap->edit_post, $post->ID) ) { echo "" . __('Edit') . ""; } ?> - - cap->delete_post, $post->ID) ) { echo "ID) . "' class='delete'>" . __('Delete') . ""; } ?> - - >ID); ?> - - -post_parent > 0 ) { - //sent level 0 by accident, by default, or because we don't know the actual level - $find_main_page = (int)$page->post_parent; - while ( $find_main_page > 0 ) { - $parent = get_page($find_main_page); - - if ( is_null($parent) ) - break; - - $level++; - $find_main_page = (int)$parent->post_parent; - - if ( !isset($parent_name) ) - $parent_name = $parent->post_title; - } - } - - $page->post_title = esc_html( $page->post_title ); - $pad = str_repeat( '— ', $level ); - $id = (int) $page->ID; - $rowclass = 'alternate' == $rowclass ? '' : 'alternate'; - $posts_columns = get_column_headers( $current_screen ); - $hidden = get_hidden_columns( $current_screen ); - $title = _draft_or_post_title(); - $post_type = $page->post_type; - $post_type_object = get_post_type_object($post_type); -?> - - $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': - ?> - cap->edit_post, $page->ID ) ) { ?> - post_date && 'date' == $column_name ) { - $t_time = $h_time = __('Unpublished'); - $time_diff = 0; - } else { - $t_time = get_the_time(__('Y/m/d g:i:s A')); - $m_time = $page->post_date; - $time = get_post_time('G', true); - - $time_diff = time() - $time; - - if ( $time_diff > 0 && $time_diff < 24*60*60 ) - $h_time = sprintf( __('%s ago'), human_time_diff( $time ) ); - else - $h_time = mysql2date(__('Y/m/d'), $m_time); - } - echo ''; - echo '' . apply_filters('post_date_column_time', $h_time, $page, $column_name, '') . ''; - echo '
    '; - if ( 'publish' == $page->post_status ) { - _e('Published'); - } elseif ( 'future' == $page->post_status ) { - if ( $time_diff > 0 ) - echo '' . __('Missed schedule') . ''; - else - _e('Scheduled'); - } else { - _e('Last Modified'); - } - echo ''; - break; - case 'title': - $attributes = 'class="post-title page-title column-title"' . $style; - $edit_link = get_edit_post_link( $page->ID ); - ?> - >cap->edit_post, $page->ID) && $post->post_status != 'trash' ) { ?>labels->parent_item_colon . ' ' . esc_html($parent_name) : ''; ?> - cap->edit_post, $page->ID) && $post->post_status != 'trash' ) { - $actions['edit'] = '' . __('Edit') . ''; - $actions['inline'] = '' . __('Quick Edit') . ''; - } - if ( current_user_can($post_type_object->cap->delete_post, $page->ID) ) { - if ( $post->post_status == 'trash' ) - $actions['untrash'] = "post_type . '_' . $page->ID) . "'>" . __('Restore') . ""; - elseif ( EMPTY_TRASH_DAYS ) - $actions['trash'] = "" . __('Trash') . ""; - if ( $post->post_status == 'trash' || !EMPTY_TRASH_DAYS ) - $actions['delete'] = "post_type . '_' . $page->ID) . "'>" . __('Delete Permanently') . ""; - } - if ( in_array($post->post_status, array('pending', 'draft')) ) { - if ( current_user_can($post_type_object->cap->edit_post, $page->ID) ) - $actions['view'] = '' . __('Preview') . ''; - } elseif ( $post->post_status != 'trash' ) { - $actions['view'] = '' . __('View') . ''; - } - $actions = apply_filters('page_row_actions', $actions, $page); - $action_count = count($actions); - - $i = 0; - echo '
    '; - foreach ( $actions as $action => $link ) { - ++$i; - ( $i == $action_count ) ? $sep = '' : $sep = ' | '; - echo "$link$sep"; - } - echo '
    '; - - get_inline_data($post); - echo ''; - break; - - case 'comments': - ?> - >
    - ID ); - $pending_phrase = sprintf( __('%s pending'), number_format( $left ) ); - if ( $left ) - echo ''; - comments_number("" . /* translators: comment count link */ _x('0', 'comment count') . '', "" . /* translators: comment count link */ _x('1', 'comment count') . '', "" . /* translators: comment count link: % will be substituted by comment count */ _x('%', 'comment count') . ''); - if ( $left ) - echo ''; - ?> -
    - - > - - > - - - - - 'menu_order') ); - - if ( ! $pages ) - return false; - } - - /* - * arrange pages into two parts: top level pages and children_pages - * children_pages is two dimensional array, eg. - * children_pages[10][] contains all sub-pages whose parent is 10. - * It only takes O(N) to arrange this and it takes O(1) for subsequent lookup operations - * If searching, ignore hierarchy and treat everything as top level - */ - if ( empty($_GET['s']) ) { - - $top_level_pages = array(); - $children_pages = array(); - - foreach ( $pages as $page ) { - - // catch and repair bad pages - if ( $page->post_parent == $page->ID ) { - $page->post_parent = 0; - $wpdb->update($wpdb->posts, array('post_parent' => 0), array('ID' => $page->ID)); - clean_page_cache( $page->ID ); - } - - if ( 0 == $page->post_parent ) - $top_level_pages[] = $page; - else - $children_pages[ $page->post_parent ][] = $page; - } - - $pages = &$top_level_pages; - } - - $count = 0; - $start = ($pagenum - 1) * $per_page; - $end = $start + $per_page; - - foreach ( $pages as $page ) { - if ( $count >= $end ) - break; - - if ( $count >= $start ) - echo "\t" . display_page_row( $page, $level ); - - $count++; - - if ( isset($children_pages) ) - _page_rows( $children_pages, $count, $page->ID, $level + 1, $pagenum, $per_page ); - } - - // if it is the last pagenum and there are orphaned pages, display them with paging as well - if ( isset($children_pages) && $count < $end ){ - foreach( $children_pages as $orphans ){ - foreach ( $orphans as $op ) { - if ( $count >= $end ) - break; - if ( $count >= $start ) - echo "\t" . display_page_row( $op, 0 ); - $count++; - } - } - } -} - -/** - * Given a top level page ID, display the nested hierarchy of sub-pages - * together with paging support - * - * @since unknown - * - * @param unknown_type $children_pages - * @param unknown_type $count - * @param unknown_type $parent - * @param unknown_type $level - * @param unknown_type $pagenum - * @param unknown_type $per_page - */ -function _page_rows( &$children_pages, &$count, $parent, $level, $pagenum, $per_page ) { + $args = array('taxonomy' => $taxonomy); - if ( ! isset( $children_pages[$parent] ) ) - return; + $tax = get_taxonomy($taxonomy); + $args['disabled'] = !current_user_can($tax->cap->assign_terms); - $start = ($pagenum - 1) * $per_page; - $end = $start + $per_page; + if ( is_array( $selected_cats ) ) + $args['selected_cats'] = $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(); - foreach ( $children_pages[$parent] as $page ) { + if ( is_array( $popular_cats ) ) + $args['popular_cats'] = $popular_cats; + else + $args['popular_cats'] = get_terms( $taxonomy, array( 'fields' => 'ids', 'orderby' => 'count', 'order' => 'DESC', 'number' => 10, 'hierarchical' => false ) ); - if ( $count >= $end ) - break; + if ( $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 = (array) get_terms($taxonomy, array('get' => 'all')); + } - // If the page starts in a subtree, print the parents. - if ( $count == $start && $page->post_parent > 0 ) { - $my_parents = array(); - $my_parent = $page->post_parent; - while ( $my_parent) { - $my_parent = get_post($my_parent); - $my_parents[] = $my_parent; - if ( !$my_parent->post_parent ) - break; - $my_parent = $my_parent->post_parent; - } - $num_parents = count($my_parents); - while( $my_parent = array_pop($my_parents) ) { - echo "\t" . display_page_row( $my_parent, $level - $num_parents ); - $num_parents--; + if ( $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 ); + + foreach( $keys as $k ) { + if ( in_array( $categories[$k]->term_id, $args['selected_cats'] ) ) { + $checked_categories[] = $categories[$k]; + unset( $categories[$k] ); } } - if ( $count >= $start ) - echo "\t" . display_page_row( $page, $level ); - - $count++; - - _page_rows( $children_pages, $count, $page->ID, $level + 1, $pagenum, $per_page ); + // Put checked cats on top + echo call_user_func_array(array(&$walker, 'walk'), array($checked_categories, 0, $args)); } - - unset( $children_pages[$parent] ); //required in order to keep track of orphans + // Then the rest of them + echo call_user_func_array(array(&$walker, 'walk'), array($categories, 0, $args)); } /** - * Generate HTML for a single row on the users.php admin panel. + * Retrieve a list of the most popular terms from the specified taxonomy. * - * @since 2.1.0 + * 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. * - * @param object $user_object - * @param string $style Optional. Attributes added to the TR element. Must be sanitized. - * @param string $role Key for the $wp_roles array. - * @param int $numposts Optional. Post count to display for this user. Defaults to zero, as in, a new user has made zero posts. - * @return string + * @since 2.5.0 + * + * @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 user_row( $user_object, $style = '', $role = '', $numposts = 0 ) { - global $wp_roles; - - $current_user = wp_get_current_user(); - - if ( !( is_object( $user_object) && is_a( $user_object, 'WP_User' ) ) ) - $user_object = new WP_User( (int) $user_object ); - $user_object = sanitize_user_object($user_object, 'display'); - $email = $user_object->user_email; - $url = $user_object->user_url; - $short_url = str_replace( 'http://', '', $url ); - $short_url = str_replace( 'www.', '', $short_url ); - if ('/' == substr( $short_url, -1 )) - $short_url = substr( $short_url, 0, -1 ); - if ( strlen( $short_url ) > 35 ) - $short_url = substr( $short_url, 0, 32 ).'...'; - $checkbox = ''; - // Check if the user for this row is editable - if ( current_user_can( 'list_users' ) ) { - // Set up the user editing link - // TODO: make profile/user-edit determination a separate function - if ($current_user->ID == $user_object->ID) { - $edit_link = 'profile.php'; - } else { - $edit_link = esc_url( add_query_arg( 'wp_http_referer', urlencode( esc_url( stripslashes( $_SERVER['REQUEST_URI'] ) ) ), "user-edit.php?user_id=$user_object->ID" ) ); - } - $edit = "$user_object->user_login
    "; +function wp_popular_terms_checklist( $taxonomy, $default = 0, $number = 10, $echo = true ) { + $post = get_post(); - // Set up the hover actions for this user - $actions = array(); + if ( $post && $post->ID ) + $checked_terms = wp_get_object_terms($post->ID, $taxonomy, array('fields'=>'ids')); + else + $checked_terms = array(); - if ( current_user_can('edit_user', $user_object->ID) ) { - $edit = "$user_object->user_login
    "; - $actions['edit'] = '' . __('Edit') . ''; - } else { - $edit = "$user_object->user_login
    "; - } + $terms = get_terms( $taxonomy, array( 'orderby' => 'count', 'order' => 'DESC', 'number' => $number, 'hierarchical' => false ) ); - if ( !is_multisite() && $current_user->ID != $user_object->ID && current_user_can('delete_user', $user_object->ID) ) - $actions['delete'] = "" . __('Delete') . ""; - if ( is_multisite() && $current_user->ID != $user_object->ID && current_user_can('remove_user', $user_object->ID) ) - $actions['remove'] = "" . __('Remove') . ""; - $actions = apply_filters('user_row_actions', $actions, $user_object); - $action_count = count($actions); - $i = 0; - $edit .= '
    '; - foreach ( $actions as $action => $link ) { - ++$i; - ( $i == $action_count ) ? $sep = '' : $sep = ' | '; - $edit .= "$link$sep"; - } - $edit .= '
    '; + $tax = get_taxonomy($taxonomy); + if ( ! current_user_can($tax->cap->assign_terms) ) + $disabled = 'disabled="disabled"'; + else + $disabled = ''; - // Set up the checkbox (because the user is editable, otherwise its empty) - $checkbox = ""; + $popular_ids = array(); + foreach ( (array) $terms as $term ) { + $popular_ids[] = $term->term_id; + if ( !$echo ) // hack for AJAX use + continue; + $id = "popular-$taxonomy-$term->term_id"; + $checked = in_array( $term->term_id, $checked_terms ) ? 'checked="checked"' : ''; + ?> - } else { - $edit = '' . $user_object->user_login . ''; - } - $role_name = isset($wp_roles->role_names[$role]) ? translate_user_role($wp_roles->role_names[$role] ) : __('None'); - $r = ""; - $columns = get_column_headers('users'); - $hidden = get_hidden_columns('users'); - $avatar = get_avatar( $user_object->ID, 32 ); - 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': - $r .= "$checkbox"; - break; - case 'username': - $r .= "$avatar $edit"; - break; - case 'name': - $r .= "$user_object->first_name $user_object->last_name"; - break; - case 'email': - $r .= "$email"; - break; - case 'role': - $r .= "$role_name"; - break; - case 'posts': - $attributes = 'class="posts column-posts num"' . $style; - $r .= ""; - if ( $numposts > 0 ) { - $r .= ""; - $r .= $numposts; - $r .= ''; - } else { - $r .= 0; - } - $r .= ""; - break; - default: - $r .= ""; - $r .= apply_filters('manage_users_custom_column', '', $column_name, $user_object->ID); - $r .= ""; - } + '; - - return $r; + return $popular_ids; } /** * {@internal Missing Short Description}} * - * @since unknown + * @since 2.5.1 * - * @param string $status Comment status (approved, spam, trash, etc) - * @param string $s Term to search for - * @param int $start Offset to start at for pagination - * @param int $num Maximum number of comments to return - * @param int $post Post ID or 0 to return all comments - * @param string $type Comment type (comment, trackback, pingback, etc) - * @return array [0] contains the comments and [1] contains the total number of comments that match (ignoring $start and $num) + * @param unknown_type $link_id */ -function _wp_get_comment_list( $status = '', $s = false, $start, $num, $post = 0, $type = '' ) { - global $wpdb; +function wp_link_category_checklist( $link_id = 0 ) { + $default = 1; - $start = abs( (int) $start ); - $num = (int) $num; - $post = (int) $post; - $count = wp_count_comments(); - $index = ''; - - if ( 'moderated' == $status ) { - $approved = "c.comment_approved = '0'"; - $total = $count->moderated; - } elseif ( 'approved' == $status ) { - $approved = "c.comment_approved = '1'"; - $total = $count->approved; - } elseif ( 'spam' == $status ) { - $approved = "c.comment_approved = 'spam'"; - $total = $count->spam; - } elseif ( 'trash' == $status ) { - $approved = "c.comment_approved = 'trash'"; - $total = $count->trash; + if ( $link_id ) { + $checked_categories = wp_get_link_cats( $link_id ); + // No selected categories, strange + if ( ! count( $checked_categories ) ) + $checked_categories[] = $default; } else { - $approved = "( c.comment_approved = '0' OR c.comment_approved = '1' )"; - $total = $count->moderated + $count->approved; - $index = 'USE INDEX (c.comment_date_gmt)'; + $checked_categories[] = $default; } - if ( $post ) { - $total = ''; - $post = " AND c.comment_post_ID = '$post'"; - } else { - $post = ''; - } + $categories = get_terms( 'link_category', array( 'orderby' => 'name', 'hide_empty' => 0 ) ); - $orderby = "ORDER BY c.comment_date_gmt DESC LIMIT $start, $num"; + if ( empty( $categories ) ) + return; - if ( 'comment' == $type ) - $typesql = "AND c.comment_type = ''"; - elseif ( 'pings' == $type ) - $typesql = "AND ( c.comment_type = 'pingback' OR c.comment_type = 'trackback' )"; - elseif ( 'all' == $type ) - $typesql = ''; - elseif ( !empty($type) ) - $typesql = $wpdb->prepare("AND c.comment_type = %s", $type); - else - $typesql = ''; - - if ( !empty($type) ) - $total = ''; - - $query = "FROM $wpdb->comments c LEFT JOIN $wpdb->posts p ON c.comment_post_ID = p.ID WHERE p.post_status != 'trash' "; - if ( $s ) { - $total = ''; - $s = $wpdb->escape($s); - $query .= "AND - (c.comment_author LIKE '%$s%' OR - c.comment_author_email LIKE '%$s%' OR - c.comment_author_url LIKE ('%$s%') OR - c.comment_author_IP LIKE ('%$s%') OR - c.comment_content LIKE ('%$s%') ) AND - $approved - $typesql"; - } else { - $query .= "AND $approved $post $typesql"; + 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 ) ? ' checked="checked"' : ''; + echo '"; } - - $comments = $wpdb->get_results("SELECT * $query $orderby"); - if ( '' === $total ) - $total = $wpdb->get_var("SELECT COUNT(c.comment_ID) $query"); - - update_comment_cache($comments); - - return array($comments, $total); } +// 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 $comment_id - * @param unknown_type $mode - * @param unknown_type $comment_status - * @param unknown_type $checkbox + * @param unknown_type $post */ -function _wp_comment_row( $comment_id, $mode, $comment_status, $checkbox = true, $from_ajax = false ) { - global $comment, $post, $_comment_pending_count; - $comment = get_comment( $comment_id ); - $post = get_post($comment->comment_post_ID); - $the_comment_status = wp_get_comment_status($comment->comment_ID); +function get_inline_data($post) { $post_type_object = get_post_type_object($post->post_type); - $user_can = current_user_can($post_type_object->cap->edit_post, $post->ID); - - $comment_url = esc_url(get_comment_link($comment->comment_ID)); - $author_url = get_comment_author_url(); - if ( 'http://' == $author_url ) - $author_url = ''; - $author_url_display = preg_replace('|http://(www\.)?|i', '', $author_url); - if ( strlen($author_url_display) > 50 ) - $author_url_display = substr($author_url_display, 0, 49) . '...'; - - $ptime = date('G', strtotime( $comment->comment_date ) ); - if ( ( abs(time() - $ptime) ) < 86400 ) - $ptime = sprintf( __('%s ago'), human_time_diff( $ptime ) ); - else - $ptime = mysql2date(__('Y/m/d \a\t g:i A'), $comment->comment_date ); - - if ( $user_can ) { - $del_nonce = esc_html( '_wpnonce=' . wp_create_nonce( "delete-comment_$comment->comment_ID" ) ); - $approve_nonce = esc_html( '_wpnonce=' . wp_create_nonce( "approve-comment_$comment->comment_ID" ) ); - - $approve_url = esc_url( "comment.php?action=approvecomment&p=$post->ID&c=$comment->comment_ID&$approve_nonce" ); - $unapprove_url = esc_url( "comment.php?action=unapprovecomment&p=$post->ID&c=$comment->comment_ID&$approve_nonce" ); - $spam_url = esc_url( "comment.php?action=spamcomment&p=$post->ID&c=$comment->comment_ID&$del_nonce" ); - $unspam_url = esc_url( "comment.php?action=unspamcomment&p=$post->ID&c=$comment->comment_ID&$del_nonce" ); - $trash_url = esc_url( "comment.php?action=trashcomment&p=$post->ID&c=$comment->comment_ID&$del_nonce" ); - $untrash_url = esc_url( "comment.php?action=untrashcomment&p=$post->ID&c=$comment->comment_ID&$del_nonce" ); - $delete_url = esc_url( "comment.php?action=deletecomment&p=$post->ID&c=$comment->comment_ID&$del_nonce" ); - } - - echo ""; - $columns = get_column_headers('edit-comments'); - $hidden = get_hidden_columns('edit-comments'); - 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': - if ( !$checkbox ) break; - echo ''; - if ( $user_can ) echo ""; - echo ''; - break; - case 'comment': - echo ""; - echo '
    '; - /* translators: 2: comment date, 3: comment time */ - printf( __( '%2$s at %3$s' ), $comment_url, - /* translators: comment date format. See http://php.net/date */ get_comment_date( __('Y/m/d') ), - /* translators: comment time format. See http://php.net/date */ get_comment_date( get_option( 'time_format' ) ) ); - - if ( $comment->comment_parent ) { - $parent = get_comment( $comment->comment_parent ); - $parent_link = esc_url( get_comment_link( $comment->comment_parent ) ); - $name = apply_filters( 'get_comment_author', $parent->comment_author ); // there's no API function for this - printf( ' | '.__( 'In reply to %2$s.' ), $parent_link, $name ); - } + if ( ! current_user_can($post_type_object->cap->edit_post, $post->ID) ) + return; - echo '
    '; - comment_text(); - if ( $user_can ) { ?> - - post_title ) ); - if ( $user_can ) { - // preorder it: Approve | Reply | Quick Edit | Edit | Spam | Trash - $actions = array( - 'approve' => '', 'unapprove' => '', - 'reply' => '', - 'quickedit' => '', - 'edit' => '', - 'spam' => '', 'unspam' => '', - 'trash' => '', 'untrash' => '', 'delete' => '' - ); - - if ( $comment_status && 'all' != $comment_status ) { // not looking at all comments - if ( 'approved' == $the_comment_status ) - $actions['unapprove'] = "" . __( 'Unapprove' ) . ''; - else if ( 'unapproved' == $the_comment_status ) - $actions['approve'] = "" . __( 'Approve' ) . ''; - } else { - $actions['approve'] = "" . __( 'Approve' ) . ''; - $actions['unapprove'] = "" . __( 'Unapprove' ) . ''; - } + echo ' +'; } /** * {@internal Missing Short Description}} * - * @since unknown + * @since 2.7.0 * * @param unknown_type $position * @param unknown_type $checkbox * @param unknown_type $mode */ 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) ); @@ -2235,50 +314,58 @@ function wp_comment_reply($position = '1', $checkbox = false, $mode = 'single', 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'); + } ?>
    -'; if ( !empty($field['args']['label_for']) ) - echo ''; + echo ''; else echo ''; echo '
    ' . $field['title'] . ''; @@ -3112,6 +1136,8 @@ function do_settings_fields($page, $section) { * Additional calls to settings_errors() can be used to show errors even when the settings * page is first accessed. * + * @since 3.0.0 + * * @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 @@ -3140,7 +1166,7 @@ function add_settings_error( $setting, $code, $message, $type = 'error' ) { * Checks the $wp_settings_errors array for any errors declared during the current * pageload and returns them. * - * If changes were just submitted ($_GET['updated']) and settings errors were saved + * 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. * @@ -3148,40 +1174,44 @@ function add_settings_error( $setting, $code, $message, $type = 'error' ) { * 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 ) { +function get_settings_errors( $setting = '', $sanitize = false ) { global $wp_settings_errors; // If $sanitize is true, manually re-run the sanitizisation 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)); + sanitize_option( $setting, get_option( $setting ) ); // If settings were passed back from options.php then use them - // Ignore transients if $sanitize is true, we dont' want the old values anyway - if ( isset($_GET['updated']) && $_GET['updated'] && get_transient('settings_errors') ) { - $settings_errors = get_transient('settings_errors'); - delete_transient('settings_errors'); - // Otherwise check global in case validation has been run on this pageload - } elseif ( count( $wp_settings_errors ) ) { - $settings_errors = $wp_settings_errors; - } else { - return; + 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 ) { - foreach ( (array) $settings_errors as $key => $details ) - if ( $setting != $details['setting'] ) - unset( $settings_errors[$key] ); + $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 $settings_errors; + + return $wp_settings_errors; } /** @@ -3200,18 +1230,21 @@ function get_settings_errors( $setting = '', $sanitize = FALSE ) { * 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. - * @return */ -function settings_errors ( $setting = '', $sanitize = FALSE, $hide_on_update = FALSE ) { +function settings_errors( $setting = '', $sanitize = false, $hide_on_update = false ) { - if ($hide_on_update AND $_GET['updated']) return; + if ( $hide_on_update && ! empty( $_GET['settings-updated'] ) ) + return; $settings_errors = get_settings_errors( $setting, $sanitize ); - if ( !is_array($settings_errors) ) return; + if ( empty( $settings_errors ) ) + return; $output = ''; foreach ( $settings_errors as $key => $details ) { @@ -3227,35 +1260,7 @@ function settings_errors ( $setting = '', $sanitize = FALSE, $hide_on_update = F /** * {@internal Missing Short Description}} * - * @since unknown - * - * @param unknown_type $page - */ -function manage_columns_prefs( $page ) { - $columns = get_column_headers( $page ); - $hidden = get_hidden_columns( $page ); - $special = array('_title', 'cb', 'comment', 'media', 'name', 'title', 'username'); - - foreach ( $columns as $column => $title ) { - // Can't hide these or they are special - if ( in_array( $column, $special ) ) - continue; - if ( empty( $title ) ) - continue; - - if ( 'comments' == $column ) - $title = __( 'Comments' ); - $id = "$column-hide"; - echo '\n"; - } -} - -/** - * {@internal Missing Short Description}} - * - * @since unknown + * @since 2.7.0 * * @param unknown_type $found_action */ @@ -3273,24 +1278,14 @@ function find_posts_div($found_action = '') { -
    - - true), 'objects' ); - foreach ( $post_types as $post ) { - if ( 'attachment' == $post->name ) - continue; - ?> - name, 'post'); ?> /> - - + +
    - - + +
    post_password ) ) echo esc_attr( $post->post_password ); -} - -/** - * {@internal Missing Short Description}} - * - * @since unknown - */ -function favorite_actions( $screen = null ) { - $default_action = false; - - if ( is_string($screen) ) - $screen = convert_to_screen($screen); - - 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 ) { - 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; - } - } - - $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') - ); - - $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); - - $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 '

    '; - 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 ); } /** @@ -3415,13 +1313,13 @@ function favorite_actions( $screen = null ) { * returned. * * @since 2.7.0 - * @param int $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; } @@ -3436,7 +1334,7 @@ function _draft_or_post_title($post_id = 0) { * */ function _admin_search_query() { - echo isset($_GET['s']) ? esc_attr( stripslashes( $_GET['s'] ) ) : ''; + echo isset($_REQUEST['s']) ? esc_attr( stripslashes( $_REQUEST['s'] ) ) : ''; } /** @@ -3448,33 +1346,50 @@ function _admin_search_query() { * */ function iframe_header( $title = '', $limit_styles = false ) { -global $hook_suffix; -?> - > - - + show_admin_bar( false ); + global $hook_suffix, $current_user, $admin_body_class, $wp_locale; + $admin_body_class = preg_replace('/[^a-z0-9_-]+/i', '-', $hook_suffix); + + $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'); ?> - class="no-js "> + class="wp-admin wp-core-ui no-js iframe "> + ' . __( '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' ), + ) ); + } + + /** + * 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' ); + } +} + +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 ); +}