sqdkjqlsjdklqsjdlqskjd
azjdjksqhvdjqskhdkqhsj
zkhjdhqksldjqlskdjlqskjd
zjhdjqlskdhqsljkhdsqd
PK ]Uf1 1 install-helper.phpnu [ comments, 'comment_author', 'tinytext' ) ) {
* echo "ok\n";
* }
*
* // Check the column.
* if ( ! check_column( $wpdb->links, 'link_description', 'varchar( 255 )' ) ) {
* $ddl = "ALTER TABLE $wpdb->links MODIFY COLUMN link_description varchar(255) NOT NULL DEFAULT '' ";
* $q = $wpdb->query( $ddl );
* }
*
* $error_count = 0;
* $tablename = $wpdb->links;
*
* if ( check_column( $wpdb->links, 'link_description', 'varchar( 255 )' ) ) {
* $res .= $tablename . ' - ok
';
* } else {
* $res .= 'There was a problem with ' . $tablename . '
';
* ++$error_count;
* }
*
* @package WordPress
* @subpackage Plugin
*/
/** Load WordPress Bootstrap */
require_once dirname( __DIR__ ) . '/wp-load.php';
if ( ! function_exists( 'maybe_create_table' ) ) :
/**
* Creates a table in the database if it doesn't already exist.
*
* @since 1.0.0
*
* @global wpdb $wpdb WordPress database abstraction object.
*
* @param string $table_name Database table name.
* @param string $create_ddl SQL statement to create table.
* @return bool True on success or if the table already exists. False on failure.
*/
function maybe_create_table( $table_name, $create_ddl ) {
global $wpdb;
foreach ( $wpdb->get_col( 'SHOW TABLES', 0 ) as $table ) {
if ( $table === $table_name ) {
return true;
}
}
// Didn't find it, so try to create it.
// phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- No applicable variables for this query.
$wpdb->query( $create_ddl );
// We cannot directly tell whether this succeeded!
foreach ( $wpdb->get_col( 'SHOW TABLES', 0 ) as $table ) {
if ( $table === $table_name ) {
return true;
}
}
return false;
}
endif;
if ( ! function_exists( 'maybe_add_column' ) ) :
/**
* Adds column to database table, if it doesn't already exist.
*
* @since 1.0.0
*
* @global wpdb $wpdb WordPress database abstraction object.
*
* @param string $table_name Database table name.
* @param string $column_name Table column name.
* @param string $create_ddl SQL statement to add column.
* @return bool True on success or if the column already exists. False on failure.
*/
function maybe_add_column( $table_name, $column_name, $create_ddl ) {
global $wpdb;
// phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Cannot be prepared. Fetches columns for table names.
foreach ( $wpdb->get_col( "DESC $table_name", 0 ) as $column ) {
if ( $column === $column_name ) {
return true;
}
}
// Didn't find it, so try to create it.
// phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- No applicable variables for this query.
$wpdb->query( $create_ddl );
// We cannot directly tell whether this succeeded!
// phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Cannot be prepared. Fetches columns for table names.
foreach ( $wpdb->get_col( "DESC $table_name", 0 ) as $column ) {
if ( $column === $column_name ) {
return true;
}
}
return false;
}
endif;
/**
* Drops column from database table, if it exists.
*
* @since 1.0.0
*
* @global wpdb $wpdb WordPress database abstraction object.
*
* @param string $table_name Database table name.
* @param string $column_name Table column name.
* @param string $drop_ddl SQL statement to drop column.
* @return bool True on success or if the column doesn't exist. False on failure.
*/
function maybe_drop_column( $table_name, $column_name, $drop_ddl ) {
global $wpdb;
// phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Cannot be prepared. Fetches columns for table names.
foreach ( $wpdb->get_col( "DESC $table_name", 0 ) as $column ) {
if ( $column === $column_name ) {
// Found it, so try to drop it.
// phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- No applicable variables for this query.
$wpdb->query( $drop_ddl );
// We cannot directly tell whether this succeeded!
// phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Cannot be prepared. Fetches columns for table names.
foreach ( $wpdb->get_col( "DESC $table_name", 0 ) as $column ) {
if ( $column === $column_name ) {
return false;
}
}
}
}
// Else didn't find it.
return true;
}
/**
* Checks that database table column matches the criteria.
*
* Uses the SQL DESC for retrieving the table info for the column. It will help
* understand the parameters, if you do more research on what column information
* is returned by the SQL statement. Pass in null to skip checking that criteria.
*
* Column names returned from DESC table are case sensitive and are as listed:
*
* - Field
* - Type
* - Null
* - Key
* - Default
* - Extra
*
* @since 1.0.0
*
* @global wpdb $wpdb WordPress database abstraction object.
*
* @param string $table_name Database table name.
* @param string $col_name Table column name.
* @param string $col_type Table column type.
* @param bool $is_null Optional. Check is null.
* @param mixed $key Optional. Key info.
* @param mixed $default_value Optional. Default value.
* @param mixed $extra Optional. Extra value.
* @return bool True, if matches. False, if not matching.
*/
function check_column( $table_name, $col_name, $col_type, $is_null = null, $key = null, $default_value = null, $extra = null ) {
global $wpdb;
$diffs = 0;
// phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Cannot be prepared. Fetches columns for table names.
$results = $wpdb->get_results( "DESC $table_name" );
foreach ( $results as $row ) {
if ( $row->Field === $col_name ) {
// Got our column, check the params.
if ( ( null !== $col_type ) && ( $row->Type !== $col_type ) ) {
++$diffs;
}
if ( ( null !== $is_null ) && ( $row->Null !== $is_null ) ) {
++$diffs;
}
if ( ( null !== $key ) && ( $row->Key !== $key ) ) {
++$diffs;
}
if ( ( null !== $default_value ) && ( $row->Default !== $default_value ) ) {
++$diffs;
}
if ( ( null !== $extra ) && ( $row->Extra !== $extra ) ) {
++$diffs;
}
if ( $diffs > 0 ) {
return false;
}
return true;
} // End if found our column.
}
return false;
}
PK ]^ index.phpnu [ ' . __( 'Welcome to your WordPress Dashboard!' ) . '
' . __( 'The Dashboard is the first place you will come to every time you log into your site. It is where you will find all your WordPress tools. If you need help, just click the “Help” tab above the screen title.' ) . '
'; $screen = get_current_screen(); $screen->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => $help, ) ); // Help tabs. $help = '' . __( 'The left-hand navigation menu provides links to all of the WordPress administration screens, with submenu items displayed on hover. You can minimize this menu to a narrow icon strip by clicking on the Collapse Menu arrow at the bottom.' ) . '
'; $help .= '' . __( 'Links in the Toolbar at the top of the screen connect your dashboard and the front end of your site, and provide access to your profile and helpful WordPress information.' ) . '
'; $screen->add_help_tab( array( 'id' => 'help-navigation', 'title' => __( 'Navigation' ), 'content' => $help, ) ); $help = '' . __( 'You can use the following controls to arrange your Dashboard screen to suit your workflow. This is true on most other administration screens as well.' ) . '
'; $help .= '' . __( 'Screen Options — Use the Screen Options tab to choose which Dashboard boxes to show.' ) . '
'; $help .= '' . __( 'Drag and Drop — To rearrange the boxes, drag and drop by clicking on the title bar of the selected box and releasing when you see a gray dotted-line rectangle appear in the location you want to place the box.' ) . '
'; $help .= '' . __( 'Box Controls — Click the title bar of the box to expand or collapse it. Some boxes added by plugins may have configurable content, and will show a “Configure” link in the title bar if you hover over it.' ) . '
'; $screen->add_help_tab( array( 'id' => 'help-layout', 'title' => __( 'Layout' ), 'content' => $help, ) ); $help = '' . __( 'The boxes on your Dashboard screen are:' ) . '
'; if ( current_user_can( 'edit_theme_options' ) ) { $help .= '' . __( 'Welcome — Shows links for some of the most common tasks when setting up a new site.' ) . '
'; } if ( current_user_can( 'view_site_health_checks' ) ) { $help .= '' . __( 'Site Health Status — Informs you of any potential issues that should be addressed to improve the performance or security of your website.' ) . '
'; } if ( current_user_can( 'edit_posts' ) ) { $help .= '' . __( 'At a Glance — Displays a summary of the content on your site and identifies which theme and version of WordPress you are using.' ) . '
'; } $help .= '' . __( 'Activity — Shows the upcoming scheduled posts, recently published posts, and the most recent comments on your posts and allows you to moderate them.' ) . '
'; if ( is_blog_admin() && current_user_can( 'edit_posts' ) ) { $help .= '' . __( "Quick Draft — Allows you to create a new post and save it as a draft. Also displays links to the 3 most recent draft posts you've started." ) . '
'; } $help .= '' . sprintf( /* translators: %s: WordPress Planet URL. */ __( 'WordPress Events and News — Upcoming events near you as well as the latest news from the official WordPress project and the WordPress Planet.' ), __( 'https://planet.wordpress.org/' ) ) . '
'; $screen->add_help_tab( array( 'id' => 'help-content', 'title' => __( 'Content' ), 'content' => $help, ) ); unset( $help ); $wp_version = get_bloginfo( 'version', 'display' ); /* translators: %s: WordPress version. */ $wp_version_text = sprintf( __( 'Version %s' ), $wp_version ); $is_dev_version = preg_match( '/alpha|beta|RC/', $wp_version ); if ( ! $is_dev_version ) { $version_url = sprintf( /* translators: %s: WordPress version. */ esc_url( __( 'https://wordpress.org/documentation/wordpress-version/version-%s/' ) ), sanitize_title( $wp_version ) ); $wp_version_text = sprintf( '%2$s', $version_url, $wp_version_text ); } $screen->set_help_sidebar( '' . __( 'For more information:' ) . '
' . '' . __( 'Documentation on Dashboard' ) . '
' . '' . __( 'Support forums' ) . '
' . '' . $wp_version_text . '
' ); require_once ABSPATH . 'wp-admin/admin-header.php'; ?>' . __( 'Sorry, you are not allowed to add users to this network.' ) . '
', 403 ); } } elseif ( ! current_user_can( 'create_users' ) ) { wp_die( '' . __( 'Sorry, you are not allowed to create users.' ) . '
', 403 ); } if ( is_multisite() ) { add_filter( 'wpmu_signup_user_notification_email', 'admin_created_user_email' ); } if ( isset( $_REQUEST['action'] ) && 'adduser' === $_REQUEST['action'] ) { check_admin_referer( 'add-user', '_wpnonce_add-user' ); $user_details = null; $user_email = wp_unslash( $_REQUEST['email'] ); if ( str_contains( $user_email, '@' ) ) { $user_details = get_user_by( 'email', $user_email ); } else { if ( current_user_can( 'manage_network_users' ) ) { $user_details = get_user_by( 'login', $user_email ); } else { wp_redirect( add_query_arg( array( 'update' => 'enter_email' ), 'user-new.php' ) ); die(); } } if ( ! $user_details ) { wp_redirect( add_query_arg( array( 'update' => 'does_not_exist' ), 'user-new.php' ) ); die(); } if ( ! current_user_can( 'promote_user', $user_details->ID ) ) { wp_die( '' . __( 'Sorry, you are not allowed to add users to this network.' ) . '
', 403 ); } // Adding an existing user to this blog. $new_user_email = array(); $redirect = 'user-new.php'; $username = $user_details->user_login; $user_id = $user_details->ID; if ( array_key_exists( $blog_id, get_blogs_of_user( $user_id ) ) ) { $redirect = add_query_arg( array( 'update' => 'addexisting' ), 'user-new.php' ); } else { if ( isset( $_POST['noconfirmation'] ) && current_user_can( 'manage_network_users' ) ) { wp_ensure_editable_role( $_REQUEST['role'] ); $result = add_existing_user_to_blog( array( 'user_id' => $user_id, 'role' => $_REQUEST['role'], ) ); if ( ! is_wp_error( $result ) ) { $redirect = add_query_arg( array( 'update' => 'addnoconfirmation', 'user_id' => $user_id, ), 'user-new.php' ); } else { $redirect = add_query_arg( array( 'update' => 'could_not_add' ), 'user-new.php' ); } } else { $newuser_key = wp_generate_password( 20, false ); add_option( 'new_user_' . $newuser_key, array( 'user_id' => $user_id, 'email' => $user_details->user_email, 'role' => $_REQUEST['role'], ) ); $roles = get_editable_roles(); $role = $roles[ $_REQUEST['role'] ]; /** * Fires immediately after an existing user is invited to join the site, but before the notification is sent. * * @since 4.4.0 * * @param int $user_id The invited user's ID. * @param array $role Array containing role information for the invited user. * @param string $newuser_key The key of the invitation. */ do_action( 'invite_user', $user_id, $role, $newuser_key ); $switched_locale = switch_to_user_locale( $user_id ); if ( '' !== get_option( 'blogname' ) ) { $site_title = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ); } else { $site_title = parse_url( home_url(), PHP_URL_HOST ); } /* translators: 1: Site title, 2: Site URL, 3: User role, 4: Activation URL. */ $message = __( 'Hi, You\'ve been invited to join \'%1$s\' at %2$s with the role of %3$s. Please click the following link to confirm the invite: %4$s' ); $new_user_email['to'] = $user_details->user_email; $new_user_email['subject'] = sprintf( /* translators: Joining confirmation notification email subject. %s: Site title. */ __( '[%s] Joining Confirmation' ), $site_title ); $new_user_email['message'] = sprintf( $message, get_option( 'blogname' ), home_url(), wp_specialchars_decode( translate_user_role( $role['name'] ) ), home_url( "/newbloguser/$newuser_key/" ) ); $new_user_email['headers'] = ''; /** * Filters the contents of the email sent when an existing user is invited to join the site. * * @since 5.6.0 * * @param array $new_user_email { * Used to build wp_mail(). * * @type string $to The email address of the invited user. * @type string $subject The subject of the email. * @type string $message The content of the email. * @type string $headers Headers. * } * @param int $user_id The invited user's ID. * @param array $role Array containing role information for the invited user. * @param string $newuser_key The key of the invitation. * */ $new_user_email = apply_filters( 'invited_user_email', $new_user_email, $user_id, $role, $newuser_key ); wp_mail( $new_user_email['to'], $new_user_email['subject'], $new_user_email['message'], $new_user_email['headers'] ); if ( $switched_locale ) { restore_previous_locale(); } $redirect = add_query_arg( array( 'update' => 'add' ), 'user-new.php' ); } } wp_redirect( $redirect ); die(); } elseif ( isset( $_REQUEST['action'] ) && 'createuser' === $_REQUEST['action'] ) { check_admin_referer( 'create-user', '_wpnonce_create-user' ); if ( ! current_user_can( 'create_users' ) ) { wp_die( '' . __( 'Sorry, you are not allowed to create users.' ) . '
', 403 ); } if ( ! is_multisite() ) { $user_id = edit_user(); if ( is_wp_error( $user_id ) ) { $add_user_errors = $user_id; } else { if ( current_user_can( 'list_users' ) ) { $redirect = 'users.php?update=add&id=' . $user_id; } else { $redirect = add_query_arg( 'update', 'add', 'user-new.php' ); } wp_redirect( $redirect ); die(); } } else { // Adding a new user to this site. $new_user_email = wp_unslash( $_REQUEST['email'] ); $user_details = wpmu_validate_user_signup( $_REQUEST['user_login'], $new_user_email ); if ( is_wp_error( $user_details['errors'] ) && $user_details['errors']->has_errors() ) { $add_user_errors = $user_details['errors']; } else { /** This filter is documented in wp-includes/user.php */ $new_user_login = apply_filters( 'pre_user_login', sanitize_user( wp_unslash( $_REQUEST['user_login'] ), true ) ); if ( isset( $_POST['noconfirmation'] ) && current_user_can( 'manage_network_users' ) ) { add_filter( 'wpmu_signup_user_notification', '__return_false' ); // Disable confirmation email. add_filter( 'wpmu_welcome_user_notification', '__return_false' ); // Disable welcome email. } wp_ensure_editable_role( $_REQUEST['role'] ); wpmu_signup_user( $new_user_login, $new_user_email, array( 'add_to_blog' => get_current_blog_id(), 'new_role' => $_REQUEST['role'], ) ); if ( isset( $_POST['noconfirmation'] ) && current_user_can( 'manage_network_users' ) ) { $key = $wpdb->get_var( $wpdb->prepare( "SELECT activation_key FROM {$wpdb->signups} WHERE user_login = %s AND user_email = %s", $new_user_login, $new_user_email ) ); $new_user = wpmu_activate_signup( $key ); if ( is_wp_error( $new_user ) ) { $redirect = add_query_arg( array( 'update' => 'addnoconfirmation' ), 'user-new.php' ); } elseif ( ! is_user_member_of_blog( $new_user['user_id'] ) ) { $redirect = add_query_arg( array( 'update' => 'created_could_not_add' ), 'user-new.php' ); } else { $redirect = add_query_arg( array( 'update' => 'addnoconfirmation', 'user_id' => $new_user['user_id'], ), 'user-new.php' ); } } else { $redirect = add_query_arg( array( 'update' => 'newuserconfirmation' ), 'user-new.php' ); } wp_redirect( $redirect ); die(); } } } // Used in the HTML title tag. $title = __( 'Add User' ); $parent_file = 'users.php'; $do_both = false; if ( is_multisite() && current_user_can( 'promote_users' ) && current_user_can( 'create_users' ) ) { $do_both = true; } $help = '' . __( 'To add a new user to your site, fill in the form on this screen and click the Add User button at the bottom.' ) . '
'; if ( is_multisite() ) { $help .= '' . __( 'Because this is a multisite installation, you may add accounts that already exist on the Network by specifying a username or email, and defining a role. For more options, such as specifying a password, you have to be a Network Administrator and use the hover link under an existing user’s name to Edit the user profile under Network Admin > All Users.' ) . '
' . '' . __( 'New users will receive an email letting them know they’ve been added as a user for your site. This email will also contain their password. Check the box if you do not want the user to receive a welcome email.' ) . '
'; } else { $help .= '' . __( 'New users are automatically assigned a password, which they can change after logging in. You can view or edit the assigned password by clicking the Show Password button. The username cannot be changed once the user has been added.' ) . '
' . '' . __( 'By default, new users will receive an email letting them know they’ve been added as a user for your site. This email will also contain a password reset link. Uncheck the box if you do not want to send the new user a welcome email.' ) . '
'; } $help .= '' . __( 'Remember to click the Add User button at the bottom of this screen when you are finished.' ) . '
'; get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => $help, ) ); get_current_screen()->add_help_tab( array( 'id' => 'user-roles', 'title' => __( 'User Roles' ), 'content' => '' . __( 'Here is a basic overview of the different user roles and the permissions associated with each one:' ) . '
' . '' . __( 'For more information:' ) . '
' . '' . __( 'Documentation on Adding New Users' ) . '
' . '' . __( 'Support forums' ) . '
' ); wp_enqueue_script( 'wp-ajax-response' ); wp_enqueue_script( 'user-profile' ); /** * Filters whether to enable user auto-complete for non-super admins in Multisite. * * @since 3.4.0 * * @param bool $enable Whether to enable auto-complete for non-super admins. Default false. */ if ( is_multisite() && current_user_can( 'promote_users' ) && ! wp_is_large_network( 'users' ) && ( current_user_can( 'manage_network_users' ) || apply_filters( 'autocomplete_users_for_site_admins', false ) ) ) { wp_enqueue_script( 'user-suggest' ); } require_once ABSPATH . 'wp-admin/admin-header.php'; if ( isset( $_GET['update'] ) ) { $messages = array(); if ( is_multisite() ) { $edit_link = ''; if ( ( isset( $_GET['user_id'] ) ) ) { $user_id_new = absint( $_GET['user_id'] ); if ( $user_id_new ) { $edit_link = esc_url( add_query_arg( 'wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), get_edit_user_link( $user_id_new ) ) ); } } switch ( $_GET['update'] ) { case 'newuserconfirmation': $messages[] = __( 'Invitation email sent to new user. A confirmation link must be clicked before their account is created.' ); break; case 'add': $messages[] = __( 'Invitation email sent to user. A confirmation link must be clicked for them to be added to your site.' ); break; case 'addnoconfirmation': $message = __( 'User has been added to your site.' ); if ( $edit_link ) { $message .= sprintf( ' %s', $edit_link, __( 'Edit user' ) ); } $messages[] = $message; break; case 'addexisting': $messages[] = __( 'That user is already a member of this site.' ); break; case 'could_not_add': $add_user_errors = new WP_Error( 'could_not_add', __( 'That user could not be added to this site.' ) ); break; case 'created_could_not_add': $add_user_errors = new WP_Error( 'created_could_not_add', __( 'User has been created, but could not be added to this site.' ) ); break; case 'does_not_exist': $add_user_errors = new WP_Error( 'does_not_exist', __( 'The requested user does not exist.' ) ); break; case 'enter_email': $add_user_errors = new WP_Error( 'enter_email', __( 'Please enter a valid email address.' ) ); break; } } else { if ( 'add' === $_GET['update'] ) { $messages[] = __( 'User added.' ); } } } ?>$message
\n"; } wp_admin_notice( $error_message, array( 'additional_classes' => array( 'error' ), 'paragraph_wrap' => false, ) ); endif; ?> ' . __( 'Add Existing User' ) . ''; } if ( ! current_user_can( 'manage_network_users' ) ) { echo '' . __( 'Enter the email address of an existing user on this network to invite them to this site. That person will be sent an email asking them to confirm the invite.' ) . '
'; $label = __( 'Email' ); $type = 'email'; } else { echo '' . __( 'Enter the email address or username of an existing user on this network to invite them to this site. That person will be sent an email asking them to confirm the invite.' ) . '
'; $label = __( 'Email or Username' ); $type = 'text'; } ?> ' . __( 'Add User' ) . ''; } ?>' . __( 'Sorry, you are not allowed to edit comments.' ) . '
', 403 ); } $wp_list_table = _get_list_table( 'WP_Comments_List_Table' ); $pagenum = $wp_list_table->get_pagenum(); $doaction = $wp_list_table->current_action(); if ( $doaction ) { check_admin_referer( 'bulk-comments' ); if ( 'delete_all' === $doaction && ! empty( $_REQUEST['pagegen_timestamp'] ) ) { /** * @global wpdb $wpdb WordPress database abstraction object. */ global $wpdb; $comment_status = wp_unslash( $_REQUEST['comment_status'] ); $delete_time = wp_unslash( $_REQUEST['pagegen_timestamp'] ); $comment_ids = $wpdb->get_col( $wpdb->prepare( "SELECT comment_ID FROM $wpdb->comments WHERE comment_approved = %s AND %s > comment_date_gmt", $comment_status, $delete_time ) ); $doaction = 'delete'; } elseif ( isset( $_REQUEST['delete_comments'] ) ) { $comment_ids = $_REQUEST['delete_comments']; $doaction = $_REQUEST['action']; } elseif ( isset( $_REQUEST['ids'] ) ) { $comment_ids = array_map( 'absint', explode( ',', $_REQUEST['ids'] ) ); } elseif ( wp_get_referer() ) { wp_safe_redirect( wp_get_referer() ); exit; } $approved = 0; $unapproved = 0; $spammed = 0; $unspammed = 0; $trashed = 0; $untrashed = 0; $deleted = 0; $redirect_to = remove_query_arg( array( 'trashed', 'untrashed', 'deleted', 'spammed', 'unspammed', 'approved', 'unapproved', 'ids', ), wp_get_referer() ); $redirect_to = add_query_arg( 'paged', $pagenum, $redirect_to ); wp_defer_comment_counting( true ); foreach ( $comment_ids as $comment_id ) { // Check the permissions on each. if ( ! current_user_can( 'edit_comment', $comment_id ) ) { continue; } switch ( $doaction ) { case 'approve': wp_set_comment_status( $comment_id, 'approve' ); ++$approved; break; case 'unapprove': wp_set_comment_status( $comment_id, 'hold' ); ++$unapproved; break; case 'spam': wp_spam_comment( $comment_id ); ++$spammed; break; case 'unspam': wp_unspam_comment( $comment_id ); ++$unspammed; break; case 'trash': wp_trash_comment( $comment_id ); ++$trashed; break; case 'untrash': wp_untrash_comment( $comment_id ); ++$untrashed; break; case 'delete': wp_delete_comment( $comment_id ); ++$deleted; break; } } if ( ! in_array( $doaction, array( 'approve', 'unapprove', 'spam', 'unspam', 'trash', 'delete' ), true ) ) { $screen = get_current_screen()->id; /** This action is documented in wp-admin/edit.php */ $redirect_to = apply_filters( "handle_bulk_actions-{$screen}", $redirect_to, $doaction, $comment_ids ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores } wp_defer_comment_counting( false ); if ( $approved ) { $redirect_to = add_query_arg( 'approved', $approved, $redirect_to ); } if ( $unapproved ) { $redirect_to = add_query_arg( 'unapproved', $unapproved, $redirect_to ); } if ( $spammed ) { $redirect_to = add_query_arg( 'spammed', $spammed, $redirect_to ); } if ( $unspammed ) { $redirect_to = add_query_arg( 'unspammed', $unspammed, $redirect_to ); } if ( $trashed ) { $redirect_to = add_query_arg( 'trashed', $trashed, $redirect_to ); } if ( $untrashed ) { $redirect_to = add_query_arg( 'untrashed', $untrashed, $redirect_to ); } if ( $deleted ) { $redirect_to = add_query_arg( 'deleted', $deleted, $redirect_to ); } if ( $trashed || $spammed ) { $redirect_to = add_query_arg( 'ids', implode( ',', $comment_ids ), $redirect_to ); } wp_safe_redirect( $redirect_to ); exit; } elseif ( ! empty( $_GET['_wp_http_referer'] ) ) { wp_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), wp_unslash( $_SERVER['REQUEST_URI'] ) ) ); exit; } $wp_list_table->prepare_items(); wp_enqueue_script( 'admin-comments' ); enqueue_comment_hotkeys_js(); /** * @global int $post_id */ global $post_id; if ( $post_id ) { $comments_count = wp_count_comments( $post_id ); $draft_or_post_title = wp_html_excerpt( _draft_or_post_title( $post_id ), 50, '…' ); if ( $comments_count->moderated > 0 ) { // Used in the HTML title tag. $title = sprintf( /* translators: 1: Comments count, 2: Post title. */ __( 'Comments (%1$s) on “%2$s”' ), number_format_i18n( $comments_count->moderated ), $draft_or_post_title ); } else { // Used in the HTML title tag. $title = sprintf( /* translators: %s: Post title. */ __( 'Comments on “%s”' ), $draft_or_post_title ); } } else { $comments_count = wp_count_comments(); if ( $comments_count->moderated > 0 ) { // Used in the HTML title tag. $title = sprintf( /* translators: %s: Comments count. */ __( 'Comments (%s)' ), number_format_i18n( $comments_count->moderated ) ); } else { // Used in the HTML title tag. $title = __( 'Comments' ); } } add_screen_option( 'per_page' ); get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '' . __( 'You can manage comments made on your site similar to the way you manage posts and other content. This screen is customizable in the same ways as other management screens, and you can act on comments using the on-hover action links or the bulk actions.' ) . '
', ) ); get_current_screen()->add_help_tab( array( 'id' => 'moderating-comments', 'title' => __( 'Moderating Comments' ), 'content' => '' . __( 'A red bar on the left means the comment is waiting for you to moderate it.' ) . '
' . '' . __( 'In the Author column, in addition to the author’s name, email address, and site URL, the commenter’s IP address is shown. Clicking on this link will show you all the comments made from this IP address.' ) . '
' . '' . __( 'In the Comment column, hovering over any comment gives you options to approve, reply (and approve), quick edit, edit, spam mark, or trash that comment.' ) . '
' . '' . __( 'In the In response to column, there are three elements. The text is the name of the post that inspired the comment, and links to the post editor for that entry. The View Post link leads to that post on your live site. The small bubble with the number in it shows the number of approved comments that post has received. If there are pending comments, a red notification circle with the number of pending comments is displayed. Clicking the notification circle will filter the comments screen to show only pending comments on that post.' ) . '
' . '' . __( 'In the Submitted on column, the date and time the comment was left on your site appears. Clicking on the date/time link will take you to that comment on your live site.' ) . '
' . '' . __( 'Many people take advantage of keyboard shortcuts to moderate their comments more quickly. Use the link to the side to learn more.' ) . '
', ) ); get_current_screen()->set_help_sidebar( '' . __( 'For more information:' ) . '
' . '' . __( 'Documentation on Comments' ) . '
' . '' . __( 'Documentation on Comment Spam' ) . '
' . '' . __( 'Documentation on Keyboard Shortcuts' ) . '
' . '' . __( 'Support forums' ) . '
' ); get_current_screen()->set_screen_reader_content( array( 'heading_views' => __( 'Filter comments list' ), 'heading_pagination' => __( 'Comments list navigation' ), 'heading_list' => __( 'Comments list' ), ) ); require_once ABSPATH . 'wp-admin/admin-header.php'; ?>' . sprintf( /* translators: %s: URL to Widgets screen. */ __( 'You can add links here to be displayed on your site, usually using Widgets. By default, links to several sites in the WordPress community are included as examples.' ), 'widgets.php' ) . '
' . '' . __( 'Links may be separated into Link Categories; these are different than the categories used on your posts.' ) . '
' . '' . __( 'You can customize the display of this screen using the Screen Options tab and/or the dropdown filters above the links table.' ) . '
', ) ); get_current_screen()->add_help_tab( array( 'id' => 'deleting-links', 'title' => __( 'Deleting Links' ), 'content' => '' . __( 'If you delete a link, it will be removed permanently, as Links do not have a Trash function yet.' ) . '
', ) ); get_current_screen()->set_help_sidebar( '' . __( 'For more information:' ) . '
' . '' . __( 'Documentation on Managing Links' ) . '
' . '' . __( 'Support forums' ) . '
' ); get_current_screen()->set_screen_reader_content( array( 'heading_list' => __( 'Links list' ), ) ); require_once ABSPATH . 'wp-admin/admin-header.php'; if ( ! current_user_can( 'manage_links' ) ) { wp_die( __( 'Sorry, you are not allowed to edit the links for this site.' ) ); } ?>' . __( 'Sorry, you are not allowed to edit posts in this post type.' ) . '
', 403 ); } $wp_list_table = _get_list_table( 'WP_Posts_List_Table' ); $pagenum = $wp_list_table->get_pagenum(); // Back-compat for viewing comments of an entry. foreach ( array( 'p', 'attachment_id', 'page_id' ) as $_redirect ) { if ( ! empty( $_REQUEST[ $_redirect ] ) ) { wp_redirect( admin_url( 'edit-comments.php?p=' . absint( $_REQUEST[ $_redirect ] ) ) ); exit; } } unset( $_redirect ); if ( 'post' !== $post_type ) { $parent_file = "edit.php?post_type=$post_type"; $submenu_file = "edit.php?post_type=$post_type"; $post_new_file = "post-new.php?post_type=$post_type"; } else { $parent_file = 'edit.php'; $submenu_file = 'edit.php'; $post_new_file = 'post-new.php'; } $doaction = $wp_list_table->current_action(); if ( $doaction ) { check_admin_referer( 'bulk-posts' ); $sendback = remove_query_arg( array( 'trashed', 'untrashed', 'deleted', 'locked', 'ids' ), wp_get_referer() ); if ( ! $sendback ) { $sendback = admin_url( $parent_file ); } $sendback = add_query_arg( 'paged', $pagenum, $sendback ); if ( str_contains( $sendback, 'post.php' ) ) { $sendback = admin_url( $post_new_file ); } $post_ids = array(); if ( 'delete_all' === $doaction ) { // Prepare for deletion of all posts with a specified post status (i.e. Empty Trash). $post_status = preg_replace( '/[^a-z0-9_-]+/i', '', $_REQUEST['post_status'] ); // Validate the post status exists. if ( get_post_status_object( $post_status ) ) { /** * @global wpdb $wpdb WordPress database abstraction object. */ global $wpdb; $post_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_type=%s AND post_status = %s", $post_type, $post_status ) ); } $doaction = 'delete'; } elseif ( isset( $_REQUEST['media'] ) ) { $post_ids = $_REQUEST['media']; } elseif ( isset( $_REQUEST['ids'] ) ) { $post_ids = explode( ',', $_REQUEST['ids'] ); } elseif ( ! empty( $_REQUEST['post'] ) ) { $post_ids = array_map( 'intval', $_REQUEST['post'] ); } if ( empty( $post_ids ) ) { wp_redirect( $sendback ); exit; } switch ( $doaction ) { case 'trash': $trashed = 0; $locked = 0; foreach ( (array) $post_ids as $post_id ) { if ( ! current_user_can( 'delete_post', $post_id ) ) { wp_die( __( 'Sorry, you are not allowed to move this item to the Trash.' ) ); } if ( wp_check_post_lock( $post_id ) ) { ++$locked; continue; } if ( ! wp_trash_post( $post_id ) ) { wp_die( __( 'Error in moving the item to Trash.' ) ); } ++$trashed; } $sendback = add_query_arg( array( 'trashed' => $trashed, 'ids' => implode( ',', $post_ids ), 'locked' => $locked, ), $sendback ); break; case 'untrash': $untrashed = 0; if ( isset( $_GET['doaction'] ) && ( 'undo' === $_GET['doaction'] ) ) { add_filter( 'wp_untrash_post_status', 'wp_untrash_post_set_previous_status', 10, 3 ); } foreach ( (array) $post_ids as $post_id ) { if ( ! current_user_can( 'delete_post', $post_id ) ) { wp_die( __( 'Sorry, you are not allowed to restore this item from the Trash.' ) ); } if ( ! wp_untrash_post( $post_id ) ) { wp_die( __( 'Error in restoring the item from Trash.' ) ); } ++$untrashed; } $sendback = add_query_arg( 'untrashed', $untrashed, $sendback ); remove_filter( 'wp_untrash_post_status', 'wp_untrash_post_set_previous_status', 10 ); break; case 'delete': $deleted = 0; foreach ( (array) $post_ids as $post_id ) { $post_del = get_post( $post_id ); if ( ! current_user_can( 'delete_post', $post_id ) ) { wp_die( __( 'Sorry, you are not allowed to delete this item.' ) ); } if ( 'attachment' === $post_del->post_type ) { if ( ! wp_delete_attachment( $post_id ) ) { wp_die( __( 'Error in deleting the attachment.' ) ); } } else { if ( ! wp_delete_post( $post_id ) ) { wp_die( __( 'Error in deleting the item.' ) ); } } ++$deleted; } $sendback = add_query_arg( 'deleted', $deleted, $sendback ); break; case 'edit': if ( isset( $_REQUEST['bulk_edit'] ) ) { $done = bulk_edit_posts( $_REQUEST ); if ( is_array( $done ) ) { $done['updated'] = count( $done['updated'] ); $done['skipped'] = count( $done['skipped'] ); $done['locked'] = count( $done['locked'] ); $sendback = add_query_arg( $done, $sendback ); } } break; default: $screen = get_current_screen()->id; /** * Fires when a custom bulk action should be handled. * * The redirect link should be modified with success or failure feedback * from the action to be used to display feedback to the user. * * The dynamic portion of the hook name, `$screen`, refers to the current screen ID. * * @since 4.7.0 * * @param string $sendback The redirect URL. * @param string $doaction The action being taken. * @param array $items The items to take the action on. Accepts an array of IDs of posts, * comments, terms, links, plugins, attachments, or users. */ $sendback = apply_filters( "handle_bulk_actions-{$screen}", $sendback, $doaction, $post_ids ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores break; } $sendback = remove_query_arg( array( 'action', 'action2', 'tags_input', 'post_author', 'comment_status', 'ping_status', '_status', 'post', 'bulk_edit', 'post_view' ), $sendback ); wp_redirect( $sendback ); exit; } elseif ( ! empty( $_REQUEST['_wp_http_referer'] ) ) { wp_redirect( remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), wp_unslash( $_SERVER['REQUEST_URI'] ) ) ); exit; } $wp_list_table->prepare_items(); wp_enqueue_script( 'inline-edit-post' ); wp_enqueue_script( 'heartbeat' ); if ( 'wp_block' === $post_type ) { wp_enqueue_script( 'wp-list-reusable-blocks' ); wp_enqueue_style( 'wp-list-reusable-blocks' ); } // Used in the HTML title tag. $title = $post_type_object->labels->name; if ( 'post' === $post_type ) { get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '' . __( 'This screen provides access to all of your posts. You can customize the display of this screen to suit your workflow.' ) . '
', ) ); get_current_screen()->add_help_tab( array( 'id' => 'screen-content', 'title' => __( 'Screen Content' ), 'content' => '' . __( 'You can customize the display of this screen’s contents in a number of ways:' ) . '
' . '' . __( 'Hovering over a row in the posts list will display action links that allow you to manage your post. You can perform the following actions:' ) . '
' . '' . __( 'You can also edit or move multiple posts to the Trash at once. Select the posts you want to act on using the checkboxes, then select the action you want to take from the Bulk actions menu and click Apply.' ) . '
' . '' . sprintf( /* translators: %s: The dismiss dashicon used for buttons that dismiss or remove. */ __( 'When using Bulk Edit, you can change the metadata (categories, author, etc.) for all selected posts at once. To remove a post from the grouping, just click the %sremove button next to its name in the Bulk Edit area that appears.' ), '' ) . '
', ) ); get_current_screen()->set_help_sidebar( '' . __( 'For more information:' ) . '
' . '' . __( 'Documentation on Managing Posts' ) . '
' . '' . __( 'Support forums' ) . '
' ); } elseif ( 'page' === $post_type ) { get_current_screen()->add_help_tab( array( 'id' => 'overview', 'title' => __( 'Overview' ), 'content' => '' . __( 'Pages are similar to posts in that they have a title, body text, and associated metadata, but they are different in that they are not part of the chronological blog stream, kind of like permanent posts. Pages are not categorized or tagged, but can have a hierarchy. You can nest pages under other pages by making one the “Parent” of the other, creating a group of pages.' ) . '
', ) ); get_current_screen()->add_help_tab( array( 'id' => 'managing-pages', 'title' => __( 'Managing Pages' ), 'content' => '' . __( 'Managing pages is very similar to managing posts, and the screens can be customized in the same way.' ) . '
' . '' . __( 'You can also perform the same types of actions, including narrowing the list by using the filters, acting on a page using the action links that appear when you hover over a row, or using the Bulk actions menu to edit the metadata for multiple pages at once.' ) . '
', ) ); get_current_screen()->set_help_sidebar( '' . __( 'For more information:' ) . '
' . '' . __( 'Documentation on Managing Pages' ) . '
' . '' . __( 'Support forums' ) . '
' ); } get_current_screen()->set_screen_reader_content( array( 'heading_views' => $post_type_object->labels->filter_items_list, 'heading_pagination' => $post_type_object->labels->items_list_navigation, 'heading_list' => $post_type_object->labels->items_list, ) ); add_screen_option( 'per_page', array( 'default' => 20, 'option' => 'edit_' . $post_type . '_per_page', ) ); $bulk_counts = array( 'updated' => isset( $_REQUEST['updated'] ) ? absint( $_REQUEST['updated'] ) : 0, 'locked' => isset( $_REQUEST['locked'] ) ? absint( $_REQUEST['locked'] ) : 0, 'deleted' => isset( $_REQUEST['deleted'] ) ? absint( $_REQUEST['deleted'] ) : 0, 'trashed' => isset( $_REQUEST['trashed'] ) ? absint( $_REQUEST['trashed'] ) : 0, 'untrashed' => isset( $_REQUEST['untrashed'] ) ? absint( $_REQUEST['untrashed'] ) : 0, ); $bulk_messages = array(); $bulk_messages['post'] = array( /* translators: %s: Number of posts. */ 'updated' => _n( '%s post updated.', '%s posts updated.', $bulk_counts['updated'] ), 'locked' => ( 1 === $bulk_counts['locked'] ) ? __( '1 post not updated, somebody is editing it.' ) : /* translators: %s: Number of posts. */ _n( '%s post not updated, somebody is editing it.', '%s posts not updated, somebody is editing them.', $bulk_counts['locked'] ), /* translators: %s: Number of posts. */ 'deleted' => _n( '%s post permanently deleted.', '%s posts permanently deleted.', $bulk_counts['deleted'] ), /* translators: %s: Number of posts. */ 'trashed' => _n( '%s post moved to the Trash.', '%s posts moved to the Trash.', $bulk_counts['trashed'] ), /* translators: %s: Number of posts. */ 'untrashed' => _n( '%s post restored from the Trash.', '%s posts restored from the Trash.', $bulk_counts['untrashed'] ), ); $bulk_messages['page'] = array( /* translators: %s: Number of pages. */ 'updated' => _n( '%s page updated.', '%s pages updated.', $bulk_counts['updated'] ), 'locked' => ( 1 === $bulk_counts['locked'] ) ? __( '1 page not updated, somebody is editing it.' ) : /* translators: %s: Number of pages. */ _n( '%s page not updated, somebody is editing it.', '%s pages not updated, somebody is editing them.', $bulk_counts['locked'] ), /* translators: %s: Number of pages. */ 'deleted' => _n( '%s page permanently deleted.', '%s pages permanently deleted.', $bulk_counts['deleted'] ), /* translators: %s: Number of pages. */ 'trashed' => _n( '%s page moved to the Trash.', '%s pages moved to the Trash.', $bulk_counts['trashed'] ), /* translators: %s: Number of pages. */ 'untrashed' => _n( '%s page restored from the Trash.', '%s pages restored from the Trash.', $bulk_counts['untrashed'] ), ); $bulk_messages['wp_block'] = array( /* translators: %s: Number of patterns. */ 'updated' => _n( '%s pattern updated.', '%s patterns updated.', $bulk_counts['updated'] ), 'locked' => ( 1 === $bulk_counts['locked'] ) ? __( '1 pattern not updated, somebody is editing it.' ) : /* translators: %s: Number of patterns. */ _n( '%s pattern not updated, somebody is editing it.', '%s patterns not updated, somebody is editing them.', $bulk_counts['locked'] ), /* translators: %s: Number of patterns. */ 'deleted' => _n( '%s pattern permanently deleted.', '%s patterns permanently deleted.', $bulk_counts['deleted'] ), /* translators: %s: Number of patterns. */ 'trashed' => _n( '%s pattern moved to the Trash.', '%s patterns moved to the Trash.', $bulk_counts['trashed'] ), /* translators: %s: Number of patterns. */ 'untrashed' => _n( '%s pattern restored from the Trash.', '%s patterns restored from the Trash.', $bulk_counts['untrashed'] ), ); /** * Filters the bulk action updated messages. * * By default, custom post types use the messages for the 'post' post type. * * @since 3.7.0 * * @param array[] $bulk_messages Arrays of messages, each keyed by the corresponding post type. Messages are * keyed with 'updated', 'locked', 'deleted', 'trashed', and 'untrashed'. * @param int[] $bulk_counts Array of item counts for each message, used to build internationalized strings. */ $bulk_messages = apply_filters( 'bulk_post_updated_messages', $bulk_messages, $bulk_counts ); $bulk_counts = array_filter( $bulk_counts ); require_once ABSPATH . 'wp-admin/admin-header.php'; ?>' . __( 'This screen is for Super Admins to add new sites to the network. This is not affected by the registration settings.' ) . '
' . '' . __( 'If the admin email for the new site does not exist in the database, a new user will also be created.' ) . '
', ) ); get_current_screen()->set_help_sidebar( '' . __( 'For more information:' ) . '
' . '' . __( 'Documentation on Site Management' ) . '
' . '' . __( 'Support forums' ) . '
' ); if ( isset( $_REQUEST['action'] ) && 'add-site' === $_REQUEST['action'] ) { check_admin_referer( 'add-blog', '_wpnonce_add-blog' ); if ( ! is_array( $_POST['blog'] ) ) { wp_die( __( 'Cannot create an empty site.' ) ); } $blog = $_POST['blog']; $domain = ''; $blog['domain'] = trim( $blog['domain'] ); if ( preg_match( '|^([a-zA-Z0-9-])+$|', $blog['domain'] ) ) { $domain = strtolower( $blog['domain'] ); } // If not a subdomain installation, make sure the domain isn't a reserved word. if ( ! is_subdomain_install() ) { $subdirectory_reserved_names = get_subdirectory_reserved_names(); if ( in_array( $domain, $subdirectory_reserved_names, true ) ) { wp_die( sprintf( /* translators: %s: Reserved names list. */ __( 'The following words are reserved for use by WordPress functions and cannot be used as site names: %s' ), '' . implode( ', ', $subdirectory_reserved_names ) . ''
)
);
}
}
$title = $blog['title'];
$meta = array(
'public' => 1,
);
// Handle translation installation for the new site.
if ( isset( $_POST['WPLANG'] ) ) {
if ( '' === $_POST['WPLANG'] ) {
$meta['WPLANG'] = ''; // en_US
} elseif ( in_array( $_POST['WPLANG'], get_available_languages(), true ) ) {
$meta['WPLANG'] = $_POST['WPLANG'];
} elseif ( current_user_can( 'install_languages' ) && wp_can_install_language_pack() ) {
$language = wp_download_language_pack( wp_unslash( $_POST['WPLANG'] ) );
if ( $language ) {
$meta['WPLANG'] = $language;
}
}
}
if ( empty( $title ) ) {
wp_die( __( 'Missing site title.' ) );
}
if ( empty( $domain ) ) {
wp_die( __( 'Missing or invalid site address.' ) );
}
if ( isset( $blog['email'] ) && '' === trim( $blog['email'] ) ) {
wp_die( __( 'Missing email address.' ) );
}
$email = sanitize_email( $blog['email'] );
if ( ! is_email( $email ) ) {
wp_die( __( 'Invalid email address.' ) );
}
if ( is_subdomain_install() ) {
$newdomain = $domain . '.' . preg_replace( '|^www\.|', '', get_network()->domain );
$path = get_network()->path;
} else {
$newdomain = get_network()->domain;
$path = get_network()->path . $domain . '/';
}
$password = 'N/A';
$user_id = email_exists( $email );
if ( ! $user_id ) { // Create a new user with a random password.
/**
* Fires immediately before a new user is created via the network site-new.php page.
*
* @since 4.5.0
*
* @param string $email Email of the non-existent user.
*/
do_action( 'pre_network_site_new_created_user', $email );
$user_id = username_exists( $domain );
if ( $user_id ) {
wp_die( __( 'The domain or path entered conflicts with an existing username.' ) );
}
$password = wp_generate_password( 12, false );
$user_id = wpmu_create_user( $domain, $password, $email );
if ( false === $user_id ) {
wp_die( __( 'There was an error creating the user.' ) );
}
/**
* 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 );
}
$wpdb->hide_errors();
$id = wpmu_create_blog( $newdomain, $path, $title, $user_id, $meta, get_current_network_id() );
$wpdb->show_errors();
if ( ! is_wp_error( $id ) ) {
if ( ! is_super_admin( $user_id ) && ! get_user_option( 'primary_blog', $user_id ) ) {
update_user_option( $user_id, 'primary_blog', $id, true );
}
wpmu_new_site_admin_notification( $id, $user_id );
wpmu_welcome_notification( $id, $user_id, $password, $title, array( 'public' => 1 ) );
wp_redirect(
add_query_arg(
array(
'update' => 'added',
'id' => $id,
),
'site-new.php'
)
);
exit;
} else {
wp_die( $id->get_error_message() );
}
}
if ( isset( $_GET['update'] ) ) {
$messages = array();
if ( 'added' === $_GET['update'] ) {
$messages[] = sprintf(
/* translators: 1: Dashboard URL, 2: Network admin edit URL. */
__( 'Site added. Visit Dashboard or Edit Site' ),
esc_url( get_admin_url( absint( $_GET['id'] ) ) ),
network_admin_url( 'site-info.php?id=' . absint( $_GET['id'] ) )
);
}
}
// Used in the HTML title tag.
$title = __( 'Add Site' );
$parent_file = 'sites.php';
wp_enqueue_script( 'user-suggest' );
require_once ABSPATH . 'wp-admin/admin-header.php';
?>
' . __( 'From here you can:' ) . '
'; $overview .= '' . __( 'The Right Now widget on this screen provides current user and site counts on your network.' ) . '
'; $quick_tasks .= '' . __( 'To search for a user or site, use the search boxes.' ) . '
'; $quick_tasks .= '' . __( 'For more information:' ) . '
' . '' . __( 'Documentation on the Network Admin' ) . '
' . '' . __( 'Support forums' ) . '
' ); wp_dashboard_setup(); wp_enqueue_script( 'dashboard' ); wp_enqueue_script( 'plugin-install' ); add_thickbox(); require_once ABSPATH . 'wp-admin/admin-header.php'; ?>' . __( 'Add User will set up a new user account on the network and send that person an email with username and password.' ) . '
' . '' . __( 'Users who are signed up to the network without a site are added as subscribers to the main or primary dashboard site, giving them profile pages to manage their accounts. These users will only see Dashboard and My Sites in the main navigation until a site is created for them.' ) . '
', ) ); get_current_screen()->set_help_sidebar( '' . __( 'For more information:' ) . '
' . '' . __( 'Documentation on Network Users' ) . '
' . '' . __( 'Support forums' ) . '
' ); if ( isset( $_REQUEST['action'] ) && 'add-user' === $_REQUEST['action'] ) { check_admin_referer( 'add-user', '_wpnonce_add-user' ); if ( ! current_user_can( 'manage_network_users' ) ) { wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 ); } if ( ! is_array( $_POST['user'] ) ) { wp_die( __( 'Cannot create an empty user.' ) ); } $user = wp_unslash( $_POST['user'] ); $user_details = wpmu_validate_user_signup( $user['username'], $user['email'] ); if ( is_wp_error( $user_details['errors'] ) && $user_details['errors']->has_errors() ) { $add_user_errors = $user_details['errors']; } else { $password = wp_generate_password( 12, false ); $user_id = wpmu_create_user( esc_html( strtolower( $user['username'] ) ), $password, sanitize_email( $user['email'] ) ); if ( ! $user_id ) { $add_user_errors = new WP_Error( 'add_user_fail', __( 'Cannot add user.' ) ); } else { /** * Fires after a new user has been created via the network user-new.php page. * * @since 4.4.0 * * @param int $user_id ID of the newly created user. */ do_action( 'network_user_new_created_user', $user_id ); wp_redirect( add_query_arg( array( 'update' => 'added', 'user_id' => $user_id, ), 'user-new.php' ) ); exit; } } } $message = ''; if ( isset( $_GET['update'] ) ) { if ( 'added' === $_GET['update'] ) { $edit_link = ''; if ( isset( $_GET['user_id'] ) ) { $user_id_new = absint( $_GET['user_id'] ); if ( $user_id_new ) { $edit_link = esc_url( add_query_arg( 'wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), get_edit_user_link( $user_id_new ) ) ); } } $message = __( 'User added.' ); if ( $edit_link ) { $message .= sprintf( ' %s', $edit_link, __( 'Edit user' ) ); } } } // Used in the HTML title tag. $title = __( 'Add User' ); $parent_file = 'users.php'; require_once ABSPATH . 'wp-admin/admin-header.php'; ?>$error
"; } wp_admin_notice( $error_messages, array( 'type' => 'error', 'dismissible' => true, 'id' => 'message', 'paragraph_wrap' => false, ) ); } ?>' . __( 'One of the selected users is not a member of this site.' ) . '
', 403 ); } $user = get_userdata( $user_id ); // If $role is empty, none will be set. $user->set_role( $role ); } } else { $update = 'err_promote'; } break; default: if ( ! isset( $_REQUEST['users'] ) ) { break; } check_admin_referer( 'bulk-users' ); $userids = $_REQUEST['users']; /** This action is documented in wp-admin/network/site-themes.php */ $referer = apply_filters( 'handle_network_bulk_actions-' . get_current_screen()->id, $referer, $action, $userids, $id ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores $update = $action; break; } wp_safe_redirect( add_query_arg( 'update', $update, $referer ) ); exit; } restore_current_blog(); if ( isset( $_GET['action'] ) && 'update-site' === $_GET['action'] ) { wp_safe_redirect( $referer ); exit; } add_screen_option( 'per_page' ); // Used in the HTML title tag. /* translators: %s: Site title. */ $title = sprintf( __( 'Edit Site: %s' ), esc_html( $details->blogname ) ); $parent_file = 'sites.php'; $submenu_file = 'sites.php'; /** * Filters whether to show the Add Existing User form on the Multisite Users screen. * * @since 3.1.0 * * @param bool $bool Whether to show the Add Existing User form. Default true. */ if ( ! wp_is_large_network( 'users' ) && apply_filters( 'show_network_site_users_add_existing_form', true ) ) { wp_enqueue_script( 'user-suggest' ); } require_once ABSPATH . 'wp-admin/admin-header.php'; ?>