wp/wp-admin/theme-editor.php
changeset 9 177826044cd9
parent 7 cf61fcea0001
child 16 a86126ab1dd4
--- a/wp/wp-admin/theme-editor.php	Mon Oct 14 18:06:33 2019 +0200
+++ b/wp/wp-admin/theme-editor.php	Mon Oct 14 18:28:13 2019 +0200
@@ -14,39 +14,45 @@
 	exit();
 }
 
-if ( !current_user_can('edit_themes') )
-	wp_die('<p>'.__('Sorry, you are not allowed to edit templates for this site.').'</p>');
+if ( ! current_user_can( 'edit_themes' ) ) {
+	wp_die( '<p>' . __( 'Sorry, you are not allowed to edit templates for this site.' ) . '</p>' );
+}
 
-$title = __("Edit Themes");
+$title       = __( 'Edit Themes' );
 $parent_file = 'themes.php';
 
-get_current_screen()->add_help_tab( array(
-'id'		=> 'overview',
-'title'		=> __('Overview'),
-'content'	=>
-	'<p>' . __( 'You can use the Theme Editor to edit the individual CSS and PHP files which make up your theme.' ) . '</p>' .
-	'<p>' . __( 'Begin by choosing a theme to edit from the dropdown menu and clicking the Select button. A list then appears of the theme&#8217;s template files. Clicking once on any file name causes the file to appear in the large Editor box.' ) . '</p>' .
-	'<p>' . __( '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.' ) . '</p>' .
-	'<p id="editor-keyboard-trap-help-1">' . __( 'When using a keyboard to navigate:' ) . '</p>' .
-	'<ul>' .
-	'<li id="editor-keyboard-trap-help-2">' . __( 'In the editing area, the Tab key enters a tab character.' ) . '</li>' .
-	'<li id="editor-keyboard-trap-help-3">' . __( 'To move away from this area, press the Esc key followed by the Tab key.' ) . '</li>' .
-	'<li id="editor-keyboard-trap-help-4">' . __( 'Screen reader users: when in forms mode, you may need to press the Esc key twice.' ) . '</li>' .
-	'</ul>' .
-	'<p>' . __( 'After typing in your edits, click Update File.' ) . '</p>' .
-	'<p>' . __( '<strong>Advice:</strong> think very carefully about your site crashing if you are live-editing the theme currently in use.' ) . '</p>' .
-	/* translators: %s: link to codex article about child themes */
-	'<p>' . sprintf( __( 'Upgrading to a newer version of the same theme will override changes made here. To avoid this, consider creating a <a href="%s">child theme</a> instead.' ), __( 'https://codex.wordpress.org/Child_Themes' ) ) . '</p>' .
-	( is_network_admin() ? '<p>' . __( 'Any edits to files from this screen will be reflected on all sites in the network.' ) . '</p>' : '' ),
-) );
+get_current_screen()->add_help_tab(
+	array(
+		'id'      => 'overview',
+		'title'   => __( 'Overview' ),
+		'content' =>
+				'<p>' . __( 'You can use the theme editor to edit the individual CSS and PHP files which make up your theme.' ) . '</p>' .
+				'<p>' . __( 'Begin by choosing a theme to edit from the dropdown menu and clicking the Select button. A list then appears of the theme&#8217;s template files. Clicking once on any file name causes the file to appear in the large Editor box.' ) . '</p>' .
+				'<p>' . __( '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.' ) . '</p>' .
+				'<p id="editor-keyboard-trap-help-1">' . __( 'When using a keyboard to navigate:' ) . '</p>' .
+				'<ul>' .
+				'<li id="editor-keyboard-trap-help-2">' . __( 'In the editing area, the Tab key enters a tab character.' ) . '</li>' .
+				'<li id="editor-keyboard-trap-help-3">' . __( 'To move away from this area, press the Esc key followed by the Tab key.' ) . '</li>' .
+				'<li id="editor-keyboard-trap-help-4">' . __( 'Screen reader users: when in forms mode, you may need to press the Esc key twice.' ) . '</li>' .
+				'</ul>' .
+				'<p>' . __( 'After typing in your edits, click Update File.' ) . '</p>' .
+				'<p>' . __( '<strong>Advice:</strong> Think very carefully about your site crashing if you are live-editing the theme currently in use.' ) . '</p>' .
+				'<p>' . sprintf(
+					/* translators: %s: link to documentation on child themes */
+					__( 'Upgrading to a newer version of the same theme will override changes made here. To avoid this, consider creating a <a href="%s">child theme</a> instead.' ),
+					__( 'https://developer.wordpress.org/themes/advanced-topics/child-themes/' )
+				) . '</p>' .
+				( is_network_admin() ? '<p>' . __( 'Any edits to files from this screen will be reflected on all sites in the network.' ) . '</p>' : '' ),
+	)
+);
 
 get_current_screen()->set_help_sidebar(
-	'<p><strong>' . __('For more information:') . '</strong></p>' .
-	'<p>' . __('<a href="https://codex.wordpress.org/Theme_Development">Documentation on Theme Development</a>') . '</p>' .
-	'<p>' . __('<a href="https://codex.wordpress.org/Using_Themes">Documentation on Using Themes</a>') . '</p>' .
-	'<p>' . __('<a href="https://codex.wordpress.org/Editing_Files">Documentation on Editing Files</a>') . '</p>' .
-	'<p>' . __('<a href="https://codex.wordpress.org/Template_Tags">Documentation on Template Tags</a>') . '</p>' .
-	'<p>' . __('<a href="https://wordpress.org/support/">Support Forums</a>') . '</p>'
+	'<p><strong>' . __( 'For more information:' ) . '</strong></p>' .
+	'<p>' . __( '<a href="https://codex.wordpress.org/Theme_Development">Documentation on Theme Development</a>' ) . '</p>' .
+	'<p>' . __( '<a href="https://codex.wordpress.org/Using_Themes">Documentation on Using Themes</a>' ) . '</p>' .
+	'<p>' . __( '<a href="https://codex.wordpress.org/Editing_Files">Documentation on Editing Files</a>' ) . '</p>' .
+	'<p>' . __( '<a href="https://codex.wordpress.org/Template_Tags">Documentation on Template Tags</a>' ) . '</p>' .
+	'<p>' . __( '<a href="https://wordpress.org/support/">Support</a>' ) . '</p>'
 );
 
 wp_reset_vars( array( 'action', 'error', 'file', 'theme' ) );
