true ) ) ) )
$post_type = $_REQUEST['post_type'];
else
wp_die( __( 'Invalid post type' ) );
$_REQUEST['post_type'] = $post_type;
$post_type_object = get_post_type_object( $post_type );
if ( !current_user_can( $post_type_object->cap->edit_posts ) )
wp_die( __( 'Cheatin’ uh?' ) );
parent::WP_List_Table( array(
'screen' => $current_screen,
'plural' => 'posts',
) );
if ( 'normal' != $context )
return;
$avail_post_stati = wp_edit_posts_query();
$this->_hierarchical_display = ( $post_type_object->hierarchical && 0 === strpos( get_query_var( 'orderby' ), 'menu_order' ) );
$total_items = $this->_hierarchical_display ? $wp_query->post_count : $wp_query->found_posts;
$edit_per_page = 'edit_' . $post_type . '_per_page';
$per_page = (int) get_user_option( $edit_per_page );
if ( empty( $per_page ) || $per_page < 1 )
$per_page = 20;
$per_page = apply_filters( $edit_per_page, $per_page );
$per_page = apply_filters( 'edit_posts_per_page', $per_page, $post_type );
if ( $this->_hierarchical_display )
$total_pages = ceil( $total_items / $per_page );
else
$total_pages = $wp_query->max_num_pages;
$mode = empty( $_REQUEST['mode'] ) ? 'list' : $_REQUEST['mode'];
$this->is_trash = isset( $_REQUEST['post_status'] ) && $_REQUEST['post_status'] == 'trash';
$this->set_pagination_args( array(
'total_items' => $total_items,
'total_pages' => $total_pages,
'per_page' => $per_page
) );
}
function has_items() {
return have_posts();
}
function no_items() {
global $post_type_object;
if ( isset( $_REQUEST['post_status'] ) && 'trash' == $_REQUEST['post_status'] )
echo $post_type_object->labels->not_found_in_trash;
else
echo $post_type_object->labels->not_found;
}
function get_bulk_actions() {
$actions = array();
if ( $this->is_trash )
$actions['untrash'] = __( 'Restore' );
else
$actions['edit'] = __( 'Edit' );
if ( $this->is_trash || !EMPTY_TRASH_DAYS )
$actions['delete'] = __( 'Delete Permanently' );
else
$actions['trash'] = __( 'Move to Trash' );
return $actions;
}
function extra_tablenav( $which ) {
global $post_type, $post_type_object, $cat;
if ( 'top' == $which && !is_singular() ) {
?>
months_dropdown( $post_type );
if ( is_object_in_taxonomy( $post_type, 'category' ) ) {
$dropdown_options = array(
'show_option_all' => __( 'View all categories' ),
'hide_empty' => 0,
'hierarchical' => 1,
'show_count' => 0,
'orderby' => 'name',
'selected' => $cat
);
wp_dropdown_categories( $dropdown_options );
}
do_action( 'restrict_manage_posts' );
?>
is_trash && current_user_can( $post_type_object->cap->edit_others_posts ) ) {
?>
hierarchical )
$this->view_switcher( $mode );
}
function get_table_classes() {
global $post_type_object;
return array( 'widefat', 'fixed', $post_type_object->hierarchical ? 'pages' : 'posts' );
}
function get_columns() {
$screen = $this->_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'] = ' ';
$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;
}
function get_sortable_columns() {
return array(
'title' => 'title',
'author' => 'author',
'parent' => 'parent',
'comments' => 'comment_count',
'date' => 'date',
);
}
function display_rows( $posts = array() ) {
global $wp_query, $post_type_object, $per_page;
if ( empty( $posts ) )
$posts = $wp_query->posts;
if ( $this->_hierarchical_display ) {
$this->_display_rows_hierarchical( $posts, $this->get_pagenum(), $per_page );
} else {
$this->_display_rows( $posts );
}
}
function _display_rows( $posts ) {
global $post, $mode;
add_filter( 'the_title','esc_html' );
// Create array of post IDs.
$post_ids = array();
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;
$this->_single_row( $post, $comment_pending_count[$post->ID], $mode );
}
}
function _display_rows_hierarchical( $pages, $pagenum = 1, $per_page = 20 ) {
global $wpdb;
$level = 0;
if ( ! $pages ) {
$pages = get_pages( array( 'sort_column' => '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( $_REQUEST['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" . $this->_single_row_hierarchical( $page, $level );
$count++;
if ( isset( $children_pages ) )
$this->_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" . $this->_single_row_hierarchical( $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 ) {
if ( ! isset( $children_pages[$parent] ) )
return;
$start = ( $pagenum - 1 ) * $per_page;
$end = $start + $per_page;
foreach ( $children_pages[$parent] as $page ) {
if ( $count >= $end )
break;
// 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" . $this->_single_row_hierarchical( $my_parent, $level - $num_parents );
$num_parents--;
}
}
if ( $count >= $start )
echo "\t" . $this->_single_row_hierarchical( $page, $level );
$count++;
$this->_page_rows( $children_pages, $count, $page->ID, $level + 1, $pagenum, $per_page );
}
unset( $children_pages[$parent] ); //required in order to keep track of orphans
}
/**
* display one row if the page doesn't have any children
* otherwise, display the row and its children in subsequent rows
*
* @since unknown
*
* @param unknown_type $page
* @param unknown_type $level
*/
function _single_row_hierarchical( $page, $level = 0 ) {
global $post, $current_screen;
static $rowclass;
$post = $page;
setup_postdata( $page );
if ( 0 == $level && (int) $page->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';
$title = _draft_or_post_title();
$post_type = $page->post_type;
$post_type_object = get_post_type_object( $post_type );
?>
get_column_headers();
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':
?>
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(
" ',
" ',
" '
);
if ( $left )
echo ' ';
?>
>
>
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">
get_column_headers();
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':
?>
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 );
?>
>post_type}&category_name={$c->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(
"
',
"
',
"
'
);
if ( $pending_comments )
echo '';
?>
>
cap->edit_post, $post->ID ) ) { echo "" . __( 'Edit' ) . " "; } ?>
cap->delete_post, $post->ID ) ) { echo "ID ) . "' class='delete'>" . __( 'Delete' ) . " "; } ?>
>ID ); ?>
_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;
}
list( $columns, $hidden ) = $this->get_column_headers();
$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 );
?>
get_col( "
SELECT ID FROM $wpdb->posts
WHERE post_type = 'attachment' AND post_parent > '0'
AND post_parent NOT IN (
SELECT ID FROM $wpdb->posts
WHERE post_type NOT IN ( 'attachment', '" . join( "', '", get_post_types( array( 'public' => false ) ) ) . "' )
)
" );
$_REQUEST['detached'] = 1;
}
$detached = isset( $_REQUEST['detached'] );
parent::WP_List_Table( array(
'screen' => $detached ? 'upload-detached' : 'upload',
'plural' => 'media'
) );
if ( 'normal' != $context )
return;
$q = $_REQUEST;
if ( !empty( $lost ) )
$q['post__in'] = implode( ',', $lost );
list( $post_mime_types, $avail_post_mime_types ) = wp_edit_attachments_query( $q );
$this->is_trash = isset( $_REQUEST['status'] ) && 'trash' == $_REQUEST['status'];
$this->set_pagination_args( array(
'total_items' => $wp_query->found_posts,
'total_pages' => $wp_query->max_num_pages,
'per_page' => $wp_query->query_vars['posts_per_page'],
) );
}
function get_bulk_actions() {
global $detached;
$actions = array();
$actions['delete'] = __( 'Delete Permanently' );
if ( $detached )
$actions['attach'] = __( 'Attach to a post' );
return $actions;
}
function extra_tablenav( $which ) {
global $post_type, $detached;
?>
is_trash ) {
$this->months_dropdown( $post_type );
do_action( 'restrict_manage_posts' );
?>
is_trash && current_user_can( 'edit_others_posts' ) ) { ?>
';
$posts_columns['icon'] = '';
/* translators: column name */
$posts_columns['title'] = _x( 'File', 'column name' );
$posts_columns['author'] = __( 'Author' );
//$posts_columns['tags'] = _x( 'Tags', 'column name' );
/* translators: column name */
if ( 'upload' == $this->_screen->id ) {
$posts_columns['parent'] = _x( 'Attached to', 'column name' );
$posts_columns['comments'] = ' ';
}
/* translators: column name */
$posts_columns['date'] = _x( 'Date', 'column name' );
$posts_columns = apply_filters( 'manage_media_columns', $posts_columns, 'upload' != $this->_screen->id );
return $posts_columns;
}
function get_sortable_columns() {
return array(
'title' => 'title',
'author' => 'author',
'parent' => 'parent',
'comments' => 'comment_count',
'date' => 'date',
);
}
function display_rows() {
global $detached, $post, $id;
if ( $detached ) {
$this->display_orphans();
return;
}
add_filter( 'the_title','esc_html' );
$alt = '';
while ( have_posts() ) : the_post();
if ( $this->is_trash && $post->post_status != 'trash'
|| !$this->is_trash && $post->post_status == 'trash' )
continue;
$alt = ( 'alternate' == $alt ) ? '' : 'alternate';
$post_owner = ( get_current_user_id() == $post->post_author ) ? 'self' : 'other';
$att_title = _draft_or_post_title();
?>
post_status ); ?>' valign="top">
get_column_headers();
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':
?>
ID ) ) { ?>
>ID, array( 80, 60 ), true ) ) {
if ( $this->is_trash ) {
echo $thumb;
} else {
?>
>is_trash ) echo $att_title; else { ?>
ID ), $matches ) )
echo esc_html( strtoupper( $matches[1] ) );
else
echo strtoupper( str_replace( 'image/', '', get_post_mime_type() ) );
?>
ID ) && !$this->is_trash )
$actions['edit'] = '' . __( 'Edit' ) . ' ';
if ( current_user_can( 'delete_post', $post->ID ) ) {
if ( $this->is_trash )
$actions['untrash'] = "ID ) . "'>" . __( 'Restore' ) . " ";
elseif ( EMPTY_TRASH_DAYS && MEDIA_TRASH )
$actions['trash'] = "ID ) . "'>" . __( 'Trash' ) . " ";
if ( $this->is_trash || !EMPTY_TRASH_DAYS || !MEDIA_TRASH ) {
$delete_ays = ( !$this->is_trash && !MEDIA_TRASH ) ? " onclick='return showNotice.warn();'" : '';
$actions['delete'] = "ID ) . "'>" . __( 'Delete Permanently' ) . " ";
}
}
if ( !$this->is_trash ) {
$title =_draft_or_post_title( $post->post_parent );
$actions['view'] = '' . __( 'View' ) . ' ';
}
$actions = apply_filters( 'media_row_actions', $actions, $post );
$action_count = count( $actions );
$i = 0;
echo '';
foreach ( $actions as $action => $link ) {
$sep = ( ++$i == $action_count ) ? '' : ' | ';
echo "$link$sep ";
}
echo '
';
?>
>
>slug'> " . esc_html( sanitize_term_field( 'name', $c->name, $c->term_id, 'post_tag', 'display' ) ) . "";
echo join( ', ', $out );
} else {
_e( 'No Tags' );
}
?>
>post_excerpt : ''; ?>
post_date && 'date' == $column_name ) {
$t_time = $h_time = __( 'Unpublished' );
} 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, false );
if ( ( abs( $t_diff = time() - $time ) ) < 86400 ) {
if ( $t_diff < 0 )
$h_time = sprintf( __( '%s from now' ), human_time_diff( $time ) );
else
$h_time = sprintf( __( '%s ago' ), human_time_diff( $time ) );
} else {
$h_time = mysql2date( __( 'Y/m/d' ), $m_time );
}
}
?>
>
post_parent > 0 ) {
if ( get_post( $post->post_parent ) ) {
$title =_draft_or_post_title( $post->post_parent );
}
?>
>
,
>
>
ID );
$pending_phrase = sprintf( __( '%s pending' ), number_format( $left ) );
if ( $left )
echo '
';
comments_number(
" ',
" ',
" '
);
if ( $left )
echo ' ';
?>
>
|
>
ID ) );
$edit_link = '%s ';
?>
ID ) ) { ?>
ID, array( 80, 60 ), true ) ) {
printf( $edit_link, $thumb );
} ?>
ID ), $matches ) )
echo esc_html( strtoupper( $matches[1] ) );
else
echo strtoupper( str_replace( 'image/', '', get_post_mime_type() ) );
?>
ID ) )
$actions['edit'] = '
' . __( 'Edit' ) . ' ';
if ( current_user_can( 'delete_post', $post->ID ) )
if ( EMPTY_TRASH_DAYS && MEDIA_TRASH ) {
$actions['trash'] = "
ID ) . "'>" . __( 'Trash' ) . " ";
} else {
$delete_ays = !MEDIA_TRASH ? " onclick='return showNotice.warn();'" : '';
$actions['delete'] = "
ID ) . "'>" . __( 'Delete Permanently' ) . " ";
}
$actions['view'] = '
' . __( 'View' ) . ' ';
if ( current_user_can( 'edit_post', $post->ID ) )
$actions['attach'] = '
'.__( 'Attach' ).' ';
$actions = apply_filters( 'media_row_actions', $actions, $post );
$action_count = count( $actions );
$i = 0;
foreach ( $actions as $action => $link ) {
$sep = ( ++$i == $action_count ) ? '' : ' | ';
echo "
$link$sep ";
}
?>
post_author ); echo $author->display_name; ?>
post_date && 'date' == $column_name ) {
$t_time = $h_time = __( 'Unpublished' );
} else {
$t_time = get_the_time( __( 'Y/m/d g:i:s A' ) );
$m_time = $post->post_date;
$time = get_post_time( 'G', true );
if ( ( abs( $t_diff = time() - $time ) ) < 86400 ) {
if ( $t_diff < 0 )
$h_time = sprintf( __( '%s from now' ), human_time_diff( $time ) );
else
$h_time = sprintf( __( '%s ago' ), human_time_diff( $time ) );
} else {
$h_time = mysql2date( __( 'Y/m/d' ), $m_time );
}
}
?>
$current_screen,
'plural' => 'tags',
'singular' => 'tag',
) );
if ( 'normal' != $context )
return;
wp_reset_vars( array( 'action', 'tag', 'taxonomy', 'post_type' ) );
if ( empty( $taxonomy ) )
$taxonomy = 'post_tag';
if ( !taxonomy_exists( $taxonomy ) )
wp_die( __( 'Invalid taxonomy' ) );
$tax = get_taxonomy( $taxonomy );
if ( ! current_user_can( $tax->cap->manage_terms ) )
wp_die( __( 'Cheatin’ uh?' ) );
if ( empty( $post_type ) || !in_array( $post_type, get_post_types( array( 'public' => true ) ) ) )
$post_type = 'post';
$tags_per_page = (int) get_user_option( 'edit_' . $taxonomy . '_per_page' );
if ( empty( $tags_per_page ) || $tags_per_page < 1 )
$tags_per_page = 20;
if ( 'post_tag' == $taxonomy ) {
$tags_per_page = apply_filters( 'edit_tags_per_page', $tags_per_page );
$tags_per_page = apply_filters( 'tagsperpage', $tags_per_page ); // Old filter
} elseif ( 'category' == $taxonomy ) {
$tags_per_page = apply_filters( 'edit_categories_per_page', $tags_per_page ); // Old filter
} else {
$tags_per_page = apply_filters( 'edit_' . $taxonomy . '_per_page', $tags_per_page );
}
$search = !empty( $_REQUEST['s'] ) ? trim( stripslashes( $_REQUEST['s'] ) ) : '';
$args = array(
'search' => $search,
'page' => $this->get_pagenum(),
'number' => $tags_per_page,
);
if ( !empty( $_REQUEST['orderby'] ) )
$args['orderby'] = trim( stripslashes( $_REQUEST['orderby'] ) );
if ( !empty( $_REQUEST['order'] ) )
$args['order'] = trim( stripslashes( $_REQUEST['order'] ) );
$this->callback_args = $args;
$this->set_pagination_args( array(
'total_items' => wp_count_terms( $taxonomy, compact( 'search' ) ),
'per_page' => $tags_per_page,
) );
}
function get_bulk_actions() {
$actions = array();
$actions['delete'] = __( 'Delete' );
return $actions;
}
function get_columns() {
global $taxonomy;
$columns = array(
'cb' => ' ',
'name' => __( 'Name' ),
'description' => __( 'Description' ),
'slug' => __( 'Slug' ),
);
if ( 'link_category' == $taxonomy )
$columns['links'] = __( 'Links' );
else
$columns['posts'] = __( 'Posts' );
return $columns;
}
function get_sortable_columns() {
return array(
'name' => 'name',
'description' => 'description',
'slug' => 'slug',
'posts' => 'count',
'links' => 'count'
);
}
function display_rows() {
global $taxonomy;
$args = wp_parse_args( $this->callback_args, array(
'page' => 1,
'number' => 20,
'search' => '',
'hide_empty' => 0
) );
extract( $args, EXTR_SKIP );
$args['offset'] = $offset = ( $page - 1 ) * $number;
// convert it to table rows
$out = '';
$count = 0;
if ( is_taxonomy_hierarchical( $taxonomy ) && !isset( $orderby ) ) {
// We'll need the full set of terms then.
$args['number'] = $args['offset'] = 0;
$terms = get_terms( $taxonomy, $args );
if ( !empty( $search ) ) // 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 .= $this->_rows( $taxonomy, $terms, $children, $offset, $number, $count );
} else {
$terms = get_terms( $taxonomy, $args );
foreach ( $terms as $term )
$out .= $this->single_row( $term, 0, $taxonomy );
$count = $number; // Only displaying a single page.
}
echo $out;
}
function _rows( $taxonomy, $terms, &$children, $start = 0, $per_page = 20, &$count, $parent = 0, $level = 0 ) {
$end = $start + $per_page;
$output = '';
foreach ( $terms as $key => $term ) {
if ( $count >= $end )
break;
if ( $term->parent != $parent && empty( $_REQUEST['s'] ) )
continue;
// If the page starts in a subtree, print the parents.
if ( $count == $start && $term->parent > 0 && empty( $_REQUEST['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" . $this->single_row( $my_parent, $level - $num_parents, $taxonomy );
$num_parents--;
}
}
if ( $count >= $start )
$output .= "\t" . $this->single_row( $term, $level, $taxonomy );
++$count;
unset( $terms[$key] );
if ( isset( $children[$term->term_id] ) && empty( $_REQUEST['s'] ) )
$output .= $this->_rows( $taxonomy, $terms, $children, $start, $per_page, $count, $term->term_id, $level + 1 );
}
return $output;
}
function single_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 .= '';
$default_term = get_option( 'default_' . $taxonomy );
list( $columns, $hidden ) = $this->get_column_headers();
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 .= '';
$out .= '
' . $qe_data->name . '
';
$out .= '
' . apply_filters( 'editable_slug', $qe_data->slug ) . '
';
$out .= '
' . $qe_data->parent . '
';
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;
case 'links':
$attributes = 'class="links column-links 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 the hidden row displayed when inline editing
*
* @since 3.1
*/
function inline_edit() {
global $tax;
if ( ! current_user_can( $tax->cap->edit_terms ) )
return;
list( $columns, $hidden ) = $this->get_column_headers();
$col_count = count( $columns ) - count( $hidden );
?>
'users',
'plural' => 'users'
) );
if ( 'normal' != $context )
return;
$usersearch = isset( $_REQUEST['s'] ) ? $_REQUEST['s'] : '';
$role = isset( $_REQUEST['role'] ) ? $_REQUEST['role'] : '';
$users_per_page = (int) get_user_option( 'users_per_page' );
if ( empty( $users_per_page ) || $users_per_page < 1 )
$users_per_page = 20;
$users_per_page = apply_filters( 'users_per_page', $users_per_page );
$paged = $this->get_pagenum();
$args = array(
'number' => $users_per_page,
'offset' => ( $paged-1 ) * $users_per_page,
'role' => $role,
'search' => $usersearch
);
if ( isset( $_REQUEST['orderby'] ) )
$args['orderby'] = $_REQUEST['orderby'];
if ( isset( $_REQUEST['order'] ) )
$args['order'] = $_REQUEST['order'];
// Query the user IDs for this page
$wp_user_search = new WP_User_Query( $args );
$this->items = $wp_user_search->get_results();
$this->set_pagination_args( array(
'total_items' => $wp_user_search->get_total(),
'per_page' => $users_per_page,
) );
}
function no_items() {
_e( 'No matching users were found.' );
}
function get_bulk_actions() {
$actions = array();
if ( !is_multisite() && current_user_can( 'delete_users' ) )
$actions['delete'] = __( 'Delete' );
else
$actions['remove'] = __( 'Remove' );
return $actions;
}
function extra_tablenav( $which ) {
if ( 'top' != $which )
return;
?>
' ',
'username' => __( 'Login' ),
'name' => __( 'Name' ),
'email' => __( 'E-mail' ),
'role' => __( 'Role' ),
'posts' => __( 'Posts' )
);
}
function get_sortable_columns() {
return array(
'username' => 'login',
'name' => 'name',
'email' => 'email',
'posts' => 'post_count',
);
}
function display_rows() {
// Query the post counts for this page
$post_counts = count_many_users_posts( array_keys( $this->items ) );
$style = '';
foreach ( $this->items as $userid => $user_object ) {
$roles = $user_object->roles;
$role = array_shift( $roles );
if ( is_multisite() && empty( $role ) )
continue;
$style = ( ' class="alternate"' == $style ) ? '' : ' class="alternate"';
echo "\n\t", $this->single_row( $user_object, $style, $role, $post_counts[ $userid ] );
}
}
/**
* Generate HTML for a single row on the users.php admin panel.
*
* @since 2.1.0
*
* @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
*/
function single_row( $user_object, $style = '', $role = '', $numposts = 0 ) {
global $wp_roles;
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 ( get_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 ";
// Set up the hover actions for this user
$actions = array();
if ( current_user_can( 'edit_user', $user_object->ID ) ) {
$edit = "$user_object->user_login ";
$actions['edit'] = '' . __( 'Edit' ) . ' ';
} else {
$edit = "$user_object->user_login ";
}
if ( !is_multisite() && get_current_user_id() != $user_object->ID && current_user_can( 'delete_user', $user_object->ID ) )
$actions['delete'] = "" . __( 'Delete' ) . " ";
if ( is_multisite() && get_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 .= '
';
// Set up the checkbox ( because the user is editable, otherwise its empty )
$checkbox = " ";
} else {
$edit = '' . $user_object->user_login . ' ';
}
$role_name = isset( $wp_roles->role_names[$role] ) ? translate_user_role( $wp_roles->role_names[$role] ) : __( 'None' );
$r = "";
$avatar = get_avatar( $user_object->ID, 32 );
list( $columns, $hidden ) = $this->get_column_headers();
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 .= " ";
}
}
$r .= ' ';
return $r;
}
}
class WP_Comments_Table extends WP_List_Table {
function WP_Comments_Table( $context = 'normal' ) {
global $comments, $extra_comments, $total_comments, $post_id, $comment_status, $mode;
$mode = ( empty( $_REQUEST['mode'] ) ) ? 'detail' : $_REQUEST['mode'];
parent::WP_List_Table( array(
'screen' => 'edit-comments',
'plural' => 'comments'
) );
if ( 'normal' != $context )
return;
$post_id = isset( $_REQUEST['post_ID'] ) ? absint( $_REQUEST['post_ID'] ) : 0;
$comment_status = isset( $_REQUEST['comment_status'] ) ? $_REQUEST['comment_status'] : 'all';
if ( !in_array( $comment_status, array( 'all', 'moderated', 'approved', 'spam', 'trash' ) ) )
$comment_status = 'all';
$comment_type = !empty( $_REQUEST['comment_type'] ) ? $_REQUEST['comment_type'] : '';
$search = ( isset( $_REQUEST['s'] ) ) ? $_REQUEST['s'] : '';
if ( isset( $_POST['num'] ) )
$comments_per_page = $_POST['num'];
else
$comments_per_page = (int) get_user_option( 'edit_comments_per_page' );
if ( empty( $comments_per_page ) || $comments_per_page < 1 )
$comments_per_page = 20;
$comments_per_page = apply_filters( 'comments_per_page', $comments_per_page, $comment_status );
$page = $this->get_pagenum();
$start = $offset = ( $page - 1 ) * $comments_per_page;
$args = array(
'status' => ( 'moderated' == $comment_status ) ? 'hold' : $comment_status, // TODO: replace all instances of 'moderated' with 'hold'
'search' => $search,
'offset' => $start,
'number' => $comments_per_page + 8, // Grab a few extra
'post_id' => $post_id,
'plural' => $comment_type,
'orderby' => @$_REQUEST['orderby'],
'order' => @$_REQUEST['order'],
);
$_comments = get_comments( $args );
update_comment_cache( $_comments );
$args['count'] = true;
$args['offset'] = 0;
$args['number'] = 0;
$total_comments = get_comments( $args );
$_comment_post_ids = array();
foreach ( $_comments as $_c ) {
$_comment_post_ids[] = $_c->comment_post_ID;
}
$_comment_pending_count = get_pending_comments_num( $_comment_post_ids );
$this->items = array_slice( $_comments, 0, $comments_per_page );
$this->extra_items = array_slice( $_comments, $comments_per_page );
$this->set_pagination_args( array(
'total_items' => $total_comments,
'per_page' => $comments_per_page,
) );
}
function get_bulk_actions() {
global $comment_status;
$actions = array();
if ( in_array( $comment_status, array( 'all', 'approved' ) ) )
$actions['unapprove'] = __( 'Unapprove' );
if ( in_array( $comment_status, array( 'all', 'moderated', 'spam' ) ) )
$actions['approve'] = __( 'Approve' );
if ( in_array( $comment_status, array( 'all', 'moderated', 'approved' ) ) )
$actions['spam'] = _x( 'Mark as Spam', 'comment' );
if ( 'trash' == $comment_status )
$actions['untrash'] = __( 'Restore' );
elseif ( 'spam' == $comment_status )
$actions['unspam'] = _x( 'Not Spam', 'comment' );
if ( in_array( $comment_status, array( 'trash', 'spam' ) ) || !EMPTY_TRASH_DAYS )
$actions['delete'] = __( 'Delete Permanently' );
else
$actions['trash'] = __( 'Move to Trash' );
return $actions;
}
function extra_tablenav( $which ) {
global $comment_status, $comment_type;
?>
__( 'Comments' ),
'pings' => __( 'Pings' ),
) );
foreach ( $comment_types as $type => $label )
echo "\t$label \n";
?>
' ',
'author' => __( 'Author' ),
/* translators: column name */
'comment' => _x( 'Comment', 'column name' ),
'response' => __( 'In Response To' )
);
}
function get_sortable_columns() {
return array(
'author' => 'comment_author',
'comment' => 'comment_content',
'response' => 'comment_post_ID'
);
}
function display_table() {
extract( $this->_args );
$this->display_tablenav( 'top' );
?>
print_column_headers(); ?>
print_column_headers( false ); ?>
display_tablenav( 'bottom' );
}
function display_rows( $items = array() ) {
global $mode, $comment_status;
if ( empty( $items ) )
$items = $this->items;
foreach ( $items as $comment )
$this->single_row( $comment->comment_ID, $mode, $comment_status );
}
function single_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 );
$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" ) );
$url = "comment.php?post_ID=$post->ID&c=$comment->comment_ID";
$approve_url = esc_url( $url . "&action=approvecomment&$approve_nonce" );
$unapprove_url = esc_url( $url . "&action=unapprovecomment&$approve_nonce" );
$spam_url = esc_url( $url . "&action=spamcomment&$del_nonce" );
$unspam_url = esc_url( $url . "&action=unspamcomment&$del_nonce" );
$trash_url = esc_url( $url . "&action=trashcomment&$del_nonce" );
$untrash_url = esc_url( $url . "&action=untrashcomment&$del_nonce" );
$delete_url = esc_url( $url . "&action=deletecomment&$del_nonce" );
}
echo "\n";
}
}
class WP_Links_Table extends WP_List_Table {
function WP_Links_Table() {
global $cat_id, $s, $orderby, $order;
wp_reset_vars( array( 'action', 'cat_id', 'linkurl', 'name', 'image', 'description', 'visible', 'target', 'category', 'link_id', 'submit', 'orderby', 'order', 'links_show_cat_id', 'rating', 'rel', 'notes', 'linkcheck[]', 's' ) );
$args = array( 'hide_invisible' => 0, 'hide_empty' => 0 );
if ( 'all' != $cat_id )
$args['category'] = $cat_id;
if ( !empty( $s ) )
$args['search'] = $s;
if ( !empty( $orderby ) )
$args['orderby'] = $orderby;
if ( !empty( $order ) )
$args['order'] = $order;
$this->items = get_bookmarks( $args );
parent::WP_List_Table( array(
'screen' => 'link-manager',
'plural' => 'bookmarks',
) );
}
function no_items() {
_e( 'No links found.' );
}
function get_bulk_actions() {
$actions = array();
$actions['delete'] = __( 'Delete' );
return $actions;
}
function extra_tablenav( $which ) {
global $cat_id;
if ( 'top' != $which )
return;
?>
$cat_id,
'name' => 'cat_id',
'taxonomy' => 'link_category',
'show_option_all' => __( 'View all categories' ),
'hide_empty' => true,
'hierarchical' => 1,
'show_count' => 0,
'orderby' => 'name',
);
wp_dropdown_categories( $dropdown_options );
?>
' ',
'name' => __( 'Name' ),
'url' => __( 'URL' ),
'categories' => __( 'Categories' ),
'rel' => __( 'Relationship' ),
'visible' => __( 'Visible' ),
'rating' => __( 'Rating' )
);
}
function get_sortable_columns() {
return array(
'name' => 'name',
'url' => 'url',
'visible' => 'visible',
'rating' => 'rating'
);
}
function display_rows() {
global $cat_id;
$alt = 0;
foreach ( $this->items as $link ) {
$link = sanitize_bookmark( $link );
$link->link_name = esc_attr( $link->link_name );
$link->link_category = wp_get_link_cats( $link->link_id );
$short_url = str_replace( 'http://', '', $link->link_url );
$short_url = preg_replace( '/^www\./i', '', $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 ).'...';
$visible = ( $link->link_visible == 'Y' ) ? __( 'Yes' ) : __( 'No' );
$rating = $link->link_rating;
$style = ( $alt++ % 2 ) ? '' : ' class="alternate"';
$edit_link = get_edit_bookmark_link( $link );
?>
>
get_column_headers();
foreach ( $columns as $column_name => $column_display_name ) {
$class = "class='column-$column_name'";
$style = '';
if ( in_array( $column_name, $hidden ) )
$style = ' style="display:none;"';
$attributes = $class . $style;
switch ( $column_name ) {
case 'cb':
echo ' ';
break;
case 'name':
echo "link_name ) ) . "'>$link->link_name ";
$actions = array();
$actions['edit'] = '' . __( 'Edit' ) . ' ';
$actions['delete'] = "link_id ) . "' onclick=\"if ( confirm( '" . esc_js( sprintf( __( "You are about to delete this link '%s'\n 'Cancel' to stop, 'OK' to delete." ), $link->link_name ) ) . "' ) ) { return true;}return false;\">" . __( 'Delete' ) . " ";
$action_count = count( $actions );
$i = 0;
echo '';
foreach ( $actions as $action => $linkaction ) {
++$i;
( $i == $action_count ) ? $sep = '' : $sep = ' | ';
echo "$linkaction$sep ";
}
echo '
';
echo ' ';
break;
case 'url':
echo "link_name )."'>$short_url ";
break;
case 'categories':
?>>link_category as $category ) {
$cat = get_term( $category, 'link_category', OBJECT, 'display' );
if ( is_wp_error( $cat ) )
echo $cat->get_error_message();
$cat_name = $cat->name;
if ( $cat_id != $category )
$cat_name = "$cat_name ";
$cat_names[] = $cat_name;
}
echo implode( ', ', $cat_names );
?> >link_rel ) ? ' ' : $link->link_rel; ?> > >
>link_id ); ?>
'site_rows',
'screen' => 'ms-sites',
) );
$pagenum = $this->get_pagenum();
$per_page = (int) get_user_option( 'ms_sites_per_page' );
if ( empty( $per_page ) || $per_page < 1 )
$per_page = 20;
$per_page = apply_filters( 'ms_sites_per_page', $per_page );
$s = isset( $_REQUEST['s'] ) ? stripslashes( trim( $_REQUEST[ 's' ] ) ) : '';
$like_s = esc_sql( like_escape( $s ) );
$query = "SELECT * FROM {$wpdb->blogs} WHERE site_id = '{$wpdb->siteid}' ";
if ( isset( $_REQUEST['searchaction'] ) ) {
if ( 'name' == $_REQUEST['searchaction'] ) {
$query .= " AND ( {$wpdb->blogs}.domain LIKE '%{$like_s}%' OR {$wpdb->blogs}.path LIKE '%{$like_s}%' ) ";
} elseif ( 'id' == $_REQUEST['searchaction'] ) {
$query .= " AND {$wpdb->blogs}.blog_id = '{$like_s}' ";
} elseif ( 'ip' == $_REQUEST['searchaction'] ) {
$query = "SELECT *
FROM {$wpdb->blogs}, {$wpdb->registration_log}
WHERE site_id = '{$wpdb->siteid}'
AND {$wpdb->blogs}.blog_id = {$wpdb->registration_log}.blog_id
AND {$wpdb->registration_log}.IP LIKE ( '%{$like_s}%' )";
}
}
$order_by = isset( $_REQUEST['orderby'] ) ? $_REQUEST['orderby'] : 'id';
if ( $order_by == 'registered' ) {
$query .= ' ORDER BY registered ';
} elseif ( $order_by == 'lastupdated' ) {
$query .= ' ORDER BY last_updated ';
} elseif ( $order_by == 'blogname' ) {
$query .= ' ORDER BY domain ';
} else {
$order_by = 'id';
$query .= " ORDER BY {$wpdb->blogs}.blog_id ";
}
$order = ( isset( $_REQUEST['order'] ) && 'DESC' == strtoupper( $_REQUEST['order'] ) ) ? "DESC" : "ASC";
$query .= $order;
$total = $wpdb->get_var( str_replace( 'SELECT *', 'SELECT COUNT( blog_id )', $query ) );
$query .= " LIMIT " . intval( ( $pagenum - 1 ) * $per_page ) . ", " . intval( $per_page );
$this->items = $wpdb->get_results( $query, ARRAY_A );
$this->set_pagination_args( array(
'total_items' => $total,
'per_page' => $per_page,
) );
}
function no_items() {
_e( 'No sites found.' );
}
function get_bulk_actions() {
$actions = array();
$actions['delete'] = __( 'Delete' );
$actions['spam'] = _x( 'Mark as Spam', 'site' );
$actions['notspam'] = _x( 'Not Spam', 'site' );
return $actions;
}
function pagination( $which ) {
global $mode;
parent::pagination( $which );
if ( 'top' == $which )
$this->view_switcher( $mode );
}
function get_columns() {
$blogname_columns = ( is_subdomain_install() ) ? __( 'Domain' ) : __( 'Path' );
$sites_columns = array(
'cb' => ' ',
'blogname' => $blogname_columns,
'lastupdated' => __( 'Last Updated' ),
'registered' => _x( 'Registered', 'site' ),
'users' => __( 'Users' )
);
if ( has_filter( 'wpmublogsaction' ) )
$sites_columns['plugins'] = __( 'Actions' );
$sites_columns = apply_filters( 'wpmu_blogs_columns', $sites_columns );
return $sites_columns;
}
function get_sortable_columns() {
return array(
'id' => 'id',
'blogname' => 'blogname',
'lastupdated' => 'lastupdated',
'registered' => 'registered',
);
}
function display_rows() {
global $current_site, $mode;
$status_list = array(
'archived' => array( 'site-archived', __( 'Archived' ) ),
'spam' => array( 'site-spammed', _x( 'Spam', 'site' ) ),
'deleted' => array( 'site-deleted', __( 'Deleted' ) ),
'mature' => array( 'site-mature', __( 'Mature' ) )
);
$class = '';
foreach ( $this->items as $blog ) {
$class = ( 'alternate' == $class ) ? '' : 'alternate';
reset( $status_list );
$blog_states = array();
foreach ( $status_list as $status => $col ) {
if ( get_blog_status( $blog['blog_id'], $status ) == 1 ) {
$class = $col[0];
$blog_states[] = $col[1];
}
}
$blog_state = '';
if ( ! empty( $blog_states ) ) {
$state_count = count( $blog_states );
$i = 0;
$blog_state .= ' - ';
foreach ( $blog_states as $state ) {
++$i;
( $i == $state_count ) ? $sep = '' : $sep = ', ';
$blog_state .= "$state$sep ";
}
}
echo "";
$blogname = ( is_subdomain_install() ) ? str_replace( '.'.$current_site->domain, '', $blog['domain'] ) : $blog['path'];
list( $columns, $hidden ) = $this->get_column_headers();
foreach ( $columns as $column_name => $column_display_name ) {
switch ( $column_name ) {
case 'cb': ?>
' . sprintf( _x( '%1$s – %2$s ', '%1$s: site name. %2$s: site tagline.' ), get_blog_option( $blog['blog_id'], 'blogname' ), get_blog_option( $blog['blog_id'], 'blogdescription ' ) ) . '';
// Preordered.
$actions = array(
'edit' => '', 'backend' => '',
'activate' => '', 'deactivate' => '',
'archive' => '', 'unarchive' => '',
'spam' => '', 'unspam' => '',
'delete' => '',
'visit' => '',
);
$actions['edit'] = '' . __( 'Edit' ) . ' ';
$actions['backend'] = "" . __( 'Backend' ) . ' ';
if ( $current_site->blog_id != $blog['blog_id'] ) {
if ( get_blog_status( $blog['blog_id'], 'deleted' ) == '1' )
$actions['activate'] = '' . __( 'Activate' ) . ' ';
else
$actions['deactivate'] = '' . __( 'Deactivate' ) . ' ';
if ( get_blog_status( $blog['blog_id'], 'archived' ) == '1' )
$actions['unarchive'] = '' . __( 'Unarchive' ) . ' ';
else
$actions['archive'] = '' . _x( 'Archive', 'verb; site' ) . ' ';
if ( get_blog_status( $blog['blog_id'], 'spam' ) == '1' )
$actions['unspam'] = '' . _x( 'Not Spam', 'site' ) . ' ';
else
$actions['spam'] = '' . _x( 'Spam', 'site' ) . ' ';
$actions['delete'] = '' . __( 'Delete' ) . ' ';
}
$actions['visit'] = "" . __( 'Visit' ) . ' ';
$actions = array_filter( $actions );
if ( count( $actions ) ) : ?>
g:i:s a';
echo ( $blog['last_updated'] == '0000-00-00 00:00:00' ) ? __( 'Never' ) : mysql2date( __( $date ), $blog['last_updated'] ); ?>
5 ) {
$blogusers = array_slice( $blogusers, 0, 5 );
$blogusers_warning = __( 'Only showing first 5 users.' ) . ' ' . __( 'More' ) . ' ';
}
foreach ( $blogusers as $key => $val ) {
echo '' . esc_html( $val->user_login ) . ' ';
if ( 'list' != $mode )
echo '( ' . $val->user_email . ' )';
echo ' ';
}
if ( $blogusers_warning != '' )
echo '' . $blogusers_warning . ' ';
}
?>
'ms-users',
) );
$pagenum = $this->get_pagenum();
$per_page = (int) get_user_option( 'ms_users_per_page' );
if ( empty( $per_page ) || $per_page < 1 )
$per_page = 20;
$per_page = apply_filters( 'ms_users_per_page', $per_page );
$s = isset( $_REQUEST['s'] ) ? stripslashes( trim( $_REQUEST[ 's' ] ) ) : '';
$like_s = esc_sql( like_escape( $s ) );
$query = "SELECT * FROM {$wpdb->users}";
if ( !empty( $like_s ) ) {
$query .= " WHERE user_login LIKE '%$like_s%' OR user_email LIKE '%$like_s%'";
}
$order_by = isset( $_REQUEST['orderby'] ) ? $_REQUEST['orderby'] : 'id';
if ( $order_by == 'email' ) {
$query .= ' ORDER BY user_email ';
} elseif ( $order_by == 'login' ) {
$query .= ' ORDER BY user_login ';
} elseif ( $order_by == 'name' ) {
$query .= ' ORDER BY display_name ';
} elseif ( $order_by == 'registered' ) {
$query .= ' ORDER BY user_registered ';
} else {
$order_by = 'id';
$query .= ' ORDER BY ID ';
}
$order = ( isset( $_REQUEST['order'] ) && 'DESC' == strtoupper( $_REQUEST['order'] ) ) ? 'DESC' : 'ASC';
$query .= $order;
$total = $wpdb->get_var( str_replace( 'SELECT *', 'SELECT COUNT( ID )', $query ) );
$query .= " LIMIT " . intval( ( $pagenum - 1 ) * $per_page ) . ", " . intval( $per_page );
$this->items = $wpdb->get_results( $query, ARRAY_A );
$num_pages = ceil( $total / $per_page );
$this->set_pagination_args( array(
'total_items' => $total,
'per_page' => $per_page,
) );
}
function get_bulk_actions() {
$actions = array();
$actions['delete'] = __( 'Delete' );
$actions['spam'] = _x( 'Mark as Spam', 'user' );
$actions['notspam'] = _x( 'Not Spam', 'user' );
return $actions;
}
function no_items() {
_e( 'No users found.' );
}
function pagination( $which ) {
global $mode;
parent::pagination ( $which );
if ( 'top' == $which )
$this->view_switcher( $mode );
}
function get_columns() {
$users_columns = array(
'cb' => ' ',
'login' => __( 'Login' ),
'name' => __( 'Name' ),
'email' => __( 'E-mail' ),
'registered' => _x( 'Registered', 'user' ),
'blogs' => __( 'Sites' )
);
$users_columns = apply_filters( 'wpmu_users_columns', $users_columns );
return $users_columns;
}
function get_sortable_columns() {
return array(
'id' => 'id',
'login' => 'login',
'name' => 'name',
'email' => 'email',
'registered' => 'registered',
);
}
function display_rows() {
global $current_site, $mode;
$class = '';
$super_admins = get_super_admins();
foreach ( $this->items as $user ) {
$class = ( 'alternate' == $class ) ? '' : 'alternate';
$status_list = array( 'spam' => 'site-spammed', 'deleted' => 'site-deleted' );
foreach ( $status_list as $status => $col ) {
if ( $user[$status] )
$class = $col;
}
?>
get_column_headers();
foreach ( $columns as $column_name => $column_display_name ) :
switch ( $column_name ) {
case 'cb': ?>
g:i:s a';
?>
$val ) {
$path = ( $val->path == '/' ) ? '' : $val->path;
echo '' . str_replace( '.' . $current_site->domain, '', $val->domain . $path ) . ' ';
echo ' ';
// Edit
echo '' . __( 'Edit' ) . ' | ';
// View
echo 'userblog_id, 'spam' ) == 1 )
echo 'style="background-color: #faa" ';
echo 'href="' . esc_url( get_home_url( $val->userblog_id ) ) . '">' . __( 'View' ) . ' ';
echo ' ';
}
}
?>
'plugins',
'plural' => 'plugins',
) );
wp_reset_vars( array( 'orderby', 'order', 's' ) );
$default_status = get_user_option( 'plugins_last_view' );
if ( empty( $default_status ) )
$default_status = 'all';
$status = isset( $_REQUEST['plugin_status'] ) ? $_REQUEST['plugin_status'] : $default_status;
if ( !in_array( $status, array( 'all', 'active', 'inactive', 'recently_activated', 'upgrade', 'network', 'mustuse', 'dropins', 'search' ) ) )
$status = 'all';
if ( $status != $default_status && 'search' != $status )
update_user_meta( get_current_user_id(), 'plugins_last_view', $status );
$page = $this->get_pagenum();
$plugins = array(
'all' => apply_filters( 'all_plugins', get_plugins() ),
'search' => array(),
'active' => array(),
'inactive' => array(),
'recent' => array(),
'recently_activated' => get_option( 'recently_activated', array() ),
'upgrade' => array(),
'mustuse' => array(),
'dropins' => array()
);
if ( ! is_multisite() || ( is_network_admin() && current_user_can('manage_network_plugins') ) ) {
if ( apply_filters( 'show_advanced_plugins', true, 'mustuse' ) )
$plugins['mustuse'] = get_mu_plugins();
if ( apply_filters( 'show_advanced_plugins', true, 'dropins' ) )
$plugins['dropins'] = get_dropins();
}
set_transient( 'plugin_slugs', array_keys( $plugins['all'] ), 86400 );
// Clean out any plugins which were deactivated over a week ago.
foreach ( $plugins['recently_activated'] as $key => $time )
if ( $time + ( 7*24*60*60 ) < time() ) //1 week
unset( $plugins['recently_activated'][$key] );
update_option( 'recently_activated', $plugins['recently_activated'] );
$current = get_site_transient( 'update_plugins' );
foreach ( array( 'all', 'mustuse', 'dropins' ) as $type ) {
foreach ( (array) $plugins[$type] as $plugin_file => $plugin_data ) {
// Translate, Apply Markup, Sanitize HTML
$plugins[$type][$plugin_file] = _get_plugin_data_markup_translate( $plugin_file, $plugin_data, false, true );
}
}
foreach ( (array) $plugins['all'] as $plugin_file => $plugin_data ) {
// Filter into individual sections
if ( is_plugin_active_for_network($plugin_file) && !is_network_admin() ) {
unset( $plugins['all'][ $plugin_file ] );
continue;
} elseif ( is_multisite() && is_network_only_plugin( $plugin_file ) && !current_user_can( 'manage_network_plugins' ) ) {
$plugins['network'][ $plugin_file ] = $plugin_data;
} elseif ( is_plugin_active( $plugin_file ) ) {
$plugins['active'][ $plugin_file ] = $plugin_data;
} else {
if ( !is_network_admin() && isset( $recently_activated[ $plugin_file ] ) ) // Was the plugin recently activated?
$plugins['recent'][ $plugin_file ] = $plugin_data;
$plugins['inactive'][ $plugin_file ] = $plugin_data;
}
if ( isset( $current->response[ $plugin_file ] ) )
$plugins['upgrade'][ $plugin_file ] = $plugin_data;
}
if ( !current_user_can( 'update_plugins' ) )
$plugins['upgrade'] = array();
if ( $s ) {
function _search_plugins_filter_callback( $plugin ) {
static $term;
if ( is_null( $term ) )
$term = stripslashes( $_REQUEST['s'] );
foreach ( $plugin as $value )
if ( stripos( $value, $term ) !== false )
return true;
return false;
}
$status = 'search';
$plugins['search'] = array_filter( $plugins['all'], '_search_plugins_filter_callback' );
}
$totals = array();
foreach ( $plugins as $type => $list )
$totals[ $type ] = count( $list );
if ( empty( $plugins[ $status ] ) && !in_array( $status, array( 'all', 'search' ) ) )
$status = 'all';
$this->items = $plugins[ $status ];
$total_this_page = $totals[ $status ];
if ( $orderby ) {
$orderby = ucfirst( $orderby );
$order = strtoupper( $order );
function _order_plugins_callback( $plugin_a, $plugin_b ) {
global $orderby, $order;
$a = $plugin_a[$orderby];
$b = $plugin_b[$orderby];
if ( $a == $b )
return 0;
if ( 'DESC' == $order )
return ( $a < $b ) ? 1 : -1;
else
return ( $a < $b ) ? -1 : 1;
}
uasort( $this->items, '_order_plugins_callback' );
}
$plugins_per_page = (int) get_user_option( 'plugins_per_page' );
if ( empty( $plugins_per_page ) || $plugins_per_page < 1 )
$plugins_per_page = 999;
$plugins_per_page = apply_filters( 'plugins_per_page', $plugins_per_page );
$start = ( $page - 1 ) * $plugins_per_page;
if ( $total_this_page > $plugins_per_page )
$this->items = array_slice( $this->items, $start, $plugins_per_page );
$this->set_pagination_args( array(
'total_items' => $total_this_page,
'per_page' => $plugins_per_page,
) );
}
function no_items() {
global $plugins;
if ( !empty( $plugins['all'] ) )
_e( 'No plugins found.' );
else
_e( 'You do not appear to have any plugins available at this time.' );
}
function get_columns() {
global $status;
return array(
'cb' => !in_array( $status, array( 'mustuse', 'dropins' ) ) ? ' ' : '',
'name' => __( 'Plugin' ),
'description' => __( 'Description' ),
);
}
function get_sortable_columns() {
return array(
'name' => 'name',
'description' => 'description',
);
}
function display_tablenav( $which ) {
global $status;
if ( !in_array( $status, array( 'mustuse', 'dropins' ) ) )
parent::display_tablenav( $which );
}
function get_bulk_actions() {
global $status;
$actions = array();
if ( 'active' != $status )
$actions['activate-selected'] = __( 'Activate' );
if ( is_multisite() && 'network' != $status )
$actions['network-activate-selected'] = __( 'Network Activate' );
if ( 'inactive' != $status && 'recent' != $status )
$actions['deactivate-selected'] = __( 'Deactivate' );
if ( current_user_can( 'update_plugins' ) )
$actions['update-selected'] = __( 'Update' );
if ( current_user_can( 'delete_plugins' ) && ( 'active' != $status ) )
$actions['delete-selected'] = __( 'Delete' );
return $actions;
}
function bulk_actions( $which ) {
global $status;
if ( in_array( $status, array( 'mustuse', 'dropins' ) ) )
return;
parent::bulk_actions( $which );
}
function extra_tablenav( $which ) {
global $status;
if ( 'recently_activated' == $status ) { ?>
items as $plugin_file => $plugin_data ) {
// preorder
$actions = array(
'network_deactivate' => '', 'deactivate' => '',
'network_only' => '', 'activate' => '',
'network_activate' => '',
'edit' => '',
'delete' => '',
);
if ( 'mustuse' == $context ) {
if ( is_multisite() && !is_network_admin() )
continue;
$is_active = true;
} elseif ( 'dropins' == $context ) {
if ( is_multisite() && !is_network_admin() )
continue;
$dropins = _get_dropins();
$plugin_name = $plugin_file;
if ( $plugin_file != $plugin_data['Name'] )
$plugin_name .= ' ' . $plugin_data['Name'];
if ( true === ( $dropins[ $plugin_file ][1] ) ) { // Doesn't require a constant
$is_active = true;
$description = '' . $dropins[ $plugin_file ][0] . '
';
} elseif ( constant( $dropins[ $plugin_file ][1] ) ) { // Constant is true
$is_active = true;
$description = '' . $dropins[ $plugin_file ][0] . '
';
} else {
$is_active = false;
$description = '' . $dropins[ $plugin_file ][0] . ' ' . __('Inactive:') . ' ' . sprintf( __( 'Requires %s
in wp-config.php
.' ), "define('" . $dropins[ $plugin_file ][1] . "', true);" ) . '
';
}
if ( $plugin_data['Description'] )
$description .= '' . $plugin_data['Description'] . '
';
} else {
$is_active_for_network = is_plugin_active_for_network($plugin_file);
if ( is_network_admin() )
$is_active = $is_active_for_network;
else
$is_active = is_plugin_active( $plugin_file );
if ( $is_active_for_network && !is_super_admin() && !is_network_admin() )
continue;
if ( is_network_admin() ) {
if ( $is_active_for_network ) {
if ( current_user_can( 'manage_network_plugins' ) )
$actions['network_deactivate'] = '' . __('Network Deactivate') . ' ';
} else {
if ( current_user_can( 'manage_network_plugins' ) )
$actions['network_activate'] = '' . __('Network Activate') . ' ';
if ( current_user_can('delete_plugins') )
$actions['delete'] = '' . __('Delete') . ' ';
}
} else {
if ( $is_active ) {
$actions['deactivate'] = '' . __('Deactivate') . ' ';
} else {
if ( is_network_only_plugin( $plugin_file ) && !is_network_admin() )
continue;
$actions['activate'] = '' . __('Activate') . ' ';
if ( current_user_can('delete_plugins') )
$actions['delete'] = '' . __('Delete') . ' ';
} // end if $is_active
} // end if is_network_admin()
if ( current_user_can('edit_plugins') && is_writable(WP_PLUGIN_DIR . '/' . $plugin_file) )
$actions['edit'] = '' . __('Edit') . ' ';
} // end if $context
$actions = apply_filters( 'plugin_action_links', array_filter( $actions ), $plugin_file, $plugin_data, $context );
$actions = apply_filters( "plugin_action_links_$plugin_file", $actions, $plugin_file, $plugin_data, $context );
$class = $is_active ? 'active' : 'inactive';
$checkbox = in_array( $status, array( 'mustuse', 'dropins' ) ) ? '' : " ";
if ( 'dropins' != $status ) {
$description = '' . $plugin_data['Description'] . '
';
$plugin_name = $plugin_data['Name'];
}
echo "
$checkbox
$plugin_name
$description
";
echo '';
foreach ( $actions as $action => $link ) {
$sep = end( $actions ) == $link ? '' : ' | ';
echo "$link$sep ";
}
echo "
";
$plugin_meta = array();
if ( !empty( $plugin_data['Version'] ) )
$plugin_meta[] = sprintf( __( 'Version %s' ), $plugin_data['Version'] );
if ( !empty( $plugin_data['Author'] ) ) {
$author = $plugin_data['Author'];
if ( !empty( $plugin_data['AuthorURI'] ) )
$author = '' . $plugin_data['Author'] . ' ';
$plugin_meta[] = sprintf( __( 'By %s' ), $author );
}
if ( ! empty( $plugin_data['PluginURI'] ) )
$plugin_meta[] = '' . __( 'Visit plugin site' ) . ' ';
$plugin_meta = apply_filters( 'plugin_row_meta', $plugin_meta, $plugin_file, $plugin_data, $status );
echo implode( ' | ', $plugin_meta );
echo "
\n";
do_action( 'after_plugin_row', $plugin_file, $plugin_data, $status );
do_action( "after_plugin_row_$plugin_file", $plugin_file, $plugin_data, $status );
}
}
}
class WP_Plugin_Install_Table extends WP_List_Table {
function WP_Plugin_Install_Table() {
include( ABSPATH . 'wp-admin/includes/plugin-install.php' );
global $tabs, $tab, $paged, $type, $term;
parent::WP_List_Table( array(
'screen' => 'plugin-install',
) );
wp_reset_vars( array( 'tab' ) );
$paged = $this->get_pagenum();
$per_page = 30;
// These are the tabs which are shown on the page
$tabs = array();
$tabs['dashboard'] = __( 'Search' );
if ( 'search' == $tab )
$tabs['search'] = __( 'Search Results' );
$tabs['upload'] = __( 'Upload' );
$tabs['featured'] = _x( 'Featured','Plugin Installer' );
$tabs['popular'] = _x( 'Popular','Plugin Installer' );
$tabs['new'] = _x( 'Newest','Plugin Installer' );
$tabs['updated'] = _x( 'Recently Updated','Plugin Installer' );
$nonmenu_tabs = array( 'plugin-information' ); //Valid actions to perform which do not have a Menu item.
$tabs = apply_filters( 'install_plugins_tabs', $tabs );
$nonmenu_tabs = apply_filters( 'install_plugins_nonmenu_tabs', $nonmenu_tabs );
// If a non-valid menu tab has been selected, And its not a non-menu action.
if ( empty( $tab ) || ( !isset( $tabs[ $tab ] ) && !in_array( $tab, (array) $nonmenu_tabs ) ) )
$tab = key( $tabs );
$args = array( 'page' => $paged, 'per_page' => $per_page );
switch ( $tab ) {
case 'search':
$type = isset( $_REQUEST['type'] ) ? stripslashes( $_REQUEST['type'] ) : '';
$term = isset( $_REQUEST['s'] ) ? stripslashes( $_REQUEST['s'] ) : '';
switch ( $type ) {
case 'tag':
$args['tag'] = sanitize_title_with_dashes( $term );
break;
case 'term':
$args['search'] = $term;
break;
case 'author':
$args['author'] = $term;
break;
}
add_action( 'install_plugins_table_header', 'install_search_form' );
break;
case 'featured':
case 'popular':
case 'new':
case 'updated':
$args['browse'] = $tab;
break;
default:
$args = false;
}
if ( !$args )
return;
$api = plugins_api( 'query_plugins', $args );
if ( is_wp_error( $api ) )
wp_die( $api->get_error_message() . ' ' . __( 'Try again' ) . ' ' );
$this->items = $api->plugins;
$this->set_pagination_args( array(
'total_items' => $api->info['results'],
'per_page' => $per_page,
) );
}
function no_items() {
_e( 'No plugins match your request.' );
}
function display_tablenav( $which ) {
if ( 'top' == $which ) { ?>
pagination( $which ); ?>
_args );
return array( 'widefat', $plural );
}
function get_columns() {
return array(
'name' => __( 'Name' ),
'version' => __( 'Version' ),
'rating' => __( 'Rating' ),
'description' => __( 'Description' ),
);
}
function display_rows() {
$plugins_allowedtags = array(
'a' => array( 'href' => array(),'title' => array(), 'target' => array() ),
'abbr' => array( 'title' => array() ),'acronym' => array( 'title' => array() ),
'code' => array(), 'pre' => array(), 'em' => array(),'strong' => array(),
'ul' => array(), 'ol' => array(), 'li' => array(), 'p' => array(), 'br' => array()
);
foreach ( (array) $this->items as $plugin ) {
if ( is_object( $plugin ) )
$plugin = (array) $plugin;
$title = wp_kses( $plugin['name'], $plugins_allowedtags );
//Limit description to 400char, and remove any HTML.
$description = strip_tags( $plugin['description'] );
if ( strlen( $description ) > 400 )
$description = mb_substr( $description, 0, 400 ) . '…';
//remove any trailing entities
$description = preg_replace( '/&[^;\s]{0,6}$/', '', $description );
//strip leading/trailing & multiple consecutive lines
$description = trim( $description );
$description = preg_replace( "|(\r?\n)+|", "\n", $description );
//\n =>
$description = nl2br( $description );
$version = wp_kses( $plugin['version'], $plugins_allowedtags );
$name = strip_tags( $title . ' ' . $version );
$author = $plugin['author'];
if ( ! empty( $plugin['author'] ) )
$author = ' ' . sprintf( __( 'By %s' ), $author ) . '. ';
$author = wp_kses( $author, $plugins_allowedtags );
$action_links = array();
$action_links[] = '' . __( 'Details' ) . ' ';
if ( current_user_can( 'install_plugins' ) || current_user_can( 'update_plugins' ) ) {
$status = install_plugin_install_status( $plugin );
switch ( $status['status'] ) {
case 'install':
if ( $status['url'] )
$action_links[] = '' . __( 'Install Now' ) . ' ';
break;
case 'update_available':
if ( $status['url'] )
$action_links[] = '' . sprintf( __( 'Update Now' ), $status['version'] ) . ' ';
break;
case 'latest_installed':
case 'newer_installed':
$action_links[] = '' . __( 'Installed' ) . ' ';
break;
}
}
$action_links = apply_filters( 'plugin_install_action_links', $action_links, $plugin );
?>
name] );
uksort( $themes, "strnatcasecmp" );
$per_page = 15;
$page = $this->get_pagenum( 'pagenum' );
$start = $offset = ( $page - 1 ) * $per_page;
$this->items = array_slice( $themes, $start, $per_page );
parent::__construct( array(
'screen' => 'themes',
) );
$this->set_pagination_args( array(
'query_var' => 'pagenum',
'total_items' => count( $themes ),
'per_page' => $per_page,
) );
}
function no_items() {
if ( current_user_can( 'install_themes' ) )
printf( __( 'You only have one theme installed right now. Live a little! You can choose from over 1,000 free themes in the WordPress.org Theme Directory at any time: just click on the Install Themes tab above.' ), 'theme-install.php' );
else
printf( __( 'Only the current theme is available to you. Contact the %s administrator for information about accessing additional themes.' ), get_site_option( 'site_name' ) );
}
function display_table() {
?>
pagination( 'top' ); ?>
pagination( 'bottom' ); ?>
items;
$theme_names = array_keys( $themes );
natcasesort( $theme_names );
$table = array();
$rows = ceil( count( $theme_names ) / 3 );
for ( $row = 1; $row <= $rows; $row++ )
for ( $col = 1; $col <= 3; $col++ )
$table[$row][$col] = array_shift( $theme_names );
foreach ( $table as $row => $cols ) {
?>
$theme_name ) {
$class = array( 'available-theme' );
if ( $row == 1 ) $class[] = 'top';
if ( $col == 1 ) $class[] = 'left';
if ( $row == $rows ) $class[] = 'bottom';
if ( $col == 3 ) $class[] = 'right';
?>
1, 'template' => $template, 'stylesheet' => $stylesheet, 'TB_iframe' => 'true' ), $preview_link ) );
$preview_text = esc_attr( sprintf( __( 'Preview of “%s”' ), $title ) );
$tags = $themes[$theme_name]['Tags'];
$thickbox_class = 'thickbox thickbox-preview';
$activate_link = wp_nonce_url( "themes.php?action=activate&template=".urlencode( $template )."&stylesheet=".urlencode( $stylesheet ), 'switch-theme_' . $template );
$activate_text = esc_attr( sprintf( __( 'Activate “%s”' ), $title ) );
$actions = array();
$actions[] = '' . __( 'Activate' ) . ' ';
$actions[] = '' . __( 'Preview' ) . ' ';
if ( current_user_can( 'delete_themes' ) )
$actions[] = '' . __( 'Delete' ) . ' ';
$actions = apply_filters( 'theme_action_links', $actions, $themes[$theme_name] );
$actions = implode ( ' | ', $actions );
?>
%2$s. The stylesheet files are located in %3$s
. %4$s uses templates from %5$s . Changes made to the templates will affect both themes.' ), $title, str_replace( WP_CONTENT_DIR, '', $template_dir ), str_replace( WP_CONTENT_DIR, '', $stylesheet_dir ), $title, $parent_theme ); ?>
%2$s.' ), $title, str_replace( WP_CONTENT_DIR, '', $template_dir ), str_replace( WP_CONTENT_DIR, '', $stylesheet_dir ) ); ?>
'theme-install',
) );
wp_reset_vars( array( 'tab' ) );
$paged = $this->get_pagenum();
$per_page = 30;
// These are the tabs which are shown on the page,
$tabs = array();
$tabs['dashboard'] = __( 'Search' );
if ( 'search' == $tab )
$tabs['search'] = __( 'Search Results' );
$tabs['upload'] = __( 'Upload' );
$tabs['featured'] = _x( 'Featured','Theme Installer' );
//$tabs['popular'] = _x( 'Popular','Theme Installer' );
$tabs['new'] = _x( 'Newest','Theme Installer' );
$tabs['updated'] = _x( 'Recently Updated','Theme Installer' );
$nonmenu_tabs = array( 'theme-information' ); // Valid actions to perform which do not have a Menu item.
$tabs = apply_filters( 'install_themes_tabs', $tabs );
$nonmenu_tabs = apply_filters( 'install_themes_nonmenu_tabs', $nonmenu_tabs );
// If a non-valid menu tab has been selected, And its not a non-menu action.
if ( empty( $tab ) || ( ! isset( $tabs[ $tab ] ) && ! in_array( $tab, (array) $nonmenu_tabs ) ) )
$tab = key( $tabs );
$args = array( 'page' => $paged, 'per_page' => $per_page, 'fields' => $theme_field_defaults );
switch ( $tab ) {
case 'search':
$type = isset( $_REQUEST['type'] ) ? stripslashes( $_REQUEST['type'] ) : '';
$term = isset( $_REQUEST['s'] ) ? stripslashes( $_REQUEST['s'] ) : '';
switch ( $type ) {
case 'tag':
$terms = explode( ',', $term );
$terms = array_map( 'trim', $terms );
$terms = array_map( 'sanitize_title_with_dashes', $terms );
$args['tag'] = $terms;
break;
case 'term':
$args['search'] = $term;
break;
case 'author':
$args['author'] = $term;
break;
}
if ( !empty( $_POST['features'] ) ) {
$terms = $_POST['features'];
$terms = array_map( 'trim', $terms );
$terms = array_map( 'sanitize_title_with_dashes', $terms );
$args['tag'] = $terms;
$_REQUEST['s'] = implode( ',', $terms );
$_REQUEST['type'] = 'tag';
}
add_action( 'install_themes_table_header', 'install_theme_search_form' );
break;
case 'featured':
//case 'popular':
case 'new':
case 'updated':
$args['browse'] = $tab;
break;
default:
$args = false;
}
if ( !$args )
return;
$api = themes_api( 'query_themes', $args );
if ( is_wp_error( $api ) )
wp_die( $api->get_error_message() . ' ' . __( 'Try again' ) . ' ' );
$this->items = $api->themes;
$this->set_pagination_args( array(
'total_items' => $api->info['results'],
'per_page' => $per_page,
) );
}
function no_items() {
_e( 'No themes match your request.' );
}
function get_columns() {
return array();
}
function display_table() {
?>
pagination( 'bottom' ); ?>
items;
$rows = ceil( count( $themes ) / 3 );
$table = array();
$theme_keys = array_keys( $themes );
for ( $row = 1; $row <= $rows; $row++ )
for ( $col = 1; $col <= 3; $col++ )
$table[$row][$col] = array_shift( $theme_keys );
foreach ( $table as $row => $cols ) {
echo "\t\n";
foreach ( $cols as $col => $theme_index ) {
$class = array( 'available-theme' );
if ( $row == 1 ) $class[] = 'top';
if ( $col == 1 ) $class[] = 'left';
if ( $row == $rows ) $class[] = 'bottom';
if ( $col == 3 ) $class[] = 'right';
?>
\n";
} // end foreach $table
}
}