2010-10-21 13:49:49 +00:00
<? php
/**
* Add Site Administration Screen
*
* @package WordPress
2010-11-10 14:27:15 +00:00
* @subpackage Multisite
2010-10-21 15:38:50 +00:00
* @since 3.1.0
2010-10-21 13:49:49 +00:00
*/
/** Load WordPress Administration Bootstrap */
2013-09-25 00:18:11 +00:00
require_once ( dirname ( __FILE__ ) . '/admin.php' );
2010-10-21 13:49:49 +00:00
2015-09-05 20:47:24 +00:00
/** WordPress Translation Install API */
require_once ( ABSPATH . 'wp-admin/includes/translation-install.php' );
2010-12-16 07:41:38 +00:00
if ( ! current_user_can ( 'manage_sites' ) )
2016-06-29 15:16:29 +00:00
wp_die ( __ ( 'Sorry, you are not allowed to add sites to this network.' ) );
2010-10-21 13:49:49 +00:00
2015-09-28 23:30:24 +00:00
get_current_screen () -> add_help_tab ( array (
'id' => 'overview' ,
'title' => __ ( 'Overview' ),
'content' =>
'<p>' . __ ( 'This screen is for Super Admins to add new sites to the network. This is not affected by the registration settings.' ) . '</p>' .
'<p>' . __ ( 'If the admin email for the new site does not exist in the database, a new user will also be created.' ) . '</p>'
2011-12-01 02:22:07 +00:00
) );
2011-11-02 05:33:53 +00:00
2011-11-02 21:32:16 +00:00
get_current_screen () -> set_help_sidebar (
2010-12-16 06:52:47 +00:00
'<p><strong>' . __ ( 'For more information:' ) . '</strong></p>' .
2016-10-04 07:03:31 +00:00
'<p>' . __ ( '<a href="https://codex.wordpress.org/Network_Admin_Sites_Screen">Documentation on Site Management</a>' ) . '</p>' .
'<p>' . __ ( '<a href="https://wordpress.org/support/forum/multisite/">Support Forums</a>' ) . '</p>'
2010-12-16 06:52:47 +00:00
);
2015-09-17 12:33:26 +00:00
if ( isset ( $_REQUEST [ 'action' ]) && 'add-site' == $_REQUEST [ 'action' ] ) {
2010-10-21 13:49:49 +00:00
check_admin_referer ( 'add-blog' , '_wpnonce_add-blog' );
2010-12-16 07:41:38 +00:00
if ( ! is_array ( $_POST [ 'blog' ] ) )
2010-11-11 16:57:22 +00:00
wp_die ( __ ( 'Can’t create an empty site.' ) );
2013-11-16 17:38:11 +00:00
2013-03-01 16:28:40 +00:00
$blog = $_POST [ 'blog' ];
2010-10-21 13:49:49 +00:00
$domain = '' ;
2011-07-26 21:35:39 +00:00
if ( preg_match ( '|^([a-zA-Z0-9-])+$|' , $blog [ 'domain' ] ) )
2010-10-21 13:49:49 +00:00
$domain = strtolower ( $blog [ 'domain' ] );
// If not a subdomain install, make sure the domain isn't a reserved word
if ( ! is_subdomain_install () ) {
2015-10-06 04:35:25 +00:00
$subdirectory_reserved_names = get_subdirectory_reserved_names ();
if ( in_array ( $domain , $subdirectory_reserved_names ) ) {
2016-02-29 02:44:26 +00:00
wp_die (
/* translators: %s: reserved names list */
sprintf ( __ ( 'The following words are reserved for use by WordPress functions and cannot be used as blog names: %s' ),
'<code>' . implode ( '</code>, <code>' , $subdirectory_reserved_names ) . '</code>'
)
);
2015-10-06 04:35:25 +00:00
}
2010-10-21 13:49:49 +00:00
}
$title = $blog [ 'title' ];
2015-09-05 20:47:24 +00:00
$meta = array (
'public' => 1
);
// Handle translation install for the new site.
2016-09-26 18:39:32 +00:00
if ( isset ( $_POST [ 'WPLANG' ] ) ) {
if ( '' === $_POST [ 'WPLANG' ] ) {
$meta [ 'WPLANG' ] = '' ; // en_US
} elseif ( wp_can_install_language_pack () ) {
$language = wp_download_language_pack ( wp_unslash ( $_POST [ 'WPLANG' ] ) );
if ( $language ) {
$meta [ 'WPLANG' ] = $language ;
}
2015-09-05 20:47:24 +00:00
}
}
2010-10-21 13:49:49 +00:00
if ( empty ( $domain ) )
wp_die ( __ ( 'Missing or invalid site address.' ) );
2014-10-12 00:22:18 +00:00
if ( isset ( $blog [ 'email' ] ) && '' === trim ( $blog [ 'email' ] ) ) {
2010-10-21 13:49:49 +00:00
wp_die ( __ ( 'Missing email address.' ) );
2014-10-12 00:22:18 +00:00
}
$email = sanitize_email ( $blog [ 'email' ] );
if ( ! is_email ( $email ) ) {
2010-10-21 13:49:49 +00:00
wp_die ( __ ( 'Invalid email address.' ) );
2014-10-12 00:22:18 +00:00
}
2010-10-21 13:49:49 +00:00
if ( is_subdomain_install () ) {
2016-10-19 04:47:30 +00:00
$newdomain = $domain . '.' . preg_replace ( '|^www\.|' , '' , get_network () -> domain );
$path = get_network () -> path ;
2010-10-21 13:49:49 +00:00
} else {
2016-10-19 04:47:30 +00:00
$newdomain = get_network () -> domain ;
$path = get_network () -> path . $domain . '/' ;
2010-10-21 13:49:49 +00:00
}
$password = 'N/A' ;
$user_id = email_exists ( $email );
if ( ! $user_id ) { // Create a new user with a random password
2015-12-06 20:10:26 +00:00
/**
2016-03-03 09:03:25 +00:00
* Fires immediately before a new user is created via the network site-new.php page.
2015-12-06 20:10:26 +00:00
*
* @since 4.5.0
*
* @param string $email Email of the non-existent user.
*/
2015-12-06 20:32:24 +00:00
do_action ( 'pre_network_site_new_created_user' , $email );
2015-12-06 20:10:26 +00:00
2015-10-10 01:42:26 +00:00
$user_id = username_exists ( $domain );
if ( $user_id ) {
wp_die ( __ ( 'The domain or path entered conflicts with an existing username.' ) );
}
2010-11-10 23:31:54 +00:00
$password = wp_generate_password ( 12 , false );
2010-10-21 13:49:49 +00:00
$user_id = wpmu_create_user ( $domain , $password , $email );
2015-09-16 22:19:24 +00:00
if ( false === $user_id ) {
2010-10-21 13:49:49 +00:00
wp_die ( __ ( 'There was an error creating the user.' ) );
2015-09-16 22:19:24 +00:00
}
/**
* Fires after a new user has been created via the network site-new.php page.
*
* @since 4.4.0
*
* @param int $user_id ID of the newly created user.
*/
do_action ( 'network_site_new_created_user' , $user_id );
2010-10-21 13:49:49 +00:00
}
$wpdb -> hide_errors ();
2016-10-19 04:47:30 +00:00
$id = wpmu_create_blog ( $newdomain , $path , $title , $user_id , $meta , get_current_network_id () );
2010-10-21 13:49:49 +00:00
$wpdb -> show_errors ();
2015-04-01 13:26:28 +00:00
if ( ! is_wp_error ( $id ) ) {
if ( ! is_super_admin ( $user_id ) && ! get_user_option ( 'primary_blog' , $user_id ) ) {
2010-10-21 13:49:49 +00:00
update_user_option ( $user_id , 'primary_blog' , $id , true );
2015-04-01 13:26:28 +00:00
}
2016-02-24 02:04:28 +00:00
wp_mail (
get_site_option ( 'admin_email' ),
sprintf (
/* translators: %s: network name */
__ ( '[%s] New Site Created' ),
2016-10-19 04:47:30 +00:00
get_network () -> site_name
2016-02-24 02:04:28 +00:00
),
sprintf (
/* translators: 1: user login, 2: site url, 3: site name/title */
__ ( 'New site created by %1$s
2012-11-19 06:11:42 +00:00
Address: %2$s
2015-04-01 13:26:28 +00:00
Name: %3$s' ),
2016-02-24 02:04:28 +00:00
$current_user -> user_login ,
get_site_url ( $id ),
wp_unslash ( $title )
),
sprintf (
'From: "%1$s" <%2$s>' ,
_x ( 'Site Admin' , 'email "From" field' ),
get_site_option ( 'admin_email' )
)
2015-04-01 13:26:28 +00:00
);
2010-10-21 13:49:49 +00:00
wpmu_welcome_notification ( $id , $user_id , $password , $title , array ( 'public' => 1 ) );
2011-09-22 07:17:27 +00:00
wp_redirect ( add_query_arg ( array ( 'update' => 'added' , 'id' => $id ), 'site-new.php' ) );
2010-10-21 13:49:49 +00:00
exit ;
} else {
wp_die ( $id -> get_error_message () );
}
}
if ( isset ( $_GET [ 'update' ]) ) {
$messages = array ();
if ( 'added' == $_GET [ 'update' ] )
2015-04-01 13:26:28 +00:00
$messages [] = sprintf (
/* translators: 1: dashboard url, 2: network admin edit url */
__ ( 'Site added. <a href="%1$s">Visit Dashboard</a> or <a href="%2$s">Edit Site</a>' ),
esc_url ( get_admin_url ( absint ( $_GET [ 'id' ] ) ) ),
network_admin_url ( 'site-info.php?id=' . absint ( $_GET [ 'id' ] ) )
);
2010-10-21 13:49:49 +00:00
}
$title = __ ( 'Add New Site' );
$parent_file = 'sites.php' ;
2014-01-27 23:10:12 +00:00
wp_enqueue_script ( 'user-suggest' );
2013-09-25 00:18:11 +00:00
require ( ABSPATH . 'wp-admin/admin-header.php' );
2010-10-21 13:49:49 +00:00
?>
<div class="wrap">
2015-06-27 15:41:25 +00:00
<h1 id="add-new-site"><?php _e( 'Add New Site' ); ?></h1>
2010-10-21 13:49:49 +00:00
<?php
if ( ! empty( $messages ) ) {
foreach ( $messages as $msg )
2015-04-01 22:06:28 +00:00
echo '<div id="message" class="updated notice is-dismissible"><p>' . $msg . '</p></div>';
2010-10-21 13:49:49 +00:00
} ?>
2014-07-08 17:52:14 +00:00
<form method="post" action="<?php echo network_admin_url( 'site-new.php?action=add-site' ); ?>" novalidate="novalidate">
2010-10-21 13:49:49 +00:00
<?php wp_nonce_field( 'add-blog', '_wpnonce_add-blog' ) ?>
<table class="form-table">
<tr class="form-field form-required">
2016-02-24 16:14:27 +00:00
<th scope="row"><label for="site-address"><?php _e( 'Site Address (URL)' ) ?></label></th>
2010-10-21 13:49:49 +00:00
<td>
<?php if ( is_subdomain_install() ) { ?>
2016-10-19 04:47:30 +00:00
<input name="blog[domain]" type="text" class="regular-text" id="site-address" aria-describedby="site-address-desc" autocapitalize="none" autocorrect="off"/><span class="no-break">.<?php echo preg_replace( '|^www\.|', '', get_network()->domain ); ?></span>
2010-10-21 13:49:49 +00:00
<?php } else {
2016-10-19 04:47:30 +00:00
echo get_network()->domain . get_network()->path ?><input name="blog[domain]" type="text" class="regular-text" id="site-address" aria-describedby="site-address-desc" autocapitalize="none" autocorrect="off" />
2010-10-21 13:49:49 +00:00
<?php }
2015-12-13 03:13:27 +00:00
echo '<p class="description" id="site-address-desc">' . __( 'Only lowercase letters (a-z), numbers, and hyphens are allowed.' ) . '</p>';
2010-10-21 13:49:49 +00:00
?>
</td>
</tr>
<tr class="form-field form-required">
2015-02-23 02:29:26 +00:00
<th scope="row"><label for="site-title"><?php _e( 'Site Title' ) ?></label></th>
<td><input name="blog[title]" type="text" class="regular-text" id="site-title" /></td>
2010-10-21 13:49:49 +00:00
</tr>
2015-09-05 20:47:24 +00:00
<?php
$languages = get_available_languages();
$translations = wp_get_available_translations();
if ( ! empty( $languages ) || ! empty( $translations ) ) :
?>
<tr class="form-field form-required">
<th scope="row"><label for="site-language"><?php _e( 'Site Language' ); ?></label></th>
<td>
<?php
// Network default.
2015-10-07 17:11:25 +00:00
$lang = get_site_option( 'WPLANG' );
2015-09-05 20:47:24 +00:00
// Use English if the default isn't available.
if ( ! in_array( $lang, $languages ) ) {
$lang = '';
}
wp_dropdown_languages( array(
'name' => 'WPLANG',
'id' => 'site-language',
'selected' => $lang,
'languages' => $languages,
'translations' => $translations,
'show_available_translations' => wp_can_install_language_pack(),
) );
?>
</td>
</tr>
<?php endif; // Languages. ?>
2010-10-21 13:49:49 +00:00
<tr class="form-field form-required">
2015-04-30 14:30:25 +00:00
<th scope="row"><label for="admin-email"><?php _e( 'Admin Email' ) ?></label></th>
2015-02-23 02:29:26 +00:00
<td><input name="blog[email]" type="email" class="regular-text wp-suggest-user" id="admin-email" data-autocomplete-type="search" data-autocomplete-field="user_email" /></td>
2010-10-21 13:49:49 +00:00
</tr>
<tr class="form-field">
<td colspan="2"><?php _e( 'A new user will be created if the above email address is not in the database.' ) ?><br /><?php _e( 'The username and password will be mailed to this email address.' ) ?></td>
</tr>
</table>
2016-02-17 19:03:25 +00:00
<?php
/**
* Fires at the end of the new site form in network admin.
*
* @since 4.5.0
*/
do_action( 'network_site_new_form' );
submit_button( __( 'Add Site' ), 'primary', 'add-site' );
?>
2010-10-21 13:49:49 +00:00
</form>
</div>
<?php
2013-09-25 00:18:11 +00:00
require( ABSPATH . 'wp-admin/admin-footer.php' );