@@ -76,12 +82,12 @@
 	switch ( $type ) {
 		case 'php':
 			$allowed_files += $theme->get_files( 'php', -1 );
-			$has_templates = ! empty( $allowed_files );
+			$has_templates  = ! empty( $allowed_files );
 			break;
 		case 'css':
-			$style_files = $theme->get_files( 'css', -1 );
+			$style_files                = $theme->get_files( 'css', -1 );
 			$allowed_files['style.css'] = $style_files['style.css'];
-			$allowed_files += $style_files;
+			$allowed_files             += $style_files;
 			break;
 		default:
 			$allowed_files += $theme->get_files( $type, -1 );
@@ -99,33 +105,35 @@
 
 if ( empty( $file ) ) {
 	$relative_file = 'style.css';
-	$file = $allowed_files['style.css'];
+	$file          = $allowed_files['style.css'];
 } else {
 	$relative_file = wp_unslash( $file );
-	$file = $theme->get_stylesheet_directory() . '/' . $relative_file;
+	$file          = $theme->get_stylesheet_directory() . '/' . $relative_file;
 }
 
 validate_file_to_edit( $file, $allowed_files );
 
 // Handle fallback editing of file when JavaScript is not available.
-$edit_error = null;
+$edit_error     = null;
 $posted_content = null;
 if ( 'POST' === $_SERVER['REQUEST_METHOD'] ) {
 	$r = wp_edit_theme_plugin_file( wp_unslash( $_POST ) );
 	if ( is_wp_error( $r ) ) {
 		$edit_error = $r;
-		if ( check_ajax_referer( 'edit-theme_' . $file . $stylesheet, 'nonce', false ) && isset( $_POST['newcontent'] ) ) {
+		if ( check_ajax_referer( 'edit-theme_' . $stylesheet . '_' . $relative_file, 'nonce', false ) && isset( $_POST['newcontent'] ) ) {
 			$posted_content = wp_unslash( $_POST['newcontent'] );
 		}
 	} else {
-		wp_redirect( add_query_arg(
-			array(
-				'a' => 1, // This means "success" for some reason.
-				'theme' => $stylesheet,
-				'file' => $relative_file,
-			),
-			admin_url( 'theme-editor.php' )
-		) );
+		wp_redirect(
+			add_query_arg(
+				array(
+					'a'     => 1, // This means "success" for some reason.
+					'theme' => $stylesheet,
+					'file'  => $relative_file,
+				),
+				admin_url( 'theme-editor.php' )
+			)
+		);
 		exit;
 	}
 }
@@ -141,20 +149,21 @@
 
 	update_recently_edited( $file );
 
-	if ( ! is_file( $file ) )
+	if ( ! is_file( $file ) ) {
 		$error = true;
+	}
 
 	$content = '';
 	if ( ! empty( $posted_content ) ) {
 		$content = $posted_content;
 	} elseif ( ! $error && filesize( $file ) > 0 ) {
-		$f = fopen($file, 'r');
-		$content = fread($f, filesize($file));
+		$f       = fopen( $file, 'r' );
+		$content = fread( $f, filesize( $file ) );
 
 		if ( '.php' == substr( $file, strrpos( $file, '.' ) ) ) {
 			$functions = wp_doc_link_parse( $content );
 
-			$docs_select = '<select name="docs-list" id="docs-list">';
+			$docs_select  = '<select name="docs-list" id="docs-list">';
 			$docs_select .= '<option value="">' . esc_attr__( 'Function Name&hellip;' ) . '</option>';
 			foreach ( $functions as $function ) {
 				$docs_select .= '<option value="' . esc_attr( urlencode( $function ) ) . '">' . htmlspecialchars( $function ) . '()</option>';
@@ -165,13 +174,13 @@
 		$content = esc_textarea( $content );
 	}
 
-$file_description = get_file_description( $relative_file );
-$file_show = array_search( $file, array_filter( $allowed_files ) );
-$description = esc_html( $file_description );
-if ( $file_description != $file_show ) {
-	$description .= ' <span>(' . esc_html( $file_show ) . ')</span>';
-}
-?>
+	$file_description = get_file_description( $relative_file );
+	$file_show        = array_search( $file, array_filter( $allowed_files ) );
+	$description      = esc_html( $file_description );
+	if ( $file_description != $file_show ) {
+		$description .= ' <span>(' . esc_html( $file_show ) . ')</span>';
+	}
+	?>
 <div class="wrap">
 <h1><?php echo esc_html( $title ); ?></h1>
 
@@ -202,19 +211,26 @@
 
 <div class="fileedit-sub">
 <div class="alignleft">
-<h2><?php echo $theme->display( 'Name' ); if ( $description ) echo ': ' . $description; ?></h2>
+<h2>
+<?php
+echo $theme->display( 'Name' );
+if ( $description ) {
+	echo ': ' . $description;}
+?>
+</h2>
 </div>
 <div class="alignright">
 	<form action="theme-editor.php" method="get">
-		<strong><label for="theme"><?php _e('Select theme to edit:'); ?> </label></strong>
+		<strong><label for="theme"><?php _e( 'Select theme to edit:' ); ?> </label></strong>
 		<select name="theme" id="theme">
 <?php
 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() )
+	if ( $a_theme->errors() && 'theme_no_stylesheet' == $a_theme->errors()->get_error_code() ) {
 		continue;
+	}
 
 	$selected = $a_stylesheet == $stylesheet ? ' selected="selected"' : '';
-	echo "\n\t" . '<option value="' . esc_attr( $a_stylesheet ) . '"' . $selected . '>' . $a_theme->display('Name') . '</option>';
+	echo "\n\t" . '<option value="' . esc_attr( $a_stylesheet ) . '"' . $selected . '>' . $a_theme->display( 'Name' ) . '</option>';
 }
 ?>
 		</select>
@@ -224,8 +240,9 @@
 <br class="clear" />
 </div>
 <?php
-if ( $theme->errors() )
+if ( $theme->errors() ) {
 	echo '<div class="error"><p><strong>' . __( 'This theme is broken.' ) . '</strong> ' . $theme->errors()->get_error_message() . '</p></div>';
+}
 ?>
 <div id="templateside">
 	<h2 id="theme-files-label"><?php _e( 'Theme Files' ); ?></h2>
@@ -234,8 +251,10 @@
 			<li class="howto">
 				<?php
 				/* translators: %s: link to edit parent theme */
-				echo sprintf( __( 'This child theme inherits templates from a parent theme, %s.' ),
-					sprintf( '<a href="%s">%s</a>',
+				echo sprintf(
+					__( 'This child theme inherits templates from a parent theme, %s.' ),
+					sprintf(
+						'<a href="%s">%s</a>',
 						self_admin_url( 'theme-editor.php?theme=' . urlencode( $theme->get_template() ) ),
 						$theme->parent()->display( 'Name' )
 					)
@@ -251,11 +270,13 @@
 	</ul>
 </div>
 
-<?php if ( $error ) :
-	echo '<div class="error"><p>' . __('Oops, no such file exists! Double check the name and try again, merci.') . '</p></div>';
-else : ?>
+<?php
+if ( $error ) :
+	echo '<div class="error"><p>' . __( 'Oops, no such file exists! Double check the name and try again, merci.' ) . '</p></div>';
+else :
+	?>
 	<form name="template" id="template" action="theme-editor.php" method="post">
-		<?php wp_nonce_field( 'edit-theme_' . $file . $stylesheet, 'nonce' ); ?>
+		<?php wp_nonce_field( 'edit-theme_' . $stylesheet . '_' . $relative_file, 'nonce' ); ?>
 		<div>
 			<label for="newcontent" id="theme-plugin-editor-label"><?php _e( 'Selected file content:' ); ?></label>
 			<textarea cols="70" rows="30" name="newcontent" id="newcontent" aria-describedby="editor-keyboard-trap-help-1 editor-keyboard-trap-help-2 editor-keyboard-trap-help-3 editor-keyboard-trap-help-4"><?php echo $content; ?></textarea>
@@ -265,9 +286,9 @@
 		</div>
 	<?php if ( ! empty( $functions ) ) : ?>
 		<div id="documentation" class="hide-if-no-js">
-		<label for="docs-list"><?php _e('Documentation:') ?></label>
+		<label for="docs-list"><?php _e( 'Documentation:' ); ?></label>
 		<?php echo $docs_select; ?>
-		<input type="button" class="button" value="<?php esc_attr_e( 'Look Up' ); ?>" onclick="if ( '' != jQuery('#docs-list').val() ) { window.open( 'https://api.wordpress.org/core/handbook/1.0/?function=' + escape( jQuery( '#docs-list' ).val() ) + '&amp;locale=<?php echo urlencode( get_user_locale() ) ?>&amp;version=<?php echo urlencode( get_bloginfo( 'version' ) ) ?>&amp;redirect=true'); }" />
+		<input disabled id="docs-lookup" type="button" class="button" value="<?php esc_attr_e( 'Look Up' ); ?>" onclick="if ( '' != jQuery('#docs-list').val() ) { window.open( 'https://api.wordpress.org/core/handbook/1.0/?function=' + escape( jQuery( '#docs-list' ).val() ) + '&amp;locale=<?php echo urlencode( get_user_locale() ); ?>&amp;version=<?php echo urlencode( get_bloginfo( 'version' ) ); ?>&amp;redirect=true'); }" />
 		</div>
 	<?php endif; ?>
 
@@ -276,7 +297,10 @@
 			<?php if ( is_child_theme() && $theme->get_stylesheet() == get_template() ) : ?>
 				<div class="notice notice-warning inline">
 					<p>
-						<?php if ( is_writeable( $file ) ) { ?><strong><?php _e( 'Caution:' ); ?></strong><?php } ?>
+						<?php
+						if ( is_writeable( $file ) ) {
+							?>
+						<strong><?php _e( 'Caution:' ); ?></strong><?php } ?>
 						<?php _e( 'This is a file in your current parent theme.' ); ?>
 					</p>
 				</div>
@@ -288,12 +312,12 @@
 			<span class="spinner"></span>
 		</p>
 	<?php else : ?>
-		<p><em><?php _e('You need to make this file writable before you can save your changes. See <a href="https://codex.wordpress.org/Changing_File_Permissions">the Codex</a> for more information.'); ?></em></p>
+		<p><em><?php _e( 'You need to make this file writable before you can save your changes. See <a href="https://codex.wordpress.org/Changing_File_Permissions">the Codex</a> for more information.' ); ?></em></p>
 	<?php endif; ?>
 	</div>
 	<?php wp_print_file_editor_templates(); ?>
 	</form>
-<?php
+	<?php
 endif; // $error
 ?>
 <br class="clear" />
@@ -302,7 +326,7 @@
 $dismissed_pointers = explode( ',', (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) );
 if ( ! in_array( 'theme_editor_notice', $dismissed_pointers, true ) ) :
 	// Get a back URL
-	$referer = wp_get_referer();
+	$referer                    = wp_get_referer();
 	$excluded_referer_basenames = array( 'theme-editor.php', 'wp-login.php' );
 
 	if ( $referer && ! in_array( basename( parse_url( $referer, PHP_URL_PATH ) ), $excluded_referer_basenames, true ) ) {
@@ -310,7 +334,7 @@
 	} else {
 		$return_url = admin_url( '/' );
 	}
-?>
+	?>
 <div id="file-editor-warning" class="notification-dialog-wrap file-editor-warning hide-if-no-js hidden">
 	<div class="notification-dialog-background"></div>
 	<div class="notification-dialog">
@@ -320,14 +344,13 @@
 				<p>
 					<?php
 					echo sprintf(
-						/* translators: %s: Codex URL */
+						/* translators: %s: link to documentation on child themes */
 						__( 'You appear to be making direct edits to your theme in the WordPress dashboard. We recommend that you don&#8217;t! Editing your theme directly could break your site and your changes may be lost in future updates. If you need to tweak more than your theme&#8217;s CSS, you might want to try <a href="%s">making a child theme</a>.' ),
-						esc_url( __( 'https://codex.wordpress.org/Child_Themes' ) )
+						esc_url( __( 'https://developer.wordpress.org/themes/advanced-topics/child-themes/' ) )
 					);
 					?>
 				</p>
 				<p><?php _e( 'If you decide to go ahead with direct edits anyway, use a file manager to create a copy with a new name and hang on to the original. That way, you can re-enable a functional version if something goes wrong.' ); ?></p>
-				
 			</div>
 			<p>
 				<a class="button file-editor-warning-go-back" href="<?php echo esc_url( $return_url ); ?>"><?php _e( 'Go back' ); ?></a>
@@ -336,7 +359,7 @@
 		</div>
 	</div>
 </div>
-<?php
+	<?php
 endif; // editor warning notice
 
-include(ABSPATH . 'wp-admin/admin-footer.php' );
+include( ABSPATH . 'wp-admin/admin-footer.php' );