2007-05-25 09:16:21 +02:00
< ? php
2008-10-02 03:03:26 +02:00
/**
* WordPress Theme Administration API
*
* @ package WordPress
* @ subpackage Administration
*/
2007-05-25 09:16:21 +02:00
2008-10-02 03:03:26 +02:00
/**
* { @ internal Missing Short Description }}
*
* @ since unknown
*
* @ return unknown
*/
2007-05-25 09:16:21 +02:00
function current_theme_info () {
$themes = get_themes ();
$current_theme = get_current_theme ();
2010-03-19 04:09:02 +01:00
if ( ! isset ( $themes [ $current_theme ] ) ) {
delete_option ( 'current_theme' );
$current_theme = get_current_theme ();
}
2007-05-25 09:16:21 +02:00
$ct -> name = $current_theme ;
$ct -> title = $themes [ $current_theme ][ 'Title' ];
$ct -> version = $themes [ $current_theme ][ 'Version' ];
$ct -> parent_theme = $themes [ $current_theme ][ 'Parent Theme' ];
$ct -> template_dir = $themes [ $current_theme ][ 'Template Dir' ];
$ct -> stylesheet_dir = $themes [ $current_theme ][ 'Stylesheet Dir' ];
$ct -> template = $themes [ $current_theme ][ 'Template' ];
$ct -> stylesheet = $themes [ $current_theme ][ 'Stylesheet' ];
$ct -> screenshot = $themes [ $current_theme ][ 'Screenshot' ];
$ct -> description = $themes [ $current_theme ][ 'Description' ];
$ct -> author = $themes [ $current_theme ][ 'Author' ];
2007-12-31 19:39:43 +01:00
$ct -> tags = $themes [ $current_theme ][ 'Tags' ];
2009-10-13 21:06:35 +02:00
$ct -> theme_root = $themes [ $current_theme ][ 'Theme Root' ];
$ct -> theme_root_uri = $themes [ $current_theme ][ 'Theme Root URI' ];
2007-05-25 09:16:21 +02:00
return $ct ;
}
2009-03-05 20:15:56 +01:00
/**
* Remove a theme
*
* @ since 2.8 . 0
*
* @ param string $template Template directory of the theme to delete
* @ return mixed
*/
function delete_theme ( $template ) {
global $wp_filesystem ;
if ( empty ( $template ) )
return false ;
ob_start ();
$url = wp_nonce_url ( 'themes.php?action=delete&template=' . $template , 'delete-theme_' . $template );
if ( false === ( $credentials = request_filesystem_credentials ( $url )) ) {
$data = ob_get_contents ();
ob_end_clean ();
if ( ! empty ( $data ) ){
include_once ( ABSPATH . 'wp-admin/admin-header.php' );
echo $data ;
include ( ABSPATH . 'wp-admin/admin-footer.php' );
exit ;
}
return ;
}
if ( ! WP_Filesystem ( $credentials ) ) {
request_filesystem_credentials ( $url , '' , true ); // Failed to connect, Error and request again
$data = ob_get_contents ();
ob_end_clean ();
2010-01-18 21:34:48 +01:00
if ( ! empty ( $data ) ) {
2009-03-05 20:15:56 +01:00
include_once ( ABSPATH . 'wp-admin/admin-header.php' );
echo $data ;
include ( ABSPATH . 'wp-admin/admin-footer.php' );
exit ;
}
return ;
}
if ( ! is_object ( $wp_filesystem ) )
return new WP_Error ( 'fs_unavailable' , __ ( 'Could not access filesystem.' ));
2009-04-19 21:36:28 +02:00
if ( is_wp_error ( $wp_filesystem -> errors ) && $wp_filesystem -> errors -> get_error_code () )
2010-01-21 22:37:43 +01:00
return new WP_Error ( 'fs_error' , __ ( 'Filesystem error.' ), $wp_filesystem -> errors );
2009-03-05 20:15:56 +01:00
//Get the base plugin folder
$themes_dir = $wp_filesystem -> wp_themes_dir ();
if ( empty ( $themes_dir ) )
return new WP_Error ( 'fs_no_themes_dir' , __ ( 'Unable to locate WordPress theme directory.' ));
$themes_dir = trailingslashit ( $themes_dir );
$theme_dir = trailingslashit ( $themes_dir . $template );
$deleted = $wp_filesystem -> delete ( $theme_dir , true );
if ( ! $deleted )
2010-01-21 22:37:43 +01:00
return new WP_Error ( 'could_not_remove_theme' , sprintf ( __ ( 'Could not fully remove the theme %s.' ), $template ) );
2009-03-05 20:15:56 +01:00
// Force refresh of theme update information
2010-01-08 21:49:55 +01:00
delete_site_transient ( 'update_themes' );
2009-03-05 20:15:56 +01:00
return true ;
}
2008-10-02 03:03:26 +02:00
/**
* { @ internal Missing Short Description }}
*
* @ since unknown
*
* @ return unknown
*/
2007-05-25 09:16:21 +02:00
function get_broken_themes () {
global $wp_broken_themes ;
get_themes ();
return $wp_broken_themes ;
}
2010-01-19 00:34:36 +01:00
/**
* Get the allowed themes for the current blog .
*
2010-03-26 20:13:36 +01:00
* @ since 3.0 . 0
2010-01-19 00:34:36 +01:00
*
* @ uses get_themes ()
* @ uses current_theme_info ()
* @ uses get_site_allowed_themes ()
* @ uses wpmu_get_blog_allowedthemes
*
* @ return array $themes Array of allowed themes .
*/
function get_allowed_themes () {
if ( ! is_multisite () )
return get_themes ();
$themes = get_themes ();
$ct = current_theme_info ();
$allowed_themes = apply_filters ( " allowed_themes " , get_site_allowed_themes () );
if ( $allowed_themes == false )
$allowed_themes = array ();
$blog_allowed_themes = wpmu_get_blog_allowedthemes ();
if ( is_array ( $blog_allowed_themes ) )
$allowed_themes = array_merge ( $allowed_themes , $blog_allowed_themes );
2010-02-13 11:35:10 +01:00
if ( isset ( $allowed_themes [ esc_html ( $ct -> stylesheet ) ] ) == false )
$allowed_themes [ esc_html ( $ct -> stylesheet ) ] = true ;
2010-01-19 00:34:36 +01:00
reset ( $themes );
foreach ( $themes as $key => $theme ) {
2010-02-13 11:35:10 +01:00
if ( isset ( $allowed_themes [ esc_html ( $theme [ 'Stylesheet' ] ) ] ) == false )
2010-01-19 00:34:36 +01:00
unset ( $themes [ $key ] );
}
reset ( $themes );
2010-01-26 23:49:05 +01:00
2010-01-19 00:34:36 +01:00
return $themes ;
}
2008-10-02 03:03:26 +02:00
/**
2009-11-13 23:40:40 +01:00
* Get the Page Templates available in this theme
2008-10-02 03:03:26 +02:00
*
* @ since unknown
*
2009-11-19 20:53:27 +01:00
* @ return array Key is template name , Value is template name
2008-10-02 03:03:26 +02:00
*/
2007-05-25 09:16:21 +02:00
function get_page_templates () {
$themes = get_themes ();
$theme = get_current_theme ();
$templates = $themes [ $theme ][ 'Template Files' ];
2009-11-21 11:05:19 +01:00
$page_templates = array ();
2007-05-25 09:16:21 +02:00
if ( is_array ( $templates ) ) {
2009-11-21 11:05:19 +01:00
$base = array ( trailingslashit ( get_template_directory ()), trailingslashit ( get_stylesheet_directory ()) );
2007-05-25 09:16:21 +02:00
foreach ( $templates as $template ) {
2009-11-21 11:05:19 +01:00
$basename = str_replace ( $base , '' , $template );
// don't allow template files in subdirectories
if ( false !== strpos ( $basename , '/' ) )
continue ;
2009-10-14 22:46:09 +02:00
$template_data = implode ( '' , file ( $template ));
2007-06-14 04:25:30 +02:00
2008-08-08 19:05:10 +02:00
$name = '' ;
if ( preg_match ( '|Template Name:(.*)$|mi' , $template_data , $name ) )
2009-05-04 11:12:12 +02:00
$name = _cleanup_header_comment ( $name [ 1 ]);
2007-05-25 09:16:21 +02:00
2007-06-02 02:02:06 +02:00
if ( ! empty ( $name ) ) {
2009-11-21 11:05:19 +01:00
$page_templates [ trim ( $name )] = $basename ;
2007-05-25 09:16:21 +02:00
}
}
}
return $page_templates ;
}
2009-10-19 23:39:04 +02:00
/**
* Tidies a filename for url display by the theme editor .
2010-01-15 23:11:12 +01:00
*
2009-10-19 23:39:04 +02:00
* @ since 2.9 . 0
2010-05-03 15:27:15 +02:00
* @ access private
2010-01-15 23:11:12 +01:00
*
2009-10-19 23:39:04 +02:00
* @ param string $fullpath Full path to the theme file
* @ param string $containingfolder Path of the theme parent folder
* @ return string
*/
function _get_template_edit_filename ( $fullpath , $containingfolder ) {
return str_replace ( dirname ( dirname ( $containingfolder )) , '' , $fullpath );
}
2010-05-03 15:29:15 +02:00
/**
* Check if there is an update for a theme available .
*
* Will display link , if there is an update available .
*
* @ since 2.7 . 0
*
* @ param object $theme Theme data object .
* @ return bool False if no valid info was passed .
*/
function theme_update_available ( $theme ) {
static $themes_update ;
if ( ! current_user_can ( 'update_themes' ) )
return ;
if ( ! isset ( $themes_update ) )
$themes_update = get_site_transient ( 'update_themes' );
if ( is_object ( $theme ) && isset ( $theme -> stylesheet ) )
$stylesheet = $theme -> stylesheet ;
elseif ( is_array ( $theme ) && isset ( $theme [ 'Stylesheet' ]) )
$stylesheet = $theme [ 'Stylesheet' ];
else
return false ; //No valid info passed.
if ( isset ( $themes_update -> response [ $stylesheet ]) ) {
$update = $themes_update -> response [ $stylesheet ];
$theme_name = is_object ( $theme ) ? $theme -> name : ( is_array ( $theme ) ? $theme [ 'Name' ] : '' );
$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.
$update_url = wp_nonce_url ( 'update.php?action=upgrade-theme&theme=' . urlencode ( $stylesheet ), 'upgrade-theme_' . $stylesheet );
$update_onclick = 'onclick="if ( confirm(\'' . esc_js ( __ ( " Upgrading this theme will lose any customizations you have made. 'Cancel' to stop, 'OK' to upgrade. " ) ) . '\') ) {return true;}return false;"' ;
if ( ! current_user_can ( 'update_themes' ) )
printf ( '<p><strong>' . __ ( 'There is a new version of %1$s available. <a href="%2$s" class="thickbox" title="%1$s">View version %3$s Details</a>.' ) . '</strong></p>' , $theme_name , $details_url , $update [ 'new_version' ]);
else if ( empty ( $update [ 'package' ]) )
printf ( '<p><strong>' . __ ( 'There is a new version of %1$s available. <a href="%2$s" class="thickbox" title="%1$s">View version %3$s Details</a> <em>automatic upgrade unavailable for this theme</em>.' ) . '</strong></p>' , $theme_name , $details_url , $update [ 'new_version' ]);
else
printf ( '<p><strong>' . __ ( 'There is a new version of %1$s available. <a href="%2$s" class="thickbox" title="%1$s">View version %3$s Details</a> or <a href="%4$s" %5$s>upgrade automatically</a>.' ) . '</strong></p>' , $theme_name , $details_url , $update [ 'new_version' ], $update_url , $update_onclick );
}
}
2007-05-25 09:16:21 +02:00
?>