WordPress 4.4
[autoinstalls/wordpress.git] / wp-admin / themes.php
index 5c007df79ff5f9fd53231b1cdb3a5fdd74bd21bd..bf65884fb25e0c1d2deb99d536e9cdc5d102fa63 100644 (file)
@@ -9,23 +9,50 @@
 /** WordPress Administration Bootstrap */
 require_once( dirname( __FILE__ ) . '/admin.php' );
 
-if ( !current_user_can('switch_themes') && !current_user_can('edit_theme_options') )
-       wp_die( __( 'Cheatin’ uh?' ), 403 );
+if ( ! current_user_can( 'switch_themes' ) && ! current_user_can( 'edit_theme_options' ) ) {
+       wp_die(
+               '<h1>' . __( 'Cheatin&#8217; uh?' ) . '</h1>' .
+               '<p>' . __( 'You are not allowed to edit theme options on this site.' ) . '</p>',
+               403
+       );
+}
 
 if ( current_user_can( 'switch_themes' ) && isset($_GET['action'] ) ) {
        if ( 'activate' == $_GET['action'] ) {
                check_admin_referer('switch-theme_' . $_GET['stylesheet']);
                $theme = wp_get_theme( $_GET['stylesheet'] );
-               if ( ! $theme->exists() || ! $theme->is_allowed() )
-                       wp_die( __( 'Cheatin&#8217; uh?' ), 403 );
+
+               if ( ! $theme->exists() || ! $theme->is_allowed() ) {
+                       wp_die(
+                               '<h1>' . __( 'Cheatin&#8217; uh?' ) . '</h1>' .
+                               '<p>' . __( 'The requested theme does not exist.' ) . '</p>',
+                               403
+                       );
+               }
+
                switch_theme( $theme->get_stylesheet() );
                wp_redirect( admin_url('themes.php?activated=true') );
                exit;
        } elseif ( 'delete' == $_GET['action'] ) {
                check_admin_referer('delete-theme_' . $_GET['stylesheet']);
                $theme = wp_get_theme( $_GET['stylesheet'] );
-               if ( !current_user_can('delete_themes') || ! $theme->exists() )
-                       wp_die( __( 'Cheatin&#8217; uh?' ), 403 );
+
+               if ( ! current_user_can( 'delete_themes' ) ) {
+                       wp_die(
+                               '<h1>' . __( 'Cheatin&#8217; uh?' ) . '</h1>' .
+                               '<p>' . __( 'You are not allowed to delete this item.' ) . '</p>',
+                               403
+                       );
+               }
+
+               if ( ! $theme->exists() ) {
+                       wp_die(
+                               '<h1>' . __( 'Cheatin&#8217; uh?' ) . '</h1>' .
+                               '<p>' . __( 'The requested theme does not exist.' ) . '</p>',
+                               403
+                       );
+               }
+
                $active = wp_get_theme();
                if ( $active->get( 'Template' ) == $_GET['stylesheet'] ) {
                        wp_redirect( admin_url( 'themes.php?delete-active-child=true' ) );
@@ -225,14 +252,14 @@ foreach ( $themes as $theme ) :
        <div class="theme-author"><?php printf( __( 'By %s' ), $theme['author'] ); ?></div>
 
        <?php if ( $theme['active'] ) { ?>
-               <h3 class="theme-name" id="<?php echo $aria_name; ?>">
+               <h2 class="theme-name" id="<?php echo $aria_name; ?>">
                        <?php
                        /* translators: %s: theme name */
                        printf( __( '<span>Active:</span> %s' ), $theme['name'] );
                        ?>
-               </h3>
+               </h2>
        <?php } else { ?>
-               <h3 class="theme-name" id="<?php echo $aria_name; ?>"><?php echo $theme['name']; ?></h3>
+               <h2 class="theme-name" id="<?php echo $aria_name; ?>"><?php echo $theme['name']; ?></h2>
        <?php } ?>
 
        <div class="theme-actions">
@@ -273,6 +300,7 @@ if ( ! is_multisite() && current_user_can('edit_themes') && $broken_themes = wp_
 
 <?php
 $can_delete = current_user_can( 'delete_themes' );
+$can_install = current_user_can( 'install_themes' );
 ?>
 <table>
        <tr>
@@ -281,7 +309,9 @@ $can_delete = current_user_can( 'delete_themes' );
                <?php if ( $can_delete ) { ?>
                        <td></td>
                <?php } ?>
-               </tr>
+               <?php if ( $can_install ) { ?>
+                       <td></td>
+               <?php } ?>
        </tr>
        <?php foreach ( $broken_themes as $broken_theme ) : ?>
                <tr>
@@ -299,6 +329,22 @@ $can_delete = current_user_can( 'delete_themes' );
                                <td><a href="<?php echo esc_url( $delete_url ); ?>" class="button button-secondary delete-theme"><?php _e( 'Delete' ); ?></a></td>
                                <?php
                        }
+
+                       if ( $can_install && 'theme_no_parent' === $broken_theme->errors()->get_error_code() ) {
+                               $parent_theme_name = $broken_theme->get( 'Template' );
+                               $parent_theme = themes_api( 'theme_information', array( 'slug' => urlencode( $parent_theme_name ) ) );
+
+                               if ( ! is_wp_error( $parent_theme ) ) {
+                                       $install_url = add_query_arg( array(
+                                               'action' => 'install-theme',
+                                               'theme'  => urlencode( $parent_theme_name ),
+                                       ), admin_url( 'update.php' ) );
+                                       $install_url = wp_nonce_url( $install_url, 'install-theme_' . $parent_theme_name );
+                                       ?>
+                                       <td><a href="<?php echo esc_url( $install_url ); ?>" class="button button-secondary install-theme"><?php _e( 'Install Parent Theme' ); ?></a></td>
+                                       <?php
+                               }
+                       }
                        ?>
                </tr>
        <?php endforeach; ?>
@@ -327,21 +373,21 @@ $can_delete = current_user_can( 'delete_themes' );
        <div class="theme-author"><?php printf( __( 'By %s' ), '{{{ data.author }}}' ); ?></div>
 
        <# if ( data.active ) { #>
-               <h3 class="theme-name" id="{{ data.id }}-name">
+               <h2 class="theme-name" id="{{ data.id }}-name">
                        <?php
                        /* translators: %s: theme name */
                        printf( __( '<span>Active:</span> %s' ), '{{{ data.name }}}' );
                        ?>
-               </h3>
+               </h2>
        <# } else { #>
-               <h3 class="theme-name" id="{{ data.id }}-name">{{{ data.name }}}</h3>
+               <h2 class="theme-name" id="{{ data.id }}-name">{{{ data.name }}}</h2>
        <# } #>
 
        <div class="theme-actions">
 
        <# if ( data.active ) { #>
                <# if ( data.actions.customize ) { #>
-                       <a class="button button-primary customize load-customize hide-if-no-customize" href="{{ data.actions.customize }}"><?php _e( 'Customize' ); ?></a>
+                       <a class="button button-primary customize load-customize hide-if-no-customize" href="{{{ data.actions.customize }}}"><?php _e( 'Customize' ); ?></a>
                <# } #>
        <# } else { #>
                <a class="button button-secondary activate" href="{{{ data.actions.activate }}}"><?php _e( 'Activate' ); ?></a>
@@ -376,12 +422,12 @@ $can_delete = current_user_can( 'delete_themes' );
                                <# if ( data.active ) { #>
                                        <span class="current-label"><?php _e( 'Current Theme' ); ?></span>
                                <# } #>
-                               <h3 class="theme-name">{{{ data.name }}}<span class="theme-version"><?php printf( __( 'Version: %s' ), '{{ data.version }}' ); ?></span></h3>
-                               <h4 class="theme-author"><?php printf( __( 'By %s' ), '{{{ data.authorAndUri }}}' ); ?></h4>
+                               <h2 class="theme-name">{{{ data.name }}}<span class="theme-version"><?php printf( __( 'Version: %s' ), '{{ data.version }}' ); ?></span></h2>
+                               <p class="theme-author"><?php printf( __( 'By %s' ), '{{{ data.authorAndUri }}}' ); ?></p>
 
                                <# if ( data.hasUpdate ) { #>
-                               <div class="theme-update-message">
-                                       <h4 class="theme-update"><?php _e( 'Update Available' ); ?></h4>
+                               <div class="notice notice-warning notice-alt notice-large">
+                                       <h3 class="notice-title"><?php _e( 'Update Available' ); ?></h3>
                                        {{{ data.update }}}
                                </div>
                                <# } #>