X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/f9001779751f83dc8a10e478bfecb4d8dd5f964c..6c8f14c09105d0afa4c1574215c59b5021040e76:/wp-admin/includes/class-wp-themes-list-table.php
diff --git a/wp-admin/includes/class-wp-themes-list-table.php b/wp-admin/includes/class-wp-themes-list-table.php
index 91e1d254..420495ef 100644
--- a/wp-admin/includes/class-wp-themes-list-table.php
+++ b/wp-admin/includes/class-wp-themes-list-table.php
@@ -9,60 +9,56 @@
*/
class WP_Themes_List_Table extends WP_List_Table {
- var $search = array();
+ protected $search_terms = array();
var $features = array();
+ function __construct( $args = array() ) {
+ parent::__construct( array(
+ 'ajax' => true,
+ 'screen' => isset( $args['screen'] ) ? $args['screen'] : null,
+ ) );
+ }
+
function ajax_user_can() {
// Do not check edit_theme_options here. AJAX calls for available themes require switch_themes.
- return current_user_can('switch_themes');
+ return current_user_can( 'switch_themes' );
}
function prepare_items() {
- global $ct;
-
- $ct = current_theme_info();
-
- $themes = get_allowed_themes();
-
- $search = !empty( $_REQUEST['s'] ) ? trim( stripslashes( $_REQUEST['s'] ) ) : '';
+ $themes = wp_get_themes( array( 'allowed' => true ) );
- if ( '' !== $search ) {
- $this->search = array_merge( $this->search, array_filter( array_map( 'trim', explode( ',', $search ) ) ) );
- $this->search = array_unique( $this->search );
- }
+ if ( ! empty( $_REQUEST['s'] ) )
+ $this->search_terms = array_unique( array_filter( array_map( 'trim', explode( ',', strtolower( stripslashes( $_REQUEST['s'] ) ) ) ) ) );
- if ( !empty( $_REQUEST['features'] ) ) {
+ if ( ! empty( $_REQUEST['features'] ) )
$this->features = $_REQUEST['features'];
- $this->features = array_map( 'trim', $this->features );
- $this->features = array_map( 'sanitize_title_with_dashes', $this->features );
- $this->features = array_unique( $this->features );
- }
- if ( $this->search || $this->features ) {
+ if ( $this->search_terms || $this->features ) {
foreach ( $themes as $key => $theme ) {
- if ( !$this->search_theme( $theme ) )
+ if ( ! $this->search_theme( $theme ) )
unset( $themes[ $key ] );
}
}
- unset( $themes[$ct->name] );
- uksort( $themes, "strnatcasecmp" );
+ unset( $themes[ get_option( 'stylesheet' ) ] );
+ WP_Theme::sort_by_name( $themes );
- $per_page = 15;
+ $per_page = 36;
$page = $this->get_pagenum();
$start = ( $page - 1 ) * $per_page;
- $this->items = array_slice( $themes, $start, $per_page );
+ $this->items = array_slice( $themes, $start, $per_page, true );
$this->set_pagination_args( array(
'total_items' => count( $themes ),
'per_page' => $per_page,
+ 'infinite_scroll' => true,
) );
}
function no_items() {
- if ( $this->search || $this->features ) {
+ if ( $this->search_terms || $this->features ) {
_e( 'No items found.' );
return;
}
@@ -93,24 +89,22 @@ class WP_Themes_List_Table extends WP_List_Table {
if ( $this->get_pagination_arg( 'total_pages' ) <= 1 )
return;
?>
-
+
pagination( $which ); ?>
-
-
+
+
tablenav( 'top' ); ?>
-
-
- display_rows_or_placeholder(); ?>
-
-
+
+ display_rows_or_placeholder(); ?>
+
tablenav( '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, 'preview_iframe' => true, '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 ( ! is_multisite() && 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 ) ); ?>
-
-
-
-
-
-
- |
-
-
-
get_template();
+ $stylesheet = $theme->get_stylesheet();
+ $title = $theme->display('Name');
+ $version = $theme->display('Version');
+ $author = $theme->display('Author');
+
+ $activate_link = wp_nonce_url( "themes.php?action=activate&template=" . urlencode( $template ) . "&stylesheet=" . urlencode( $stylesheet ), 'switch-theme_' . $stylesheet );
+
+ $preview_link = esc_url( add_query_arg(
+ array( 'preview' => 1, 'template' => urlencode( $template ), 'stylesheet' => urlencode( $stylesheet ), 'preview_iframe' => true, 'TB_iframe' => 'true' ),
+ home_url( '/' ) ) );
+
+ $actions = array();
+ $actions['activate'] = '
' . __( 'Activate' ) . '';
+
+ $actions['preview'] = '
' . __( 'Preview' ) . '';
+
+ if ( current_user_can( 'edit_theme_options' ) )
+ $actions['preview'] .= '
'
+ . __( 'Live Preview' ) . '';
+
+ if ( ! is_multisite() && current_user_can( 'delete_themes' ) )
+ $actions['delete'] = '
' . __( 'Delete' ) . '';
+
+ $actions = apply_filters( 'theme_action_links', $actions, $theme );
+ $delete_action = isset( $actions['delete'] ) ? '
' . $actions['delete'] . '
' : '';
+ unset( $actions['delete'] );
+
+ ?>
+
+
+ get_screenshot() ) : ?>
+
+
+
+
+ get_screenshot() ) : ?>
+
+
+
+
+
+
+
+
+
+
+
display('Description'); ?>
+ parent() ) {
+ printf( '
' . __( 'This child theme requires its parent theme, %2$s.' ) . '
',
+ __( 'http://codex.wordpress.org/Child_Themes' ),
+ $theme->parent()->display( 'Name' ) );
+ } ?>
+
+
+
+ features as $word ) {
+ if ( ! in_array( $word, $theme->get('Tags') ) )
+ return false;
+ }
// Match all phrases
- if ( count( $this->search ) > 0 ) {
- foreach ( $this->search as $word ) {
- $matched = 0;
-
- // In a tag?
- if ( in_array( $word, array_map( 'sanitize_title_with_dashes', $theme['Tags'] ) ) )
- $matched = 1;
-
- // In one of the fields?
- foreach ( array( 'Name', 'Title', 'Description', 'Author', 'Template', 'Stylesheet' ) AS $field ) {
- if ( stripos( $theme[$field], $word ) !== false )
- $matched++;
- }
-
- if ( $matched == 0 )
- return false;
+ foreach ( $this->search_terms as $word ) {
+ if ( in_array( $word, $theme->get('Tags') ) )
+ continue;
+
+ foreach ( array( 'Name', 'Description', 'Author', 'AuthorURI' ) as $header ) {
+ // Don't mark up; Do translate.
+ if ( false !== stripos( $theme->display( $header, false, true ), $word ) )
+ continue 2;
}
- }
- // Now search the features
- if ( count( $this->features ) > 0 ) {
- foreach ( $this->features as $word ) {
- // In a tag?
- if ( !in_array( $word, array_map( 'sanitize_title_with_dashes', $theme['Tags'] ) ) )
- return false;
- }
+ if ( false !== stripos( $theme->get_stylesheet(), $word ) )
+ continue;
+
+ if ( false !== stripos( $theme->get_template(), $word ) )
+ continue;
+
+ return false;
}
- // Only get here if each word exists in the tags or one of the fields
return true;
}
-}
-?>
+ /**
+ * Send required variables to JavaScript land
+ *
+ * @since 3.4
+ * @access private
+ *
+ * @uses $this->features Array of all feature search terms.
+ * @uses get_pagenum()
+ * @uses _pagination_args['total_pages']
+ */
+ function _js_vars( $extra_args = array() ) {
+ $search_string = isset( $_REQUEST['s'] ) ? esc_attr( stripslashes( $_REQUEST['s'] ) ) : '';
+
+ $args = array(
+ 'search' => $search_string,
+ 'features' => $this->features,
+ 'paged' => $this->get_pagenum(),
+ 'total_pages' => ! empty( $this->_pagination_args['total_pages'] ) ? $this->_pagination_args['total_pages'] : 1,
+ );
+
+ if ( is_array( $extra_args ) )
+ $args = array_merge( $args, $extra_args );
+
+ printf( "\n", json_encode( $args ) );
+ parent::_js_vars();
+ }
+}