X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/96bc8e88cf39086a9e0a883b8e2c311fe82a5e97..48ab98cb1779cf2088c1351ac3dd3d0da6fb31d3:/wp-admin/theme-editor.php diff --git a/wp-admin/theme-editor.php b/wp-admin/theme-editor.php index 7b31745b..d0ecee48 100644 --- a/wp-admin/theme-editor.php +++ b/wp-admin/theme-editor.php @@ -7,7 +7,7 @@ */ /** WordPress Administration Bootstrap */ -require_once('./admin.php'); +require_once( dirname( __FILE__ ) . '/admin.php' ); if ( is_multisite() && ! is_network_admin() ) { wp_redirect( network_admin_url( 'theme-editor.php' ) ); @@ -26,10 +26,11 @@ get_current_screen()->add_help_tab( array( 'content' => '

' . __('You can use the Theme Editor to edit the individual CSS and PHP files which make up your theme.') . '

' . __('Begin by choosing a theme to edit from the dropdown menu and clicking Select. A list then appears of all the template files. Clicking once on any file name causes the file to appear in the large Editor box.') . '

-

' . __('For PHP files, you can use the Documentation dropdown to select from functions recognized in that file. Lookup takes you to a web page with reference material about that particular function.') . '

+

' . __('For PHP files, you can use the Documentation dropdown to select from functions recognized in that file. Look Up takes you to a web page with reference material about that particular function.') . '

+

' . __('In the editing area the Tab key enters a tab character. To move below this area by pressing Tab, press the Esc key followed by the Tab key.') . '

' . __('After typing in your edits, click Update File.') . '

' . __('Advice: think very carefully about your site crashing if you are live-editing the theme currently in use.') . '

-

' . __('Upgrading to a newer version of the same theme will override changes made here. To avoid this, consider creating a child theme instead.') . '

' . +

' . sprintf( __('Upgrading to a newer version of the same theme will override changes made here. To avoid this, consider creating a child theme instead.'), __('http://codex.wordpress.org/Child_Themes') ) . '

' . ( is_network_admin() ? '

' . __('Any edits to files from this screen will be reflected on all sites in the network.') . '

' : '' ) ) ); @@ -39,83 +40,70 @@ get_current_screen()->set_help_sidebar( '

' . __('Documentation on Using Themes') . '

' . '

' . __('Documentation on Editing Files') . '

' . '

' . __('Documentation on Template Tags') . '

' . - '

' . __('Support Forums') . '

' + '

' . __('Support Forums') . '

' ); -wp_reset_vars(array('action', 'redirect', 'profile', 'error', 'warning', 'a', 'file', 'theme', 'dir')); +wp_reset_vars( array( 'action', 'error', 'file', 'theme' ) ); -$themes = get_themes(); +if ( $theme ) + $stylesheet = $theme; +else + $stylesheet = get_stylesheet(); -if (empty($theme)) { - $theme = get_current_theme(); -} else { - $theme = stripslashes($theme); -} +$theme = wp_get_theme( $stylesheet ); -if ( ! isset($themes[$theme]) ) - wp_die(__('The requested theme does not exist.')); +if ( ! $theme->exists() ) + wp_die( __( 'The requested theme does not exist.' ) ); -$allowed_files = array_merge( $themes[$theme]['Stylesheet Files'], $themes[$theme]['Template Files'] ); +if ( $theme->errors() && 'theme_no_stylesheet' == $theme->errors()->get_error_code() ) + wp_die( __( 'The requested theme does not exist.' ) . ' ' . $theme->errors()->get_error_message() ); + +$allowed_files = $theme->get_files( 'php', 1 ); +$has_templates = ! empty( $allowed_files ); +$style_files = $theme->get_files( 'css' ); +$allowed_files['style.css'] = $style_files['style.css']; +$allowed_files += $style_files; if ( empty( $file ) ) { - if ( false !== array_search( $themes[$theme]['Stylesheet Dir'] . '/style.css', $allowed_files ) ) - $file = $themes[$theme]['Stylesheet Dir'] . '/style.css'; - else - $file = $allowed_files[0]; + $relative_file = 'style.css'; + $file = $allowed_files['style.css']; } else { - $file = stripslashes($file); - if ( 'theme' == $dir ) { - $file = dirname(dirname($themes[$theme]['Template Dir'])) . $file ; - } else if ( 'style' == $dir) { - $file = dirname(dirname($themes[$theme]['Stylesheet Dir'])) . $file ; - } + $relative_file = $file; + $file = $theme->get_stylesheet_directory() . '/' . $relative_file; } -validate_file_to_edit($file, $allowed_files); -$scrollto = isset($_REQUEST['scrollto']) ? (int) $_REQUEST['scrollto'] : 0; -$file_show = basename( $file ); - -switch($action) { +validate_file_to_edit( $file, $allowed_files ); +$scrollto = isset( $_REQUEST['scrollto'] ) ? (int) $_REQUEST['scrollto'] : 0; +switch( $action ) { case 'update': - - check_admin_referer('edit-theme_' . $file . $theme); - - $newcontent = stripslashes($_POST['newcontent']); - $theme = urlencode($theme); - if (is_writeable($file)) { - //is_writable() not always reliable, check return value. see comments @ http://uk.php.net/is_writable - $f = fopen($file, 'w+'); - if ($f !== FALSE) { - fwrite($f, $newcontent); - fclose($f); - $location = "theme-editor.php?file=$file&theme=$theme&a=te&scrollto=$scrollto"; - } else { - $location = "theme-editor.php?file=$file&theme=$theme&scrollto=$scrollto"; + check_admin_referer( 'edit-theme_' . $file . $stylesheet ); + $newcontent = wp_unslash( $_POST['newcontent'] ); + $location = 'theme-editor.php?file=' . urlencode( $relative_file ) . '&theme=' . urlencode( $stylesheet ) . '&scrollto=' . $scrollto; + if ( is_writeable( $file ) ) { + // is_writable() not always reliable, check return value. see comments @ http://uk.php.net/is_writable + $f = fopen( $file, 'w+' ); + if ( $f !== false ) { + fwrite( $f, $newcontent ); + fclose( $f ); + $location .= '&updated=true'; + $theme->cache_delete(); } - } else { - $location = "theme-editor.php?file=$file&theme=$theme&scrollto=$scrollto"; } - - $location = wp_kses_no_null($location); - $strip = array('%0d', '%0a', '%0D', '%0A'); - $location = _deep_replace($strip, $location); - header("Location: $location"); - exit(); - -break; + wp_redirect( $location ); + exit; default: - require_once(ABSPATH . 'wp-admin/admin-header.php'); + require_once( ABSPATH . 'wp-admin/admin-header.php' ); - update_recently_edited($file); + update_recently_edited( $file ); - if ( !is_file($file) ) - $error = 1; + if ( ! is_file( $file ) ) + $error = true; $content = ''; - if ( !$error && filesize($file) > 0 ) { + if ( ! $error && filesize( $file ) > 0 ) { $f = fopen($file, 'r'); $content = fread($f, filesize($file)); @@ -123,7 +111,7 @@ default: $functions = wp_doc_link_parse( $content ); $docs_select = ' $theme_name"; +foreach ( wp_get_themes( array( 'errors' => null ) ) as $a_stylesheet => $a_theme ) { + if ( $a_theme->errors() && 'theme_no_stylesheet' == $a_theme->errors()->get_error_code() ) + continue; + + $selected = $a_stylesheet == $stylesheet ? ' selected="selected"' : ''; + echo "\n\t" . ''; } ?> @@ -170,93 +156,75 @@ $is_child_theme = $themes[$theme]['Template'] != $themes[$theme]['Stylesheet'];
+errors() ) + echo '

' . __( 'This theme is broken.' ) . ' ' . $theme->errors()->get_error_message() . '

'; +?>
parent() ) : ?>

- -

+ parent() ) : ?> +

get_template() ) ) . '">' . $theme->parent()->display('Name') . '' ); ?>

-

- \n\t

" . _x( 'Styles', 'Theme stylesheets in theme editor' ) . "

\n\t + endforeach; +?> +
- +

' . __('Oops, no such file exists! Double check the name and try again, merci.') . '

'; +else : ?>
- -
- - - - -
- + +
+ + + + +
+
- +
- +
- + get_stylesheet() == get_template() ) : ?>

'2' ) ); + submit_button( __( 'Update File' ), 'primary', 'submit', true ); else : ?>

the Codex for more information.'); ?>

' . __('Oops, no such file exists! Double check the name and try again, merci.') . '

'; - } +endif; // $error ?>
@@ -272,4 +240,4 @@ jQuery(document).ready(function($){ break; } -include(ABSPATH . "wp-admin/admin-footer.php"); +include(ABSPATH . 'wp-admin/admin-footer.php' );