Wordpress 3.1.2-scripts
[autoinstalls/wordpress.git] / wp-admin / themes.php
index 72589324e74b6bc5a9da761a63e7bf9bf227f7bc..171a0b22acd9d2af31f08a85f01b61f09acb5b4d 100644 (file)
@@ -12,22 +12,26 @@ require_once('./admin.php');
 if ( !current_user_can('switch_themes') && !current_user_can('edit_theme_options') )
        wp_die( __( 'Cheatin’ uh?' ) );
 
-if ( current_user_can('switch_themes') && isset($_GET['action']) ) {
+$wp_list_table = _get_list_table('WP_Themes_List_Table');
+
+if ( current_user_can( 'switch_themes' ) && isset($_GET['action'] ) ) {
        if ( 'activate' == $_GET['action'] ) {
                check_admin_referer('switch-theme_' . $_GET['template']);
                switch_theme($_GET['template'], $_GET['stylesheet']);
-               wp_redirect('themes.php?activated=true');
+               wp_redirect( admin_url('themes.php?activated=true') );
                exit;
-       } else if ( 'delete' == $_GET['action'] ) {
+       } elseif ( 'delete' == $_GET['action'] ) {
                check_admin_referer('delete-theme_' . $_GET['template']);
                if ( !current_user_can('delete_themes') )
                        wp_die( __( 'Cheatin’ uh?' ) );
                delete_theme($_GET['template']);
-               wp_redirect('themes.php?deleted=true');
+               wp_redirect( admin_url('themes.php?deleted=true') );
                exit;
        }
 }
 
+$wp_list_table->prepare_items();
+
 $title = __('Manage Themes');
 $parent_file = 'themes.php';
 
@@ -45,13 +49,12 @@ add_contextual_help($current_screen, $help);
 
 add_thickbox();
 wp_enqueue_script( 'theme-preview' );
+wp_enqueue_script( 'theme' );
+wp_enqueue_style( 'theme-install' );
 
 endif;
 
 require_once('./admin-header.php');
-if ( is_multisite() && current_user_can('edit_themes') ) {
-       ?><div id="message0" class="updated"><p><?php printf( __('Administrator: new themes must be activated in the <a href="%s">Network Themes</a> screen before they appear here.'), admin_url( 'ms-themes.php') ); ?></p></div><?php
-}
 ?>
 
 <?php if ( ! validate_current_theme() ) : ?>
@@ -65,38 +68,20 @@ if ( is_multisite() && current_user_can('edit_themes') ) {
        elseif ( isset($_GET['deleted']) ) : ?>
 <div id="message3" class="updated"><p><?php _e('Theme deleted.') ?></p></div>
 <?php endif; ?>
-<?php
-$themes = get_allowed_themes();
-$ct = current_theme_info();
-unset($themes[$ct->name]);
-
-uksort( $themes, "strnatcasecmp" );
-$theme_total = count( $themes );
-$per_page = 15;
-
-if ( isset( $_GET['pagenum'] ) )
-       $page = absint( $_GET['pagenum'] );
-
-if ( empty($page) )
-       $page = 1;
-
-$start = $offset = ( $page - 1 ) * $per_page;
-
-$page_links = paginate_links( array(
-       'base' => add_query_arg( 'pagenum', '%#%' ) . '#themenav',
-       'format' => '',
-       'prev_text' => __('&laquo;'),
-       'next_text' => __('&raquo;'),
-       'total' => ceil($theme_total / $per_page),
-       'current' => $page
-));
 
-$themes = array_slice( $themes, $start, $per_page );
-?>
-
-<div class="wrap">
-<?php screen_icon(); ?>
-<h2><a href="themes.php" class="nav-tab nav-tab-active"><?php echo esc_html( $title ); ?></a><?php if ( current_user_can('install_themes') ) { ?><a href="theme-install.php" class="nav-tab"><?php echo esc_html_x('Install Themes', 'theme'); ?></a><?php } ?></h2>
+<div class="wrap"><?php
+screen_icon();
+if ( !is_multisite() ) : ?>
+<h2 class="nav-tab-wrapper">
+<a href="themes.php" class="nav-tab nav-tab-active"><?php echo esc_html( $title ); ?></a>
+       <?php if ( current_user_can('install_themes') ) : ?>
+<a href="<?php echo admin_url( 'theme-install.php'); ?>" class="nav-tab"><?php echo esc_html_x('Install Themes', 'theme'); ?></a>
+       <?php endif;
+else : ?>
+<h2>
+<?php echo esc_html( $title ); ?>
+<?php endif; ?>
+</h2>
 
 <h3><?php _e('Current Theme'); ?></h3>
 <div id="current-theme">
@@ -107,19 +92,46 @@ $themes = array_slice( $themes, $start, $per_page );
        /* translators: 1: theme title, 2: theme version, 3: theme author */
        printf(__('%1$s %2$s by %3$s'), $ct->title, $ct->version, $ct->author) ; ?></h4>
 <p class="theme-description"><?php echo $ct->description; ?></p>
-<?php if ( current_user_can('edit_themes') && $ct->parent_theme ) { ?>
-       <p><?php printf(__('The template files are located in <code>%2$s</code>. The stylesheet files are located in <code>%3$s</code>. <strong>%4$s</strong> uses templates from <strong>%5$s</strong>. Changes made to the templates will affect both themes.'), $ct->title, str_replace( WP_CONTENT_DIR, '', $ct->template_dir ), str_replace( WP_CONTENT_DIR, '', $ct->stylesheet_dir ), $ct->title, $ct->parent_theme); ?></p>
-<?php } else { ?>
-       <p><?php printf(__('All of this theme&#8217;s files are located in <code>%2$s</code>.'), $ct->title, str_replace( WP_CONTENT_DIR, '', $ct->template_dir ), str_replace( WP_CONTENT_DIR, '', $ct->stylesheet_dir ) ); ?></p>
-<?php } ?>
-<?php if ( $ct->tags ) : ?>
-<p><?php _e('Tags:'); ?> <?php echo join(', ', $ct->tags); ?></p>
-<?php endif; ?>
+<div class="theme-options">
+       <span><?php _e( 'Options:' )?></span>
+       <?php
+       // Pretend you didn't see this.
+       $options = array();
+       if ( is_array( $submenu ) && isset( $submenu['themes.php'] ) ) {
+               foreach ( (array) $submenu['themes.php'] as $item) {
+                       $class = '';
+                       if ( 'themes.php' == $item[2] || 'theme-editor.php' == $item[2] )
+                               continue;
+                       // 0 = name, 1 = capability, 2 = file
+                       if ( ( strcmp($self, $item[2]) == 0 && empty($parent_file)) || ($parent_file && ($item[2] == $parent_file)) ) $class = ' class="current"';
+
+                       if ( !empty($submenu[$item[2]]) ) {
+                               $submenu[$item[2]] = array_values($submenu[$item[2]]);  // Re-index.
+                               $menu_hook = get_plugin_page_hook($submenu[$item[2]][0][2], $item[2]);
+                               if ( file_exists(ABSPATH . PLUGINDIR . "/{$submenu[$item[2]][0][2]}") || !empty($menu_hook))
+                                       $options[] = "<a href='admin.php?page={$submenu[$item[2]][0][2]}'$class>{$item[0]}</a>";
+                               else
+                                       $options[] = "<a href='{$submenu[$item[2]][0][2]}'$class>{$item[0]}</a>";
+                       } else if ( current_user_can($item[1]) ) {
+                               if ( file_exists(ABSPATH . 'wp-admin/' . $item[2]) ) {
+                                       $options[] = "<a href='{$item[2]}'$class>{$item[0]}</a>";
+                               } else {
+                                       $options[] = "<a href='themes.php?page={$item[2]}'$class>{$item[0]}</a>";
+                               }
+                       }
+               }
+       }
+       echo implode ( ' | ', $options );
+
+       if ( $ct->tags ) : ?>
+       <p><?php _e('Tags:'); ?> <?php echo join(', ', $ct->tags); ?></p>
+       <?php endif; ?>
+</div>
 <?php theme_update_available($ct); ?>
 
 </div>
 
-<div class="clear"></div>
+<br class="clear" />
 <?php
 if ( ! current_user_can( 'switch_themes' ) ) {
        echo '</div>';
@@ -127,121 +139,67 @@ if ( ! current_user_can( 'switch_themes' ) ) {
        exit;
 }
 ?>
-<h3><?php _e('Available Themes'); ?></h3>
-<div class="clear"></div>
-
-<?php if ( $theme_total ) { ?>
-
-<?php if ( $page_links ) : ?>
-<div class="tablenav">
-<div class="tablenav-pages"><?php $page_links_text = sprintf( '<span class="displaying-num">' . __( 'Displaying %s&#8211;%s of %s' ) . '</span>%s',
-       number_format_i18n( $start + 1 ),
-       number_format_i18n( min( $page * $per_page, $theme_total ) ),
-       number_format_i18n( $theme_total ),
-       $page_links
-); echo $page_links_text; ?></div>
-</div>
-<?php endif; ?>
-
-<table id="availablethemes" cellspacing="0" cellpadding="0">
-<?php
-$style = '';
 
-$theme_names = array_keys($themes);
-natcasesort($theme_names);
+<h3><?php _e('Available Themes'); ?></h3>
 
-$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);
+<?php if ( !empty( $_REQUEST['s'] ) || !empty( $_REQUEST['filter'] ) || $wp_list_table->has_items() ) : ?>
+
+<form class="search-form filter-form" action="" method="get">
+
+<p class="search-box">
+       <label class="screen-reader-text" for="theme-search-input"><?php _e('Search Themes'); ?>:</label>
+       <input type="text" id="theme-search-input" name="s" value="<?php _admin_search_query(); ?>" />
+       <?php submit_button( __( 'Search Themes' ), 'button', 'submit', false ); ?>
+       <a id="filter-click" href="?filter=1"><?php _e( 'Feature Filter' ); ?></a>
+</p>
+
+<br class="clear"/>
+
+<div id="filter-box" style="<?php if ( empty($_REQUEST['filter']) ) echo 'display: none;'; ?>">
+<?php $feature_list = get_theme_feature_list(); ?>
+       <div class="feature-filter">
+               <p class="install-help"><?php _e('Theme filters') ?></p>
+       <?php if ( !empty( $_REQUEST['filter'] ) ) : ?>
+               <input type="hidden" name="filter" value="1" />
+       <?php endif; ?>
+       <?php foreach ( $feature_list as $feature_name => $features ) :
+                       $feature_name = esc_html( $feature_name ); ?>
+
+               <div class="feature-container">
+                       <div class="feature-name"><?php echo $feature_name ?></div>
+
+                       <ol class="feature-group">
+                               <?php foreach ( $features as $key => $feature ) :
+                                               $feature_name = $feature;
+                                               $feature_name = esc_html( $feature_name );
+                                               $feature = esc_attr( $feature );
+                                               ?>
+                               <li>
+                                       <input type="checkbox" name="features[]" id="feature-id-<?php echo $key; ?>" value="<?php echo $key; ?>" <?php checked( in_array( $key, $wp_list_table->features ) ); ?>/>
+                                       <label for="feature-id-<?php echo $key; ?>"><?php echo $feature_name; ?></label>
+                               </li>
+                               <?php endforeach; ?>
+                       </ol>
+               </div>
+       <?php endforeach; ?>
+
+       <div class="feature-container">
+               <?php submit_button( __( 'Apply Filters' ), 'button-secondary submitter', 'submit', false, array( 'style' => 'margin-left: 120px' ) ); ?>
+               &nbsp;
+               <small><a id="mini-filter-click" href="<?php echo esc_url( remove_query_arg( array('filter', 'features', 'submit') ) ); ?>"><?php _e( 'Close filters' )?></a></small>
+       </div>
+       <br/>
+       </div>
+       <br class="clear"/>
+</div>
 
-foreach ( $table as $row => $cols ) {
-?>
-<tr>
-<?php
-foreach ( $cols as $col => $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';
-?>
-       <td class="<?php echo join(' ', $class); ?>">
-<?php if ( !empty($theme_name) ) :
-       $template = $themes[$theme_name]['Template'];
-       $stylesheet = $themes[$theme_name]['Stylesheet'];
-       $title = $themes[$theme_name]['Title'];
-       $version = $themes[$theme_name]['Version'];
-       $description = $themes[$theme_name]['Description'];
-       $author = $themes[$theme_name]['Author'];
-       $screenshot = $themes[$theme_name]['Screenshot'];
-       $stylesheet_dir = $themes[$theme_name]['Stylesheet Dir'];
-       $template_dir = $themes[$theme_name]['Template Dir'];
-       $parent_theme = $themes[$theme_name]['Parent Theme'];
-       $theme_root = $themes[$theme_name]['Theme Root'];
-       $theme_root_uri = $themes[$theme_name]['Theme Root URI'];
-       $preview_link = esc_url(get_option('home') . '/');
-       if ( is_ssl() )
-               $preview_link = str_replace( 'http://', 'https://', $preview_link );
-       $preview_link = htmlspecialchars( add_query_arg( array('preview' => 1, 'template' => $template, 'stylesheet' => $stylesheet, 'TB_iframe' => 'true' ), $preview_link ) );
-       $preview_text = esc_attr( sprintf( __('Preview of &#8220;%s&#8221;'), $title ) );
-       $tags = $themes[$theme_name]['Tags'];
-       $thickbox_class = 'thickbox thickbox-preview';
-       $activate_link = wp_nonce_url("themes.php?action=activate&amp;template=".urlencode($template)."&amp;stylesheet=".urlencode($stylesheet), 'switch-theme_' . $template);
-       $activate_text = esc_attr( sprintf( __('Activate &#8220;%s&#8221;'), $title ) );
-       $actions = array();
-       $actions[] = '<a href="' . $activate_link .  '" class="activatelink" title="' . $activate_text . '">' . __('Activate') . '</a>';
-       $actions[] = '<a href="' . $preview_link . '" class="thickbox thickbox-preview" title="' . esc_attr(sprintf(__('Preview &#8220;%s&#8221;'), $theme_name)) . '">' . __('Preview') . '</a>';
-       if ( current_user_can('delete_themes') )
-               $actions[] = '<a class="submitdelete deletion" href="' . wp_nonce_url("themes.php?action=delete&amp;template=$stylesheet", 'delete-theme_' . $stylesheet) . '" onclick="' . "return confirm('" . esc_js(sprintf( __("You are about to delete this theme '%s'\n  'Cancel' to stop, 'OK' to delete."), $theme_name )) . "');" . '">' . __('Delete') . '</a>';
-       $actions = apply_filters('theme_action_links', $actions, $themes[$theme_name]);
-
-       $actions = implode ( ' | ', $actions );
-?>
-               <a href="<?php echo $preview_link; ?>" class="<?php echo $thickbox_class; ?> screenshot">
-<?php if ( $screenshot ) : ?>
-                       <img src="<?php echo $theme_root_uri . '/' . $stylesheet . '/' . $screenshot; ?>" alt="" />
-<?php endif; ?>
-               </a>
-<h3><?php
-       /* translators: 1: theme title, 2: theme version, 3: theme author */
-       printf(__('%1$s %2$s by %3$s'), $title, $version, $author) ; ?></h3>
-<p class="description"><?php echo $description; ?></p>
-<span class='action-links'><?php echo $actions ?></span>
-       <?php if ( current_user_can('edit_themes') && $parent_theme ) {
-       /* translators: 1: theme title, 2:  template dir, 3: stylesheet_dir, 4: theme title, 5: parent_theme */ ?>
-       <p><?php printf(__('The template files are located in <code>%2$s</code>. The stylesheet files are located in <code>%3$s</code>. <strong>%4$s</strong> uses templates from <strong>%5$s</strong>. 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); ?></p>
-<?php } else { ?>
-       <p><?php printf(__('All of this theme&#8217;s files are located in <code>%2$s</code>.'), $title, str_replace( WP_CONTENT_DIR, '', $template_dir ), str_replace( WP_CONTENT_DIR, '', $stylesheet_dir ) ); ?></p>
-<?php } ?>
-<?php if ( $tags ) : ?>
-<p><?php _e('Tags:'); ?> <?php echo join(', ', $tags); ?></p>
-<?php endif; ?>
-               <?php theme_update_available( $themes[$theme_name] ); ?>
-<?php endif; // end if not empty theme_name ?>
-       </td>
-<?php } // end foreach $cols ?>
-</tr>
-<?php } // end foreach $table ?>
-</table>
-<?php } else { ?>
-<p><?php
-       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 <em><a href="%s">Install Themes</a></em> 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'));
-       ?></p>
-<?php } // end if $theme_total?>
 <br class="clear" />
 
-<?php if ( $page_links ) : ?>
-<div class="tablenav">
-<?php echo "<div class='tablenav-pages'>$page_links_text</div>"; ?>
-<br class="clear" />
-</div>
 <?php endif; ?>
 
+<?php $wp_list_table->display(); ?>
+
+</form>
 <br class="clear" />
 
 <?php
@@ -250,7 +208,7 @@ $broken_themes = get_broken_themes();
 if ( current_user_can('edit_themes') && count( $broken_themes ) ) {
 ?>
 
-<h2><?php _e('Broken Themes'); ?> <?php if ( is_multisite() ) _e( '(Site admin only)' ); ?></h2>
+<h3><?php _e('Broken Themes'); ?></h3>
 <p><?php _e('The following themes are installed but incomplete. Themes must have a stylesheet and a template.'); ?></p>
 
 <table id="broken-themes">