Changeset 20029
- Timestamp:
- 02/28/2012 09:24:44 PM (13 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/wp-admin/includes/class-wp-ms-themes-list-table.php
r20022 r20029 51 51 52 52 function prepare_items() { 53 global $status, $t hemes, $totals, $page, $orderby, $order, $s;53 global $status, $totals, $page, $orderby, $order, $s; 54 54 55 55 wp_reset_vars( array( 'orderby', 'order', 's' ) ); 56 56 57 57 $themes = array( 58 'all' => apply_filters( 'all_themes', get_themes() ),58 'all' => apply_filters( 'all_themes', wp_get_themes() ), 59 59 'search' => array(), 60 60 'enabled' => array(), … … 63 63 ); 64 64 65 $site_allowed_themes = get_site_allowed_themes(); 66 if ( !$this->is_site_themes ) { 67 $allowed_themes = $site_allowed_themes; 65 if ( $this->is_site_themes ) { 66 $themes_per_page = $this->get_items_per_page( 'site_themes_network_per_page' ); 67 $allowed_where = 'site'; 68 } else { 68 69 $themes_per_page = $this->get_items_per_page( 'themes_network_per_page' ); 69 } else { 70 $allowed_themes = wpmu_get_blog_allowedthemes( $this->site_id ); 71 $themes_per_page = $this->get_items_per_page( 'site_themes_network_per_page' ); 72 } 73 74 $current = get_site_transient( 'update_themes' ); 70 $allowed_where = 'network'; 71 } 72 73 $current = current_user_can( 'update_themes' ) && ! $this->is_site_themes && get_site_transient( 'update_themes' ); 75 74 76 75 foreach ( (array) $themes['all'] as $key => $theme ) { 77 $theme_key = $theme['Stylesheet']; 78 79 if ( isset( $allowed_themes [ $theme_key ] ) ) { 80 $themes['all'][$key]['enabled'] = true; 81 $themes['enabled'][$key] = $themes['all'][$key]; 82 } 83 else { 84 $themes['all'][$key]['enabled'] = false; 85 $themes['disabled'][$key] = $themes['all'][$key]; 86 } 87 if ( isset( $current->response[ $theme['Template'] ] ) ) 88 $themes['upgrade'][$key] = $themes['all'][$key]; 89 90 if ( $this->is_site_themes && isset( $site_allowed_themes[$theme_key] ) ) { 91 unset( $themes['all'][$key] ); 92 unset( $themes['enabled'][$key] ); 93 unset( $themes['disabled'][$key] ); 94 } 95 } 96 97 if ( !current_user_can( 'update_themes' ) || $this->is_site_themes ) 98 $themes['upgrade'] = array(); 76 if ( $this->is_site_themes && $theme->is_allowed( 'network' ) ) { 77 unset( $themes['all'][ $key ] ); 78 continue; 79 } 80 81 $filter = $theme->is_allowed( $allowed_where, $this->site_id ) ? 'enabled' : 'disabled'; 82 $themes[ $filter ][ $key ] = $themes['all'][ $key ]; 83 84 if ( $current && isset( $current->response[ $key ] ) ) 85 $themes['upgrade'][ $key ] = $themes['all'][ $key ]; 86 } 99 87 100 88 if ( $s ) { … … 111 99 112 100 $this->items = $themes[ $status ]; 101 WP_Theme::sort_by_name( $this->items ); 102 103 $this->has_items = ! empty( $themes['all'] ); 113 104 $total_this_page = $totals[ $status ]; 114 105 … … 117 108 $order = strtoupper( $order ); 118 109 119 uasort( $this->items, array( &$this, '_order_callback' ) ); 110 if ( $orderby == 'Name' ) { 111 if ( 'ASC' == $order ) 112 $this->items = array_reverse( $this->items ); 113 } else { 114 uasort( $this->items, array( &$this, '_order_callback' ) ); 115 } 120 116 } 121 117 … … 123 119 124 120 if ( $total_this_page > $themes_per_page ) 125 $this->items = array_slice( $this->items, $start, $themes_per_page );121 $this->items = array_slice( $this->items, $start, $themes_per_page, true ); 126 122 127 123 $this->set_pagination_args( array( … … 136 132 $term = stripslashes( $_REQUEST['s'] ); 137 133 138 $search_fields = array( 'Name', 'Title', 'Description', 'Author', 'Author Name', 'Author URI', 'Template', 'Stylesheet' );139 foreach ( $search_fields as $field )140 if ( stripos( $theme[ $field ], $term ) !== false)134 foreach ( array( 'Name', 'Description', 'Author', 'Author', 'AuthorURI' ) as $field ) { 135 // Don't mark up; Do translate. 136 if ( false !== stripos( $theme->display( $field, false, true ), $term ) ) 141 137 return true; 138 } 139 140 if ( false !== stripos( $theme->get_stylesheet(), $term ) ) 141 return true; 142 143 if ( false !== stripos( $theme->get_template(), $term ) ) 144 return true; 142 145 143 146 return false; 144 147 } 145 148 149 // Not used by any core columns. 146 150 function _order_callback( $theme_a, $theme_b ) { 147 151 global $orderby, $order; 148 152 149 $a = $theme_a[ $orderby];150 $b = $theme_b[ $orderby];153 $a = $theme_a[ $orderby ]; 154 $b = $theme_b[ $orderby ]; 151 155 152 156 if ( $a == $b ) … … 160 164 161 165 function no_items() { 162 global $themes; 163 164 if ( !empty( $themes['all'] ) ) 166 if ( ! $$this->has_items ) 165 167 _e( 'No themes found.' ); 166 168 else … … 260 262 $context = $status; 261 263 262 if ( $this->is_site_themes ) 264 if ( $this->is_site_themes ) { 263 265 $url = "site-themes.php?id={$this->site_id}&"; 264 else 266 $allowed = $theme->is_allowed( 'site', $this->site_id ); 267 } else { 265 268 $url = 'themes.php?'; 269 $allowed = $theme->is_allowed( 'network' ); 270 } 266 271 267 272 // preorder … … 273 278 ); 274 279 275 $theme_key = $theme ['Stylesheet'];276 277 if ( empty( $theme['enabled'] ))280 $theme_key = $theme->get_stylesheet(); 281 282 if ( ! $allowed ) 278 283 $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>'; 279 284 else … … 281 286 282 287 if ( current_user_can('edit_themes') ) 283 $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>';284 285 if ( empty( $theme['enabled'] )&& current_user_can( 'delete_themes' ) && ! $this->is_site_themes && $theme_key != get_option( 'stylesheet' ) && $theme_key != get_option( 'template' ) )288 $actions['edit'] = '<a href="' . esc_url('theme-editor.php?theme=' . $theme_key ) . '" title="' . esc_attr__('Open this theme in the Theme Editor') . '" class="edit">' . __('Edit') . '</a>'; 289 290 if ( ! $allowed && current_user_can( 'delete_themes' ) && ! $this->is_site_themes && $theme_key != get_option( 'stylesheet' ) && $theme_key != get_option( 'template' ) ) 286 291 $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>'; 287 292 … … 289 294 $actions = apply_filters( "theme_action_links_$theme_key", $actions, $theme_key, $theme, $context ); 290 295 291 $class = empty( $theme['enabled'] ) ? 'inactive' : 'active'; 292 $checkbox_id = "checkbox_" . md5($theme['Name']); 293 $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>"; 294 295 $description = '<p>' . $theme['Description'] . '</p>'; 296 $theme_name = $theme['Name']; 297 298 $id = sanitize_title( $theme_name ); 296 $class = ! $allowed ? 'inactive' : 'active'; 297 $checkbox_id = "checkbox_" . md5( $theme->get('Name') ); 298 $checkbox = "<input type='checkbox' name='checked[]' value='" . esc_attr( $theme_key ) . "' id='" . $checkbox_id . "' /><label class='screen-reader-text' for='" . $checkbox_id . "' >" . __('Select') . " " . $theme->display('Name') . "</label>"; 299 300 $description = '<p>' . $theme->display( 'Description' ) . '</p>'; 301 302 $id = sanitize_html_class( $theme->get_stylesheet() ); 299 303 300 304 echo "<tr id='$id' class='$class'>"; … … 312 316 break; 313 317 case 'name': 314 echo "<td class='theme-title'$style><strong> $theme_name</strong>";318 echo "<td class='theme-title'$style><strong>" . $theme->display('Name') . "</strong>"; 315 319 echo $this->row_actions( $actions, true ); 316 320 echo "</td>"; … … 318 322 case 'description': 319 323 echo "<td class='column-description desc'$style> 320 <div class='theme-description'> $description</div>324 <div class='theme-description'>" . $theme->display( 'Description' ) . "</div> 321 325 <div class='$class second theme-version-author-uri'>"; 322 326 323 327 $theme_meta = array(); 324 328 325 if ( !empty( $theme['Version']) )326 $theme_meta[] = sprintf( __( 'Version %s' ), $theme ['Version']);327 328 if ( !empty( $theme['Author']) )329 $theme_meta[] = sprintf( __( 'By %s' ), $theme ['Author']);330 331 if ( !empty( $theme['Theme URI']) )332 $theme_meta[] = '<a href="' . $theme ['Theme URI']. '" title="' . esc_attr__( 'Visit theme homepage' ) . '">' . __( 'Visit Theme Site' ) . '</a>';329 if ( $theme->get('Version') ) 330 $theme_meta[] = sprintf( __( 'Version %s' ), $theme->display('Version') ); 331 332 if ( $theme->get('Author') ) 333 $theme_meta[] = sprintf( __( 'By %s' ), $theme->display('Author') ); 334 335 if ( $theme->get('ThemeURI') ) 336 $theme_meta[] = '<a href="' . $theme->display('ThemeURI') . '" title="' . esc_attr__( 'Visit theme homepage' ) . '">' . __( 'Visit Theme Site' ) . '</a>'; 333 337 334 338 $theme_meta = apply_filters( 'theme_row_meta', $theme_meta, $theme_key, $theme, $status ); -
trunk/wp-admin/includes/class-wp-themes-list-table.php
r20027 r20029 25 25 26 26 function prepare_items() { 27 global $ct; 28 29 $ct = current_theme_info(); 30 31 $themes = get_allowed_themes(); 27 $themes = wp_get_themes( array( 'allowed' => true ) ); 32 28 33 29 if ( ! empty( $_REQUEST['s'] ) ) { … … 46 42 if ( $this->search || $this->features ) { 47 43 foreach ( $themes as $key => $theme ) { 48 if ( ! $this->search_theme( $theme ) )44 if ( ! $this->search_theme( $theme ) ) 49 45 unset( $themes[ $key ] ); 50 46 } 51 47 } 52 48 53 unset( $themes[ $ct->name] );54 uksort( $themes, "strnatcasecmp");49 unset( $themes[ get_option( 'stylesheet' ) ] ); 50 WP_Theme::sort_by_name( $themes ); 55 51 56 52 $per_page = 999; … … 126 122 function display_rows() { 127 123 $themes = $this->items; 128 $theme_names = array_keys( $themes ); 129 natcasesort( $theme_names ); 130 131 foreach ( $theme_names as $theme_name ) { 132 $class = array( 'available-theme' ); 133 ?> 134 <div class="<?php echo join( ' ', $class ); ?>"> 135 <?php if ( !empty( $theme_name ) ) : 136 $template = $themes[$theme_name]['Template']; 137 $stylesheet = $themes[$theme_name]['Stylesheet']; 138 $title = $themes[$theme_name]['Title']; 139 $version = $themes[$theme_name]['Version']; 140 $description = $themes[$theme_name]['Description']; 141 $author = $themes[$theme_name]['Author']; 142 $screenshot = $themes[$theme_name]['Screenshot']; 143 $stylesheet_dir = $themes[$theme_name]['Stylesheet Dir']; 144 $template_dir = $themes[$theme_name]['Template Dir']; 145 $parent_theme = $themes[$theme_name]['Parent Theme']; 146 $theme_root = $themes[$theme_name]['Theme Root']; 147 $theme_root_uri = $themes[$theme_name]['Theme Root URI']; 148 $preview_link = esc_url( add_query_arg( array( 'preview' => 1, 'template' => $template, 'stylesheet' => $stylesheet, 'preview_iframe' => true, 'TB_iframe' => 'true' ), home_url( '/' ) ) ); 149 $preview_text = esc_attr( sprintf( __( 'Preview of “%s”' ), $title ) ); 150 $tags = $themes[$theme_name]['Tags']; 151 $thickbox_class = 'thickbox thickbox-preview'; 152 $activate_link = wp_nonce_url( "themes.php?action=activate&template=" . urlencode( $template ) . "&stylesheet=" . urlencode( $stylesheet ), 'switch-theme_' . $template ); 153 $activate_text = esc_attr( sprintf( __( 'Activate “%s”' ), $title ) ); 154 $actions = array(); 155 $actions[] = '<a href="' . $activate_link . '" class="activatelink" title="' . $activate_text . '">' . __( 'Activate' ) . '</a>'; 156 $actions[] = '<a href="' . $preview_link . '" class="thickbox thickbox-preview" title="' . esc_attr( sprintf( __( 'Preview “%s”' ), $theme_name ) ) . '">' . __( 'Preview' ) . '</a>'; 157 if ( ! is_multisite() && current_user_can( 'delete_themes' ) ) 158 $actions[] = '<a class="submitdelete deletion" href="' . wp_nonce_url( "themes.php?action=delete&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>'; 159 $actions = apply_filters( 'theme_action_links', $actions, $themes[$theme_name] ); 160 161 $actions = implode ( ' | ', $actions ); 162 ?> 163 <a href="<?php echo $preview_link; ?>" class="<?php echo $thickbox_class; ?> screenshot"> 164 <?php if ( $screenshot ) : ?> 165 <img src="<?php echo $theme_root_uri . '/' . $stylesheet . '/' . $screenshot; ?>" alt="" /> 166 <?php endif; ?> 167 </a> 168 <h3><?php 169 /* translators: 1: theme title, 2: theme version, 3: theme author */ 170 printf( __( '%1$s %2$s by %3$s' ), $title, $version, $author ) ; ?></h3> 171 172 <span class='action-links'><?php echo $actions ?></span> 173 <span class="separator hide-if-no-js">| </span><a href="#" class="theme-detail hide-if-no-js" tabindex='4'><?php _e('Details') ?></a> 174 <div class="themedetaildiv hide-if-js"> 175 <p><?php echo $description; ?></p> 176 <?php if ( current_user_can( 'edit_themes' ) && $parent_theme ) { 177 /* translators: 1: theme title, 2: template dir, 3: stylesheet_dir, 4: theme title, 5: parent_theme */ ?> 178 <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> 179 <?php } else { ?> 180 <p><?php printf( __( 'All of this theme’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> 181 <?php } ?> 182 <?php if ( $tags ) : ?> 183 <p><?php _e( 'Tags:' ); ?> <?php echo join( ', ', $tags ); ?></p> 184 <?php endif; ?> 185 <?php endif; // end if not empty theme_name ?> 186 </div> 187 <?php theme_update_available( $themes[$theme_name] ); ?> 188 </div> 189 <?php } // end foreach $theme_names 124 125 foreach ( $themes as $theme ) { 126 echo '<div class="available-theme">'; 127 128 $template = $theme->get_template(); 129 $stylesheet = $theme->get_stylesheet(); 130 131 $title = $theme->display('Name'); 132 $version = $theme->display('Version'); 133 $author = $theme->display('Author'); 134 135 $activate_link = wp_nonce_url( "themes.php?action=activate&template=" . urlencode( $template ) . "&stylesheet=" . urlencode( $stylesheet ), 'switch-theme_' . $template ); 136 $preview_link = esc_url( add_query_arg( 137 array( 'preview' => 1, 'template' => $template, 'stylesheet' => $stylesheet, 'preview_iframe' => true, 'TB_iframe' => 'true' ), 138 home_url( '/' ) ) ); 139 140 $actions = array(); 141 $actions[] = '<a href="' . $activate_link . '" class="activatelink" title="' 142 . esc_attr( sprintf( __( 'Activate “%s”' ), $title ) ) . '">' . __( 'Activate' ) . '</a>'; 143 $actions[] = '<a href="' . $preview_link . '" class="thickbox thickbox-preview" title="' 144 . esc_attr( sprintf( __( 'Preview “%s”' ), $title ) ) . '">' . __( 'Preview' ) . '</a>'; 145 if ( ! is_multisite() && current_user_can( 'delete_themes' ) ) 146 $actions[] = '<a class="submitdelete deletion" href="' . wp_nonce_url( "themes.php?action=delete&template=$stylesheet", 'delete-theme_' . $stylesheet ) 147 . '" onclick="' . "return confirm( '" . esc_js( sprintf( __( "You are about to delete this theme '%s'\n 'Cancel' to stop, 'OK' to delete." ), $title ) ) 148 . "' );" . '">' . __( 'Delete' ) . '</a>'; 149 150 $actions = apply_filters( 'theme_action_links', $actions, $theme ); 151 152 $actions = implode ( ' | ', $actions ); 153 ?> 154 <a href="<?php echo $preview_link; ?>" class="thickbox thickbox-preview screenshot"> 155 <?php if ( $theme->get_screenshot() ) : ?> 156 <img src="<?php echo esc_url( $theme->get_screenshot( 'absolute' ) ); ?>" alt="" /> 157 <?php endif; ?> 158 </a> 159 <h3><?php 160 /* translators: 1: theme title, 2: theme version, 3: theme author */ 161 printf( __( '%1$s %2$s by %3$s' ), $title, $version, $author ) ; ?></h3> 162 163 <span class='action-links'><?php echo $actions ?></span> 164 <span class="separator hide-if-no-js">| </span><a href="#" class="theme-detail hide-if-no-js" tabindex='4'><?php _e('Details') ?></a> 165 <div class="themedetaildiv hide-if-js"> 166 <p><?php echo $theme->display('Description'); ?></p> 167 <?php if ( current_user_can( 'edit_themes' ) && $theme->parent() ) : 168 /* translators: 1: theme title, 2: template dir, 3: stylesheet_dir, 4: theme title, 5: parent_theme */ ?> 169 <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.' ), 170 $title, str_replace( WP_CONTENT_DIR, '', $theme->get_template_directory() ), str_replace( WP_CONTENT_DIR, '', $theme->get_stylesheet_directory() ), $title, $theme->parent()->display('Name') ); ?></p> 171 <?php else : 172 /* translators: 1: theme title, 2: template dir, 3: stylesheet_dir */ ?> 173 <p><?php printf( __( 'All of this theme’s files are located in <code>%2$s</code>.' ), 174 $title, str_replace( WP_CONTENT_DIR, '', $theme->get_template_directory() ), str_replace( WP_CONTENT_DIR, '', $theme->get_stylesheet_directory() ) ); ?></p> 175 <?php endif; ?> 176 <?php 177 if ( $theme->get('Tags') ) 178 printf( '<p>' . __( 'Tags: %s.' ) . '</p>', $theme->display('Tags') ); 179 ?> 180 </div> 181 <?php theme_update_available( $theme ); ?> 182 </div> 183 <?php 184 } 190 185 } 191 186 … … 194 189 if ( $this->features ) { 195 190 foreach ( $this->features as $word ) { 196 if ( ! in_array( $word, $theme ['Tags']) )191 if ( ! in_array( $word, $theme->get('Tags') ) ) 197 192 return false; 198 193 } … … 202 197 if ( $this->search ) { 203 198 foreach ( $this->search as $word ) { 204 if ( in_array( $word, $theme ['Tags']) )199 if ( in_array( $word, $theme->get('Tags') ) ) 205 200 continue; 206 } 207 208 foreach ( array( 'Name', 'Title', 'Description', 'Author', 'Template', 'Stylesheet' ) as $header ) { 209 if ( false !== stripos( $theme[ $header ], $word ) ) 210 continue 2; 211 } 212 213 return false; 201 202 foreach ( array( 'Name', 'Description', 'Author', 'AuthorURI' ) as $header ) { 203 // Don't mark up; Do translate. 204 if ( false !== stripos( $theme->display( $header, false, true ), $word ) ) 205 continue 2; 206 } 207 208 if ( false !== stripos( $theme->get_stylesheet(), $word ) ) 209 continue; 210 211 if ( false !== stripos( $theme->get_template(), $word ) ) 212 continue; 213 214 return false; 215 } 214 216 } 215 217 -
trunk/wp-admin/includes/dashboard.php
r19712 r20029 384 384 385 385 echo "\n\t".'<div class="versions">'; 386 $ ct = current_theme_info();386 $theme = wp_get_theme(); 387 387 388 388 echo "\n\t<p>"; 389 389 390 if ( empty( $ct->stylesheet_dir) ) {390 if ( $theme->errors() ) { 391 391 if ( ! is_multisite() || is_super_admin() ) 392 392 echo '<span class="error-message">' . __('ERROR: The themes directory is either empty or doesn’t exist. Please check your installation.') . '</span>'; … … 402 402 $num = number_format_i18n( $num_widgets ); 403 403 404 $switch_themes = $ ct->title;404 $switch_themes = $theme->display('Name'); 405 405 if ( current_user_can( 'switch_themes') ) 406 406 $switch_themes = '<a href="themes.php">' . $switch_themes . '</a>'; … … 412 412 } else { 413 413 if ( current_user_can( 'switch_themes' ) ) 414 printf( __('Theme <span class="b"><a href="themes.php">%1$s</a></span>'), $ ct->title);414 printf( __('Theme <span class="b"><a href="themes.php">%1$s</a></span>'), $theme->display('Name') ); 415 415 else 416 printf( __('Theme <span class="b">%1$s</span>'), $ ct->title);416 printf( __('Theme <span class="b">%1$s</span>'), $theme->display('Name') ); 417 417 } 418 418 echo '</p>'; … … 1314 1314 <h4><span class="icon16 icon-appearance"></span> <?php _e( 'Customize Your Site' ); ?></h4> 1315 1315 <?php 1316 $ ct = current_theme_info();1317 if ( empty ( $ct->stylesheet_dir) ) :1316 $theme = wp_get_theme(); 1317 if ( $theme->errors() ) : 1318 1318 echo '<p>'; 1319 1319 printf( __( '<a href="%s">Install a theme</a> to get started customizing your site.' ), esc_url( admin_url( 'themes.php' ) ) ); … … 1321 1321 else: 1322 1322 $customize_links = array(); 1323 if ( 'twentyeleven' == $ ct->stylesheet)1323 if ( 'twentyeleven' == $theme->get_stylesheet() ) 1324 1324 $customize_links[] = sprintf( __( '<a href="%s">Choose light or dark</a>' ), esc_url( admin_url( 'themes.php?page=theme_options' ) ) ); 1325 1325 … … 1335 1335 if ( ! empty( $customize_links ) ) { 1336 1336 echo '<p>'; 1337 printf( __( 'Use the current theme — %1$s — or <a href="%2$s">choose a new one</a>. If you stick with % 3$s, here are a few ways to make your site look unique.' ), $ct->title, esc_url( admin_url( 'themes.php' ) ), $ct->title);1337 printf( __( 'Use the current theme — %1$s — or <a href="%2$s">choose a new one</a>. If you stick with %1$s, here are a few ways to make your site look unique.' ), $theme->display('Name'), esc_url( admin_url( 'themes.php' ) ) ); 1338 1338 echo '</p>'; 1339 1339 ?> … … 1346 1346 } else { 1347 1347 echo '<p>'; 1348 printf( __( 'Use the current theme — %1$s — or <a href="%2$s">choose a new one</a>.' ), $ ct->title, esc_url( admin_url( 'themes.php' ) ) );1348 printf( __( 'Use the current theme — %1$s — or <a href="%2$s">choose a new one</a>.' ), $this->display('Name'), esc_url( admin_url( 'themes.php' ) ) ); 1349 1349 echo '</p>'; 1350 1350 } -
trunk/wp-admin/includes/deprecated.php
r19684 r20029 881 881 WP_Screen::add_old_compat_help( $screen, $help ); 882 882 } 883 884 /** 885 * Get the allowed themes for the current blog. 886 * 887 * @since 3.0.0 888 * @deprecated 3.4.0 889 * @deprecated Use wp_get_themes() 890 * @see wp_get_themes() 891 * 892 * @return array $themes Array of allowed themes. 893 */ 894 function get_allowed_themes() { 895 _deprecated_function( __FUNCTION__, '3.4', "wp_get_themes( array( 'allowed' => true ) )" ); 896 897 $themes = wp_get_themes( array( 'allowed' => true ) ); 898 899 $wp_themes = array(); 900 foreach ( $themes as $theme ) { 901 $wp_themes[ $theme->get('Name') ] = $theme; 902 } 903 904 return $wp_themes; 905 } 906 907 /** 908 * {@internal Missing Short Description}} 909 * 910 * @since 1.5.0 911 * 912 * @return unknown 913 */ 914 function get_broken_themes() { 915 _deprecated_function( __FUNCTION__, '3.4', "wp_get_themes( array( 'errors' => true )" ); 916 917 $themes = wp_get_themes( array( 'errors' => true ) ); 918 $broken = array(); 919 foreach ( $themes as $theme ) { 920 $broken[ $theme->get('Name') ] = array( 921 'Title' => $theme->get('Name'), 922 'Description' => $theme->errors()->get_error_message(), 923 ); 924 } 925 return $broken; 926 } 927 928 /** 929 * {@internal Missing Short Description}} 930 * 931 * @since 2.0.0 932 * 933 * @return unknown 934 */ 935 function current_theme_info() { 936 _deprecated_function( __FUNCTION__, '3.4', 'wp_get_theme()' ); 937 938 return wp_get_theme(); 939 } -
trunk/wp-admin/includes/ms-deprecated.php
r19712 r20029 65 65 return is_network_only_plugin( $file ); 66 66 } 67 68 function get_site_allowed_themes() { 69 _deprecated_function( __FUNCTION__, '3.4', 'WP_Theme::get_allowed_on_network()' ); 70 return array_map( 'intval', WP_Theme::get_allowed_on_network() ); 71 } 72 73 function wpmu_get_blog_allowedthemes( $blog_id = 0 ) { 74 _deprecated_function( __FUNCTION__, '3.4', 'WP_Theme::get_allowed_on_site()' ); 75 return array_map( 'intval', WP_Theme::get_allowed_on_site( $blog_id ) ); 76 } -
trunk/wp-admin/includes/ms.php
r19712 r20029 170 170 } 171 171 172 function wpmu_get_blog_allowedthemes( $blog_id = 0 ) {173 $themes = get_themes();174 175 if ( $blog_id != 0 )176 switch_to_blog( $blog_id );177 178 $blog_allowed_themes = get_option( 'allowedthemes' );179 if ( !is_array( $blog_allowed_themes ) || empty( $blog_allowed_themes ) ) { // convert old allowed_themes to new allowedthemes180 $blog_allowed_themes = get_option( 'allowed_themes' );181 182 if ( is_array( $blog_allowed_themes ) ) {183 foreach( (array) $themes as $key => $theme ) {184 $theme_key = esc_html( $theme['Stylesheet'] );185 if ( isset( $blog_allowed_themes[$key] ) == true ) {186 $blog_allowedthemes[$theme_key] = 1;187 }188 }189 $blog_allowed_themes = $blog_allowedthemes;190 add_option( 'allowedthemes', $blog_allowed_themes );191 delete_option( 'allowed_themes' );192 }193 }194 195 if ( $blog_id != 0 )196 restore_current_blog();197 198 return $blog_allowed_themes;199 }200 201 172 function update_option_new_admin_email( $old_value, $value ) { 202 173 $email = get_option( 'admin_email' ); … … 296 267 } 297 268 add_action( 'admin_notices', 'new_user_email_admin_notice' ); 298 299 function get_site_allowed_themes() {300 $themes = get_themes();301 $allowed_themes = get_site_option( 'allowedthemes' );302 if ( !is_array( $allowed_themes ) || empty( $allowed_themes ) ) {303 $allowed_themes = get_site_option( 'allowed_themes' ); // convert old allowed_themes format304 if ( !is_array( $allowed_themes ) ) {305 $allowed_themes = array();306 } else {307 foreach( (array) $themes as $key => $theme ) {308 $theme_key = esc_html( $theme['Stylesheet'] );309 if ( isset( $allowed_themes[ $key ] ) == true ) {310 $allowedthemes[ $theme_key ] = 1;311 }312 }313 $allowed_themes = $allowedthemes;314 }315 }316 return $allowed_themes;317 }318 269 319 270 /** -
trunk/wp-admin/includes/schema.php
r20023 r20029 344 344 $template = WP_DEFAULT_THEME; 345 345 // If default theme is a child theme, we need to get its template 346 foreach ( (array) get_themes() as $theme ) { 347 if ( WP_DEFAULT_THEME == $theme['Stylesheet'] ) { 348 $template = $theme['Template']; 349 break; 350 } 351 } 346 $theme = wp_get_theme( $template ); 347 if ( ! $theme->errors() ) 348 $template = $theme->get_template(); 352 349 353 350 $timezone_string = ''; -
trunk/wp-admin/includes/theme-install.php
r19979 r20029 266 266 } 267 267 268 $theme s = get_themes();269 foreach ( (array) $themes as $this_theme) {270 if ( is_array($this_theme) && $this_theme['Stylesheet'] == $api->slug) {271 if ( version_compare( $this_theme['Version'], $api->version, '=' ) ) {268 $theme = wp_get_theme( $api->slug ); 269 if ( is_a( $theme, 'WP_Theme' ) ) { 270 switch ( version_compare( $theme->get('Version'), $api->version ) ) { 271 case 0; // equal 272 272 $type = 'latest_installed'; 273 } elseif ( version_compare( $this_theme['Version'], $api->version, '>' ) ) {273 case 1: // installed theme > api version 274 274 $type = 'newer_installed'; 275 $newer_version = $this_theme['Version']; 276 } 277 break; 275 $newer_version = $theme->get('Version'); 278 276 } 279 277 } -
trunk/wp-admin/includes/theme.php
r20025 r20029 6 6 * @subpackage Administration 7 7 */ 8 9 /**10 * {@internal Missing Short Description}}11 *12 * @since 2.0.013 *14 * @return unknown15 */16 function current_theme_info() {17 $themes = get_themes();18 $current_theme = get_current_theme();19 20 if ( ! $themes ) {21 $ct = new stdClass;22 $ct->name = $current_theme;23 return $ct;24 }25 26 if ( ! isset( $themes[$current_theme] ) ) {27 delete_option( 'current_theme' );28 $current_theme = get_current_theme();29 }30 31 $ct = new stdClass;32 $ct->name = $current_theme;33 $ct->title = $themes[$current_theme]['Title'];34 $ct->version = $themes[$current_theme]['Version'];35 $ct->parent_theme = $themes[$current_theme]['Parent Theme'];36 $ct->template_dir = $themes[$current_theme]['Template Dir'];37 $ct->stylesheet_dir = $themes[$current_theme]['Stylesheet Dir'];38 $ct->template = $themes[$current_theme]['Template'];39 $ct->stylesheet = $themes[$current_theme]['Stylesheet'];40 $ct->screenshot = $themes[$current_theme]['Screenshot'];41 $ct->description = $themes[$current_theme]['Description'];42 $ct->author = $themes[$current_theme]['Author'];43 $ct->tags = $themes[$current_theme]['Tags'];44 $ct->theme_root = $themes[$current_theme]['Theme Root'];45 $ct->theme_root_uri = $themes[$current_theme]['Theme Root URI'];46 return $ct;47 }48 8 49 9 /** … … 115 75 116 76 /** 117 * {@internal Missing Short Description}}77 * Get the Page Templates available in this theme 118 78 * 119 79 * @since 1.5.0 120 80 * 121 * @return unknown122 */123 function get_broken_themes() {124 global $wp_broken_themes;125 126 get_themes();127 return $wp_broken_themes;128 }129 130 /**131 * Get the allowed themes for the current blog.132 *133 * @since 3.0.0134 *135 * @uses get_themes()136 * @uses current_theme_info()137 * @uses get_site_allowed_themes()138 * @uses wpmu_get_blog_allowedthemes139 *140 * @return array $themes Array of allowed themes.141 */142 function get_allowed_themes() {143 if ( !is_multisite() )144 return get_themes();145 146 $themes = get_themes();147 $ct = current_theme_info();148 $allowed_themes = apply_filters("allowed_themes", get_site_allowed_themes() );149 if ( $allowed_themes == false )150 $allowed_themes = array();151 152 $blog_allowed_themes = wpmu_get_blog_allowedthemes();153 if ( is_array( $blog_allowed_themes ) )154 $allowed_themes = array_merge( $allowed_themes, $blog_allowed_themes );155 156 if ( isset( $allowed_themes[ esc_html( $ct->stylesheet ) ] ) == false )157 $allowed_themes[ esc_html( $ct->stylesheet ) ] = true;158 159 reset( $themes );160 foreach ( $themes as $key => $theme ) {161 if ( isset( $allowed_themes[ esc_html( $theme[ 'Stylesheet' ] ) ] ) == false )162 unset( $themes[ $key ] );163 }164 reset( $themes );165 166 return $themes;167 }168 169 /**170 * Get the Page Templates available in this theme171 *172 * @since 1.5.0173 *174 81 * @return array Key is the template name, value is the filename of the template 175 82 */ 176 83 function get_page_templates() { 177 $themes = get_themes(); 178 $theme = get_current_theme(); 179 $templates = $themes[$theme]['Template Files']; 180 $page_templates = array(); 181 182 if ( is_array( $templates ) ) { 183 $base = array( trailingslashit(get_template_directory()), trailingslashit(get_stylesheet_directory()) ); 184 185 foreach ( $templates as $template ) { 186 $basename = str_replace($base, '', $template); 187 188 // don't allow template files in subdirectories 189 if ( false !== strpos($basename, '/') ) 190 continue; 191 192 if ( 'functions.php' == $basename ) 193 continue; 194 195 $template_data = implode( '', file( $template )); 196 197 $name = ''; 198 if ( preg_match( '|Template Name:(.*)$|mi', $template_data, $name ) ) 199 $name = _cleanup_header_comment($name[1]); 200 201 if ( !empty( $name ) ) { 202 $page_templates[trim( $name )] = $basename; 203 } 204 } 205 } 206 207 return $page_templates; 84 return wp_get_theme()->get_page_templates(); 208 85 } 209 86 … … 241 118 $themes_update = get_site_transient('update_themes'); 242 119 243 if ( is_object($theme) && isset($theme->stylesheet) ) 244 $stylesheet = $theme->stylesheet; 245 elseif ( is_array($theme) && isset($theme['Stylesheet']) ) 246 $stylesheet = $theme['Stylesheet']; 247 else 248 return false; //No valid info passed. 120 if ( ! is_a( $theme, 'WP_Theme' ) ) 121 return; 122 123 $stylesheet = $theme->get_stylesheet(); 249 124 250 125 if ( isset($themes_update->response[ $stylesheet ]) ) { 251 126 $update = $themes_update->response[ $stylesheet ]; 252 $theme_name = is_object($theme) ? $theme->name : (is_array($theme) ? $theme['Name'] : '');127 $theme_name = $theme->get('Name'); 253 128 $details_url = add_query_arg(array('TB_iframe' => 'true', 'width' => 1024, 'height' => 800), $update['url']); //Theme browser inside WP? replace this, Also, theme preview JS will override this on the available list. 254 129 $update_url = wp_nonce_url('update.php?action=upgrade-theme&theme=' . urlencode($stylesheet), 'upgrade-theme_' . $stylesheet); -
trunk/wp-admin/includes/update.php
r19809 r20029 218 218 219 219 function get_theme_updates() { 220 $themes = get_themes();220 $themes = wp_get_themes(); 221 221 $current = get_site_transient('update_themes'); 222 222 $update_themes = array(); 223 223 224 foreach ( $themes as $theme ) { 225 $theme = (object) $theme; 226 if ( isset($current->response[ $theme->Stylesheet ]) ) { 227 $update_themes[$theme->Stylesheet] = $theme; 228 $update_themes[$theme->Stylesheet]->update = $current->response[ $theme->Stylesheet ]; 229 } 224 foreach ( $current->response as $stylesheet => $data ) { 225 $update_themes[ $stylesheet ] = wp_get_theme( $stylesheet ); 226 $update_themes[ $stylesheet ]->update = $data; 230 227 } 231 228 -
trunk/wp-admin/themes.php
r19941 r20029 97 97 <?php endif; ?> 98 98 </h2> 99 100 <h3><?php _e( 'Current Theme'); ?></h3>99 <?php $ct = wp_get_theme(); ?> 100 <h3><?php _e( 'Current Theme' ); ?></h3> 101 101 <div id="current-theme"> 102 <?php if ( $ct-> screenshot) : ?>103 <img src="<?php echo $ct-> theme_root_uri . '/' . $ct->stylesheet . '/' . $ct->screenshot; ?>" alt="<?php esc_attr_e('Current theme preview'); ?>" />102 <?php if ( $ct->get_screenshot() ) : ?> 103 <img src="<?php echo $ct->get_screenshot( 'absolute' ); ?>" alt="<?php esc_attr_e( 'Current theme preview'); ?>" /> 104 104 <?php endif; ?> 105 105 <h4><?php 106 106 /* translators: 1: theme title, 2: theme version, 3: theme author */ 107 printf( __('%1$s %2$s by %3$s'), $ct->title, $ct->version, $ct->author) ; ?></h4>108 <p class="theme-description"><?php echo $ct->d escription; ?></p>107 printf( __( '%1$s %2$s by %3$s' ), $ct->display('Name'), $ct->display('Version'), $ct->display('Author') ) ; ?></h4> 108 <p class="theme-description"><?php echo $ct->display('Description'); ?></p> 109 109 <div class="theme-options"> 110 110 <span><?php _e( 'Options:' )?></span> … … 118 118 continue; 119 119 // 0 = name, 1 = capability, 2 = file 120 if ( ( strcmp($self, $item[2]) == 0 && empty($parent_file)) || ($parent_file && ($item[2] == $parent_file)) ) $class = ' class="current"';121 120 if ( ( strcmp($self, $item[2]) == 0 && empty($parent_file)) || ($parent_file && ($item[2] == $parent_file)) ) 121 $class = ' class="current"'; 122 122 if ( !empty($submenu[$item[2]]) ) { 123 123 $submenu[$item[2]] = array_values($submenu[$item[2]]); // Re-index. … … 138 138 echo implode ( ' | ', $options ); 139 139 140 if ( $ct-> tags) : ?>141 <p><?php _e('Tags:'); ?> <?php echo join(', ', $ct->tags); ?></p>140 if ( $ct->get('Tags') ) : ?> 141 <p><?php _e('Tags:'); ?> <?php echo $ct->display('Tags'); ?></p> 142 142 <?php endif; ?> 143 143 </div> … … 219 219 <?php 220 220 // List broken themes, if any. 221 $broken_themes = get_broken_themes(); 222 if ( current_user_can('edit_themes') && count( $broken_themes ) ) { 221 if ( current_user_can('edit_themes') && $broken_themes = wp_get_themes( array( 'errors' => true ) ) ) { 223 222 ?> 224 223 … … 232 231 </tr> 233 232 <?php 234 $theme = ''; 235 236 $theme_names = array_keys($broken_themes); 237 natcasesort($theme_names); 238 239 foreach ($theme_names as $theme_name) { 240 $name = $broken_themes[$theme_name]['Title']; 241 $description = $broken_themes[$theme_name]['Description']; 242 243 $theme = ('class="alternate"' == $theme) ? '' : 'class="alternate"'; 233 $alt = ''; 234 foreach ( $broken_themes as $broken_theme ) { 235 $alt = ('class="alternate"' == $alt) ? '' : 'class="alternate"'; 244 236 echo " 245 <tr $ theme>246 <td> $name</td>247 <td> $description</td>237 <tr $alt> 238 <td>" . $broken_theme->get('Name') ."</td> 239 <td>" . $broken_theme->errors()->get_error_message() . "</td> 248 240 </tr>"; 249 241 } -
trunk/wp-includes/class-wp-customize.php
r19995 r20029 243 243 */ 244 244 public function current_theme( $current_theme ) { 245 $themes = get_themes(); 246 247 if ( ! $themes ) 248 return $current_theme; 249 250 foreach ( $themes as $theme ) { 251 if ( $theme['Stylesheet'] == $this->stylesheet && $theme['Template'] == $this->template ) 252 return $theme['Name']; 253 } 254 255 return $current_theme; 245 return wp_get_theme( $this->stylesheet )->get('Name'); 256 246 } 257 247 -
trunk/wp-includes/deprecated.php
r20000 r20029 2908 2908 _deprecated_function( __FUNCTION__, 'error_log()' ); 2909 2909 } 2910 2911 /** 2912 * Retrieve list of themes with theme data in theme directory. 2913 * 2914 * The theme is broken, if it doesn't have a parent theme and is missing either 2915 * style.css and, or index.php. If the theme has a parent theme then it is 2916 * broken, if it is missing style.css; index.php is optional. 2917 * 2918 * @since 1.5.0 2919 * @global array $wp_themes Stores the working themes. 2920 * 2921 * @return array Theme list with theme data. 2922 */ 2923 function get_themes() { 2924 _deprecated_function( __FUNCTION__, '3.4', 'wp_get_themes()' ); 2925 2926 global $wp_themes; 2927 if ( isset( $wp_themes ) ) 2928 return $wp_themes; 2929 2930 $themes = wp_get_themes(); 2931 $wp_themes = array(); 2932 2933 foreach ( $themes as $theme ) { 2934 $wp_themes[ $theme->get('Name') ] = $theme; 2935 } 2936 2937 return $wp_themes; 2938 } 2939 2940 /** 2941 * Retrieve theme data. 2942 * 2943 * @since 1.5.0 2944 * 2945 * @param string $theme Theme name. 2946 * @return array|null Null, if theme name does not exist. Theme data, if exists. 2947 */ 2948 function get_theme( $theme ) { 2949 _deprecated_function( __FUNCTION__, '3.4', 'wp_get_theme($stylesheet)' ); 2950 2951 $themes = get_themes(); 2952 if ( is_array( $themes ) && array_key_exists( $theme, $themes ) ) 2953 return $themes[$theme]; 2954 return null; 2955 } -
trunk/wp-includes/theme.php
r20021 r20029 6 6 * @subpackage Theme 7 7 */ 8 9 /** 10 * Returns an array of WP_Theme objects based on the arguments. 11 * 12 * Despite advances over get_themes(), this function is still quite expensive, and grows 13 * linearly with additional themes. Stick to wp_get_theme() if possible. 14 * 15 * @since 3.4.0 16 * 17 * @param array $args Arguments. Currently 'errors' (defaults to false), 'allowed' 18 * (true, false; null for either; defaults to null; only applies to multisite), and 'blog_id' 19 * (defaults to current blog; used to find allowed themes; only applies to multisite). 20 * @return Array of WP_Theme objects. 21 */ 22 function wp_get_themes( $args = array() ) { 23 global $wp_theme_directories; 24 25 $defaults = array( 'errors' => false, 'allowed' => null, 'blog_id' => 0 ); 26 $args = wp_parse_args( $args, $defaults ); 27 28 static $_themes; 29 if ( ! isset( $_themes ) ) { 30 $_themes = array(); 31 $theme_data = search_theme_directories(); 32 // Make sure the current theme wins out, in case search_theme_directories() picks the wrong 33 // one in the case of a conflict. (Normally, last registered theme root wins.) 34 $current_theme = get_stylesheet(); 35 $current_theme_root = get_raw_theme_root( $current_theme ); 36 if ( ! in_array( $current_theme_root, $wp_theme_directories ) ) 37 $current_theme_root = WP_CONTENT_DIR . $current_theme_root; 38 foreach ( (array) $theme_data as $theme_slug => $data ) { 39 if ( $current_theme == $theme_slug && $current_theme_root != $data['theme_root'] ) 40 $_themes[ $theme_slug ] = new WP_Theme( $theme_slug, $current_theme_root ); 41 else 42 $_themes[ $theme_slug ] = new WP_Theme( $theme_slug, $data['theme_root'] ); 43 } 44 } 45 46 $themes = $_themes; 47 if ( empty( $themes ) ) 48 return $themes; 49 50 if ( null !== $args['errors'] ) { 51 foreach ( $themes as $theme_slug => $theme ) { 52 if ( $theme->errors() != $args['errors'] ) 53 unset( $themes[ $theme_slug ] ); 54 } 55 } 56 57 if ( is_multisite() && null !== $args['allowed'] ) { 58 if ( $allowed = $args['allowed'] ) { 59 if ( 'network' == $allowed ) 60 $themes = array_intersect_key( $themes, WP_Theme::get_allowed_on_network( $args['blog_id'] ) ); 61 elseif ( 'site' == $allowed ) 62 $themes = array_intersect_key( $themes, WP_Theme::get_allowed_on_site( $args['blog_id'] ) ); 63 else 64 $themes = array_intersect_key( $themes, WP_Theme::get_allowed( $args['blog_id'] ) ); 65 } else { 66 $themes = array_diff_key( $themes, WP_Theme::get_allowed( $args['blog_id'] ) ); 67 } 68 } 69 70 return $themes; 71 } 72 73 /** 74 * Gets a WP_Theme object for a theme. 75 * 76 * @since 3.4.0 77 * 78 * @param string $stylesheet Directory name for the theme. Optional. Defaults to current theme. 79 * @param string $theme_root Absolute path of the theme root to look in. Optional. If not specified, get_raw_theme_root() 80 * is used to calculate the theme root for the $stylesheet provided (or current theme). 81 * @return WP_Theme 82 */ 83 function wp_get_theme( $stylesheet = null, $theme_root = null ) { 84 global $wp_theme_directories; 85 86 if ( empty( $stylesheet ) ) 87 $stylesheet = get_stylesheet(); 88 89 if ( empty( $theme_root ) ) { 90 $theme_root = get_raw_theme_root( $stylesheet ); 91 if ( ! in_array( $theme_root, $wp_theme_directories ) ) 92 $theme_root = WP_CONTENT_DIR . $theme_root; 93 } 94 95 return new WP_Theme( $stylesheet, $theme_root ); 96 } 8 97 9 98 /** … … 248 337 249 338 /** 250 * Retrieve list of themes with theme data in theme directory.251 *252 * The theme is broken, if it doesn't have a parent theme and is missing either253 * style.css and, or index.php. If the theme has a parent theme then it is254 * broken, if it is missing style.css; index.php is optional. The broken theme255 * list is saved in the {@link $wp_broken_themes} global, which is displayed on256 * the theme list in the administration panels.257 *258 * @since 1.5.0259 * @global array $wp_broken_themes Stores the broken themes.260 * @global array $wp_themes Stores the working themes.261 *262 * @return array Theme list with theme data.263 */264 function get_themes() {265 global $wp_themes, $wp_broken_themes;266 267 if ( isset($wp_themes) )268 return $wp_themes;269 270 if ( !$theme_files = search_theme_directories() )271 return false;272 273 asort( $theme_files );274 275 $wp_themes = array();276 277 foreach ( (array) $theme_files as $theme_file ) {278 $theme_root = $theme_file['theme_root'];279 $theme_file = $theme_file['theme_file'];280 281 if ( !is_readable("$theme_root/$theme_file") ) {282 $wp_broken_themes[$theme_file] = array('Name' => $theme_file, 'Title' => $theme_file, 'Description' => __('File not readable.'));283 continue;284 }285 286 $theme_data = get_theme_data("$theme_root/$theme_file");287 288 $name = $theme_data['Name'];289 $title = $theme_data['Title'];290 $description = wptexturize($theme_data['Description']);291 $version = $theme_data['Version'];292 $author = $theme_data['Author'];293 $template = $theme_data['Template'];294 $stylesheet = dirname($theme_file);295 296 $screenshot = false;297 foreach ( array('png', 'gif', 'jpg', 'jpeg') as $ext ) {298 if (file_exists("$theme_root/$stylesheet/screenshot.$ext")) {299 $screenshot = "screenshot.$ext";300 break;301 }302 }303 304 if ( empty($name) ) {305 $name = dirname($theme_file);306 $title = $name;307 }308 309 $parent_template = $template;310 311 if ( empty($template) ) {312 if ( file_exists("$theme_root/$stylesheet/index.php") )313 $template = $stylesheet;314 else315 continue;316 }317 318 $template = trim( $template );319 320 if ( !file_exists("$theme_root/$template/index.php") ) {321 $parent_dir = dirname(dirname($theme_file));322 if ( file_exists("$theme_root/$parent_dir/$template/index.php") ) {323 $template = "$parent_dir/$template";324 $template_directory = "$theme_root/$template";325 } else {326 /**327 * The parent theme doesn't exist in the current theme's folder or sub folder328 * so lets use the theme root for the parent template.329 */330 if ( isset($theme_files[$template]) && file_exists( $theme_files[$template]['theme_root'] . "/$template/index.php" ) ) {331 $template_directory = $theme_files[$template]['theme_root'] . "/$template";332 } else {333 if ( empty( $parent_template) )334 $wp_broken_themes[$name] = array('Name' => $name, 'Title' => $title, 'Description' => __('Template is missing.'), 'error' => 'no_template');335 else336 $wp_broken_themes[$name] = array('Name' => $name, 'Title' => $title, 'Description' => sprintf( __('The parent theme is missing. Please install the "%s" parent theme.'), $parent_template ), 'error' => 'no_parent', 'parent' => $parent_template );337 continue;338 }339 340 }341 } else {342 $template_directory = trim( $theme_root . '/' . $template );343 }344 345 $stylesheet_files = array();346 $template_files = array();347 348 $stylesheet_dir = @ dir("$theme_root/$stylesheet");349 if ( $stylesheet_dir ) {350 while ( ($file = $stylesheet_dir->read()) !== false ) {351 if ( !preg_match('|^\.+$|', $file) ) {352 if ( preg_match('|\.css$|', $file) )353 $stylesheet_files[] = "$theme_root/$stylesheet/$file";354 elseif ( preg_match('|\.php$|', $file) )355 $template_files[] = "$theme_root/$stylesheet/$file";356 }357 }358 @ $stylesheet_dir->close();359 }360 361 $template_dir = @ dir("$template_directory");362 if ( $template_dir ) {363 while ( ($file = $template_dir->read()) !== false ) {364 if ( preg_match('|^\.+$|', $file) )365 continue;366 if ( preg_match('|\.php$|', $file) ) {367 $template_files[] = "$template_directory/$file";368 } elseif ( is_dir("$template_directory/$file") ) {369 $template_subdir = @ dir("$template_directory/$file");370 if ( !$template_subdir )371 continue;372 while ( ($subfile = $template_subdir->read()) !== false ) {373 if ( preg_match('|^\.+$|', $subfile) )374 continue;375 if ( preg_match('|\.php$|', $subfile) )376 $template_files[] = "$template_directory/$file/$subfile";377 }378 @ $template_subdir->close();379 }380 }381 @ $template_dir->close();382 }383 384 //Make unique and remove duplicates when stylesheet and template are the same i.e. most themes385 $template_files = array_unique($template_files);386 $stylesheet_files = array_unique($stylesheet_files);387 388 $template_dir = $template_directory;389 $stylesheet_dir = $theme_root . '/' . $stylesheet;390 391 if ( empty($template_dir) )392 $template_dir = '/';393 if ( empty($stylesheet_dir) )394 $stylesheet_dir = '/';395 396 // Check for theme name collision. This occurs if a theme is copied to397 // a new theme directory and the theme header is not updated. Whichever398 // theme is first keeps the name. Subsequent themes get a suffix applied.399 // Default themes themes always trump their pretenders.400 if ( isset($wp_themes[$name]) ) {401 $trump_cards = array(402 'classic' => 'WordPress Classic',403 'default' => 'WordPress Default',404 'twentyten' => 'Twenty Ten',405 'twentyeleven' => 'Twenty Eleven',406 'twentytwelve' => 'Twenty Twelve',407 );408 if ( isset( $trump_cards[ $stylesheet ] ) && $name == $trump_cards[ $stylesheet ] ) {409 // If another theme has claimed to be one of our default themes, move410 // them aside.411 $suffix = $wp_themes[$name]['Stylesheet'];412 $new_name = "$name/$suffix";413 $wp_themes[$new_name] = $wp_themes[$name];414 $wp_themes[$new_name]['Name'] = $new_name;415 } else {416 $name = "$name/$stylesheet";417 }418 }419 420 $wp_themes[$name] = array(421 'Name' => $name,422 'Title' => $title,423 'Description' => $description,424 'Author' => $author,425 'Author Name' => $theme_data['AuthorName'],426 'Author URI' => $theme_data['AuthorURI'],427 'Version' => $version,428 'Template' => $template,429 'Stylesheet' => $stylesheet,430 'Template Files' => $template_files,431 'Stylesheet Files' => $stylesheet_files,432 'Template Dir' => $template_dir,433 'Stylesheet Dir' => $stylesheet_dir,434 'Status' => $theme_data['Status'],435 'Screenshot' => $screenshot,436 'Tags' => $theme_data['Tags'],437 'Theme Root' => $theme_root,438 'Theme Root URI' => str_replace( WP_CONTENT_DIR, content_url(), $theme_root ),439 );440 }441 442 unset($theme_files);443 444 /* Resolve theme dependencies. */445 $theme_names = array_keys( $wp_themes );446 foreach ( (array) $theme_names as $theme_name ) {447 $wp_themes[$theme_name]['Parent Theme'] = '';448 if ( $wp_themes[$theme_name]['Stylesheet'] != $wp_themes[$theme_name]['Template'] ) {449 foreach ( (array) $theme_names as $parent_theme_name ) {450 if ( ($wp_themes[$parent_theme_name]['Stylesheet'] == $wp_themes[$parent_theme_name]['Template']) && ($wp_themes[$parent_theme_name]['Template'] == $wp_themes[$theme_name]['Template']) ) {451 $wp_themes[$theme_name]['Parent Theme'] = $wp_themes[$parent_theme_name]['Name'];452 break;453 }454 }455 }456 }457 458 return $wp_themes;459 }460 461 /**462 339 * Retrieve theme roots. 463 340 * … … 481 358 482 359 /** 483 * Retrieve theme data.484 *485 * @since 1.5.0486 *487 * @param string $theme Theme name.488 * @return array|null Null, if theme name does not exist. Theme data, if exists.489 */490 function get_theme($theme) {491 $themes = get_themes();492 493 if ( is_array( $themes ) && array_key_exists( $theme, $themes ) )494 return $themes[$theme];495 496 return null;497 }498 499 /**500 360 * Retrieve current theme display name. 501 361 * … … 509 369 */ 510 370 function get_current_theme() { 511 if ( $theme = get_option( 'current_theme') )371 if ( $theme = get_option( 'current_theme' ) ) 512 372 return $theme; 513 373 514 $themes = get_themes(); 515 $current_theme = 'Twenty Eleven'; 516 517 if ( $themes ) { 518 $theme_names = array_keys( $themes ); 519 $current_template = get_option( 'template' ); 520 $current_stylesheet = get_option( 'stylesheet' ); 521 522 foreach ( (array) $theme_names as $theme_name ) { 523 if ( $themes[$theme_name]['Stylesheet'] == $current_stylesheet && 524 $themes[$theme_name]['Template'] == $current_template ) { 525 $current_theme = $themes[$theme_name]['Name']; 526 break; 527 } 528 } 529 } 530 531 update_option('current_theme', $current_theme); 532 533 return $current_theme; 374 return wp_get_theme()->get('Name'); 534 375 } 535 376 -
trunk/wp-includes/update.php
r20000 r20029 236 236 return false; 237 237 238 if ( !function_exists( 'get_themes' ) ) 239 require_once( ABSPATH . 'wp-includes/theme.php' ); 240 241 $installed_themes = get_themes( ); 238 $installed_themes = wp_get_themes(); 242 239 $last_update = get_site_transient( 'update_themes' ); 243 240 if ( ! is_object($last_update) ) … … 246 243 $themes = array(); 247 244 $checked = array(); 248 $exclude_fields = array('Template Files', 'Stylesheet Files', 'Status', 'Theme Root', 'Theme Root URI', 'Template Dir', 'Stylesheet Dir', 'Description', 'Tags', 'Screenshot');249 245 250 246 // Put slug of current theme into request. 251 247 $themes['current_theme'] = get_option( 'stylesheet' ); 252 248 253 foreach ( (array) $installed_themes as $theme_title => $theme ) { 254 $themes[$theme['Stylesheet']] = array(); 255 $checked[$theme['Stylesheet']] = $theme['Version']; 256 257 $themes[$theme['Stylesheet']]['Name'] = $theme['Name']; 258 $themes[$theme['Stylesheet']]['Version'] = $theme['Version']; 259 260 foreach ( (array) $theme as $key => $value ) { 261 if ( !in_array($key, $exclude_fields) ) 262 $themes[$theme['Stylesheet']][$key] = $value; 263 } 249 foreach ( $installed_themes as $theme ) { 250 $checked[ $theme->get_stylesheet() ] = $theme->get('Version'); 251 252 $themes[ $theme->get_stylesheet() ] = array( 253 'Name' => $theme->get('Name'), 254 'Title' => $theme->get('Name'), 255 'Version' => $theme->get('Version'), 256 'Author' => $theme->get('Author'), 257 'Author URI' => $theme->get('AuthorURI'), 258 'Template' => $theme->get_template(), 259 'Stylesheet' => $theme->get_stylesheet(), 260 ); 264 261 } 265 262 -
trunk/wp-settings.php
r20002 r20029 113 113 require( ABSPATH . WPINC . '/query.php' ); 114 114 require( ABSPATH . WPINC . '/theme.php' ); 115 require( ABSPATH . WPINC . '/class-wp-theme.php' ); 115 116 require( ABSPATH . WPINC . '/template.php' ); 116 117 require( ABSPATH . WPINC . '/user.php' );
Note: See TracChangeset
for help on using the changeset viewer.