2010-10-31 05:37:15 -04:00
< ? php
/**
* MS Themes List Table class .
*
* @ package WordPress
* @ subpackage List_Table
* @ since 3.1 . 0
2011-01-16 16:47:24 -05:00
* @ access private
2010-10-31 05:37:15 -04:00
*/
2010-11-04 04:07:03 -04:00
class WP_MS_Themes_List_Table extends WP_List_Table {
2010-11-17 13:47:34 -05:00
2010-11-08 16:52:54 -05:00
var $site_id ;
var $is_site_themes ;
2010-10-31 05:37:15 -04:00
2011-04-29 16:05:12 -04:00
function __construct () {
2010-10-31 05:37:15 -04:00
global $status , $page ;
2012-02-28 15:13:21 -05:00
$status = isset ( $_REQUEST [ 'theme_status' ] ) ? $_REQUEST [ 'theme_status' ] : 'all' ;
2010-10-31 05:37:15 -04:00
if ( ! in_array ( $status , array ( 'all' , 'enabled' , 'disabled' , 'upgrade' , 'search' ) ) )
$status = 'all' ;
$page = $this -> get_pagenum ();
2010-11-23 19:27:54 -05:00
$screen = get_current_screen ();
$this -> is_site_themes = ( 'site-themes-network' == $screen -> id ) ? true : false ;
2010-11-12 17:44:08 -05:00
2010-11-23 19:27:54 -05:00
if ( $this -> is_site_themes )
2010-11-23 17:27:05 -05:00
$this -> site_id = isset ( $_REQUEST [ 'id' ] ) ? intval ( $_REQUEST [ 'id' ] ) : 0 ;
2011-04-29 16:05:12 -04:00
parent :: __construct ( array (
2010-12-23 09:34:14 -05:00
'plural' => 'themes'
2010-10-31 05:37:15 -04:00
) );
}
2010-11-17 13:47:34 -05:00
2010-12-23 09:34:14 -05:00
function get_table_classes () {
2011-02-14 22:43:47 -05:00
return array ( 'widefat' , 'plugins' ); // todo: remove and add CSS for .themes
2010-12-23 09:34:14 -05:00
}
2010-12-16 04:18:28 -05:00
function ajax_user_can () {
2010-12-15 14:09:50 -05:00
$menu_perms = get_site_option ( 'menu_items' , array () );
2010-10-31 05:37:15 -04:00
2010-12-16 03:43:22 -05:00
if ( empty ( $menu_perms [ 'themes' ] ) && ! is_super_admin () )
2010-12-16 04:18:28 -05:00
return false ;
2010-10-31 05:37:15 -04:00
2010-11-17 13:47:34 -05:00
if ( $this -> is_site_themes && ! current_user_can ( 'manage_sites' ) )
2010-12-16 04:18:28 -05:00
return false ;
2010-12-16 03:43:22 -05:00
elseif ( ! $this -> is_site_themes && ! current_user_can ( 'manage_network_themes' ) )
2010-12-16 04:18:28 -05:00
return false ;
return true ;
2010-10-31 05:37:15 -04:00
}
function prepare_items () {
global $status , $themes , $totals , $page , $orderby , $order , $s ;
wp_reset_vars ( array ( 'orderby' , 'order' , 's' ) );
$themes = array (
'all' => apply_filters ( 'all_themes' , get_themes () ),
'search' => array (),
'enabled' => array (),
'disabled' => array (),
'upgrade' => array ()
);
2010-10-31 19:26:38 -04:00
2010-11-17 13:47:34 -05:00
$site_allowed_themes = get_site_allowed_themes ();
2010-11-11 10:16:16 -05:00
if ( ! $this -> is_site_themes ) {
$allowed_themes = $site_allowed_themes ;
$themes_per_page = $this -> get_items_per_page ( 'themes_network_per_page' );
} else {
2010-11-08 16:52:54 -05:00
$allowed_themes = wpmu_get_blog_allowedthemes ( $this -> site_id );
2010-11-11 10:16:16 -05:00
$themes_per_page = $this -> get_items_per_page ( 'site_themes_network_per_page' );
}
2010-11-17 13:47:34 -05:00
2010-10-31 05:37:15 -04:00
$current = get_site_transient ( 'update_themes' );
foreach ( ( array ) $themes [ 'all' ] as $key => $theme ) {
2010-12-24 12:41:36 -05:00
$theme_key = $theme [ 'Stylesheet' ];
2010-11-08 16:52:54 -05:00
2010-11-08 14:40:05 -05:00
if ( isset ( $allowed_themes [ $theme_key ] ) ) {
2010-10-31 05:37:15 -04:00
$themes [ 'all' ][ $key ][ 'enabled' ] = true ;
$themes [ 'enabled' ][ $key ] = $themes [ 'all' ][ $key ];
}
else {
$themes [ 'all' ][ $key ][ 'enabled' ] = false ;
$themes [ 'disabled' ][ $key ] = $themes [ 'all' ][ $key ];
}
if ( isset ( $current -> response [ $theme [ 'Template' ] ] ) )
$themes [ 'upgrade' ][ $key ] = $themes [ 'all' ][ $key ];
2010-11-08 16:52:54 -05:00
2010-11-17 13:47:34 -05:00
if ( $this -> is_site_themes && isset ( $site_allowed_themes [ $theme_key ] ) ) {
unset ( $themes [ 'all' ][ $key ] );
unset ( $themes [ 'enabled' ][ $key ] );
unset ( $themes [ 'disabled' ][ $key ] );
2010-11-08 16:52:54 -05:00
}
2010-10-31 05:37:15 -04:00
}
2010-11-30 15:31:49 -05:00
if ( ! current_user_can ( 'update_themes' ) || $this -> is_site_themes )
2010-10-31 05:37:15 -04:00
$themes [ 'upgrade' ] = array ();
if ( $s ) {
2010-10-31 19:26:38 -04:00
$status = 'search' ;
2010-11-01 04:37:02 -04:00
$themes [ 'search' ] = array_filter ( $themes [ 'all' ], array ( & $this , '_search_callback' ) );
2010-10-31 05:37:15 -04:00
}
$totals = array ();
foreach ( $themes as $type => $list )
$totals [ $type ] = count ( $list );
if ( empty ( $themes [ $status ] ) && ! in_array ( $status , array ( 'all' , 'search' ) ) )
$status = 'all' ;
$this -> items = $themes [ $status ];
$total_this_page = $totals [ $status ];
if ( $orderby ) {
$orderby = ucfirst ( $orderby );
$order = strtoupper ( $order );
2010-11-01 04:37:02 -04:00
uasort ( $this -> items , array ( & $this , '_order_callback' ) );
2010-10-31 05:37:15 -04:00
}
$start = ( $page - 1 ) * $themes_per_page ;
if ( $total_this_page > $themes_per_page )
$this -> items = array_slice ( $this -> items , $start , $themes_per_page );
$this -> set_pagination_args ( array (
'total_items' => $total_this_page ,
'per_page' => $themes_per_page ,
) );
}
2010-11-17 13:47:34 -05:00
2010-10-31 05:37:15 -04:00
function _search_callback ( $theme ) {
static $term ;
if ( is_null ( $term ) )
$term = stripslashes ( $_REQUEST [ 's' ] );
2010-10-31 19:26:38 -04:00
$search_fields = array ( 'Name' , 'Title' , 'Description' , 'Author' , 'Author Name' , 'Author URI' , 'Template' , 'Stylesheet' );
foreach ( $search_fields as $field )
if ( stripos ( $theme [ $field ], $term ) !== false )
2010-10-31 05:37:15 -04:00
return true ;
return false ;
}
function _order_callback ( $theme_a , $theme_b ) {
global $orderby , $order ;
$a = $theme_a [ $orderby ];
$b = $theme_b [ $orderby ];
if ( $a == $b )
return 0 ;
if ( 'DESC' == $order )
return ( $a < $b ) ? 1 : - 1 ;
else
return ( $a < $b ) ? - 1 : 1 ;
}
function no_items () {
global $themes ;
if ( ! empty ( $themes [ 'all' ] ) )
_e ( 'No themes found.' );
else
_e ( 'You do not appear to have any themes available at this time.' );
}
function get_columns () {
global $status ;
return array (
'cb' => '<input type="checkbox" />' ,
'name' => __ ( 'Theme' ),
'description' => __ ( 'Description' ),
);
}
function get_sortable_columns () {
return array (
'name' => 'name' ,
);
}
function get_views () {
global $totals , $status ;
$status_links = array ();
foreach ( $totals as $type => $count ) {
if ( ! $count )
continue ;
switch ( $type ) {
case 'all' :
$text = _nx ( 'All <span class="count">(%s)</span>' , 'All <span class="count">(%s)</span>' , $count , 'themes' );
break ;
case 'enabled' :
$text = _n ( 'Enabled <span class="count">(%s)</span>' , 'Enabled <span class="count">(%s)</span>' , $count );
break ;
case 'disabled' :
$text = _n ( 'Disabled <span class="count">(%s)</span>' , 'Disabled <span class="count">(%s)</span>' , $count );
break ;
case 'upgrade' :
2010-12-02 16:45:47 -05:00
$text = _n ( 'Update Available <span class="count">(%s)</span>' , 'Update Available <span class="count">(%s)</span>' , $count );
2010-10-31 05:37:15 -04:00
break ;
}
2010-11-17 13:47:34 -05:00
if ( $this -> is_site_themes )
$url = 'site-themes.php?id=' . $this -> site_id ;
else
2010-11-08 16:52:54 -05:00
$url = 'themes.php' ;
2010-12-18 20:11:38 -05:00
if ( 'search' != $type ) {
$status_links [ $type ] = sprintf ( " <a href='%s' %s>%s</a> " ,
2010-12-24 09:19:41 -05:00
esc_url ( add_query_arg ( 'theme_status' , $type , $url ) ),
2010-12-18 20:11:38 -05:00
( $type == $status ) ? ' class="current"' : '' ,
sprintf ( $text , number_format_i18n ( $count ) )
);
}
2010-10-31 05:37:15 -04:00
}
return $status_links ;
}
function get_bulk_actions () {
global $status ;
$actions = array ();
if ( 'enabled' != $status )
2010-12-02 18:49:18 -05:00
$actions [ 'enable-selected' ] = $this -> is_site_themes ? __ ( 'Enable' ) : __ ( 'Network Enable' );
2010-10-31 05:37:15 -04:00
if ( 'disabled' != $status )
2010-12-02 18:49:18 -05:00
$actions [ 'disable-selected' ] = $this -> is_site_themes ? __ ( 'Disable' ) : __ ( 'Network Disable' );
2010-12-21 11:50:16 -05:00
if ( ! $this -> is_site_themes ) {
if ( current_user_can ( 'delete_themes' ) )
$actions [ 'delete-selected' ] = __ ( 'Delete' );
if ( current_user_can ( 'update_themes' ) )
$actions [ 'update-selected' ] = __ ( 'Update' );
}
2010-10-31 05:37:15 -04:00
return $actions ;
}
function bulk_actions ( $which ) {
global $status ;
parent :: bulk_actions ( $which );
}
function current_action () {
return parent :: current_action ();
}
function display_rows () {
2010-11-13 18:47:14 -05:00
foreach ( $this -> items as $key => $theme )
$this -> single_row ( $key , $theme );
}
function single_row ( $key , $theme ) {
2010-10-31 05:37:15 -04:00
global $status , $page , $s ;
$context = $status ;
2010-11-13 18:47:14 -05:00
2010-11-08 16:52:54 -05:00
if ( $this -> is_site_themes )
$url = " site-themes.php?id= { $this -> site_id } & " ;
else
$url = 'themes.php?' ;
2010-10-31 05:37:15 -04:00
2010-11-13 18:47:14 -05:00
// preorder
$actions = array (
'enable' => '' ,
'disable' => '' ,
2010-12-21 11:50:16 -05:00
'edit' => '' ,
'delete' => ''
2010-11-13 18:47:14 -05:00
);
2010-10-31 05:37:15 -04:00
2010-12-24 12:41:36 -05:00
$theme_key = $theme [ 'Stylesheet' ];
2010-11-13 18:47:14 -05:00
if ( empty ( $theme [ 'enabled' ] ) )
2010-12-21 11:50:16 -05:00
$actions [ 'enable' ] = '<a href="' . esc_url ( wp_nonce_url ( $url . 'action=enable&theme=' . $theme_key . '&paged=' . $page . '&s=' . $s , 'enable-theme_' . $theme_key ) ) . '" title="' . esc_attr__ ( 'Enable this theme' ) . '" class="edit">' . ( $this -> is_site_themes ? __ ( 'Enable' ) : __ ( 'Network Enable' ) ) . '</a>' ;
2010-11-13 18:47:14 -05:00
else
2010-12-21 11:50:16 -05:00
$actions [ 'disable' ] = '<a href="' . esc_url ( wp_nonce_url ( $url . 'action=disable&theme=' . $theme_key . '&paged=' . $page . '&s=' . $s , 'disable-theme_' . $theme_key ) ) . '" title="' . esc_attr__ ( 'Disable this theme' ) . '">' . ( $this -> is_site_themes ? __ ( 'Disable' ) : __ ( 'Network Disable' ) ) . '</a>' ;
2010-11-13 18:47:14 -05:00
if ( current_user_can ( 'edit_themes' ) )
2010-12-30 11:09:01 -05:00
$actions [ 'edit' ] = '<a href="' . esc_url ( 'theme-editor.php?theme=' . urlencode ( $theme [ 'Name' ] )) . '" title="' . esc_attr__ ( 'Open this theme in the Theme Editor' ) . '" class="edit">' . __ ( 'Edit' ) . '</a>' ;
2010-12-24 12:41:36 -05:00
if ( empty ( $theme [ 'enabled' ] ) && current_user_can ( 'delete_themes' ) && ! $this -> is_site_themes && $theme_key != get_option ( 'stylesheet' ) && $theme_key != get_option ( 'template' ) )
2010-12-21 11:50:16 -05:00
$actions [ 'delete' ] = '<a href="' . esc_url ( wp_nonce_url ( 'themes.php?action=delete-selected&checked[]=' . $theme_key . '&theme_status=' . $context . '&paged=' . $page . '&s=' . $s , 'bulk-themes' ) ) . '" title="' . esc_attr__ ( 'Delete this theme' ) . '" class="delete">' . __ ( 'Delete' ) . '</a>' ;
2010-10-31 05:37:15 -04:00
2010-11-13 18:47:14 -05:00
$actions = apply_filters ( 'theme_action_links' , array_filter ( $actions ), $theme_key , $theme , $context );
$actions = apply_filters ( " theme_action_links_ $theme_key " , $actions , $theme_key , $theme , $context );
2011-01-05 23:11:14 -05:00
2010-11-13 18:47:14 -05:00
$class = empty ( $theme [ 'enabled' ] ) ? 'inactive' : 'active' ;
2010-12-24 09:19:41 -05:00
$checkbox_id = " checkbox_ " . md5 ( $theme [ 'Name' ]);
2010-11-13 18:47:14 -05:00
$checkbox = " <input type='checkbox' name='checked[]' value=' " . esc_attr ( $theme_key ) . " ' id=' " . $checkbox_id . " ' /><label class='screen-reader-text' for=' " . $checkbox_id . " ' > " . __ ( 'Select' ) . " " . $theme [ 'Name' ] . " </label> " ;
$description = '<p>' . $theme [ 'Description' ] . '</p>' ;
$theme_name = $theme [ 'Name' ];
$id = sanitize_title ( $theme_name );
echo " <tr id=' $id ' class=' $class '> " ;
list ( $columns , $hidden ) = $this -> get_column_info ();
foreach ( $columns as $column_name => $column_display_name ) {
$style = '' ;
if ( in_array ( $column_name , $hidden ) )
$style = ' style="display:none;"' ;
switch ( $column_name ) {
case 'cb' :
echo " <th scope='row' class='check-column'> $checkbox </th> " ;
break ;
case 'name' :
echo " <td class='theme-title' $style ><strong> $theme_name </strong> " ;
echo $this -> row_actions ( $actions , true );
echo " </td> " ;
break ;
case 'description' :
echo " <td class='column-description desc' $style >
< div class = 'theme-description' > $description </ div >
< div class = '$class second theme-version-author-uri' > " ;
$theme_meta = array ();
2010-12-24 09:19:41 -05:00
2010-11-13 18:47:14 -05:00
if ( ! empty ( $theme [ 'Version' ] ) )
$theme_meta [] = sprintf ( __ ( 'Version %s' ), $theme [ 'Version' ] );
2010-12-24 09:19:41 -05:00
if ( ! empty ( $theme [ 'Author' ] ) )
$theme_meta [] = sprintf ( __ ( 'By %s' ), $theme [ 'Author' ] );
2010-11-13 18:47:14 -05:00
if ( ! empty ( $theme [ 'Theme URI' ] ) )
2010-12-21 11:50:16 -05:00
$theme_meta [] = '<a href="' . $theme [ 'Theme URI' ] . '" title="' . esc_attr__ ( 'Visit theme homepage' ) . '">' . __ ( 'Visit Theme Site' ) . '</a>' ;
2010-11-13 18:47:14 -05:00
$theme_meta = apply_filters ( 'theme_row_meta' , $theme_meta , $theme_key , $theme , $status );
echo implode ( ' | ' , $theme_meta );
echo " </div></td> " ;
2010-11-17 13:47:34 -05:00
break ;
2010-11-28 12:39:44 -05:00
2010-11-13 18:47:14 -05:00
default :
echo " <td class=' $column_name column- $column_name ' $style > " ;
do_action ( 'manage_themes_custom_column' , $column_name , $theme_key , $theme );
echo " </td> " ;
}
2010-10-31 05:37:15 -04:00
}
2010-11-13 18:47:14 -05:00
echo " </tr> " ;
2010-11-30 15:31:49 -05:00
if ( $this -> is_site_themes )
remove_action ( " after_theme_row_ $theme_key " , 'wp_theme_update_row' );
2010-11-13 18:47:14 -05:00
do_action ( 'after_theme_row' , $theme_key , $theme , $status );
do_action ( " after_theme_row_ $theme_key " , $theme_key , $theme , $status );
2010-10-31 05:37:15 -04:00
}
}