2010-10-21 09:49:49 -04:00
< ? php
/**
* Add Site Administration Screen
*
* @ package WordPress
2010-11-10 09:27:15 -05:00
* @ subpackage Multisite
2010-10-21 11:38:50 -04:00
* @ since 3.1 . 0
2010-10-21 09:49:49 -04:00
*/
/** Load WordPress Administration Bootstrap */
2013-09-24 20:18:11 -04:00
require_once ( dirname ( __FILE__ ) . '/admin.php' );
2010-10-21 09:49:49 -04:00
2015-09-05 16:47:24 -04:00
/** WordPress Translation Install API */
require_once ( ABSPATH . 'wp-admin/includes/translation-install.php' );
2017-04-15 13:30:48 -04:00
if ( ! current_user_can ( 'create_sites' ) ) {
2016-06-29 11:16:29 -04:00
wp_die ( __ ( 'Sorry, you are not allowed to add sites to this network.' ) );
2017-04-15 13:30:48 -04:00
}
2010-10-21 09:49:49 -04:00
2015-09-28 19:30:24 -04: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-11-30 21:22:07 -05:00
) );
2011-11-02 01:33:53 -04:00
2011-11-02 17:32:16 -04:00
get_current_screen () -> set_help_sidebar (
2010-12-16 01:52:47 -05:00
'<p><strong>' . __ ( 'For more information:' ) . '</strong></p>' .
2016-10-04 03:03:31 -04: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 01:52:47 -05:00
);
2015-09-17 08:33:26 -04:00
if ( isset ( $_REQUEST [ 'action' ]) && 'add-site' == $_REQUEST [ 'action' ] ) {
2010-10-21 09:49:49 -04:00
check_admin_referer ( 'add-blog' , '_wpnonce_add-blog' );
2010-12-16 02:41:38 -05:00
if ( ! is_array ( $_POST [ 'blog' ] ) )
2010-11-11 11:57:22 -05:00
wp_die ( __ ( 'Can’t create an empty site.' ) );
2013-11-16 12:38:11 -05:00
2013-03-01 11:28:40 -05:00
$blog = $_POST [ 'blog' ];
2010-10-21 09:49:49 -04:00
$domain = '' ;
2011-07-26 17:35:39 -04:00
if ( preg_match ( '|^([a-zA-Z0-9-])+$|' , $blog [ 'domain' ] ) )
2010-10-21 09:49:49 -04: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 00:35:25 -04:00
$subdirectory_reserved_names = get_subdirectory_reserved_names ();
if ( in_array ( $domain , $subdirectory_reserved_names ) ) {
2016-02-28 21:44:26 -05: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 00:35:25 -04:00
}
2010-10-21 09:49:49 -04:00
}
$title = $blog [ 'title' ];
2015-09-05 16:47:24 -04:00
$meta = array (
'public' => 1
);
// Handle translation install for the new site.
2016-09-26 14:39:32 -04: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 16:47:24 -04:00
}
}
2010-10-21 09:49:49 -04:00
if ( empty ( $domain ) )
wp_die ( __ ( 'Missing or invalid site address.' ) );
2014-10-11 20:22:18 -04:00
if ( isset ( $blog [ 'email' ] ) && '' === trim ( $blog [ 'email' ] ) ) {
2010-10-21 09:49:49 -04:00
wp_die ( __ ( 'Missing email address.' ) );
2014-10-11 20:22:18 -04:00
}
$email = sanitize_email ( $blog [ 'email' ] );
if ( ! is_email ( $email ) ) {
2010-10-21 09:49:49 -04:00
wp_die ( __ ( 'Invalid email address.' ) );
2014-10-11 20:22:18 -04:00
}
2010-10-21 09:49:49 -04:00
if ( is_subdomain_install () ) {
2016-10-19 00:47:30 -04:00
$newdomain = $domain . '.' . preg_replace ( '|^www\.|' , '' , get_network () -> domain );
$path = get_network () -> path ;
2010-10-21 09:49:49 -04:00
} else {
2016-10-19 00:47:30 -04:00
$newdomain = get_network () -> domain ;
$path = get_network () -> path . $domain . '/' ;
2010-10-21 09:49:49 -04:00
}
$password = 'N/A' ;
$user_id = email_exists ( $email );
if ( ! $user_id ) { // Create a new user with a random password
2015-12-06 15:10:26 -05:00
/**
2016-03-03 04:03:25 -05:00
* Fires immediately before a new user is created via the network site - new . php page .
2015-12-06 15:10:26 -05:00
*
* @ since 4.5 . 0
*
* @ param string $email Email of the non - existent user .
*/
2015-12-06 15:32:24 -05:00
do_action ( 'pre_network_site_new_created_user' , $email );
2015-12-06 15:10:26 -05:00
2015-10-09 21:42:26 -04:00
$user_id = username_exists ( $domain );
if ( $user_id ) {
wp_die ( __ ( 'The domain or path entered conflicts with an existing username.' ) );
}
2010-11-10 18:31:54 -05:00
$password = wp_generate_password ( 12 , false );
2010-10-21 09:49:49 -04:00
$user_id = wpmu_create_user ( $domain , $password , $email );
2015-09-16 18:19:24 -04:00
if ( false === $user_id ) {
2010-10-21 09:49:49 -04:00
wp_die ( __ ( 'There was an error creating the user.' ) );
2015-09-16 18:19:24 -04: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 09:49:49 -04:00
}
$wpdb -> hide_errors ();
2016-10-19 00:47:30 -04:00
$id = wpmu_create_blog ( $newdomain , $path , $title , $user_id , $meta , get_current_network_id () );
2010-10-21 09:49:49 -04:00
$wpdb -> show_errors ();
2015-04-01 09:26:28 -04:00
if ( ! is_wp_error ( $id ) ) {
if ( ! is_super_admin ( $user_id ) && ! get_user_option ( 'primary_blog' , $user_id ) ) {
2010-10-21 09:49:49 -04:00
update_user_option ( $user_id , 'primary_blog' , $id , true );
2015-04-01 09:26:28 -04:00
}
2016-02-23 21:04:28 -05:00
wp_mail (
get_site_option ( 'admin_email' ),
sprintf (
/* translators: %s: network name */
__ ( '[%s] New Site Created' ),
2016-10-19 00:47:30 -04:00
get_network () -> site_name
2016-02-23 21:04:28 -05:00
),
sprintf (
/* translators: 1: user login, 2: site url, 3: site name/title */
__ ( ' New site created by % 1 $s
2012-11-19 01:11:42 -05:00
Address : % 2 $s
2015-04-01 09:26:28 -04:00
Name : % 3 $s ' ),
2016-02-23 21:04:28 -05: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 09:26:28 -04:00
);
2010-10-21 09:49:49 -04:00
wpmu_welcome_notification ( $id , $user_id , $password , $title , array ( 'public' => 1 ) );
2011-09-22 03:17:27 -04:00
wp_redirect ( add_query_arg ( array ( 'update' => 'added' , 'id' => $id ), 'site-new.php' ) );
2010-10-21 09:49:49 -04:00
exit ;
} else {
wp_die ( $id -> get_error_message () );
}
}
if ( isset ( $_GET [ 'update' ]) ) {
$messages = array ();
if ( 'added' == $_GET [ 'update' ] )
2015-04-01 09:26:28 -04: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 09:49:49 -04:00
}
$title = __ ( 'Add New Site' );
$parent_file = 'sites.php' ;
2014-01-27 18:10:12 -05:00
wp_enqueue_script ( 'user-suggest' );
2013-09-24 20:18:11 -04:00
require ( ABSPATH . 'wp-admin/admin-header.php' );
2010-10-21 09:49:49 -04:00
?>
< div class = " wrap " >
2015-06-27 11:41:25 -04:00
< h1 id = " add-new-site " >< ? php _e ( 'Add New Site' ); ?> </h1>
2010-10-21 09:49:49 -04:00
< ? php
if ( ! empty ( $messages ) ) {
foreach ( $messages as $msg )
2015-04-01 18:06:28 -04:00
echo '<div id="message" class="updated notice is-dismissible"><p>' . $msg . '</p></div>' ;
2010-10-21 09:49:49 -04:00
} ?>
2014-07-08 13:52:14 -04:00
< form method = " post " action = " <?php echo network_admin_url( 'site-new.php?action=add-site' ); ?> " novalidate = " novalidate " >
2010-10-21 09:49:49 -04:00
< ? php wp_nonce_field ( 'add-blog' , '_wpnonce_add-blog' ) ?>
< table class = " form-table " >
< tr class = " form-field form-required " >
2016-02-24 11:14:27 -05:00
< th scope = " row " >< label for = " site-address " >< ? php _e ( 'Site Address (URL)' ) ?> </label></th>
2010-10-21 09:49:49 -04:00
< td >
< ? php if ( is_subdomain_install () ) { ?>
2016-10-19 00:47:30 -04: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 09:49:49 -04:00
< ? php } else {
2016-10-19 00:47:30 -04: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 09:49:49 -04:00
< ? php }
2015-12-12 22:13:27 -05:00
echo '<p class="description" id="site-address-desc">' . __ ( 'Only lowercase letters (a-z), numbers, and hyphens are allowed.' ) . '</p>' ;
2010-10-21 09:49:49 -04:00
?>
</ td >
</ tr >
< tr class = " form-field form-required " >
2015-02-22 21:29:26 -05: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 09:49:49 -04:00
</ tr >
2015-09-05 16:47:24 -04: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 13:11:25 -04:00
$lang = get_site_option ( 'WPLANG' );
2015-09-05 16:47:24 -04: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 09:49:49 -04:00
< tr class = " form-field form-required " >
2015-04-30 10:30:25 -04:00
< th scope = " row " >< label for = " admin-email " >< ? php _e ( 'Admin Email' ) ?> </label></th>
2015-02-22 21:29:26 -05: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 09:49:49 -04: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 14:03:25 -05: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 09:49:49 -04:00
</ form >
</ div >
< ? php
2013-09-24 20:18:11 -04:00
require ( ABSPATH . 'wp-admin/admin-footer.php' );