wp/wp-admin/network/settings.php
changeset 7 cf61fcea0001
parent 5 5e2f62d02dcd
child 9 177826044cd9
--- a/wp/wp-admin/network/settings.php	Tue Jun 09 11:14:17 2015 +0000
+++ b/wp/wp-admin/network/settings.php	Mon Oct 14 17:39:30 2019 +0200
@@ -10,39 +10,35 @@
 /** Load WordPress Administration Bootstrap */
 require_once( dirname( __FILE__ ) . '/admin.php' );
 
-/** WordPress Translation Install API */
+/** WordPress Translation Installation API */
 require_once( ABSPATH . 'wp-admin/includes/translation-install.php' );
 
-if ( ! is_multisite() )
-	wp_die( __( 'Multisite support is not enabled.' ) );
-
 if ( ! current_user_can( 'manage_network_options' ) )
-	wp_die( __( 'You do not have permission to access this page.' ), 403 );
+	wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
 
 $title = __( 'Network Settings' );
 $parent_file = 'settings.php';
 
-/**
- * Print JavaScript in the header on the Network Settings screen.
- *
- * @since 4.1.0
-*/
-function network_settings_add_js() {
-?>
-<script type="text/javascript">
-jQuery(document).ready( function($) {
-	var languageSelect = $( '#WPLANG' );
-	$( 'form' ).submit( function() {
-		// Don't show a spinner for English and installed languages,
-		// as there is nothing to download.
-		if ( ! languageSelect.find( 'option:selected' ).data( 'installed' ) ) {
-			$( '#submit', this ).after( '<span class="spinner language-install-spinner" />' );
-		}
-	});
-});
-</script>
-<?php
+// Handle network admin email change requests
+if ( ! empty( $_GET[ 'network_admin_hash' ] ) ) {
+	$new_admin_details = get_site_option( 'network_admin_hash' );
+	$redirect = 'settings.php?updated=false';
+	if ( is_array( $new_admin_details ) && hash_equals( $new_admin_details[ 'hash' ], $_GET[ 'network_admin_hash' ] ) && ! empty( $new_admin_details[ 'newemail' ] ) ) {
+		update_site_option( 'admin_email', $new_admin_details[ 'newemail' ] );
+		delete_site_option( 'network_admin_hash' );
+		delete_site_option( 'new_admin_email' );
+		$redirect = 'settings.php?updated=true';
+	}
+	wp_redirect( network_admin_url( $redirect ) );
+	exit;
+} elseif ( ! empty( $_GET['dismiss'] ) && 'new_network_admin_email' == $_GET['dismiss'] ) {
+	check_admin_referer( 'dismiss_new_network_admin_email' );
+	delete_site_option( 'network_admin_hash' );
+	delete_site_option( 'new_admin_email' );
+	wp_redirect( network_admin_url( 'settings.php?updated=true' ) );
+	exit;
 }
+
 add_action( 'admin_head', 'network_settings_add_js' );
 
 get_current_screen()->add_help_tab( array(
@@ -61,8 +57,8 @@
 
 get_current_screen()->set_help_sidebar(
 	'<p><strong>' . __('For more information:') . '</strong></p>' .
-	'<p>' . __('<a href="https://codex.wordpress.org/Network_Admin_Settings_Screen" target="_blank">Documentation on Network Settings</a>') . '</p>' .
-	'<p>' . __('<a href="https://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
+	'<p>' . __('<a href="https://codex.wordpress.org/Network_Admin_Settings_Screen">Documentation on Network Settings</a>') . '</p>' .
+	'<p>' . __('<a href="https://wordpress.org/support/">Support Forums</a>') . '</p>'
 );
 
 if ( $_POST ) {
@@ -82,11 +78,12 @@
 		'upload_space_check_disabled', 'blog_upload_space', 'upload_filetypes', 'site_name',
 		'first_post', 'first_page', 'first_comment', 'first_comment_url', 'first_comment_author',
 		'welcome_email', 'welcome_user_email', 'fileupload_maxk', 'global_terms_enabled',
-		'illegal_names', 'limited_email_domains', 'banned_email_domains', 'WPLANG', 'admin_email',
+		'illegal_names', 'limited_email_domains', 'banned_email_domains', 'WPLANG', 'new_admin_email',
+		'first_comment_email',
 	);
 
-	// Handle translation install.
-	if ( ! empty( $_POST['WPLANG'] ) && wp_can_install_language_pack() ) {  // @todo: Skip if already installed
+	// Handle translation installation.
+	if ( ! empty( $_POST['WPLANG'] ) && current_user_can( 'install_languages' ) && wp_can_install_language_pack() ) {
 		$language = wp_download_language_pack( $_POST['WPLANG'] );
 		if ( $language ) {
 			$_POST['WPLANG'] = $language;
@@ -103,7 +100,7 @@
 	/**
 	 * Fires after the network options are updated.
 	 *
-	 * @since MU
+	 * @since MU (3.0.0)
 	 */
 	do_action( 'update_wpmu_options' );
 
@@ -114,34 +111,52 @@
 include( ABSPATH . 'wp-admin/admin-header.php' );
 
 if ( isset( $_GET['updated'] ) ) {
-	?><div id="message" class="updated notice is-dismissible"><p><?php _e( 'Options saved.' ) ?></p></div><?php
+	?><div id="message" class="updated notice is-dismissible"><p><?php _e( 'Settings saved.' ) ?></p></div><?php
 }
 ?>
 
 <div class="wrap">
-	<h2><?php echo esc_html( $title ); ?></h2>
+	<h1><?php echo esc_html( $title ); ?></h1>
 	<form method="post" action="settings.php" novalidate="novalidate">
 		<?php wp_nonce_field( 'siteoptions' ); ?>
-		<h3><?php _e( 'Operational Settings' ); ?></h3>
+		<h2><?php _e( 'Operational Settings' ); ?></h2>
 		<table class="form-table">
 			<tr>
 				<th scope="row"><label for="site_name"><?php _e( 'Network Title' ) ?></label></th>
 				<td>
-					<input name="site_name" type="text" id="site_name" class="regular-text" value="<?php echo esc_attr( $current_site->site_name ) ?>" />
+					<input name="site_name" type="text" id="site_name" class="regular-text" value="<?php echo esc_attr( get_network()->site_name ) ?>" />
 				</td>
 			</tr>
 
 			<tr>
 				<th scope="row"><label for="admin_email"><?php _e( 'Network Admin Email' ) ?></label></th>
 				<td>
-					<input name="admin_email" type="email" id="admin_email" aria-describedby="admin-email-desc" class="regular-text" value="<?php echo esc_attr( get_site_option( 'admin_email' ) ) ?>" />
+					<input name="new_admin_email" type="email" id="admin_email" aria-describedby="admin-email-desc" class="regular-text" value="<?php echo esc_attr( get_site_option( 'admin_email' ) ) ?>" />
 					<p class="description" id="admin-email-desc">
-						<?php _e( 'This email address will receive notifications. Registration and support emails will also come from this address.' ); ?>
+						<?php _e( 'This address is used for admin purposes. If you change this we will send you an email at your new address to confirm it. <strong>The new address will not become active until confirmed.</strong>' ); ?>
 					</p>
+					<?php
+					$new_admin_email = get_site_option( 'new_admin_email' );
+					if ( $new_admin_email && $new_admin_email != get_site_option( 'admin_email' ) ) : ?>
+						<div class="updated inline">
+						<p><?php
+							printf(
+								/* translators: %s: new network admin email */
+								__( 'There is a pending change of the network admin email to %s.' ),
+								'<code>' . esc_html( $new_admin_email ) . '</code>'
+							);
+							printf(
+								' <a href="%1$s">%2$s</a>',
+								esc_url( wp_nonce_url( network_admin_url( 'settings.php?dismiss=new_network_admin_email' ), 'dismiss_new_network_admin_email' ) ),
+								__( 'Cancel' )
+							);
+						?></p>
+						</div>
+					<?php endif; ?>
 				</td>
 			</tr>
 		</table>
-		<h3><?php _e( 'Registration Settings' ); ?></h3>
+		<h2><?php _e( 'Registration Settings' ); ?></h2>
 		<table class="form-table">
 			<tr>
 				<th scope="row"><?php _e( 'Allow new registrations' ) ?></th>
@@ -153,12 +168,18 @@
 				<td>
 					<fieldset>
 					<legend class="screen-reader-text"><?php _e( 'New registrations settings' ) ?></legend>
-					<label><input name="registration" type="radio" id="registration1" value="none"<?php checked( $reg, 'none') ?> /> <?php _e( 'Registration is disabled.' ); ?></label><br />
-					<label><input name="registration" type="radio" id="registration2" value="user"<?php checked( $reg, 'user') ?> /> <?php _e( 'User accounts may be registered.' ); ?></label><br />
-					<label><input name="registration" type="radio" id="registration3" value="blog"<?php checked( $reg, 'blog') ?> /> <?php _e( 'Logged in users may register new sites.' ); ?></label><br />
-					<label><input name="registration" type="radio" id="registration4" value="all"<?php checked( $reg, 'all') ?> /> <?php _e( 'Both sites and user accounts can be registered.' ); ?></label>
+					<label><input name="registration" type="radio" id="registration1" value="none"<?php checked( $reg, 'none') ?> /> <?php _e( 'Registration is disabled' ); ?></label><br />
+					<label><input name="registration" type="radio" id="registration2" value="user"<?php checked( $reg, 'user') ?> /> <?php _e( 'User accounts may be registered' ); ?></label><br />
+					<label><input name="registration" type="radio" id="registration3" value="blog"<?php checked( $reg, 'blog') ?> /> <?php _e( 'Logged in users may register new sites' ); ?></label><br />
+					<label><input name="registration" type="radio" id="registration4" value="all"<?php checked( $reg, 'all') ?> /> <?php _e( 'Both sites and user accounts can be registered' ); ?></label>
 					<?php if ( is_subdomain_install() ) {
-						echo '<p class="description">' . __( 'If registration is disabled, please set <code>NOBLOGREDIRECT</code> in <code>wp-config.php</code> to a URL you will redirect visitors to if they visit a non-existent site.' ) . '</p>';
+						echo '<p class="description">';
+						/* translators: 1: NOBLOGREDIRECT 2: wp-config.php */
+						printf( __( 'If registration is disabled, please set %1$s in %2$s to a URL you will redirect visitors to if they visit a non-existent site.' ),
+							'<code>NOBLOGREDIRECT</code>',
+							'<code>wp-config.php</code>'
+						);
+						echo '</p>';
 					} ?>
 					</fieldset>
 				</td>
@@ -171,14 +192,14 @@
 					update_site_option( 'registrationnotification', 'yes' );
 				?>
 				<td>
-					<label><input name="registrationnotification" type="checkbox" id="registrationnotification" value="yes"<?php checked( get_site_option( 'registrationnotification' ), 'yes' ) ?> /> <?php _e( 'Send the network admin an email notification every time someone registers a site or user account.' ) ?></label>
+					<label><input name="registrationnotification" type="checkbox" id="registrationnotification" value="yes"<?php checked( get_site_option( 'registrationnotification' ), 'yes' ) ?> /> <?php _e( 'Send the network admin an email notification every time someone registers a site or user account' ) ?></label>
 				</td>
 			</tr>
 
 			<tr id="addnewusers">
 				<th scope="row"><?php _e( 'Add New Users' ) ?></th>
 				<td>
-					<label><input name="add_new_users" type="checkbox" id="add_new_users" value="1"<?php checked( get_site_option( 'add_new_users' ) ) ?> /> <?php _e( 'Allow site administrators to add new users to their site via the "Users &rarr; Add New" page.' ); ?></label>
+					<label><input name="add_new_users" type="checkbox" id="add_new_users" value="1"<?php checked( get_site_option( 'add_new_users' ) ) ?> /> <?php _e( 'Allow site administrators to add new users to their site via the "Users &rarr; Add New" page' ); ?></label>
 				</td>
 			</tr>
 
@@ -217,7 +238,7 @@
 			</tr>
 
 		</table>
-		<h3><?php _e('New Site Settings'); ?></h3>
+		<h2><?php _e( 'New Site Settings' ); ?></h2>
 		<table class="form-table">
 
 			<tr>
@@ -273,13 +294,22 @@
 			<tr>
 				<th scope="row"><label for="first_comment_author"><?php _e( 'First Comment Author' ) ?></label></th>
 				<td>
-					<input type="text" size="40" name="first_comment_author" id="first_comment_author" aria-describedby="first-comment-author-desc" value="<?php echo get_site_option('first_comment_author') ?>" />
+					<input type="text" size="40" name="first_comment_author" id="first_comment_author" aria-describedby="first-comment-author-desc" value="<?php echo esc_attr( get_site_option('first_comment_author') ); ?>" />
 					<p class="description" id="first-comment-author-desc">
 						<?php _e( 'The author of the first comment on a new site.' ) ?>
 					</p>
 				</td>
 			</tr>
 			<tr>
+				<th scope="row"><label for="first_comment_email"><?php _e( 'First Comment Email' ) ?></label></th>
+				<td>
+					<input type="text" size="40" name="first_comment_email" id="first_comment_email" aria-describedby="first-comment-email-desc" value="<?php echo esc_attr( get_site_option( 'first_comment_email' ) ); ?>" />
+					<p class="description" id="first-comment-email-desc">
+						<?php _e( 'The email address of the first comment author on a new site.' ) ?>
+					</p>
+				</td>
+			</tr>
+			<tr>
 				<th scope="row"><label for="first_comment_url"><?php _e( 'First Comment URL' ) ?></label></th>
 				<td>
 					<input type="text" size="40" name="first_comment_url" id="first_comment_url" aria-describedby="first-comment-url-desc" value="<?php echo esc_attr( get_site_option( 'first_comment_url' ) ) ?>" />
@@ -289,12 +319,12 @@
 				</td>
 			</tr>
 		</table>
-		<h3><?php _e( 'Upload Settings' ); ?></h3>
+		<h2><?php _e( 'Upload Settings' ); ?></h2>
 		<table class="form-table">
 			<tr>
 				<th scope="row"><?php _e( 'Site upload space' ) ?></th>
 				<td>
-					<label><input type="checkbox" id="upload_space_check_disabled" name="upload_space_check_disabled" value="0"<?php checked( get_site_option( 'upload_space_check_disabled' ), 0 ) ?>/> <?php printf( __( 'Limit total size of files uploaded to %s MB' ), '</label><label><input name="blog_upload_space" type="number" min="0" style="width: 100px" id="blog_upload_space" aria-describedby="blog-upload-space-desc" value="' . esc_attr( get_site_option('blog_upload_space', 100) ) . '" />' ); ?></label><br />
+					<label><input type="checkbox" id="upload_space_check_disabled" name="upload_space_check_disabled" value="0"<?php checked( (bool) get_site_option( 'upload_space_check_disabled' ), false ) ?>/> <?php printf( __( 'Limit total size of files uploaded to %s MB' ), '</label><label><input name="blog_upload_space" type="number" min="0" style="width: 100px" id="blog_upload_space" aria-describedby="blog-upload-space-desc" value="' . esc_attr( get_site_option('blog_upload_space', 100) ) . '" />' ); ?></label><br />
 					<p class="screen-reader-text" id="blog-upload-space-desc">
 						<?php _e( 'Size in megabytes' ) ?>
 					</p>
@@ -314,7 +344,13 @@
 			<tr>
 				<th scope="row"><label for="fileupload_maxk"><?php _e( 'Max upload file size' ) ?></label></th>
 				<td>
-					<?php printf( _x( '%s KB', 'File size in kilobytes' ), '<input name="fileupload_maxk" type="number" min="0" style="width: 100px" id="fileupload_maxk" aria-describedby="fileupload-maxk-desc" value="' . esc_attr( get_site_option( 'fileupload_maxk', 300 ) ) . '" />' ); ?>
+					<?php
+						printf(
+							/* translators: %s: File size in kilobytes */
+							__( '%s KB' ),
+							'<input name="fileupload_maxk" type="number" min="0" style="width: 100px" id="fileupload_maxk" aria-describedby="fileupload-maxk-desc" value="' . esc_attr( get_site_option( 'fileupload_maxk', 300 ) ) . '" />'
+						);
+					?>
 					<p class="screen-reader-text" id="fileupload-maxk-desc">
 						<?php _e( 'Size in kilobytes' ) ?>
 					</p>
@@ -327,7 +363,7 @@
 		$translations = wp_get_available_translations();
 		if ( ! empty( $languages ) || ! empty( $translations ) ) {
 			?>
-			<h3><?php _e( 'Language Settings' ); ?></h3>
+			<h2><?php _e( 'Language Settings' ); ?></h2>
 			<table class="form-table">
 				<tr>
 					<th><label for="WPLANG"><?php _e( 'Default Language' ); ?></label></th>
@@ -338,14 +374,16 @@
 							$lang = '';
 						}
 
-						wp_dropdown_languages( array(
-							'name'         => 'WPLANG',
-							'id'           => 'WPLANG',
-							'selected'     => $lang,
-							'languages'    => $languages,
-							'translations' => $translations,
-							'show_available_translations' => wp_can_install_language_pack(),
-						) );
+						wp_dropdown_languages(
+							array(
+								'name'         => 'WPLANG',
+								'id'           => 'WPLANG',
+								'selected'     => $lang,
+								'languages'    => $languages,
+								'translations' => $translations,
+								'show_available_translations' => current_user_can( 'install_languages' ) && wp_can_install_language_pack(),
+							)
+						);
 						?>
 					</td>
 				</tr>
@@ -354,7 +392,7 @@
 		}
 		?>
 
-		<h3><?php _e( 'Menu Settings' ); ?></h3>
+		<h2><?php _e( 'Menu Settings' ); ?></h2>
 		<table id="menu" class="form-table">
 			<tr>
 				<th scope="row"><?php _e( 'Enable administration menus' ); ?></th>
@@ -362,7 +400,7 @@
 			<?php
 			$menu_perms = get_site_option( 'menu_items' );
 			/**
-			 * Filter available network-wide administration menu options.
+			 * Filters available network-wide administration menu options.
 			 *
 			 * Options returned to this filter are output as individual checkboxes that, when selected,
 			 * enable site administrator access to the specified administration menu in certain contexts.
@@ -372,7 +410,7 @@
 			 * default option, 'plugins' is enabled, site administrators are granted access to the Plugins
 			 * screen in their individual sites' dashboards.
 			 *
-			 * @since MU
+			 * @since MU (3.0.0)
 			 *
 			 * @param array $admin_menus The menu items available.
 			 */
@@ -395,7 +433,7 @@
 		/**
 		 * Fires at the end of the Network Settings form, before the submit button.
 		 *
-		 * @since MU
+		 * @since MU (3.0.0)
 		 */
 		do_action( 'wpmu_options' ); ?>
 		<?php submit_button(); ?>