2010-10-21 15:49:49 +02:00
< ? php
/**
* Add Site Administration Screen
*
* @ package WordPress
2010-11-10 15:27:15 +01:00
* @ subpackage Multisite
2010-10-21 17:38:50 +02:00
* @ since 3.1 . 0
2010-10-21 15:49:49 +02:00
*/
/** Load WordPress Administration Bootstrap */
2013-09-25 02:18:11 +02:00
require_once ( dirname ( __FILE__ ) . '/admin.php' );
2010-10-21 15:49:49 +02:00
2015-09-05 22:47:24 +02:00
/** WordPress Translation Install API */
require_once ( ABSPATH . 'wp-admin/includes/translation-install.php' );
2010-10-21 15:49:49 +02:00
if ( ! is_multisite () )
wp_die ( __ ( 'Multisite support is not enabled.' ) );
2010-12-16 08:41:38 +01:00
if ( ! current_user_can ( 'manage_sites' ) )
wp_die ( __ ( 'You do not have sufficient permissions to add sites to this network.' ) );
2010-10-21 15:49:49 +02:00
2011-12-01 03:22:07 +01: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-02 06:33:53 +01:00
2011-11-02 22:32:16 +01:00
get_current_screen () -> set_help_sidebar (
2010-12-16 07:52:47 +01:00
'<p><strong>' . __ ( 'For more information:' ) . '</strong></p>' .
2015-04-12 23:29:32 +02:00
'<p>' . __ ( '<a href="https://codex.wordpress.org/Network_Admin_Sites_Screen" target="_blank">Documentation on Site Management</a>' ) . '</p>' .
2014-03-08 05:14:15 +01:00
'<p>' . __ ( '<a href="https://wordpress.org/support/forum/multisite/" target="_blank">Support Forums</a>' ) . '</p>'
2010-12-16 07:52:47 +01:00
);
2015-09-17 14:33:26 +02:00
if ( isset ( $_REQUEST [ 'action' ]) && 'add-site' == $_REQUEST [ 'action' ] ) {
2010-10-21 15:49:49 +02:00
check_admin_referer ( 'add-blog' , '_wpnonce_add-blog' );
2010-12-16 08:41:38 +01:00
if ( ! is_array ( $_POST [ 'blog' ] ) )
2010-11-11 17:57:22 +01:00
wp_die ( __ ( 'Can’t create an empty site.' ) );
2013-11-16 18:38:11 +01:00
2013-03-01 17:28:40 +01:00
$blog = $_POST [ 'blog' ];
2010-10-21 15:49:49 +02:00
$domain = '' ;
2011-07-26 23:35:39 +02:00
if ( preg_match ( '|^([a-zA-Z0-9-])+$|' , $blog [ 'domain' ] ) )
2010-10-21 15:49:49 +02:00
$domain = strtolower ( $blog [ 'domain' ] );
// If not a subdomain install, make sure the domain isn't a reserved word
if ( ! is_subdomain_install () ) {
2013-10-30 15:39:10 +01:00
/** This filter is documented in wp-includes/ms-functions.php */
2015-09-22 06:21:25 +02:00
$subdirectory_reserved_names = apply_filters ( 'subdirectory_reserved_names' , array ( 'page' , 'comments' , 'blog' , 'files' , 'feed' , 'wp-admin' , 'wp-content' , 'wp-includes' , 'wp-json' ) );
2010-10-21 15:49:49 +02:00
if ( in_array ( $domain , $subdirectory_reserved_names ) )
wp_die ( sprintf ( __ ( 'The following words are reserved for use by WordPress functions and cannot be used as blog names: <code>%s</code>' ), implode ( '</code>, <code>' , $subdirectory_reserved_names ) ) );
}
$title = $blog [ 'title' ];
2015-09-05 22:47:24 +02:00
$meta = array (
'public' => 1
);
// Handle translation install for the new site.
if ( ! empty ( $_POST [ 'WPLANG' ] ) && wp_can_install_language_pack () ) {
$language = wp_download_language_pack ( wp_unslash ( $_POST [ 'WPLANG' ] ) );
if ( $language ) {
$meta [ 'WPLANG' ] = $language ;
}
}
2010-10-21 15:49:49 +02:00
if ( empty ( $domain ) )
wp_die ( __ ( 'Missing or invalid site address.' ) );
2014-10-12 02:22:18 +02:00
if ( isset ( $blog [ 'email' ] ) && '' === trim ( $blog [ 'email' ] ) ) {
2010-10-21 15:49:49 +02:00
wp_die ( __ ( 'Missing email address.' ) );
2014-10-12 02:22:18 +02:00
}
$email = sanitize_email ( $blog [ 'email' ] );
if ( ! is_email ( $email ) ) {
2010-10-21 15:49:49 +02:00
wp_die ( __ ( 'Invalid email address.' ) );
2014-10-12 02:22:18 +02:00
}
2010-10-21 15:49:49 +02:00
if ( is_subdomain_install () ) {
$newdomain = $domain . '.' . preg_replace ( '|^www\.|' , '' , $current_site -> domain );
2012-09-27 08:07:21 +02:00
$path = $current_site -> path ;
2010-10-21 15:49:49 +02:00
} else {
$newdomain = $current_site -> domain ;
2012-09-27 08:07:21 +02:00
$path = $current_site -> path . $domain . '/' ;
2010-10-21 15:49:49 +02:00
}
$password = 'N/A' ;
$user_id = email_exists ( $email );
if ( ! $user_id ) { // Create a new user with a random password
2010-11-11 00:31:54 +01:00
$password = wp_generate_password ( 12 , false );
2010-10-21 15:49:49 +02:00
$user_id = wpmu_create_user ( $domain , $password , $email );
2015-09-17 00:19:24 +02:00
if ( false === $user_id ) {
2010-10-21 15:49:49 +02:00
wp_die ( __ ( 'There was an error creating the user.' ) );
2015-09-17 00:19:24 +02: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 15:49:49 +02:00
}
$wpdb -> hide_errors ();
2015-09-05 22:47:24 +02:00
$id = wpmu_create_blog ( $newdomain , $path , $title , $user_id , $meta , $current_site -> id );
2010-10-21 15:49:49 +02:00
$wpdb -> show_errors ();
2015-04-01 15:26:28 +02:00
if ( ! is_wp_error ( $id ) ) {
if ( ! is_super_admin ( $user_id ) && ! get_user_option ( 'primary_blog' , $user_id ) ) {
2010-10-21 15:49:49 +02:00
update_user_option ( $user_id , 'primary_blog' , $id , true );
2015-04-01 15:26:28 +02:00
}
$content_mail = sprintf (
/* translators: 1: user login, 2: site url, 3: site name/title */
__ ( ' New site created by % 1 $s
2012-11-19 07:11:42 +01:00
Address : % 2 $s
2015-04-01 15:26:28 +02:00
Name : % 3 $s ' ),
$current_user -> user_login ,
get_site_url ( $id ),
wp_unslash ( $title )
);
2010-11-11 17:57:22 +01:00
wp_mail ( get_site_option ( 'admin_email' ), sprintf ( __ ( '[%s] New Site Created' ), $current_site -> site_name ), $content_mail , 'From: "Site Admin" <' . get_site_option ( 'admin_email' ) . '>' );
2010-10-21 15:49:49 +02:00
wpmu_welcome_notification ( $id , $user_id , $password , $title , array ( 'public' => 1 ) );
2011-09-22 09:17:27 +02:00
wp_redirect ( add_query_arg ( array ( 'update' => 'added' , 'id' => $id ), 'site-new.php' ) );
2010-10-21 15:49:49 +02:00
exit ;
} else {
wp_die ( $id -> get_error_message () );
}
}
if ( isset ( $_GET [ 'update' ]) ) {
$messages = array ();
if ( 'added' == $_GET [ 'update' ] )
2015-04-01 15:26:28 +02: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 15:49:49 +02:00
}
$title = __ ( 'Add New Site' );
$parent_file = 'sites.php' ;
2014-01-28 00:10:12 +01:00
wp_enqueue_script ( 'user-suggest' );
2013-09-25 02:18:11 +02:00
require ( ABSPATH . 'wp-admin/admin-header.php' );
2010-10-21 15:49:49 +02:00
?>
< div class = " wrap " >
2015-06-27 17:41:25 +02:00
< h1 id = " add-new-site " >< ? php _e ( 'Add New Site' ); ?> </h1>
2010-10-21 15:49:49 +02:00
< ? php
if ( ! empty ( $messages ) ) {
foreach ( $messages as $msg )
2015-04-02 00:06:28 +02:00
echo '<div id="message" class="updated notice is-dismissible"><p>' . $msg . '</p></div>' ;
2010-10-21 15:49:49 +02:00
} ?>
2014-07-08 19:52:14 +02:00
< form method = " post " action = " <?php echo network_admin_url( 'site-new.php?action=add-site' ); ?> " novalidate = " novalidate " >
2010-10-21 15:49:49 +02:00
< ? php wp_nonce_field ( 'add-blog' , '_wpnonce_add-blog' ) ?>
< table class = " form-table " >
< tr class = " form-field form-required " >
2015-02-23 03:29:26 +01:00
< th scope = " row " >< label for = " site-address " >< ? php _e ( 'Site Address' ) ?> </label></th>
2010-10-21 15:49:49 +02:00
< td >
< ? php if ( is_subdomain_install () ) { ?>
2015-07-04 06:40:25 +02: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\.|' , '' , $current_site -> domain ); ?> </span>
2010-10-21 15:49:49 +02:00
< ? php } else {
2015-07-04 06:40:25 +02:00
echo $current_site -> domain . $current_site -> 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 15:49:49 +02:00
< ? php }
2015-02-23 03:29:26 +01:00
echo '<p id="site-address-desc">' . __ ( 'Only lowercase letters (a-z) and numbers are allowed.' ) . '</p>' ;
2010-10-21 15:49:49 +02:00
?>
</ td >
</ tr >
< tr class = " form-field form-required " >
2015-02-23 03:29:26 +01: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 15:49:49 +02:00
</ tr >
2015-09-05 22:47:24 +02: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.
$lang = get_site_option ( 'WPLANG' );
// 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 15:49:49 +02:00
< tr class = " form-field form-required " >
2015-04-30 16:30:25 +02:00
< th scope = " row " >< label for = " admin-email " >< ? php _e ( 'Admin Email' ) ?> </label></th>
2015-02-23 03:29:26 +01: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 15:49:49 +02: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 >
< ? php submit_button ( __ ( 'Add Site' ), 'primary' , 'add-site' ); ?>
</ form >
</ div >
< ? php
2013-09-25 02:18:11 +02:00
require ( ABSPATH . 'wp-admin/admin-footer.php' );