summaryrefslogtreecommitdiff
path: root/www/crm/wp-admin/network
diff options
context:
space:
mode:
Diffstat (limited to 'www/crm/wp-admin/network')
-rw-r--r--www/crm/wp-admin/network/about.php13
-rw-r--r--www/crm/wp-admin/network/admin.php34
-rw-r--r--www/crm/wp-admin/network/credits.php13
-rw-r--r--www/crm/wp-admin/network/edit.php41
-rw-r--r--www/crm/wp-admin/network/freedoms.php13
-rw-r--r--www/crm/wp-admin/network/index.php83
-rw-r--r--www/crm/wp-admin/network/menu.php74
-rw-r--r--www/crm/wp-admin/network/plugin-editor.php13
-rw-r--r--www/crm/wp-admin/network/plugin-install.php17
-rw-r--r--www/crm/wp-admin/network/plugins.php13
-rw-r--r--www/crm/wp-admin/network/privacy.php13
-rw-r--r--www/crm/wp-admin/network/profile.php13
-rw-r--r--www/crm/wp-admin/network/settings.php481
-rw-r--r--www/crm/wp-admin/network/setup.php13
-rw-r--r--www/crm/wp-admin/network/site-info.php209
-rw-r--r--www/crm/wp-admin/network/site-new.php301
-rw-r--r--www/crm/wp-admin/network/site-settings.php176
-rw-r--r--www/crm/wp-admin/network/site-themes.php227
-rw-r--r--www/crm/wp-admin/network/site-users.php366
-rw-r--r--www/crm/wp-admin/network/sites.php371
-rw-r--r--www/crm/wp-admin/network/theme-editor.php13
-rw-r--r--www/crm/wp-admin/network/theme-install.php17
-rw-r--r--www/crm/wp-admin/network/themes.php343
-rw-r--r--www/crm/wp-admin/network/update-core.php13
-rw-r--r--www/crm/wp-admin/network/update.php17
-rw-r--r--www/crm/wp-admin/network/upgrade.php155
-rw-r--r--www/crm/wp-admin/network/user-edit.php13
-rw-r--r--www/crm/wp-admin/network/user-new.php150
-rw-r--r--www/crm/wp-admin/network/users.php280
29 files changed, 3485 insertions, 0 deletions
diff --git a/www/crm/wp-admin/network/about.php b/www/crm/wp-admin/network/about.php
new file mode 100644
index 00000000..829fa1be
--- /dev/null
+++ b/www/crm/wp-admin/network/about.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Network About administration panel.
+ *
+ * @package WordPress
+ * @subpackage Multisite
+ * @since 3.4.0
+ */
+
+/** Load WordPress Administration Bootstrap */
+require_once( dirname( __FILE__ ) . '/admin.php' );
+
+require( ABSPATH . 'wp-admin/about.php' );
diff --git a/www/crm/wp-admin/network/admin.php b/www/crm/wp-admin/network/admin.php
new file mode 100644
index 00000000..693fa5aa
--- /dev/null
+++ b/www/crm/wp-admin/network/admin.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * WordPress Network Administration Bootstrap
+ *
+ * @package WordPress
+ * @subpackage Multisite
+ * @since 3.1.0
+ */
+
+define( 'WP_NETWORK_ADMIN', true );
+
+/** Load WordPress Administration Bootstrap */
+require_once( dirname( dirname( __FILE__ ) ) . '/admin.php' );
+
+// Do not remove this check. It is required by individual network admin pages.
+if ( ! is_multisite() ) {
+ wp_die( __( 'Multisite support is not enabled.' ) );
+}
+
+$redirect_network_admin_request = 0 !== strcasecmp( $current_blog->domain, $current_site->domain ) || 0 !== strcasecmp( $current_blog->path, $current_site->path );
+
+/**
+ * Filters whether to redirect the request to the Network Admin.
+ *
+ * @since 3.2.0
+ *
+ * @param bool $redirect_network_admin_request Whether the request should be redirected.
+ */
+$redirect_network_admin_request = apply_filters( 'redirect_network_admin_request', $redirect_network_admin_request );
+if ( $redirect_network_admin_request ) {
+ wp_redirect( network_admin_url() );
+ exit;
+}
+unset( $redirect_network_admin_request );
diff --git a/www/crm/wp-admin/network/credits.php b/www/crm/wp-admin/network/credits.php
new file mode 100644
index 00000000..75ee6e73
--- /dev/null
+++ b/www/crm/wp-admin/network/credits.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Network Credits administration panel.
+ *
+ * @package WordPress
+ * @subpackage Multisite
+ * @since 3.4.0
+ */
+
+/** Load WordPress Administration Bootstrap */
+require_once( dirname( __FILE__ ) . '/admin.php' );
+
+require( ABSPATH . 'wp-admin/credits.php' );
diff --git a/www/crm/wp-admin/network/edit.php b/www/crm/wp-admin/network/edit.php
new file mode 100644
index 00000000..51381e40
--- /dev/null
+++ b/www/crm/wp-admin/network/edit.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Action handler for Multisite administration panels.
+ *
+ * @package WordPress
+ * @subpackage Multisite
+ * @since 3.0.0
+ */
+
+/** Load WordPress Administration Bootstrap */
+require_once( dirname( __FILE__ ) . '/admin.php' );
+
+$action = ( isset( $_GET['action'] ) ) ? $_GET['action'] : '';
+
+if ( empty( $action ) ) {
+ wp_redirect( network_admin_url() );
+ exit;
+}
+
+/**
+ * Fires just before the action handler in several Network Admin screens.
+ *
+ * This hook fires on multiple screens in the Multisite Network Admin,
+ * including Users, Network Settings, and Site Settings.
+ *
+ * @since 3.0.0
+ */
+do_action( 'wpmuadminedit' );
+
+/**
+ * Fires the requested handler action.
+ *
+ * The dynamic portion of the hook name, `$action`, refers to the name
+ * of the requested action derived from the `GET` request.
+ *
+ * @since 3.1.0
+ */
+do_action( "network_admin_edit_{$action}" );
+
+wp_redirect( network_admin_url() );
+exit();
diff --git a/www/crm/wp-admin/network/freedoms.php b/www/crm/wp-admin/network/freedoms.php
new file mode 100644
index 00000000..9afbe82f
--- /dev/null
+++ b/www/crm/wp-admin/network/freedoms.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Network Freedoms administration panel.
+ *
+ * @package WordPress
+ * @subpackage Multisite
+ * @since 3.4.0
+ */
+
+/** Load WordPress Administration Bootstrap */
+require_once( dirname( __FILE__ ) . '/admin.php' );
+
+require( ABSPATH . 'wp-admin/freedoms.php' );
diff --git a/www/crm/wp-admin/network/index.php b/www/crm/wp-admin/network/index.php
new file mode 100644
index 00000000..829a7eb7
--- /dev/null
+++ b/www/crm/wp-admin/network/index.php
@@ -0,0 +1,83 @@
+<?php
+/**
+ * Multisite administration panel.
+ *
+ * @package WordPress
+ * @subpackage Multisite
+ * @since 3.0.0
+ */
+
+/** Load WordPress Administration Bootstrap */
+require_once( dirname( __FILE__ ) . '/admin.php' );
+
+/** Load WordPress dashboard API */
+require_once( ABSPATH . 'wp-admin/includes/dashboard.php' );
+
+if ( ! current_user_can( 'manage_network' ) ) {
+ wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
+}
+
+$title = __( 'Dashboard' );
+$parent_file = 'index.php';
+
+$overview = '<p>' . __( 'Welcome to your Network Admin. This area of the Administration Screens is used for managing all aspects of your Multisite Network.' ) . '</p>';
+$overview .= '<p>' . __( 'From here you can:' ) . '</p>';
+$overview .= '<ul><li>' . __( 'Add and manage sites or users' ) . '</li>';
+$overview .= '<li>' . __( 'Install and activate themes or plugins' ) . '</li>';
+$overview .= '<li>' . __( 'Update your network' ) . '</li>';
+$overview .= '<li>' . __( 'Modify global network settings' ) . '</li></ul>';
+
+get_current_screen()->add_help_tab(
+ array(
+ 'id' => 'overview',
+ 'title' => __( 'Overview' ),
+ 'content' => $overview,
+ )
+);
+
+$quick_tasks = '<p>' . __( 'The Right Now widget on this screen provides current user and site counts on your network.' ) . '</p>';
+$quick_tasks .= '<ul><li>' . __( 'To add a new user, <strong>click Create a New User</strong>.' ) . '</li>';
+$quick_tasks .= '<li>' . __( 'To add a new site, <strong>click Create a New Site</strong>.' ) . '</li></ul>';
+$quick_tasks .= '<p>' . __( 'To search for a user or site, use the search boxes.' ) . '</p>';
+$quick_tasks .= '<ul><li>' . __( 'To search for a user, <strong>enter an email address or username</strong>. Use a wildcard to search for a partial username, such as user&#42;.' ) . '</li>';
+$quick_tasks .= '<li>' . __( 'To search for a site, <strong>enter the path or domain</strong>.' ) . '</li></ul>';
+
+get_current_screen()->add_help_tab(
+ array(
+ 'id' => 'quick-tasks',
+ 'title' => __( 'Quick Tasks' ),
+ 'content' => $quick_tasks,
+ )
+);
+
+get_current_screen()->set_help_sidebar(
+ '<p><strong>' . __( 'For more information:' ) . '</strong></p>' .
+ '<p>' . __( '<a href="https://codex.wordpress.org/Network_Admin">Documentation on the Network Admin</a>' ) . '</p>' .
+ '<p>' . __( '<a href="https://wordpress.org/support/forum/multisite/">Support Forums</a>' ) . '</p>'
+);
+
+wp_dashboard_setup();
+
+wp_enqueue_script( 'dashboard' );
+wp_enqueue_script( 'plugin-install' );
+add_thickbox();
+
+require_once( ABSPATH . 'wp-admin/admin-header.php' );
+
+?>
+
+<div class="wrap">
+<h1><?php echo esc_html( $title ); ?></h1>
+
+<div id="dashboard-widgets-wrap">
+
+<?php wp_dashboard(); ?>
+
+<div class="clear"></div>
+</div><!-- dashboard-widgets-wrap -->
+
+</div><!-- wrap -->
+
+<?php
+wp_print_community_events_templates();
+include( ABSPATH . 'wp-admin/admin-footer.php' );
diff --git a/www/crm/wp-admin/network/menu.php b/www/crm/wp-admin/network/menu.php
new file mode 100644
index 00000000..dbd77fd7
--- /dev/null
+++ b/www/crm/wp-admin/network/menu.php
@@ -0,0 +1,74 @@
+<?php
+/**
+ * Build Network Administration Menu.
+ *
+ * @package WordPress
+ * @subpackage Multisite
+ * @since 3.1.0
+ */
+
+/* translators: Network menu item */
+$menu[2] = array( __( 'Dashboard' ), 'manage_network', 'index.php', '', 'menu-top menu-top-first menu-icon-dashboard', 'menu-dashboard', 'dashicons-dashboard' );
+
+$submenu['index.php'][0] = array( __( 'Home' ), 'read', 'index.php' );
+
+if ( current_user_can( 'update_core' ) ) {
+ $cap = 'update_core';
+} elseif ( current_user_can( 'update_plugins' ) ) {
+ $cap = 'update_plugins';
+} elseif ( current_user_can( 'update_themes' ) ) {
+ $cap = 'update_themes';
+} else {
+ $cap = 'update_languages';
+}
+
+$update_data = wp_get_update_data();
+if ( $update_data['counts']['total'] ) {
+ $submenu['index.php'][10] = array( sprintf( __( 'Updates %s' ), "<span class='update-plugins count-{$update_data['counts']['total']}'><span class='update-count'>" . number_format_i18n( $update_data['counts']['total'] ) . '</span></span>' ), $cap, 'update-core.php' );
+} else {
+ $submenu['index.php'][10] = array( __( 'Updates' ), $cap, 'update-core.php' );
+}
+
+unset( $cap );
+
+$submenu['index.php'][15] = array( __( 'Upgrade Network' ), 'upgrade_network', 'upgrade.php' );
+
+$menu[4] = array( '', 'read', 'separator1', '', 'wp-menu-separator' );
+
+/* translators: Sites menu item */
+$menu[5] = array( __( 'Sites' ), 'manage_sites', 'sites.php', '', 'menu-top menu-icon-site', 'menu-site', 'dashicons-admin-multisite' );
+$submenu['sites.php'][5] = array( __( 'All Sites' ), 'manage_sites', 'sites.php' );
+$submenu['sites.php'][10] = array( _x( 'Add New', 'site' ), 'create_sites', 'site-new.php' );
+
+$menu[10] = array( __( 'Users' ), 'manage_network_users', 'users.php', '', 'menu-top menu-icon-users', 'menu-users', 'dashicons-admin-users' );
+$submenu['users.php'][5] = array( __( 'All Users' ), 'manage_network_users', 'users.php' );
+$submenu['users.php'][10] = array( _x( 'Add New', 'user' ), 'create_users', 'user-new.php' );
+
+if ( current_user_can( 'update_themes' ) && $update_data['counts']['themes'] ) {
+ $menu[15] = array( sprintf( __( 'Themes %s' ), "<span class='update-plugins count-{$update_data['counts']['themes']}'><span class='theme-count'>" . number_format_i18n( $update_data['counts']['themes'] ) . '</span></span>' ), 'manage_network_themes', 'themes.php', '', 'menu-top menu-icon-appearance', 'menu-appearance', 'dashicons-admin-appearance' );
+} else {
+ $menu[15] = array( __( 'Themes' ), 'manage_network_themes', 'themes.php', '', 'menu-top menu-icon-appearance', 'menu-appearance', 'dashicons-admin-appearance' );
+}
+$submenu['themes.php'][5] = array( __( 'Installed Themes' ), 'manage_network_themes', 'themes.php' );
+$submenu['themes.php'][10] = array( _x( 'Add New', 'theme' ), 'install_themes', 'theme-install.php' );
+$submenu['themes.php'][15] = array( __( 'Theme Editor' ), 'edit_themes', 'theme-editor.php' );
+
+if ( current_user_can( 'update_plugins' ) && $update_data['counts']['plugins'] ) {
+ $menu[20] = array( sprintf( __( 'Plugins %s' ), "<span class='update-plugins count-{$update_data['counts']['plugins']}'><span class='plugin-count'>" . number_format_i18n( $update_data['counts']['plugins'] ) . '</span></span>' ), 'manage_network_plugins', 'plugins.php', '', 'menu-top menu-icon-plugins', 'menu-plugins', 'dashicons-admin-plugins' );
+} else {
+ $menu[20] = array( __( 'Plugins' ), 'manage_network_plugins', 'plugins.php', '', 'menu-top menu-icon-plugins', 'menu-plugins', 'dashicons-admin-plugins' );
+}
+$submenu['plugins.php'][5] = array( __( 'Installed Plugins' ), 'manage_network_plugins', 'plugins.php' );
+$submenu['plugins.php'][10] = array( _x( 'Add New', 'plugin' ), 'install_plugins', 'plugin-install.php' );
+$submenu['plugins.php'][15] = array( __( 'Plugin Editor' ), 'edit_plugins', 'plugin-editor.php' );
+
+$menu[25] = array( __( 'Settings' ), 'manage_network_options', 'settings.php', '', 'menu-top menu-icon-settings', 'menu-settings', 'dashicons-admin-settings' );
+if ( defined( 'MULTISITE' ) && defined( 'WP_ALLOW_MULTISITE' ) && WP_ALLOW_MULTISITE ) {
+ $submenu['settings.php'][5] = array( __( 'Network Settings' ), 'manage_network_options', 'settings.php' );
+ $submenu['settings.php'][10] = array( __( 'Network Setup' ), 'setup_network', 'setup.php' );
+}
+unset( $update_data );
+
+$menu[99] = array( '', 'exist', 'separator-last', '', 'wp-menu-separator' );
+
+require_once( ABSPATH . 'wp-admin/includes/menu.php' );
diff --git a/www/crm/wp-admin/network/plugin-editor.php b/www/crm/wp-admin/network/plugin-editor.php
new file mode 100644
index 00000000..7171e725
--- /dev/null
+++ b/www/crm/wp-admin/network/plugin-editor.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Plugin editor network administration panel.
+ *
+ * @package WordPress
+ * @subpackage Multisite
+ * @since 3.1.0
+ */
+
+/** Load WordPress Administration Bootstrap */
+require_once( dirname( __FILE__ ) . '/admin.php' );
+
+require( ABSPATH . 'wp-admin/plugin-editor.php' );
diff --git a/www/crm/wp-admin/network/plugin-install.php b/www/crm/wp-admin/network/plugin-install.php
new file mode 100644
index 00000000..f771f63a
--- /dev/null
+++ b/www/crm/wp-admin/network/plugin-install.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Install plugin network administration panel.
+ *
+ * @package WordPress
+ * @subpackage Multisite
+ * @since 3.1.0
+ */
+
+if ( isset( $_GET['tab'] ) && ( 'plugin-information' == $_GET['tab'] ) ) {
+ define( 'IFRAME_REQUEST', true );
+}
+
+/** Load WordPress Administration Bootstrap */
+require_once( dirname( __FILE__ ) . '/admin.php' );
+
+require( ABSPATH . 'wp-admin/plugin-install.php' );
diff --git a/www/crm/wp-admin/network/plugins.php b/www/crm/wp-admin/network/plugins.php
new file mode 100644
index 00000000..56c3debd
--- /dev/null
+++ b/www/crm/wp-admin/network/plugins.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Network Plugins administration panel.
+ *
+ * @package WordPress
+ * @subpackage Multisite
+ * @since 3.1.0
+ */
+
+/** Load WordPress Administration Bootstrap */
+require_once( dirname( __FILE__ ) . '/admin.php' );
+
+require( ABSPATH . 'wp-admin/plugins.php' );
diff --git a/www/crm/wp-admin/network/privacy.php b/www/crm/wp-admin/network/privacy.php
new file mode 100644
index 00000000..5cba05d3
--- /dev/null
+++ b/www/crm/wp-admin/network/privacy.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Network Privacy administration panel.
+ *
+ * @package WordPress
+ * @subpackage Multisite
+ * @since 4.9.0
+ */
+
+/** Load WordPress Administration Bootstrap */
+require_once( dirname( __FILE__ ) . '/admin.php' );
+
+require( ABSPATH . 'wp-admin/privacy.php' );
diff --git a/www/crm/wp-admin/network/profile.php b/www/crm/wp-admin/network/profile.php
new file mode 100644
index 00000000..240ef980
--- /dev/null
+++ b/www/crm/wp-admin/network/profile.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * User profile network administration panel.
+ *
+ * @package WordPress
+ * @subpackage Multisite
+ * @since 3.1.0
+ */
+
+/** Load WordPress Administration Bootstrap */
+require_once( dirname( __FILE__ ) . '/admin.php' );
+
+require( ABSPATH . 'wp-admin/profile.php' );
diff --git a/www/crm/wp-admin/network/settings.php b/www/crm/wp-admin/network/settings.php
new file mode 100644
index 00000000..375367a2
--- /dev/null
+++ b/www/crm/wp-admin/network/settings.php
@@ -0,0 +1,481 @@
+<?php
+/**
+ * Multisite network settings administration panel.
+ *
+ * @package WordPress
+ * @subpackage Multisite
+ * @since 3.0.0
+ */
+
+/** Load WordPress Administration Bootstrap */
+require_once( dirname( __FILE__ ) . '/admin.php' );
+
+/** WordPress Translation Installation API */
+require_once( ABSPATH . 'wp-admin/includes/translation-install.php' );
+
+if ( ! current_user_can( 'manage_network_options' ) ) {
+ wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
+}
+
+$title = __( 'Network Settings' );
+$parent_file = 'settings.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(
+ 'id' => 'overview',
+ 'title' => __( 'Overview' ),
+ 'content' =>
+ '<p>' . __( 'This screen sets and changes options for the network as a whole. The first site is the main site in the network and network options are pulled from that original site&#8217;s options.' ) . '</p>' .
+ '<p>' . __( 'Operational settings has fields for the network&#8217;s name and admin email.' ) . '</p>' .
+ '<p>' . __( 'Registration settings can disable/enable public signups. If you let others sign up for a site, install spam plugins. Spaces, not commas, should separate names banned as sites for this network.' ) . '</p>' .
+ '<p>' . __( 'New site settings are defaults applied when a new site is created in the network. These include welcome email for when a new site or user account is registered, and what&#8127;s put in the first post, page, comment, comment author, and comment URL.' ) . '</p>' .
+ '<p>' . __( 'Upload settings control the size of the uploaded files and the amount of available upload space for each site. You can change the default value for specific sites when you edit a particular site. Allowed file types are also listed (space separated only).' ) . '</p>' .
+ '<p>' . __( 'You can set the language, and the translation files will be automatically downloaded and installed (available if your filesystem is writable).' ) . '</p>' .
+ '<p>' . __( 'Menu setting enables/disables the plugin menus from appearing for non super admins, so that only super admins, not site admins, have access to activate plugins.' ) . '</p>' .
+ '<p>' . __( 'Super admins can no longer be added on the Options screen. You must now go to the list of existing users on Network Admin > Users and click on Username or the Edit action link below that name. This goes to an Edit User page where you can check a box to grant super admin privileges.' ) . '</p>',
+ )
+);
+
+get_current_screen()->set_help_sidebar(
+ '<p><strong>' . __( 'For more information:' ) . '</strong></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</a>' ) . '</p>'
+);
+
+if ( $_POST ) {
+ /** This action is documented in wp-admin/network/edit.php */
+ do_action( 'wpmuadminedit' );
+
+ check_admin_referer( 'siteoptions' );
+
+ $checked_options = array(
+ 'menu_items' => array(),
+ 'registrationnotification' => 'no',
+ 'upload_space_check_disabled' => 1,
+ 'add_new_users' => 0,
+ );
+ foreach ( $checked_options as $option_name => $option_unchecked_value ) {
+ if ( ! isset( $_POST[ $option_name ] ) ) {
+ $_POST[ $option_name ] = $option_unchecked_value;
+ }
+ }
+
+ $options = array(
+ 'registrationnotification',
+ 'registration',
+ 'add_new_users',
+ 'menu_items',
+ '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',
+ 'new_admin_email',
+ 'first_comment_email',
+ );
+
+ // 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;
+ }
+ }
+
+ foreach ( $options as $option_name ) {
+ if ( ! isset( $_POST[ $option_name ] ) ) {
+ continue;
+ }
+ $value = wp_unslash( $_POST[ $option_name ] );
+ update_site_option( $option_name, $value );
+ }
+
+ /**
+ * Fires after the network options are updated.
+ *
+ * @since MU (3.0.0)
+ */
+ do_action( 'update_wpmu_options' );
+
+ wp_redirect( add_query_arg( 'updated', 'true', network_admin_url( 'settings.php' ) ) );
+ exit();
+}
+
+include( ABSPATH . 'wp-admin/admin-header.php' );
+
+if ( isset( $_GET['updated'] ) ) {
+ ?><div id="message" class="updated notice is-dismissible"><p><?php _e( 'Settings saved.' ); ?></p></div>
+ <?php
+}
+?>
+
+<div class="wrap">
+ <h1><?php echo esc_html( $title ); ?></h1>
+ <form method="post" action="settings.php" novalidate="novalidate">
+ <?php wp_nonce_field( 'siteoptions' ); ?>
+ <h2><?php _e( 'Operational Settings' ); ?></h2>
+ <table class="form-table" role="presentation">
+ <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( get_network()->site_name ); ?>" />
+ </td>
+ </tr>
+
+ <tr>
+ <th scope="row"><label for="admin_email"><?php _e( 'Network Admin Email' ); ?></label></th>
+ <td>
+ <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 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>
+ <h2><?php _e( 'Registration Settings' ); ?></h2>
+ <table class="form-table" role="presentation">
+ <tr>
+ <th scope="row"><?php _e( 'Allow new registrations' ); ?></th>
+ <?php
+ if ( ! get_site_option( 'registration' ) ) {
+ update_site_option( 'registration', 'none' );
+ }
+ $reg = get_site_option( 'registration' );
+ ?>
+ <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>
+ <?php
+ if ( is_subdomain_install() ) {
+ 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>
+ </tr>
+
+ <tr>
+ <th scope="row"><?php _e( 'Registration notification' ); ?></th>
+ <?php
+ if ( ! get_site_option( 'registrationnotification' ) ) {
+ 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>
+ </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>
+ </td>
+ </tr>
+
+ <tr>
+ <th scope="row"><label for="illegal_names"><?php _e( 'Banned Names' ); ?></label></th>
+ <td>
+ <input name="illegal_names" type="text" id="illegal_names" aria-describedby="illegal-names-desc" class="large-text" value="<?php echo esc_attr( implode( ' ', (array) get_site_option( 'illegal_names' ) ) ); ?>" size="45" />
+ <p class="description" id="illegal-names-desc">
+ <?php _e( 'Users are not allowed to register these sites. Separate names by spaces.' ); ?>
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <th scope="row"><label for="limited_email_domains"><?php _e( 'Limited Email Registrations' ); ?></label></th>
+ <td>
+ <?php
+ $limited_email_domains = get_site_option( 'limited_email_domains' );
+ $limited_email_domains = str_replace( ' ', "\n", $limited_email_domains );
+ ?>
+ <textarea name="limited_email_domains" id="limited_email_domains" aria-describedby="limited-email-domains-desc" cols="45" rows="5">
+<?php echo esc_textarea( $limited_email_domains == '' ? '' : implode( "\n", (array) $limited_email_domains ) ); ?></textarea>
+ <p class="description" id="limited-email-domains-desc">
+ <?php _e( 'If you want to limit site registrations to certain domains. One domain per line.' ); ?>
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <th scope="row"><label for="banned_email_domains"><?php _e( 'Banned Email Domains' ); ?></label></th>
+ <td>
+ <textarea name="banned_email_domains" id="banned_email_domains" aria-describedby="banned-email-domains-desc" cols="45" rows="5">
+<?php echo esc_textarea( get_site_option( 'banned_email_domains' ) == '' ? '' : implode( "\n", (array) get_site_option( 'banned_email_domains' ) ) ); ?></textarea>
+ <p class="description" id="banned-email-domains-desc">
+ <?php _e( 'If you want to ban domains from site registrations. One domain per line.' ); ?>
+ </p>
+ </td>
+ </tr>
+
+ </table>
+ <h2><?php _e( 'New Site Settings' ); ?></h2>
+ <table class="form-table" role="presentation">
+
+ <tr>
+ <th scope="row"><label for="welcome_email"><?php _e( 'Welcome Email' ); ?></label></th>
+ <td>
+ <textarea name="welcome_email" id="welcome_email" aria-describedby="welcome-email-desc" rows="5" cols="45" class="large-text">
+<?php echo esc_textarea( get_site_option( 'welcome_email' ) ); ?></textarea>
+ <p class="description" id="welcome-email-desc">
+ <?php _e( 'The welcome email sent to new site owners.' ); ?>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row"><label for="welcome_user_email"><?php _e( 'Welcome User Email' ); ?></label></th>
+ <td>
+ <textarea name="welcome_user_email" id="welcome_user_email" aria-describedby="welcome-user-email-desc" rows="5" cols="45" class="large-text">
+<?php echo esc_textarea( get_site_option( 'welcome_user_email' ) ); ?></textarea>
+ <p class="description" id="welcome-user-email-desc">
+ <?php _e( 'The welcome email sent to new users.' ); ?>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row"><label for="first_post"><?php _e( 'First Post' ); ?></label></th>
+ <td>
+ <textarea name="first_post" id="first_post" aria-describedby="first-post-desc" rows="5" cols="45" class="large-text">
+<?php echo esc_textarea( get_site_option( 'first_post' ) ); ?></textarea>
+ <p class="description" id="first-post-desc">
+ <?php _e( 'The first post on a new site.' ); ?>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row"><label for="first_page"><?php _e( 'First Page' ); ?></label></th>
+ <td>
+ <textarea name="first_page" id="first_page" aria-describedby="first-page-desc" rows="5" cols="45" class="large-text">
+<?php echo esc_textarea( get_site_option( 'first_page' ) ); ?></textarea>
+ <p class="description" id="first-page-desc">
+ <?php _e( 'The first page on a new site.' ); ?>
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row"><label for="first_comment"><?php _e( 'First Comment' ); ?></label></th>
+ <td>
+ <textarea name="first_comment" id="first_comment" aria-describedby="first-comment-desc" rows="5" cols="45" class="large-text">
+<?php echo esc_textarea( get_site_option( 'first_comment' ) ); ?></textarea>
+ <p class="description" id="first-comment-desc">
+ <?php _e( 'The first comment on a new site.' ); ?>
+ </p>
+ </td>
+ </tr>
+ <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 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' ) ); ?>" />
+ <p class="description" id="first-comment-url-desc">
+ <?php _e( 'The URL for the first comment on a new site.' ); ?>
+ </p>
+ </td>
+ </tr>
+ </table>
+ <h2><?php _e( 'Upload Settings' ); ?></h2>
+ <table class="form-table" role="presentation">
+ <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( (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>
+ </td>
+ </tr>
+
+ <tr>
+ <th scope="row"><label for="upload_filetypes"><?php _e( 'Upload file types' ); ?></label></th>
+ <td>
+ <input name="upload_filetypes" type="text" id="upload_filetypes" aria-describedby="upload-filetypes-desc" class="large-text" value="<?php echo esc_attr( get_site_option( 'upload_filetypes', 'jpg jpeg png gif' ) ); ?>" size="45" />
+ <p class="description" id="upload-filetypes-desc">
+ <?php _e( 'Allowed file types. Separate types by spaces.' ); ?>
+ </p>
+ </td>
+ </tr>
+
+ <tr>
+ <th scope="row"><label for="fileupload_maxk"><?php _e( 'Max upload file size' ); ?></label></th>
+ <td>
+ <?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>
+ </td>
+ </tr>
+ </table>
+
+ <?php
+ $languages = get_available_languages();
+ $translations = wp_get_available_translations();
+ if ( ! empty( $languages ) || ! empty( $translations ) ) {
+ ?>
+ <h2><?php _e( 'Language Settings' ); ?></h2>
+ <table class="form-table" role="presentation">
+ <tr>
+ <th><label for="WPLANG"><?php _e( 'Default Language' ); ?></label></th>
+ <td>
+ <?php
+ $lang = get_site_option( 'WPLANG' );
+ if ( ! in_array( $lang, $languages ) ) {
+ $lang = '';
+ }
+
+ 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>
+ </table>
+ <?php
+ }
+ ?>
+
+ <h2><?php _e( 'Menu Settings' ); ?></h2>
+ <table id="menu" class="form-table">
+ <tr>
+ <th scope="row"><?php _e( 'Enable administration menus' ); ?></th>
+ <td>
+ <?php
+ $menu_perms = get_site_option( 'menu_items' );
+ /**
+ * 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.
+ *
+ * Adding options for specific menus here hinges on the appropriate checks and capabilities
+ * being in place in the site dashboard on the other side. For instance, when the single
+ * default option, 'plugins' is enabled, site administrators are granted access to the Plugins
+ * screen in their individual sites' dashboards.
+ *
+ * @since MU (3.0.0)
+ *
+ * @param string[] $admin_menus Associative array of the menu items available.
+ */
+ $menu_items = apply_filters( 'mu_menu_items', array( 'plugins' => __( 'Plugins' ) ) );
+
+ echo '<fieldset><legend class="screen-reader-text">' . __( 'Enable menus' ) . '</legend>';
+
+ foreach ( (array) $menu_items as $key => $val ) {
+ echo "<label><input type='checkbox' name='menu_items[" . $key . "]' value='1'" . ( isset( $menu_perms[ $key ] ) ? checked( $menu_perms[ $key ], '1', false ) : '' ) . ' /> ' . esc_html( $val ) . '</label><br/>';
+ }
+
+ echo '</fieldset>';
+ ?>
+ </td>
+ </tr>
+ </table>
+
+ <?php
+ /**
+ * Fires at the end of the Network Settings form, before the submit button.
+ *
+ * @since MU (3.0.0)
+ */
+ do_action( 'wpmu_options' );
+ ?>
+ <?php submit_button(); ?>
+ </form>
+</div>
+
+<?php include( ABSPATH . 'wp-admin/admin-footer.php' ); ?>
diff --git a/www/crm/wp-admin/network/setup.php b/www/crm/wp-admin/network/setup.php
new file mode 100644
index 00000000..9a642bbb
--- /dev/null
+++ b/www/crm/wp-admin/network/setup.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Network Setup administration panel.
+ *
+ * @package WordPress
+ * @subpackage Multisite
+ * @since 3.1.0
+ */
+
+/** Load WordPress Administration Bootstrap */
+require_once( dirname( __FILE__ ) . '/admin.php' );
+
+require( ABSPATH . 'wp-admin/network.php' );
diff --git a/www/crm/wp-admin/network/site-info.php b/www/crm/wp-admin/network/site-info.php
new file mode 100644
index 00000000..c8b86e5f
--- /dev/null
+++ b/www/crm/wp-admin/network/site-info.php
@@ -0,0 +1,209 @@
+<?php
+/**
+ * Edit Site Info Administration Screen
+ *
+ * @package WordPress
+ * @subpackage Multisite
+ * @since 3.1.0
+ */
+
+/** Load WordPress Administration Bootstrap */
+require_once( dirname( __FILE__ ) . '/admin.php' );
+
+if ( ! current_user_can( 'manage_sites' ) ) {
+ wp_die( __( 'Sorry, you are not allowed to edit this site.' ) );
+}
+
+get_current_screen()->add_help_tab( get_site_screen_help_tab_args() );
+get_current_screen()->set_help_sidebar( get_site_screen_help_sidebar_content() );
+
+$id = isset( $_REQUEST['id'] ) ? intval( $_REQUEST['id'] ) : 0;
+
+if ( ! $id ) {
+ wp_die( __( 'Invalid site ID.' ) );
+}
+
+$details = get_site( $id );
+if ( ! $details ) {
+ wp_die( __( 'The requested site does not exist.' ) );
+}
+
+if ( ! can_edit_network( $details->site_id ) ) {
+ wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
+}
+
+$parsed_scheme = parse_url( $details->siteurl, PHP_URL_SCHEME );
+$is_main_site = is_main_site( $id );
+
+if ( isset( $_REQUEST['action'] ) && 'update-site' == $_REQUEST['action'] ) {
+ check_admin_referer( 'edit-site' );
+
+ switch_to_blog( $id );
+
+ // Rewrite rules can't be flushed during switch to blog.
+ delete_option( 'rewrite_rules' );
+
+ $blog_data = wp_unslash( $_POST['blog'] );
+ $blog_data['scheme'] = $parsed_scheme;
+
+ if ( $is_main_site ) {
+ // On the network's main site, don't allow the domain or path to change.
+ $blog_data['domain'] = $details->domain;
+ $blog_data['path'] = $details->path;
+ } else {
+ // For any other site, the scheme, domain, and path can all be changed. We first
+ // need to ensure a scheme has been provided, otherwise fallback to the existing.
+ $new_url_scheme = parse_url( $blog_data['url'], PHP_URL_SCHEME );
+
+ if ( ! $new_url_scheme ) {
+ $blog_data['url'] = esc_url( $parsed_scheme . '://' . $blog_data['url'] );
+ }
+ $update_parsed_url = parse_url( $blog_data['url'] );
+
+ // If a path is not provided, use the default of `/`.
+ if ( ! isset( $update_parsed_url['path'] ) ) {
+ $update_parsed_url['path'] = '/';
+ }
+
+ $blog_data['scheme'] = $update_parsed_url['scheme'];
+ $blog_data['domain'] = $update_parsed_url['host'];
+ $blog_data['path'] = $update_parsed_url['path'];
+ }
+
+ $existing_details = get_site( $id );
+ $blog_data_checkboxes = array( 'public', 'archived', 'spam', 'mature', 'deleted' );
+ foreach ( $blog_data_checkboxes as $c ) {
+ if ( ! in_array( $existing_details->$c, array( 0, 1 ) ) ) {
+ $blog_data[ $c ] = $existing_details->$c;
+ } else {
+ $blog_data[ $c ] = isset( $_POST['blog'][ $c ] ) ? 1 : 0;
+ }
+ }
+
+ update_blog_details( $id, $blog_data );
+
+ // Maybe update home and siteurl options.
+ $new_details = get_site( $id );
+
+ $old_home_url = trailingslashit( esc_url( get_option( 'home' ) ) );
+ $old_home_parsed = parse_url( $old_home_url );
+
+ if ( $old_home_parsed['host'] === $existing_details->domain && $old_home_parsed['path'] === $existing_details->path ) {
+ $new_home_url = untrailingslashit( esc_url_raw( $blog_data['scheme'] . '://' . $new_details->domain . $new_details->path ) );
+ update_option( 'home', $new_home_url );
+ }
+
+ $old_site_url = trailingslashit( esc_url( get_option( 'siteurl' ) ) );
+ $old_site_parsed = parse_url( $old_site_url );
+
+ if ( $old_site_parsed['host'] === $existing_details->domain && $old_site_parsed['path'] === $existing_details->path ) {
+ $new_site_url = untrailingslashit( esc_url_raw( $blog_data['scheme'] . '://' . $new_details->domain . $new_details->path ) );
+ update_option( 'siteurl', $new_site_url );
+ }
+
+ restore_current_blog();
+ wp_redirect(
+ add_query_arg(
+ array(
+ 'update' => 'updated',
+ 'id' => $id,
+ ),
+ 'site-info.php'
+ )
+ );
+ exit;
+}
+
+if ( isset( $_GET['update'] ) ) {
+ $messages = array();
+ if ( 'updated' == $_GET['update'] ) {
+ $messages[] = __( 'Site info updated.' );
+ }
+}
+
+/* translators: %s: site name */
+$title = sprintf( __( 'Edit Site: %s' ), esc_html( $details->blogname ) );
+
+$parent_file = 'sites.php';
+$submenu_file = 'sites.php';
+
+require( ABSPATH . 'wp-admin/admin-header.php' );
+
+?>
+
+<div class="wrap">
+<h1 id="edit-site"><?php echo $title; ?></h1>
+<p class="edit-site-actions"><a href="<?php echo esc_url( get_home_url( $id, '/' ) ); ?>"><?php _e( 'Visit' ); ?></a> | <a href="<?php echo esc_url( get_admin_url( $id ) ); ?>"><?php _e( 'Dashboard' ); ?></a></p>
+<?php
+
+network_edit_site_nav(
+ array(
+ 'blog_id' => $id,
+ 'selected' => 'site-info',
+ )
+);
+
+if ( ! empty( $messages ) ) {
+ foreach ( $messages as $msg ) {
+ echo '<div id="message" class="updated notice is-dismissible"><p>' . $msg . '</p></div>';
+ }
+}
+?>
+<form method="post" action="site-info.php?action=update-site">
+ <?php wp_nonce_field( 'edit-site' ); ?>
+ <input type="hidden" name="id" value="<?php echo esc_attr( $id ); ?>" />
+ <table class="form-table" role="presentation">
+ <?php
+ // The main site of the network should not be updated on this page.
+ if ( $is_main_site ) :
+ ?>
+ <tr class="form-field">
+ <th scope="row"><?php _e( 'Site Address (URL)' ); ?></th>
+ <td><?php echo esc_url( $parsed_scheme . '://' . $details->domain . $details->path ); ?></td>
+ </tr>
+ <?php
+ // For any other site, the scheme, domain, and path can all be changed.
+ else :
+ ?>
+ <tr class="form-field form-required">
+ <th scope="row"><label for="url"><?php _e( 'Site Address (URL)' ); ?></label></th>
+ <td><input name="blog[url]" type="text" id="url" value="<?php echo $parsed_scheme . '://' . esc_attr( $details->domain ) . esc_attr( $details->path ); ?>" /></td>
+ </tr>
+ <?php endif; ?>
+
+ <tr class="form-field">
+ <th scope="row"><label for="blog_registered"><?php _ex( 'Registered', 'site' ); ?></label></th>
+ <td><input name="blog[registered]" type="text" id="blog_registered" value="<?php echo esc_attr( $details->registered ); ?>" /></td>
+ </tr>
+ <tr class="form-field">
+ <th scope="row"><label for="blog_last_updated"><?php _e( 'Last Updated' ); ?></label></th>
+ <td><input name="blog[last_updated]" type="text" id="blog_last_updated" value="<?php echo esc_attr( $details->last_updated ); ?>" /></td>
+ </tr>
+ <?php
+ $attribute_fields = array( 'public' => __( 'Public' ) );
+ if ( ! $is_main_site ) {
+ $attribute_fields['archived'] = __( 'Archived' );
+ $attribute_fields['spam'] = _x( 'Spam', 'site' );
+ $attribute_fields['deleted'] = __( 'Deleted' );
+ }
+ $attribute_fields['mature'] = __( 'Mature' );
+ ?>
+ <tr>
+ <th scope="row"><?php _e( 'Attributes' ); ?></th>
+ <td>
+ <fieldset>
+ <legend class="screen-reader-text"><?php _e( 'Set site attributes' ); ?></legend>
+ <?php foreach ( $attribute_fields as $field_key => $field_label ) : ?>
+ <label><input type="checkbox" name="blog[<?php echo $field_key; ?>]" value="1" <?php checked( (bool) $details->$field_key, true ); ?> <?php disabled( ! in_array( $details->$field_key, array( 0, 1 ) ) ); ?> />
+ <?php echo $field_label; ?></label><br/>
+ <?php endforeach; ?>
+ <fieldset>
+ </td>
+ </tr>
+ </table>
+ <?php submit_button(); ?>
+</form>
+
+</div>
+<?php
+require( ABSPATH . 'wp-admin/admin-footer.php' );
diff --git a/www/crm/wp-admin/network/site-new.php b/www/crm/wp-admin/network/site-new.php
new file mode 100644
index 00000000..318c7b44
--- /dev/null
+++ b/www/crm/wp-admin/network/site-new.php
@@ -0,0 +1,301 @@
+<?php
+/**
+ * Add Site Administration Screen
+ *
+ * @package WordPress
+ * @subpackage Multisite
+ * @since 3.1.0
+ */
+
+/** Load WordPress Administration Bootstrap */
+require_once( dirname( __FILE__ ) . '/admin.php' );
+
+/** WordPress Translation Installation API */
+require_once( ABSPATH . 'wp-admin/includes/translation-install.php' );
+
+if ( ! current_user_can( 'create_sites' ) ) {
+ wp_die( __( 'Sorry, you are not allowed to add sites to this network.' ) );
+}
+
+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>',
+ )
+);
+
+get_current_screen()->set_help_sidebar(
+ '<p><strong>' . __( 'For more information:' ) . '</strong></p>' .
+ '<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>'
+);
+
+if ( isset( $_REQUEST['action'] ) && 'add-site' == $_REQUEST['action'] ) {
+ check_admin_referer( 'add-blog', '_wpnonce_add-blog' );
+
+ if ( ! is_array( $_POST['blog'] ) ) {
+ wp_die( __( 'Can&#8217;t create an empty site.' ) );
+ }
+
+ $blog = $_POST['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 ) ) {
+ 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>'
+ )
+ );
+ }
+ }
+
+ $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() ) ) {
+ $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( $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 );
+ }
+
+ wp_mail(
+ get_site_option( 'admin_email' ),
+ sprintf(
+ /* translators: %s: network name */
+ __( '[%s] New Site Created' ),
+ get_network()->site_name
+ ),
+ sprintf(
+ /* translators: 1: user login, 2: site url, 3: site name/title */
+ __(
+ 'New site created by %1$s
+
+Address: %2$s
+Name: %3$s'
+ ),
+ $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' )
+ )
+ );
+ 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. <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'] ) )
+ );
+ }
+}
+
+$title = __( 'Add New Site' );
+$parent_file = 'sites.php';
+
+wp_enqueue_script( 'user-suggest' );
+
+require( ABSPATH . 'wp-admin/admin-header.php' );
+
+?>
+
+<div class="wrap">
+<h1 id="add-new-site"><?php _e( 'Add New Site' ); ?></h1>
+<?php
+if ( ! empty( $messages ) ) {
+ foreach ( $messages as $msg ) {
+ echo '<div id="message" class="updated notice is-dismissible"><p>' . $msg . '</p></div>';
+ }
+}
+?>
+<p>
+<?php
+printf(
+ /* translators: %s: asterisk to mark required form fields. */
+ __( 'Required fields are marked %s' ),
+ '<span class="required">*</span>'
+);
+?>
+</p>
+<form method="post" action="<?php echo network_admin_url( 'site-new.php?action=add-site' ); ?>" novalidate="novalidate">
+<?php wp_nonce_field( 'add-blog', '_wpnonce_add-blog' ); ?>
+ <table class="form-table" role="presentation">
+ <tr class="form-field form-required">
+ <th scope="row"><label for="site-address"><?php _e( 'Site Address (URL)' ); ?> <span class="required">*</span></label></th>
+ <td>
+ <?php if ( is_subdomain_install() ) { ?>
+ <input name="blog[domain]" type="text" class="regular-text" id="site-address" aria-describedby="site-address-desc" autocapitalize="none" autocorrect="off" required /><span class="no-break">.<?php echo preg_replace( '|^www\.|', '', get_network()->domain ); ?></span>
+ <?php
+ } else {
+ 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" required />
+ <?php
+ }
+ echo '<p class="description" id="site-address-desc">' . __( 'Only lowercase letters (a-z), numbers, and hyphens are allowed.' ) . '</p>';
+ ?>
+ </td>
+ </tr>
+ <tr class="form-field form-required">
+ <th scope="row"><label for="site-title"><?php _e( 'Site Title' ); ?> <span class="required">*</span></label></th>
+ <td><input name="blog[title]" type="text" class="regular-text" id="site-title" required /></td>
+ </tr>
+ <?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' => current_user_can( 'install_languages' ) && wp_can_install_language_pack(),
+ )
+ );
+ ?>
+ </td>
+ </tr>
+ <?php endif; // Languages. ?>
+ <tr class="form-field form-required">
+ <th scope="row"><label for="admin-email"><?php _e( 'Admin Email' ); ?> <span class="required">*</span></label></th>
+ <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" aria-describedby="site-admin-email" required /></td>
+ </tr>
+ <tr class="form-field">
+ <td colspan="2" class="td-full"><p id="site-admin-email"><?php _e( 'A new user will be created if the above email address is not in the database.' ); ?><br /><?php _e( 'The username and a link to set the password will be mailed to this email address.' ); ?></p></td>
+ </tr>
+ </table>
+
+ <?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' );
+ ?>
+ </form>
+</div>
+<?php
+require( ABSPATH . 'wp-admin/admin-footer.php' );
diff --git a/www/crm/wp-admin/network/site-settings.php b/www/crm/wp-admin/network/site-settings.php
new file mode 100644
index 00000000..ab694ec8
--- /dev/null
+++ b/www/crm/wp-admin/network/site-settings.php
@@ -0,0 +1,176 @@
+<?php
+/**
+ * Edit Site Settings Administration Screen
+ *
+ * @package WordPress
+ * @subpackage Multisite
+ * @since 3.1.0
+ */
+
+/** Load WordPress Administration Bootstrap */
+require_once( dirname( __FILE__ ) . '/admin.php' );
+
+if ( ! current_user_can( 'manage_sites' ) ) {
+ wp_die( __( 'Sorry, you are not allowed to edit this site.' ) );
+}
+
+get_current_screen()->add_help_tab( get_site_screen_help_tab_args() );
+get_current_screen()->set_help_sidebar( get_site_screen_help_sidebar_content() );
+
+$id = isset( $_REQUEST['id'] ) ? intval( $_REQUEST['id'] ) : 0;
+
+if ( ! $id ) {
+ wp_die( __( 'Invalid site ID.' ) );
+}
+
+$details = get_site( $id );
+if ( ! $details ) {
+ wp_die( __( 'The requested site does not exist.' ) );
+}
+
+if ( ! can_edit_network( $details->site_id ) ) {
+ wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
+}
+
+$is_main_site = is_main_site( $id );
+
+if ( isset( $_REQUEST['action'] ) && 'update-site' == $_REQUEST['action'] && is_array( $_POST['option'] ) ) {
+ check_admin_referer( 'edit-site' );
+
+ switch_to_blog( $id );
+
+ $skip_options = array( 'allowedthemes' ); // Don't update these options since they are handled elsewhere in the form.
+ foreach ( (array) $_POST['option'] as $key => $val ) {
+ $key = wp_unslash( $key );
+ $val = wp_unslash( $val );
+ if ( $key === 0 || is_array( $val ) || in_array( $key, $skip_options ) ) {
+ continue; // Avoids "0 is a protected WP option and may not be modified" error when edit blog options
+ }
+ update_option( $key, $val );
+ }
+
+ /**
+ * Fires after the site options are updated.
+ *
+ * @since 3.0.0
+ * @since 4.4.0 Added `$id` parameter.
+ *
+ * @param int $id The ID of the site being updated.
+ */
+ do_action( 'wpmu_update_blog_options', $id );
+
+ restore_current_blog();
+ wp_redirect(
+ add_query_arg(
+ array(
+ 'update' => 'updated',
+ 'id' => $id,
+ ),
+ 'site-settings.php'
+ )
+ );
+ exit;
+}
+
+if ( isset( $_GET['update'] ) ) {
+ $messages = array();
+ if ( 'updated' == $_GET['update'] ) {
+ $messages[] = __( 'Site options updated.' );
+ }
+}
+
+/* translators: %s: site name */
+$title = sprintf( __( 'Edit Site: %s' ), esc_html( $details->blogname ) );
+
+$parent_file = 'sites.php';
+$submenu_file = 'sites.php';
+
+require( ABSPATH . 'wp-admin/admin-header.php' );
+
+?>
+
+<div class="wrap">
+<h1 id="edit-site"><?php echo $title; ?></h1>
+<p class="edit-site-actions"><a href="<?php echo esc_url( get_home_url( $id, '/' ) ); ?>"><?php _e( 'Visit' ); ?></a> | <a href="<?php echo esc_url( get_admin_url( $id ) ); ?>"><?php _e( 'Dashboard' ); ?></a></p>
+
+<?php
+
+network_edit_site_nav(
+ array(
+ 'blog_id' => $id,
+ 'selected' => 'site-settings',
+ )
+);
+
+if ( ! empty( $messages ) ) {
+ foreach ( $messages as $msg ) {
+ echo '<div id="message" class="updated notice is-dismissible"><p>' . $msg . '</p></div>';
+ }
+}
+?>
+<form method="post" action="site-settings.php?action=update-site">
+ <?php wp_nonce_field( 'edit-site' ); ?>
+ <input type="hidden" name="id" value="<?php echo esc_attr( $id ); ?>" />
+ <table class="form-table" role="presentation">
+ <?php
+ $blog_prefix = $wpdb->get_blog_prefix( $id );
+ $sql = "SELECT * FROM {$blog_prefix}options
+ WHERE option_name NOT LIKE %s
+ AND option_name NOT LIKE %s";
+ $query = $wpdb->prepare(
+ $sql,
+ $wpdb->esc_like( '_' ) . '%',
+ '%' . $wpdb->esc_like( 'user_roles' )
+ );
+ $options = $wpdb->get_results( $query );
+ foreach ( $options as $option ) {
+ if ( $option->option_name == 'default_role' ) {
+ $editblog_default_role = $option->option_value;
+ }
+ $disabled = false;
+ $class = 'all-options';
+ if ( is_serialized( $option->option_value ) ) {
+ if ( is_serialized_string( $option->option_value ) ) {
+ $option->option_value = esc_html( maybe_unserialize( $option->option_value ) );
+ } else {
+ $option->option_value = 'SERIALIZED DATA';
+ $disabled = true;
+ $class = 'all-options disabled';
+ }
+ }
+ if ( strpos( $option->option_value, "\n" ) !== false ) {
+ ?>
+ <tr class="form-field">
+ <th scope="row"><label for="<?php echo esc_attr( $option->option_name ); ?>"><?php echo ucwords( str_replace( '_', ' ', $option->option_name ) ); ?></label></th>
+ <td><textarea class="<?php echo $class; ?>" rows="5" cols="40" name="option[<?php echo esc_attr( $option->option_name ); ?>]" id="<?php echo esc_attr( $option->option_name ); ?>"<?php disabled( $disabled ); ?>><?php echo esc_textarea( $option->option_value ); ?></textarea></td>
+ </tr>
+ <?php
+ } else {
+ ?>
+ <tr class="form-field">
+ <th scope="row"><label for="<?php echo esc_attr( $option->option_name ); ?>"><?php echo esc_html( ucwords( str_replace( '_', ' ', $option->option_name ) ) ); ?></label></th>
+ <?php if ( $is_main_site && in_array( $option->option_name, array( 'siteurl', 'home' ) ) ) { ?>
+ <td><code><?php echo esc_html( $option->option_value ); ?></code></td>
+ <?php } else { ?>
+ <td><input class="<?php echo $class; ?>" name="option[<?php echo esc_attr( $option->option_name ); ?>]" type="text" id="<?php echo esc_attr( $option->option_name ); ?>" value="<?php echo esc_attr( $option->option_value ); ?>" size="40" <?php disabled( $disabled ); ?> /></td>
+ <?php } ?>
+ </tr>
+ <?php
+ }
+ } // End foreach
+ /**
+ * Fires at the end of the Edit Site form, before the submit button.
+ *
+ * @since 3.0.0
+ *
+ * @param int $id Site ID.
+ */
+ do_action( 'wpmueditblogaction', $id );
+ ?>
+ </table>
+ <?php submit_button(); ?>
+</form>
+
+</div>
+<?php
+require( ABSPATH . 'wp-admin/admin-footer.php' );
diff --git a/www/crm/wp-admin/network/site-themes.php b/www/crm/wp-admin/network/site-themes.php
new file mode 100644
index 00000000..2e533764
--- /dev/null
+++ b/www/crm/wp-admin/network/site-themes.php
@@ -0,0 +1,227 @@
+<?php
+/**
+ * Edit Site Themes Administration Screen
+ *
+ * @package WordPress
+ * @subpackage Multisite
+ * @since 3.1.0
+ */
+
+/** Load WordPress Administration Bootstrap */
+require_once( dirname( __FILE__ ) . '/admin.php' );
+
+if ( ! current_user_can( 'manage_sites' ) ) {
+ wp_die( __( 'Sorry, you are not allowed to manage themes for this site.' ) );
+}
+
+get_current_screen()->add_help_tab( get_site_screen_help_tab_args() );
+get_current_screen()->set_help_sidebar( get_site_screen_help_sidebar_content() );
+
+get_current_screen()->set_screen_reader_content(
+ array(
+ 'heading_views' => __( 'Filter site themes list' ),
+ 'heading_pagination' => __( 'Site themes list navigation' ),
+ 'heading_list' => __( 'Site themes list' ),
+ )
+);
+
+$wp_list_table = _get_list_table( 'WP_MS_Themes_List_Table' );
+
+$action = $wp_list_table->current_action();
+
+$s = isset( $_REQUEST['s'] ) ? $_REQUEST['s'] : '';
+
+// Clean up request URI from temporary args for screen options/paging uri's to work as expected.
+$temp_args = array( 'enabled', 'disabled', 'error' );
+$_SERVER['REQUEST_URI'] = remove_query_arg( $temp_args, $_SERVER['REQUEST_URI'] );
+$referer = remove_query_arg( $temp_args, wp_get_referer() );
+
+if ( ! empty( $_REQUEST['paged'] ) ) {
+ $referer = add_query_arg( 'paged', (int) $_REQUEST['paged'], $referer );
+}
+
+$id = isset( $_REQUEST['id'] ) ? intval( $_REQUEST['id'] ) : 0;
+
+if ( ! $id ) {
+ wp_die( __( 'Invalid site ID.' ) );
+}
+
+$wp_list_table->prepare_items();
+
+$details = get_site( $id );
+if ( ! $details ) {
+ wp_die( __( 'The requested site does not exist.' ) );
+}
+
+if ( ! can_edit_network( $details->site_id ) ) {
+ wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
+}
+
+$is_main_site = is_main_site( $id );
+
+if ( $action ) {
+ switch_to_blog( $id );
+ $allowed_themes = get_option( 'allowedthemes' );
+
+ switch ( $action ) {
+ case 'enable':
+ check_admin_referer( 'enable-theme_' . $_GET['theme'] );
+ $theme = $_GET['theme'];
+ $action = 'enabled';
+ $n = 1;
+ if ( ! $allowed_themes ) {
+ $allowed_themes = array( $theme => true );
+ } else {
+ $allowed_themes[ $theme ] = true;
+ }
+ break;
+ case 'disable':
+ check_admin_referer( 'disable-theme_' . $_GET['theme'] );
+ $theme = $_GET['theme'];
+ $action = 'disabled';
+ $n = 1;
+ if ( ! $allowed_themes ) {
+ $allowed_themes = array();
+ } else {
+ unset( $allowed_themes[ $theme ] );
+ }
+ break;
+ case 'enable-selected':
+ check_admin_referer( 'bulk-themes' );
+ if ( isset( $_POST['checked'] ) ) {
+ $themes = (array) $_POST['checked'];
+ $action = 'enabled';
+ $n = count( $themes );
+ foreach ( (array) $themes as $theme ) {
+ $allowed_themes[ $theme ] = true;
+ }
+ } else {
+ $action = 'error';
+ $n = 'none';
+ }
+ break;
+ case 'disable-selected':
+ check_admin_referer( 'bulk-themes' );
+ if ( isset( $_POST['checked'] ) ) {
+ $themes = (array) $_POST['checked'];
+ $action = 'disabled';
+ $n = count( $themes );
+ foreach ( (array) $themes as $theme ) {
+ unset( $allowed_themes[ $theme ] );
+ }
+ } else {
+ $action = 'error';
+ $n = 'none';
+ }
+ break;
+ default:
+ if ( isset( $_POST['checked'] ) ) {
+ check_admin_referer( 'bulk-themes' );
+ $themes = (array) $_POST['checked'];
+ $n = count( $themes );
+ $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 $redirect_url The redirect URL.
+ * @param string $action The action being taken.
+ * @param array $items The items to take the action on.
+ * @param int $site_id The site ID.
+ */
+ $referer = apply_filters( "handle_network_bulk_actions-{$screen}", $referer, $action, $themes, $id );
+ } else {
+ $action = 'error';
+ $n = 'none';
+ }
+ }
+
+ update_option( 'allowedthemes', $allowed_themes );
+ restore_current_blog();
+
+ wp_safe_redirect(
+ add_query_arg(
+ array(
+ 'id' => $id,
+ $action => $n,
+ ),
+ $referer
+ )
+ );
+ exit;
+}
+
+if ( isset( $_GET['action'] ) && 'update-site' == $_GET['action'] ) {
+ wp_safe_redirect( $referer );
+ exit();
+}
+
+add_thickbox();
+add_screen_option( 'per_page' );
+
+/* translators: %s: site name */
+$title = sprintf( __( 'Edit Site: %s' ), esc_html( $details->blogname ) );
+
+$parent_file = 'sites.php';
+$submenu_file = 'sites.php';
+
+require( ABSPATH . 'wp-admin/admin-header.php' ); ?>
+
+<div class="wrap">
+<h1 id="edit-site"><?php echo $title; ?></h1>
+<p class="edit-site-actions"><a href="<?php echo esc_url( get_home_url( $id, '/' ) ); ?>"><?php _e( 'Visit' ); ?></a> | <a href="<?php echo esc_url( get_admin_url( $id ) ); ?>"><?php _e( 'Dashboard' ); ?></a></p>
+<?php
+
+network_edit_site_nav(
+ array(
+ 'blog_id' => $id,
+ 'selected' => 'site-themes',
+ )
+);
+
+if ( isset( $_GET['enabled'] ) ) {
+ $enabled = absint( $_GET['enabled'] );
+ if ( 1 == $enabled ) {
+ $message = __( 'Theme enabled.' );
+ } else {
+ $message = _n( '%s theme enabled.', '%s themes enabled.', $enabled );
+ }
+ echo '<div id="message" class="updated notice is-dismissible"><p>' . sprintf( $message, number_format_i18n( $enabled ) ) . '</p></div>';
+} elseif ( isset( $_GET['disabled'] ) ) {
+ $disabled = absint( $_GET['disabled'] );
+ if ( 1 == $disabled ) {
+ $message = __( 'Theme disabled.' );
+ } else {
+ $message = _n( '%s theme disabled.', '%s themes disabled.', $disabled );
+ }
+ echo '<div id="message" class="updated notice is-dismissible"><p>' . sprintf( $message, number_format_i18n( $disabled ) ) . '</p></div>';
+} elseif ( isset( $_GET['error'] ) && 'none' == $_GET['error'] ) {
+ echo '<div id="message" class="error notice is-dismissible"><p>' . __( 'No theme selected.' ) . '</p></div>';
+}
+?>
+
+<p><?php _e( 'Network enabled themes are not shown on this screen.' ); ?></p>
+
+<form method="get">
+<?php $wp_list_table->search_box( __( 'Search Installed Themes' ), 'theme' ); ?>
+<input type="hidden" name="id" value="<?php echo esc_attr( $id ); ?>" />
+</form>
+
+<?php $wp_list_table->views(); ?>
+
+<form method="post" action="site-themes.php?action=update-site">
+ <input type="hidden" name="id" value="<?php echo esc_attr( $id ); ?>" />
+
+<?php $wp_list_table->display(); ?>
+
+</form>
+
+</div>
+<?php include( ABSPATH . 'wp-admin/admin-footer.php' ); ?>
diff --git a/www/crm/wp-admin/network/site-users.php b/www/crm/wp-admin/network/site-users.php
new file mode 100644
index 00000000..06dd68c2
--- /dev/null
+++ b/www/crm/wp-admin/network/site-users.php
@@ -0,0 +1,366 @@
+<?php
+/**
+ * Edit Site Users Administration Screen
+ *
+ * @package WordPress
+ * @subpackage Multisite
+ * @since 3.1.0
+ */
+
+/** Load WordPress Administration Bootstrap */
+require_once( dirname( __FILE__ ) . '/admin.php' );
+
+if ( ! current_user_can( 'manage_sites' ) ) {
+ wp_die( __( 'Sorry, you are not allowed to edit this site.' ), 403 );
+}
+
+$wp_list_table = _get_list_table( 'WP_Users_List_Table' );
+$wp_list_table->prepare_items();
+
+get_current_screen()->add_help_tab( get_site_screen_help_tab_args() );
+get_current_screen()->set_help_sidebar( get_site_screen_help_sidebar_content() );
+
+get_current_screen()->set_screen_reader_content(
+ array(
+ 'heading_views' => __( 'Filter site users list' ),
+ 'heading_pagination' => __( 'Site users list navigation' ),
+ 'heading_list' => __( 'Site users list' ),
+ )
+);
+
+$_SERVER['REQUEST_URI'] = remove_query_arg( 'update', $_SERVER['REQUEST_URI'] );
+$referer = remove_query_arg( 'update', wp_get_referer() );
+
+if ( ! empty( $_REQUEST['paged'] ) ) {
+ $referer = add_query_arg( 'paged', (int) $_REQUEST['paged'], $referer );
+}
+
+$id = isset( $_REQUEST['id'] ) ? intval( $_REQUEST['id'] ) : 0;
+
+if ( ! $id ) {
+ wp_die( __( 'Invalid site ID.' ) );
+}
+
+$details = get_site( $id );
+if ( ! $details ) {
+ wp_die( __( 'The requested site does not exist.' ) );
+}
+
+if ( ! can_edit_network( $details->site_id ) ) {
+ wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
+}
+
+$is_main_site = is_main_site( $id );
+
+switch_to_blog( $id );
+
+$action = $wp_list_table->current_action();
+
+if ( $action ) {
+
+ switch ( $action ) {
+ case 'newuser':
+ check_admin_referer( 'add-user', '_wpnonce_add-new-user' );
+ $user = $_POST['user'];
+ if ( ! is_array( $_POST['user'] ) || empty( $user['username'] ) || empty( $user['email'] ) ) {
+ $update = 'err_new';
+ } else {
+ $password = wp_generate_password( 12, false );
+ $user_id = wpmu_create_user( esc_html( strtolower( $user['username'] ) ), $password, esc_html( $user['email'] ) );
+
+ if ( false === $user_id ) {
+ $update = 'err_new_dup';
+ } else {
+ $result = add_user_to_blog( $id, $user_id, $_POST['new_role'] );
+
+ if ( is_wp_error( $result ) ) {
+ $update = 'err_add_fail';
+ } else {
+ $update = 'newuser';
+ /**
+ * Fires after a user has been created via the network site-users.php page.
+ *
+ * @since 4.4.0
+ *
+ * @param int $user_id ID of the newly created user.
+ */
+ do_action( 'network_site_users_created_user', $user_id );
+ }
+ }
+ }
+ break;
+
+ case 'adduser':
+ check_admin_referer( 'add-user', '_wpnonce_add-user' );
+ if ( ! empty( $_POST['newuser'] ) ) {
+ $update = 'adduser';
+ $newuser = $_POST['newuser'];
+ $user = get_user_by( 'login', $newuser );
+ if ( $user && $user->exists() ) {
+ if ( ! is_user_member_of_blog( $user->ID, $id ) ) {
+ $result = add_user_to_blog( $id, $user->ID, $_POST['new_role'] );
+
+ if ( is_wp_error( $result ) ) {
+ $update = 'err_add_fail';
+ }
+ } else {
+ $update = 'err_add_member';
+ }
+ } else {
+ $update = 'err_add_notfound';
+ }
+ } else {
+ $update = 'err_add_notfound';
+ }
+ break;
+
+ case 'remove':
+ if ( ! current_user_can( 'remove_users' ) ) {
+ wp_die( __( 'Sorry, you are not allowed to remove users.' ), 403 );
+ }
+
+ check_admin_referer( 'bulk-users' );
+
+ $update = 'remove';
+ if ( isset( $_REQUEST['users'] ) ) {
+ $userids = $_REQUEST['users'];
+
+ foreach ( $userids as $user_id ) {
+ $user_id = (int) $user_id;
+ remove_user_from_blog( $user_id, $id );
+ }
+ } elseif ( isset( $_GET['user'] ) ) {
+ remove_user_from_blog( $_GET['user'] );
+ } else {
+ $update = 'err_remove';
+ }
+ break;
+
+ case 'promote':
+ check_admin_referer( 'bulk-users' );
+ $editable_roles = get_editable_roles();
+ $role = false;
+ if ( ! empty( $_REQUEST['new_role2'] ) ) {
+ $role = $_REQUEST['new_role2'];
+ } elseif ( ! empty( $_REQUEST['new_role'] ) ) {
+ $role = $_REQUEST['new_role'];
+ }
+
+ if ( empty( $editable_roles[ $role ] ) ) {
+ wp_die( __( 'Sorry, you are not allowed to give users that role.' ), 403 );
+ }
+
+ if ( isset( $_REQUEST['users'] ) ) {
+ $userids = $_REQUEST['users'];
+ $update = 'promote';
+ foreach ( $userids as $user_id ) {
+ $user_id = (int) $user_id;
+
+ // If the user doesn't already belong to the blog, bail.
+ if ( ! is_user_member_of_blog( $user_id ) ) {
+ wp_die(
+ '<h1>' . __( 'Something went wrong.' ) . '</h1>' .
+ '<p>' . __( 'One of the selected users is not a member of this site.' ) . '</p>',
+ 403
+ );
+ }
+
+ $user = get_userdata( $user_id );
+ $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 );
+ $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' );
+
+/* translators: %s: site name */
+$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( ABSPATH . 'wp-admin/admin-header.php' ); ?>
+
+<script type="text/javascript">
+var current_site_id = <?php echo $id; ?>;
+</script>
+
+
+<div class="wrap">
+<h1 id="edit-site"><?php echo $title; ?></h1>
+<p class="edit-site-actions"><a href="<?php echo esc_url( get_home_url( $id, '/' ) ); ?>"><?php _e( 'Visit' ); ?></a> | <a href="<?php echo esc_url( get_admin_url( $id ) ); ?>"><?php _e( 'Dashboard' ); ?></a></p>
+<?php
+
+network_edit_site_nav(
+ array(
+ 'blog_id' => $id,
+ 'selected' => 'site-users',
+ )
+);
+
+if ( isset( $_GET['update'] ) ) :
+ switch ( $_GET['update'] ) {
+ case 'adduser':
+ echo '<div id="message" class="updated notice is-dismissible"><p>' . __( 'User added.' ) . '</p></div>';
+ break;
+ case 'err_add_member':
+ echo '<div id="message" class="error notice is-dismissible"><p>' . __( 'User is already a member of this site.' ) . '</p></div>';
+ break;
+ case 'err_add_fail':
+ echo '<div id="message" class="error notice is-dismissible"><p>' . __( 'User could not be added to this site.' ) . '</p></div>';
+ break;
+ case 'err_add_notfound':
+ echo '<div id="message" class="error notice is-dismissible"><p>' . __( 'Enter the username of an existing user.' ) . '</p></div>';
+ break;
+ case 'promote':
+ echo '<div id="message" class="updated notice is-dismissible"><p>' . __( 'Changed roles.' ) . '</p></div>';
+ break;
+ case 'err_promote':
+ echo '<div id="message" class="error notice is-dismissible"><p>' . __( 'Select a user to change role.' ) . '</p></div>';
+ break;
+ case 'remove':
+ echo '<div id="message" class="updated notice is-dismissible"><p>' . __( 'User removed from this site.' ) . '</p></div>';
+ break;
+ case 'err_remove':
+ echo '<div id="message" class="error notice is-dismissible"><p>' . __( 'Select a user to remove.' ) . '</p></div>';
+ break;
+ case 'newuser':
+ echo '<div id="message" class="updated notice is-dismissible"><p>' . __( 'User created.' ) . '</p></div>';
+ break;
+ case 'err_new':
+ echo '<div id="message" class="error notice is-dismissible"><p>' . __( 'Enter the username and email.' ) . '</p></div>';
+ break;
+ case 'err_new_dup':
+ echo '<div id="message" class="error notice is-dismissible"><p>' . __( 'Duplicated username or email address.' ) . '</p></div>';
+ break;
+ }
+endif;
+?>
+
+<form class="search-form" method="get">
+<?php $wp_list_table->search_box( __( 'Search Users' ), 'user' ); ?>
+<input type="hidden" name="id" value="<?php echo esc_attr( $id ); ?>" />
+</form>
+
+<?php $wp_list_table->views(); ?>
+
+<form method="post" action="site-users.php?action=update-site">
+ <input type="hidden" name="id" value="<?php echo esc_attr( $id ); ?>" />
+
+<?php $wp_list_table->display(); ?>
+
+</form>
+
+<?php
+/**
+ * Fires after the list table on the Users screen in the Multisite Network Admin.
+ *
+ * @since 3.1.0
+ */
+do_action( 'network_site_users_after_list_table' );
+
+/** This filter is documented in wp-admin/network/site-users.php */
+if ( current_user_can( 'promote_users' ) && apply_filters( 'show_network_site_users_add_existing_form', true ) ) :
+ ?>
+<h2 id="add-existing-user"><?php _e( 'Add Existing User' ); ?></h2>
+<form action="site-users.php?action=adduser" id="adduser" method="post">
+ <input type="hidden" name="id" value="<?php echo esc_attr( $id ); ?>" />
+ <table class="form-table" role="presentation">
+ <tr>
+ <th scope="row"><label for="newuser"><?php _e( 'Username' ); ?></label></th>
+ <td><input type="text" class="regular-text wp-suggest-user" name="newuser" id="newuser" /></td>
+ </tr>
+ <tr>
+ <th scope="row"><label for="new_role_adduser"><?php _e( 'Role' ); ?></label></th>
+ <td><select name="new_role" id="new_role_adduser">
+ <?php
+ switch_to_blog( $id );
+ wp_dropdown_roles( get_option( 'default_role' ) );
+ restore_current_blog();
+ ?>
+ </select></td>
+ </tr>
+ </table>
+ <?php wp_nonce_field( 'add-user', '_wpnonce_add-user' ); ?>
+ <?php submit_button( __( 'Add User' ), 'primary', 'add-user', true, array( 'id' => 'submit-add-existing-user' ) ); ?>
+</form>
+<?php endif; ?>
+
+<?php
+/**
+ * Filters whether to show the Add New User form on the Multisite Users screen.
+ *
+ * @since 3.1.0
+ *
+ * @param bool $bool Whether to show the Add New User form. Default true.
+ */
+if ( current_user_can( 'create_users' ) && apply_filters( 'show_network_site_users_add_new_form', true ) ) :
+ ?>
+<h2 id="add-new-user"><?php _e( 'Add New User' ); ?></h2>
+<form action="<?php echo network_admin_url( 'site-users.php?action=newuser' ); ?>" id="newuser" method="post">
+ <input type="hidden" name="id" value="<?php echo esc_attr( $id ); ?>" />
+ <table class="form-table" role="presentation">
+ <tr>
+ <th scope="row"><label for="user_username"><?php _e( 'Username' ); ?></label></th>
+ <td><input type="text" class="regular-text" name="user[username]" id="user_username" /></td>
+ </tr>
+ <tr>
+ <th scope="row"><label for="user_email"><?php _e( 'Email' ); ?></label></th>
+ <td><input type="text" class="regular-text" name="user[email]" id="user_email" /></td>
+ </tr>
+ <tr>
+ <th scope="row"><label for="new_role_newuser"><?php _e( 'Role' ); ?></label></th>
+ <td><select name="new_role" id="new_role_newuser">
+ <?php
+ switch_to_blog( $id );
+ wp_dropdown_roles( get_option( 'default_role' ) );
+ restore_current_blog();
+ ?>
+ </select></td>
+ </tr>
+ <tr class="form-field">
+ <td colspan="2" class="td-full"><?php _e( 'A password reset link will be sent to the user via email.' ); ?></td>
+ </tr>
+ </table>
+ <?php wp_nonce_field( 'add-user', '_wpnonce_add-new-user' ); ?>
+ <?php submit_button( __( 'Add New User' ), 'primary', 'add-user', true, array( 'id' => 'submit-add-user' ) ); ?>
+</form>
+<?php endif; ?>
+</div>
+<?php
+require( ABSPATH . 'wp-admin/admin-footer.php' );
diff --git a/www/crm/wp-admin/network/sites.php b/www/crm/wp-admin/network/sites.php
new file mode 100644
index 00000000..6c2de158
--- /dev/null
+++ b/www/crm/wp-admin/network/sites.php
@@ -0,0 +1,371 @@
+<?php
+/**
+ * Multisite sites administration panel.
+ *
+ * @package WordPress
+ * @subpackage Multisite
+ * @since 3.0.0
+ */
+
+/** Load WordPress Administration Bootstrap */
+require_once( dirname( __FILE__ ) . '/admin.php' );
+
+if ( ! current_user_can( 'manage_sites' ) ) {
+ wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
+}
+
+$wp_list_table = _get_list_table( 'WP_MS_Sites_List_Table' );
+$pagenum = $wp_list_table->get_pagenum();
+
+$title = __( 'Sites' );
+$parent_file = 'sites.php';
+
+add_screen_option( 'per_page' );
+
+get_current_screen()->add_help_tab(
+ array(
+ 'id' => 'overview',
+ 'title' => __( 'Overview' ),
+ 'content' =>
+ '<p>' . __( 'Add New takes you to the Add New Site screen. You can search for a site by Name, ID number, or IP address. Screen Options allows you to choose how many sites to display on one page.' ) . '</p>' .
+ '<p>' . __( 'This is the main table of all sites on this network. Switch between list and excerpt views by using the icons above the right side of the table.' ) . '</p>' .
+ '<p>' . __( 'Hovering over each site reveals seven options (three for the primary site):' ) . '</p>' .
+ '<ul><li>' . __( 'An Edit link to a separate Edit Site screen.' ) . '</li>' .
+ '<li>' . __( 'Dashboard leads to the Dashboard for that site.' ) . '</li>' .
+ '<li>' . __( 'Deactivate, Archive, and Spam which lead to confirmation screens. These actions can be reversed later.' ) . '</li>' .
+ '<li>' . __( 'Delete which is a permanent action after the confirmation screens.' ) . '</li>' .
+ '<li>' . __( 'Visit to go to the front-end site live.' ) . '</li></ul>' .
+ '<p>' . __( 'The site ID is used internally, and is not shown on the front end of the site or to users/viewers.' ) . '</p>' .
+ '<p>' . __( 'Clicking on bold headings can re-sort this table.' ) . '</p>',
+ )
+);
+
+get_current_screen()->set_help_sidebar(
+ '<p><strong>' . __( 'For more information:' ) . '</strong></p>' .
+ '<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>'
+);
+
+get_current_screen()->set_screen_reader_content(
+ array(
+ 'heading_pagination' => __( 'Sites list navigation' ),
+ 'heading_list' => __( 'Sites list' ),
+ )
+);
+
+$id = isset( $_REQUEST['id'] ) ? intval( $_REQUEST['id'] ) : 0;
+
+if ( isset( $_GET['action'] ) ) {
+ /** This action is documented in wp-admin/network/edit.php */
+ do_action( 'wpmuadminedit' );
+
+ // A list of valid actions and their associated messaging for confirmation output.
+ $manage_actions = array(
+ 'activateblog' => __( 'You are about to activate the site %s.' ),
+ 'deactivateblog' => __( 'You are about to deactivate the site %s.' ),
+ 'unarchiveblog' => __( 'You are about to unarchive the site %s.' ),
+ 'archiveblog' => __( 'You are about to archive the site %s.' ),
+ 'unspamblog' => __( 'You are about to unspam the site %s.' ),
+ 'spamblog' => __( 'You are about to mark the site %s as spam.' ),
+ 'deleteblog' => __( 'You are about to delete the site %s.' ),
+ 'unmatureblog' => __( 'You are about to mark the site %s as mature.' ),
+ 'matureblog' => __( 'You are about to mark the site %s as not mature.' ),
+ );
+
+ if ( 'confirm' === $_GET['action'] ) {
+ // The action2 parameter contains the action being taken on the site.
+ $site_action = $_GET['action2'];
+
+ if ( ! array_key_exists( $site_action, $manage_actions ) ) {
+ wp_die( __( 'The requested action is not valid.' ) );
+ }
+
+ // The mature/unmature UI exists only as external code. Check the "confirm" nonce for backward compatibility.
+ if ( 'matureblog' === $site_action || 'unmatureblog' === $site_action ) {
+ check_admin_referer( 'confirm' );
+ } else {
+ check_admin_referer( $site_action . '_' . $id );
+ }
+
+ if ( ! headers_sent() ) {
+ nocache_headers();
+ header( 'Content-Type: text/html; charset=utf-8' );
+ }
+
+ if ( get_network()->site_id == $id ) {
+ wp_die( __( 'Sorry, you are not allowed to change the current site.' ) );
+ }
+
+ $site_details = get_site( $id );
+ $site_address = untrailingslashit( $site_details->domain . $site_details->path );
+
+ require_once( ABSPATH . 'wp-admin/admin-header.php' );
+ ?>
+ <div class="wrap">
+ <h1><?php _e( 'Confirm your action' ); ?></h1>
+ <form action="sites.php?action=<?php echo esc_attr( $site_action ); ?>" method="post">
+ <input type="hidden" name="action" value="<?php echo esc_attr( $site_action ); ?>" />
+ <input type="hidden" name="id" value="<?php echo esc_attr( $id ); ?>" />
+ <input type="hidden" name="_wp_http_referer" value="<?php echo esc_attr( wp_get_referer() ); ?>" />
+ <?php wp_nonce_field( $site_action . '_' . $id, '_wpnonce', false ); ?>
+ <p><?php echo sprintf( $manage_actions[ $site_action ], $site_address ); ?></p>
+ <?php submit_button( __( 'Confirm' ), 'primary' ); ?>
+ </form>
+ </div>
+ <?php
+ require_once( ABSPATH . 'wp-admin/admin-footer.php' );
+ exit();
+ } elseif ( array_key_exists( $_GET['action'], $manage_actions ) ) {
+ $action = $_GET['action'];
+ check_admin_referer( $action . '_' . $id );
+ } elseif ( 'allblogs' === $_GET['action'] ) {
+ check_admin_referer( 'bulk-sites' );
+ }
+
+ $updated_action = '';
+
+ switch ( $_GET['action'] ) {
+
+ case 'deleteblog':
+ if ( ! current_user_can( 'delete_sites' ) ) {
+ wp_die( __( 'Sorry, you are not allowed to access this page.' ), '', array( 'response' => 403 ) );
+ }
+
+ $updated_action = 'not_deleted';
+ if ( $id != '0' && $id != get_network()->site_id && current_user_can( 'delete_site', $id ) ) {
+ wpmu_delete_blog( $id, true );
+ $updated_action = 'delete';
+ }
+ break;
+
+ case 'delete_sites':
+ check_admin_referer( 'ms-delete-sites' );
+
+ foreach ( (array) $_POST['site_ids'] as $site_id ) {
+ $site_id = (int) $site_id;
+
+ if ( $site_id == get_network()->site_id ) {
+ continue;
+ }
+
+ if ( ! current_user_can( 'delete_site', $site_id ) ) {
+ $site = get_site( $site_id );
+ $site_address = untrailingslashit( $site->domain . $site->path );
+
+ wp_die( sprintf( __( 'Sorry, you are not allowed to delete the site %s.' ), $site_address ), 403 );
+ }
+
+ $updated_action = 'all_delete';
+ wpmu_delete_blog( $site_id, true );
+ }
+ break;
+
+ case 'allblogs':
+ if ( ( isset( $_POST['action'] ) || isset( $_POST['action2'] ) ) && isset( $_POST['allblogs'] ) ) {
+ $doaction = $_POST['action'] != -1 ? $_POST['action'] : $_POST['action2'];
+
+ foreach ( (array) $_POST['allblogs'] as $key => $val ) {
+ if ( $val != '0' && $val != get_network()->site_id ) {
+ switch ( $doaction ) {
+ case 'delete':
+ require_once( ABSPATH . 'wp-admin/admin-header.php' );
+ ?>
+ <div class="wrap">
+ <h1><?php _e( 'Confirm your action' ); ?></h1>
+ <form action="sites.php?action=delete_sites" method="post">
+ <input type="hidden" name="action" value="delete_sites" />
+ <input type="hidden" name="_wp_http_referer" value="<?php echo esc_attr( wp_get_referer() ); ?>" />
+ <?php wp_nonce_field( 'ms-delete-sites', '_wpnonce', false ); ?>
+ <p><?php _e( 'You are about to delete the following sites:' ); ?></p>
+ <ul class="ul-disc">
+ <?php
+ foreach ( $_POST['allblogs'] as $site_id ) :
+ $site = get_site( $site_id );
+ $site_address = untrailingslashit( $site->domain . $site->path );
+ ?>
+ <li>
+ <?php echo $site_address; ?>
+ <input type="hidden" name="site_ids[]" value="<?php echo (int) $site_id; ?>" />
+ </li>
+ <?php endforeach; ?>
+ </ul>
+ <?php submit_button( __( 'Confirm' ), 'primary' ); ?>
+ </form>
+ </div>
+ <?php
+ require_once( ABSPATH . 'wp-admin/admin-footer.php' );
+ exit();
+ break;
+
+ case 'spam':
+ case 'notspam':
+ $updated_action = ( 'spam' === $doaction ) ? 'all_spam' : 'all_notspam';
+ update_blog_status( $val, 'spam', ( 'spam' === $doaction ) ? '1' : '0' );
+ break;
+ }
+ } else {
+ wp_die( __( 'Sorry, you are not allowed to change the current site.' ) );
+ }
+ }
+ if ( ! in_array( $doaction, array( 'delete', 'spam', 'notspam' ), true ) ) {
+ $redirect_to = wp_get_referer();
+ $blogs = (array) $_POST['allblogs'];
+ /** This action is documented in wp-admin/network/site-themes.php */
+ $redirect_to = apply_filters( 'handle_network_bulk_actions-' . get_current_screen()->id, $redirect_to, $doaction, $blogs, $id );
+ wp_safe_redirect( $redirect_to );
+ exit();
+ }
+ } else {
+ $location = network_admin_url( 'sites.php' );
+ if ( ! empty( $_REQUEST['paged'] ) ) {
+ $location = add_query_arg( 'paged', (int) $_REQUEST['paged'], $location );
+ }
+ wp_redirect( $location );
+ exit();
+ }
+ break;
+
+ case 'archiveblog':
+ case 'unarchiveblog':
+ update_blog_status( $id, 'archived', ( 'archiveblog' === $_GET['action'] ) ? '1' : '0' );
+ break;
+
+ case 'activateblog':
+ update_blog_status( $id, 'deleted', '0' );
+
+ /**
+ * Fires after a network site is activated.
+ *
+ * @since MU (3.0.0)
+ *
+ * @param string $id The ID of the activated site.
+ */
+ do_action( 'activate_blog', $id );
+ break;
+
+ case 'deactivateblog':
+ /**
+ * Fires before a network site is deactivated.
+ *
+ * @since MU (3.0.0)
+ *
+ * @param string $id The ID of the site being deactivated.
+ */
+ do_action( 'deactivate_blog', $id );
+ update_blog_status( $id, 'deleted', '1' );
+ break;
+
+ case 'unspamblog':
+ case 'spamblog':
+ update_blog_status( $id, 'spam', ( 'spamblog' === $_GET['action'] ) ? '1' : '0' );
+ break;
+
+ case 'unmatureblog':
+ case 'matureblog':
+ update_blog_status( $id, 'mature', ( 'matureblog' === $_GET['action'] ) ? '1' : '0' );
+ break;
+ }
+
+ if ( empty( $updated_action ) && array_key_exists( $_GET['action'], $manage_actions ) ) {
+ $updated_action = $_GET['action'];
+ }
+
+ if ( ! empty( $updated_action ) ) {
+ wp_safe_redirect( add_query_arg( array( 'updated' => $updated_action ), wp_get_referer() ) );
+ exit();
+ }
+}
+
+$msg = '';
+if ( isset( $_GET['updated'] ) ) {
+ $action = $_GET['updated'];
+
+ switch ( $action ) {
+ case 'all_notspam':
+ $msg = __( 'Sites removed from spam.' );
+ break;
+ case 'all_spam':
+ $msg = __( 'Sites marked as spam.' );
+ break;
+ case 'all_delete':
+ $msg = __( 'Sites deleted.' );
+ break;
+ case 'delete':
+ $msg = __( 'Site deleted.' );
+ break;
+ case 'not_deleted':
+ $msg = __( 'Sorry, you are not allowed to delete that site.' );
+ break;
+ case 'archiveblog':
+ $msg = __( 'Site archived.' );
+ break;
+ case 'unarchiveblog':
+ $msg = __( 'Site unarchived.' );
+ break;
+ case 'activateblog':
+ $msg = __( 'Site activated.' );
+ break;
+ case 'deactivateblog':
+ $msg = __( 'Site deactivated.' );
+ break;
+ case 'unspamblog':
+ $msg = __( 'Site removed from spam.' );
+ break;
+ case 'spamblog':
+ $msg = __( 'Site marked as spam.' );
+ break;
+ default:
+ /**
+ * Filters a specific, non-default, site-updated message in the Network admin.
+ *
+ * The dynamic portion of the hook name, `$action`, refers to the non-default
+ * site update action.
+ *
+ * @since 3.1.0
+ *
+ * @param string $msg The update message. Default 'Settings saved'.
+ */
+ $msg = apply_filters( "network_sites_updated_message_{$action}", __( 'Settings saved.' ) );
+ break;
+ }
+
+ if ( ! empty( $msg ) ) {
+ $msg = '<div id="message" class="updated notice is-dismissible"><p>' . $msg . '</p></div>';
+ }
+}
+
+$wp_list_table->prepare_items();
+
+require_once( ABSPATH . 'wp-admin/admin-header.php' );
+?>
+
+<div class="wrap">
+<h1 class="wp-heading-inline"><?php _e( 'Sites' ); ?></h1>
+
+<?php if ( current_user_can( 'create_sites' ) ) : ?>
+ <a href="<?php echo network_admin_url( 'site-new.php' ); ?>" class="page-title-action"><?php echo esc_html_x( 'Add New', 'site' ); ?></a>
+<?php endif; ?>
+
+<?php
+if ( isset( $_REQUEST['s'] ) && strlen( $_REQUEST['s'] ) ) {
+ /* translators: %s: search keywords */
+ printf( '<span class="subtitle">' . __( 'Search results for &#8220;%s&#8221;' ) . '</span>', esc_html( $s ) );
+}
+?>
+
+<hr class="wp-header-end">
+
+<?php echo $msg; ?>
+
+<form method="get" id="ms-search" class="wp-clearfix">
+<?php $wp_list_table->search_box( __( 'Search Sites' ), 'site' ); ?>
+<input type="hidden" name="action" value="blogs" />
+</form>
+
+<form id="form-site-list" action="sites.php?action=allblogs" method="post">
+ <?php $wp_list_table->display(); ?>
+</form>
+</div>
+<?php
+
+require_once( ABSPATH . 'wp-admin/admin-footer.php' ); ?>
diff --git a/www/crm/wp-admin/network/theme-editor.php b/www/crm/wp-admin/network/theme-editor.php
new file mode 100644
index 00000000..c28c9675
--- /dev/null
+++ b/www/crm/wp-admin/network/theme-editor.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Theme editor network administration panel.
+ *
+ * @package WordPress
+ * @subpackage Multisite
+ * @since 3.1.0
+ */
+
+/** Load WordPress Administration Bootstrap */
+require_once( dirname( __FILE__ ) . '/admin.php' );
+
+require( ABSPATH . 'wp-admin/theme-editor.php' );
diff --git a/www/crm/wp-admin/network/theme-install.php b/www/crm/wp-admin/network/theme-install.php
new file mode 100644
index 00000000..486c7478
--- /dev/null
+++ b/www/crm/wp-admin/network/theme-install.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Install theme network administration panel.
+ *
+ * @package WordPress
+ * @subpackage Multisite
+ * @since 3.1.0
+ */
+
+if ( isset( $_GET['tab'] ) && ( 'theme-information' == $_GET['tab'] ) ) {
+ define( 'IFRAME_REQUEST', true );
+}
+
+/** Load WordPress Administration Bootstrap */
+require_once( dirname( __FILE__ ) . '/admin.php' );
+
+require( ABSPATH . 'wp-admin/theme-install.php' );
diff --git a/www/crm/wp-admin/network/themes.php b/www/crm/wp-admin/network/themes.php
new file mode 100644
index 00000000..f12a5a7b
--- /dev/null
+++ b/www/crm/wp-admin/network/themes.php
@@ -0,0 +1,343 @@
+<?php
+/**
+ * Multisite themes administration panel.
+ *
+ * @package WordPress
+ * @subpackage Multisite
+ * @since 3.1.0
+ */
+
+/** Load WordPress Administration Bootstrap */
+require_once( dirname( __FILE__ ) . '/admin.php' );
+
+if ( ! current_user_can( 'manage_network_themes' ) ) {
+ wp_die( __( 'Sorry, you are not allowed to manage network themes.' ) );
+}
+
+$wp_list_table = _get_list_table( 'WP_MS_Themes_List_Table' );
+$pagenum = $wp_list_table->get_pagenum();
+
+$action = $wp_list_table->current_action();
+
+$s = isset( $_REQUEST['s'] ) ? $_REQUEST['s'] : '';
+
+// Clean up request URI from temporary args for screen options/paging uri's to work as expected.
+$temp_args = array( 'enabled', 'disabled', 'deleted', 'error' );
+$_SERVER['REQUEST_URI'] = remove_query_arg( $temp_args, $_SERVER['REQUEST_URI'] );
+$referer = remove_query_arg( $temp_args, wp_get_referer() );
+
+if ( $action ) {
+ switch ( $action ) {
+ case 'enable':
+ check_admin_referer( 'enable-theme_' . $_GET['theme'] );
+ WP_Theme::network_enable_theme( $_GET['theme'] );
+ if ( false === strpos( $referer, '/network/themes.php' ) ) {
+ wp_redirect( network_admin_url( 'themes.php?enabled=1' ) );
+ } else {
+ wp_safe_redirect( add_query_arg( 'enabled', 1, $referer ) );
+ }
+ exit;
+ case 'disable':
+ check_admin_referer( 'disable-theme_' . $_GET['theme'] );
+ WP_Theme::network_disable_theme( $_GET['theme'] );
+ wp_safe_redirect( add_query_arg( 'disabled', '1', $referer ) );
+ exit;
+ case 'enable-selected':
+ check_admin_referer( 'bulk-themes' );
+ $themes = isset( $_POST['checked'] ) ? (array) $_POST['checked'] : array();
+ if ( empty( $themes ) ) {
+ wp_safe_redirect( add_query_arg( 'error', 'none', $referer ) );
+ exit;
+ }
+ WP_Theme::network_enable_theme( (array) $themes );
+ wp_safe_redirect( add_query_arg( 'enabled', count( $themes ), $referer ) );
+ exit;
+ case 'disable-selected':
+ check_admin_referer( 'bulk-themes' );
+ $themes = isset( $_POST['checked'] ) ? (array) $_POST['checked'] : array();
+ if ( empty( $themes ) ) {
+ wp_safe_redirect( add_query_arg( 'error', 'none', $referer ) );
+ exit;
+ }
+ WP_Theme::network_disable_theme( (array) $themes );
+ wp_safe_redirect( add_query_arg( 'disabled', count( $themes ), $referer ) );
+ exit;
+ case 'update-selected':
+ check_admin_referer( 'bulk-themes' );
+
+ if ( isset( $_GET['themes'] ) ) {
+ $themes = explode( ',', $_GET['themes'] );
+ } elseif ( isset( $_POST['checked'] ) ) {
+ $themes = (array) $_POST['checked'];
+ } else {
+ $themes = array();
+ }
+
+ $title = __( 'Update Themes' );
+ $parent_file = 'themes.php';
+
+ require_once( ABSPATH . 'wp-admin/admin-header.php' );
+
+ echo '<div class="wrap">';
+ echo '<h1>' . esc_html( $title ) . '</h1>';
+
+ $url = self_admin_url( 'update.php?action=update-selected-themes&amp;themes=' . urlencode( join( ',', $themes ) ) );
+ $url = wp_nonce_url( $url, 'bulk-update-themes' );
+
+ echo "<iframe src='$url' style='width: 100%; height:100%; min-height:850px;'></iframe>";
+ echo '</div>';
+ require_once( ABSPATH . 'wp-admin/admin-footer.php' );
+ exit;
+ case 'delete-selected':
+ if ( ! current_user_can( 'delete_themes' ) ) {
+ wp_die( __( 'Sorry, you are not allowed to delete themes for this site.' ) );
+ }
+
+ check_admin_referer( 'bulk-themes' );
+
+ $themes = isset( $_REQUEST['checked'] ) ? (array) $_REQUEST['checked'] : array();
+
+ if ( empty( $themes ) ) {
+ wp_safe_redirect( add_query_arg( 'error', 'none', $referer ) );
+ exit;
+ }
+
+ $themes = array_diff( $themes, array( get_option( 'stylesheet' ), get_option( 'template' ) ) );
+
+ if ( empty( $themes ) ) {
+ wp_safe_redirect( add_query_arg( 'error', 'main', $referer ) );
+ exit;
+ }
+
+ $theme_info = array();
+ foreach ( $themes as $key => $theme ) {
+ $theme_info[ $theme ] = wp_get_theme( $theme );
+ }
+
+ include( ABSPATH . 'wp-admin/update.php' );
+
+ $parent_file = 'themes.php';
+
+ if ( ! isset( $_REQUEST['verify-delete'] ) ) {
+ wp_enqueue_script( 'jquery' );
+ require_once( ABSPATH . 'wp-admin/admin-header.php' );
+ $themes_to_delete = count( $themes );
+ ?>
+ <div class="wrap">
+ <?php if ( 1 == $themes_to_delete ) : ?>
+ <h1><?php _e( 'Delete Theme' ); ?></h1>
+ <div class="error"><p><strong><?php _e( 'Caution:' ); ?></strong> <?php _e( 'This theme may be active on other sites in the network.' ); ?></p></div>
+ <p><?php _e( 'You are about to remove the following theme:' ); ?></p>
+ <?php else : ?>
+ <h1><?php _e( 'Delete Themes' ); ?></h1>
+ <div class="error"><p><strong><?php _e( 'Caution:' ); ?></strong> <?php _e( 'These themes may be active on other sites in the network.' ); ?></p></div>
+ <p><?php _e( 'You are about to remove the following themes:' ); ?></p>
+ <?php endif; ?>
+ <ul class="ul-disc">
+ <?php
+ foreach ( $theme_info as $theme ) {
+ echo '<li>' . sprintf(
+ /* translators: 1: theme name, 2: theme author */
+ _x( '%1$s by %2$s', 'theme' ),
+ '<strong>' . $theme->display( 'Name' ) . '</strong>',
+ '<em>' . $theme->display( 'Author' ) . '</em>'
+ ) . '</li>';
+ }
+ ?>
+ </ul>
+ <?php if ( 1 == $themes_to_delete ) : ?>
+ <p><?php _e( 'Are you sure you wish to delete this theme?' ); ?></p>
+ <?php else : ?>
+ <p><?php _e( 'Are you sure you wish to delete these themes?' ); ?></p>
+ <?php endif; ?>
+ <form method="post" action="<?php echo esc_url( $_SERVER['REQUEST_URI'] ); ?>" style="display:inline;">
+ <input type="hidden" name="verify-delete" value="1" />
+ <input type="hidden" name="action" value="delete-selected" />
+ <?php
+ foreach ( (array) $themes as $theme ) {
+ echo '<input type="hidden" name="checked[]" value="' . esc_attr( $theme ) . '" />';
+ }
+
+ wp_nonce_field( 'bulk-themes' );
+
+ if ( 1 == $themes_to_delete ) {
+ submit_button( __( 'Yes, delete this theme' ), '', 'submit', false );
+ } else {
+ submit_button( __( 'Yes, delete these themes' ), '', 'submit', false );
+ }
+ ?>
+ </form>
+ <?php
+ $referer = wp_get_referer();
+ ?>
+ <form method="post" action="<?php echo $referer ? esc_url( $referer ) : ''; ?>" style="display:inline;">
+ <?php submit_button( __( 'No, return me to the theme list' ), '', 'submit', false ); ?>
+ </form>
+ </div>
+ <?php
+ require_once( ABSPATH . 'wp-admin/admin-footer.php' );
+ exit;
+ } // Endif verify-delete
+
+ foreach ( $themes as $theme ) {
+ $delete_result = delete_theme(
+ $theme,
+ esc_url(
+ add_query_arg(
+ array(
+ 'verify-delete' => 1,
+ 'action' => 'delete-selected',
+ 'checked' => $_REQUEST['checked'],
+ '_wpnonce' => $_REQUEST['_wpnonce'],
+ ),
+ network_admin_url( 'themes.php' )
+ )
+ )
+ );
+ }
+
+ $paged = ( $_REQUEST['paged'] ) ? $_REQUEST['paged'] : 1;
+ wp_redirect(
+ add_query_arg(
+ array(
+ 'deleted' => count( $themes ),
+ 'paged' => $paged,
+ 's' => $s,
+ ),
+ network_admin_url( 'themes.php' )
+ )
+ );
+ exit;
+ default:
+ $themes = isset( $_POST['checked'] ) ? (array) $_POST['checked'] : array();
+ if ( empty( $themes ) ) {
+ wp_safe_redirect( add_query_arg( 'error', 'none', $referer ) );
+ exit;
+ }
+ check_admin_referer( 'bulk-themes' );
+
+ /** This action is documented in wp-admin/network/site-themes.php */
+ $referer = apply_filters( 'handle_network_bulk_actions-' . get_current_screen()->id, $referer, $action, $themes );
+
+ wp_safe_redirect( $referer );
+ exit;
+ }
+}
+
+$wp_list_table->prepare_items();
+
+add_thickbox();
+
+add_screen_option( 'per_page' );
+
+get_current_screen()->add_help_tab(
+ array(
+ 'id' => 'overview',
+ 'title' => __( 'Overview' ),
+ 'content' =>
+ '<p>' . __( 'This screen enables and disables the inclusion of themes available to choose in the Appearance menu for each site. It does not activate or deactivate which theme a site is currently using.' ) . '</p>' .
+ '<p>' . __( 'If the network admin disables a theme that is in use, it can still remain selected on that site. If another theme is chosen, the disabled theme will not appear in the site&#8217;s Appearance > Themes screen.' ) . '</p>' .
+ '<p>' . __( 'Themes can be enabled on a site by site basis by the network admin on the Edit Site screen (which has a Themes tab); get there via the Edit action link on the All Sites screen. Only network admins are able to install or edit themes.' ) . '</p>',
+ )
+);
+
+get_current_screen()->set_help_sidebar(
+ '<p><strong>' . __( 'For more information:' ) . '</strong></p>' .
+ '<p>' . __( '<a href="https://codex.wordpress.org/Network_Admin_Themes_Screen">Documentation on Network Themes</a>' ) . '</p>' .
+ '<p>' . __( '<a href="https://wordpress.org/support/">Support</a>' ) . '</p>'
+);
+
+get_current_screen()->set_screen_reader_content(
+ array(
+ 'heading_views' => __( 'Filter themes list' ),
+ 'heading_pagination' => __( 'Themes list navigation' ),
+ 'heading_list' => __( 'Themes list' ),
+ )
+);
+
+$title = __( 'Themes' );
+$parent_file = 'themes.php';
+
+wp_enqueue_script( 'updates' );
+wp_enqueue_script( 'theme-preview' );
+
+require_once( ABSPATH . 'wp-admin/admin-header.php' );
+
+?>
+
+<div class="wrap">
+<h1 class="wp-heading-inline"><?php echo esc_html( $title ); ?></h1>
+
+<?php if ( current_user_can( 'install_themes' ) ) : ?>
+ <a href="theme-install.php" class="page-title-action"><?php echo esc_html_x( 'Add New', 'theme' ); ?></a>
+<?php endif; ?>
+
+<?php
+if ( isset( $_REQUEST['s'] ) && strlen( $_REQUEST['s'] ) ) {
+ /* translators: %s: search keywords */
+ printf( '<span class="subtitle">' . __( 'Search results for &#8220;%s&#8221;' ) . '</span>', esc_html( $s ) );
+}
+?>
+
+<hr class="wp-header-end">
+
+<?php
+if ( isset( $_GET['enabled'] ) ) {
+ $enabled = absint( $_GET['enabled'] );
+ if ( 1 == $enabled ) {
+ $message = __( 'Theme enabled.' );
+ } else {
+ $message = _n( '%s theme enabled.', '%s themes enabled.', $enabled );
+ }
+ echo '<div id="message" class="updated notice is-dismissible"><p>' . sprintf( $message, number_format_i18n( $enabled ) ) . '</p></div>';
+} elseif ( isset( $_GET['disabled'] ) ) {
+ $disabled = absint( $_GET['disabled'] );
+ if ( 1 == $disabled ) {
+ $message = __( 'Theme disabled.' );
+ } else {
+ $message = _n( '%s theme disabled.', '%s themes disabled.', $disabled );
+ }
+ echo '<div id="message" class="updated notice is-dismissible"><p>' . sprintf( $message, number_format_i18n( $disabled ) ) . '</p></div>';
+} elseif ( isset( $_GET['deleted'] ) ) {
+ $deleted = absint( $_GET['deleted'] );
+ if ( 1 == $deleted ) {
+ $message = __( 'Theme deleted.' );
+ } else {
+ $message = _n( '%s theme deleted.', '%s themes deleted.', $deleted );
+ }
+ echo '<div id="message" class="updated notice is-dismissible"><p>' . sprintf( $message, number_format_i18n( $deleted ) ) . '</p></div>';
+} elseif ( isset( $_GET['error'] ) && 'none' == $_GET['error'] ) {
+ echo '<div id="message" class="error notice is-dismissible"><p>' . __( 'No theme selected.' ) . '</p></div>';
+} elseif ( isset( $_GET['error'] ) && 'main' == $_GET['error'] ) {
+ echo '<div class="error notice is-dismissible"><p>' . __( 'You cannot delete a theme while it is active on the main site.' ) . '</p></div>';
+}
+
+?>
+
+<form method="get">
+<?php $wp_list_table->search_box( __( 'Search Installed Themes' ), 'theme' ); ?>
+</form>
+
+<?php
+$wp_list_table->views();
+
+if ( 'broken' == $status ) {
+ echo '<p class="clear">' . __( 'The following themes are installed but incomplete.' ) . '</p>';
+}
+?>
+
+<form id="bulk-action-form" method="post">
+<input type="hidden" name="theme_status" value="<?php echo esc_attr( $status ); ?>" />
+<input type="hidden" name="paged" value="<?php echo esc_attr( $page ); ?>" />
+
+<?php $wp_list_table->display(); ?>
+</form>
+
+</div>
+
+<?php
+wp_print_request_filesystem_credentials_modal();
+wp_print_admin_notice_templates();
+wp_print_update_row_templates();
+
+include( ABSPATH . 'wp-admin/admin-footer.php' );
diff --git a/www/crm/wp-admin/network/update-core.php b/www/crm/wp-admin/network/update-core.php
new file mode 100644
index 00000000..55f2aca3
--- /dev/null
+++ b/www/crm/wp-admin/network/update-core.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Updates network administration panel.
+ *
+ * @package WordPress
+ * @subpackage Multisite
+ * @since 3.1.0
+ */
+
+/** Load WordPress Administration Bootstrap */
+require_once( dirname( __FILE__ ) . '/admin.php' );
+
+require( ABSPATH . 'wp-admin/update-core.php' );
diff --git a/www/crm/wp-admin/network/update.php b/www/crm/wp-admin/network/update.php
new file mode 100644
index 00000000..62dc7a96
--- /dev/null
+++ b/www/crm/wp-admin/network/update.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Update/Install Plugin/Theme network administration panel.
+ *
+ * @package WordPress
+ * @subpackage Multisite
+ * @since 3.1.0
+ */
+
+if ( isset( $_GET['action'] ) && in_array( $_GET['action'], array( 'update-selected', 'activate-plugin', 'update-selected-themes' ) ) ) {
+ define( 'IFRAME_REQUEST', true );
+}
+
+/** Load WordPress Administration Bootstrap */
+require_once( dirname( __FILE__ ) . '/admin.php' );
+
+require( ABSPATH . 'wp-admin/update.php' );
diff --git a/www/crm/wp-admin/network/upgrade.php b/www/crm/wp-admin/network/upgrade.php
new file mode 100644
index 00000000..e391b2ff
--- /dev/null
+++ b/www/crm/wp-admin/network/upgrade.php
@@ -0,0 +1,155 @@
+<?php
+/**
+ * Multisite upgrade administration panel.
+ *
+ * @package WordPress
+ * @subpackage Multisite
+ * @since 3.0.0
+ */
+
+/** Load WordPress Administration Bootstrap */
+require_once( dirname( __FILE__ ) . '/admin.php' );
+
+require_once( ABSPATH . WPINC . '/http.php' );
+
+$title = __( 'Upgrade Network' );
+$parent_file = 'upgrade.php';
+
+get_current_screen()->add_help_tab(
+ array(
+ 'id' => 'overview',
+ 'title' => __( 'Overview' ),
+ 'content' =>
+ '<p>' . __( 'Only use this screen once you have updated to a new version of WordPress through Updates/Available Updates (via the Network Administration navigation menu or the Toolbar). Clicking the Upgrade Network button will step through each site in the network, five at a time, and make sure any database updates are applied.' ) . '</p>' .
+ '<p>' . __( 'If a version update to core has not happened, clicking this button won&#8217;t affect anything.' ) . '</p>' .
+ '<p>' . __( 'If this process fails for any reason, users logging in to their sites will force the same update.' ) . '</p>',
+ )
+);
+
+get_current_screen()->set_help_sidebar(
+ '<p><strong>' . __( 'For more information:' ) . '</strong></p>' .
+ '<p>' . __( '<a href="https://codex.wordpress.org/Network_Admin_Updates_Screen">Documentation on Upgrade Network</a>' ) . '</p>' .
+ '<p>' . __( '<a href="https://wordpress.org/support/">Support</a>' ) . '</p>'
+);
+
+require_once( ABSPATH . 'wp-admin/admin-header.php' );
+
+if ( ! current_user_can( 'upgrade_network' ) ) {
+ wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
+}
+
+echo '<div class="wrap">';
+echo '<h1>' . __( 'Upgrade Network' ) . '</h1>';
+
+$action = isset( $_GET['action'] ) ? $_GET['action'] : 'show';
+
+switch ( $action ) {
+ case 'upgrade':
+ $n = ( isset( $_GET['n'] ) ) ? intval( $_GET['n'] ) : 0;
+
+ if ( $n < 5 ) {
+ /**
+ * @global string $wp_db_version
+ */
+ global $wp_db_version;
+ update_site_option( 'wpmu_upgrade_site', $wp_db_version );
+ }
+
+ $site_ids = get_sites(
+ array(
+ 'spam' => 0,
+ 'deleted' => 0,
+ 'archived' => 0,
+ 'network_id' => get_current_network_id(),
+ 'number' => 5,
+ 'offset' => $n,
+ 'fields' => 'ids',
+ 'order' => 'DESC',
+ 'orderby' => 'id',
+ 'update_site_meta_cache' => false,
+ )
+ );
+ if ( empty( $site_ids ) ) {
+ echo '<p>' . __( 'All done!' ) . '</p>';
+ break;
+ }
+ echo '<ul>';
+ foreach ( (array) $site_ids as $site_id ) {
+ switch_to_blog( $site_id );
+ $siteurl = site_url();
+ $upgrade_url = admin_url( 'upgrade.php?step=upgrade_db' );
+ restore_current_blog();
+
+ echo "<li>$siteurl</li>";
+
+ $response = wp_remote_get(
+ $upgrade_url,
+ array(
+ 'timeout' => 120,
+ 'httpversion' => '1.1',
+ 'sslverify' => false,
+ )
+ );
+ if ( is_wp_error( $response ) ) {
+ wp_die(
+ sprintf(
+ /* translators: 1: site url, 2: server error message */
+ __( 'Warning! Problem updating %1$s. Your server may not be able to connect to sites running on it. Error message: %2$s' ),
+ $siteurl,
+ '<em>' . $response->get_error_message() . '</em>'
+ )
+ );
+ }
+
+ /**
+ * Fires after the Multisite DB upgrade for each site is complete.
+ *
+ * @since MU (3.0.0)
+ *
+ * @param array|WP_Error $response The upgrade response array or WP_Error on failure.
+ */
+ do_action( 'after_mu_upgrade', $response );
+ /**
+ * Fires after each site has been upgraded.
+ *
+ * @since MU (3.0.0)
+ *
+ * @param int $site_id The Site ID.
+ */
+ do_action( 'wpmu_upgrade_site', $site_id );
+ }
+ echo '</ul>';
+ ?><p><?php _e( 'If your browser doesn&#8217;t start loading the next page automatically, click this link:' ); ?> <a class="button" href="upgrade.php?action=upgrade&amp;n=<?php echo ( $n + 5 ); ?>"><?php _e( 'Next Sites' ); ?></a></p>
+ <script type="text/javascript">
+ <!--
+ function nextpage() {
+ location.href = "upgrade.php?action=upgrade&n=<?php echo ( $n + 5 ); ?>";
+ }
+ setTimeout( "nextpage()", 250 );
+ //-->
+ </script>
+ <?php
+ break;
+ case 'show':
+ default:
+ if ( get_site_option( 'wpmu_upgrade_site' ) != $GLOBALS['wp_db_version'] ) :
+ ?>
+ <h2><?php _e( 'Database Update Required' ); ?></h2>
+ <p><?php _e( 'WordPress has been updated! Before we send you on your way, we need to individually upgrade the sites in your network.' ); ?></p>
+ <?php endif; ?>
+
+ <p><?php _e( 'The database update process may take a little while, so please be patient.' ); ?></p>
+ <p><a class="button button-primary" href="upgrade.php?action=upgrade"><?php _e( 'Upgrade Network' ); ?></a></p>
+ <?php
+ /**
+ * Fires before the footer on the network upgrade screen.
+ *
+ * @since MU (3.0.0)
+ */
+ do_action( 'wpmu_upgrade_page' );
+ break;
+}
+?>
+</div>
+
+<?php include( ABSPATH . 'wp-admin/admin-footer.php' ); ?>
diff --git a/www/crm/wp-admin/network/user-edit.php b/www/crm/wp-admin/network/user-edit.php
new file mode 100644
index 00000000..ef3c2720
--- /dev/null
+++ b/www/crm/wp-admin/network/user-edit.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Edit user network administration panel.
+ *
+ * @package WordPress
+ * @subpackage Multisite
+ * @since 3.1.0
+ */
+
+/** Load WordPress Administration Bootstrap */
+require_once( dirname( __FILE__ ) . '/admin.php' );
+
+require( ABSPATH . 'wp-admin/user-edit.php' );
diff --git a/www/crm/wp-admin/network/user-new.php b/www/crm/wp-admin/network/user-new.php
new file mode 100644
index 00000000..73a4021b
--- /dev/null
+++ b/www/crm/wp-admin/network/user-new.php
@@ -0,0 +1,150 @@
+<?php
+/**
+ * Add New User network administration panel.
+ *
+ * @package WordPress
+ * @subpackage Multisite
+ * @since 3.1.0
+ */
+
+/** Load WordPress Administration Bootstrap */
+require_once( dirname( __FILE__ ) . '/admin.php' );
+
+if ( ! current_user_can( 'create_users' ) ) {
+ wp_die( __( 'Sorry, you are not allowed to add users to this network.' ) );
+}
+
+get_current_screen()->add_help_tab(
+ array(
+ 'id' => 'overview',
+ 'title' => __( 'Overview' ),
+ 'content' =>
+ '<p>' . __( 'Add User will set up a new user account on the network and send that person an email with username and password.' ) . '</p>' .
+ '<p>' . __( '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.' ) . '</p>',
+ )
+);
+
+get_current_screen()->set_help_sidebar(
+ '<p><strong>' . __( 'For more information:' ) . '</strong></p>' .
+ '<p>' . __( '<a href="https://codex.wordpress.org/Network_Admin_Users_Screen">Documentation on Network Users</a>' ) . '</p>' .
+ '<p>' . __( '<a href="https://wordpress.org/support/forum/multisite/">Support Forums</a>' ) . '</p>'
+);
+
+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;
+ }
+ }
+}
+
+if ( isset( $_GET['update'] ) ) {
+ $messages = array();
+ 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 ) ) );
+ }
+ }
+
+ if ( empty( $edit_link ) ) {
+ $messages[] = __( 'User added.' );
+ } else {
+ /* translators: %s: edit page url */
+ $messages[] = sprintf( __( 'User added. <a href="%s">Edit user</a>' ), $edit_link );
+ }
+ }
+}
+
+$title = __( 'Add New User' );
+$parent_file = 'users.php';
+
+require( ABSPATH . 'wp-admin/admin-header.php' ); ?>
+
+<div class="wrap">
+<h1 id="add-new-user"><?php _e( 'Add New User' ); ?></h1>
+<?php
+if ( ! empty( $messages ) ) {
+ foreach ( $messages as $msg ) {
+ echo '<div id="message" class="updated notice is-dismissible"><p>' . $msg . '</p></div>';
+ }
+}
+
+if ( isset( $add_user_errors ) && is_wp_error( $add_user_errors ) ) {
+ ?>
+ <div class="error">
+ <?php
+ foreach ( $add_user_errors->get_error_messages() as $message ) {
+ echo "<p>$message</p>";
+ }
+ ?>
+ </div>
+<?php } ?>
+ <form action="<?php echo network_admin_url( 'user-new.php?action=add-user' ); ?>" id="adduser" method="post" novalidate="novalidate">
+ <table class="form-table" role="presentation">
+ <tr class="form-field form-required">
+ <th scope="row"><label for="username"><?php _e( 'Username' ); ?></label></th>
+ <td><input type="text" class="regular-text" name="user[username]" id="username" autocapitalize="none" autocorrect="off" maxlength="60" /></td>
+ </tr>
+ <tr class="form-field form-required">
+ <th scope="row"><label for="email"><?php _e( 'Email' ); ?></label></th>
+ <td><input type="email" class="regular-text" name="user[email]" id="email"/></td>
+ </tr>
+ <tr class="form-field">
+ <td colspan="2" class="td-full"><?php _e( 'A password reset link will be sent to the user via email.' ); ?></td>
+ </tr>
+ </table>
+ <?php
+ /**
+ * Fires at the end of the new user form in network admin.
+ *
+ * @since 4.5.0
+ */
+ do_action( 'network_user_new_form' );
+
+ wp_nonce_field( 'add-user', '_wpnonce_add-user' );
+ submit_button( __( 'Add User' ), 'primary', 'add-user' );
+ ?>
+ </form>
+</div>
+<?php
+require( ABSPATH . 'wp-admin/admin-footer.php' );
diff --git a/www/crm/wp-admin/network/users.php b/www/crm/wp-admin/network/users.php
new file mode 100644
index 00000000..7f212329
--- /dev/null
+++ b/www/crm/wp-admin/network/users.php
@@ -0,0 +1,280 @@
+<?php
+/**
+ * Multisite users administration panel.
+ *
+ * @package WordPress
+ * @subpackage Multisite
+ * @since 3.0.0
+ */
+
+/** Load WordPress Administration Bootstrap */
+require_once( dirname( __FILE__ ) . '/admin.php' );
+
+if ( ! current_user_can( 'manage_network_users' ) ) {
+ wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
+}
+
+if ( isset( $_GET['action'] ) ) {
+ /** This action is documented in wp-admin/network/edit.php */
+ do_action( 'wpmuadminedit' );
+
+ switch ( $_GET['action'] ) {
+ case 'deleteuser':
+ if ( ! current_user_can( 'manage_network_users' ) ) {
+ wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
+ }
+
+ check_admin_referer( 'deleteuser' );
+
+ $id = intval( $_GET['id'] );
+ if ( $id != '0' && $id != '1' ) {
+ $_POST['allusers'] = array( $id ); // confirm_delete_users() can only handle with arrays
+ $title = __( 'Users' );
+ $parent_file = 'users.php';
+ require_once( ABSPATH . 'wp-admin/admin-header.php' );
+ echo '<div class="wrap">';
+ confirm_delete_users( $_POST['allusers'] );
+ echo '</div>';
+ require_once( ABSPATH . 'wp-admin/admin-footer.php' );
+ } else {
+ wp_redirect( network_admin_url( 'users.php' ) );
+ }
+ exit();
+
+ case 'allusers':
+ if ( ! current_user_can( 'manage_network_users' ) ) {
+ wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
+ }
+
+ if ( ( isset( $_POST['action'] ) || isset( $_POST['action2'] ) ) && isset( $_POST['allusers'] ) ) {
+ check_admin_referer( 'bulk-users-network' );
+
+ $doaction = $_POST['action'] != -1 ? $_POST['action'] : $_POST['action2'];
+ $userfunction = '';
+
+ foreach ( (array) $_POST['allusers'] as $user_id ) {
+ if ( ! empty( $user_id ) ) {
+ switch ( $doaction ) {
+ case 'delete':
+ if ( ! current_user_can( 'delete_users' ) ) {
+ wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
+ }
+ $title = __( 'Users' );
+ $parent_file = 'users.php';
+ require_once( ABSPATH . 'wp-admin/admin-header.php' );
+ echo '<div class="wrap">';
+ confirm_delete_users( $_POST['allusers'] );
+ echo '</div>';
+ require_once( ABSPATH . 'wp-admin/admin-footer.php' );
+ exit();
+
+ case 'spam':
+ $user = get_userdata( $user_id );
+ if ( is_super_admin( $user->ID ) ) {
+ wp_die( sprintf( __( 'Warning! User cannot be modified. The user %s is a network administrator.' ), esc_html( $user->user_login ) ) );
+ }
+
+ $userfunction = 'all_spam';
+ $blogs = get_blogs_of_user( $user_id, true );
+ foreach ( (array) $blogs as $details ) {
+ if ( $details->userblog_id != get_network()->site_id ) { // main blog not a spam !
+ update_blog_status( $details->userblog_id, 'spam', '1' );
+ }
+ }
+ update_user_status( $user_id, 'spam', '1' );
+ break;
+
+ case 'notspam':
+ $userfunction = 'all_notspam';
+ $blogs = get_blogs_of_user( $user_id, true );
+ foreach ( (array) $blogs as $details ) {
+ update_blog_status( $details->userblog_id, 'spam', '0' );
+ }
+
+ update_user_status( $user_id, 'spam', '0' );
+ break;
+ }
+ }
+ }
+
+ if ( ! in_array( $doaction, array( 'delete', 'spam', 'notspam' ), true ) ) {
+ $sendback = wp_get_referer();
+
+ $user_ids = (array) $_POST['allusers'];
+ /** This action is documented in wp-admin/network/site-themes.php */
+ $sendback = apply_filters( 'handle_network_bulk_actions-' . get_current_screen()->id, $sendback, $doaction, $user_ids );
+
+ wp_safe_redirect( $sendback );
+ exit();
+ }
+
+ wp_safe_redirect(
+ add_query_arg(
+ array(
+ 'updated' => 'true',
+ 'action' => $userfunction,
+ ),
+ wp_get_referer()
+ )
+ );
+ } else {
+ $location = network_admin_url( 'users.php' );
+
+ if ( ! empty( $_REQUEST['paged'] ) ) {
+ $location = add_query_arg( 'paged', (int) $_REQUEST['paged'], $location );
+ }
+ wp_redirect( $location );
+ }
+ exit();
+
+ case 'dodelete':
+ check_admin_referer( 'ms-users-delete' );
+ if ( ! ( current_user_can( 'manage_network_users' ) && current_user_can( 'delete_users' ) ) ) {
+ wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
+ }
+
+ if ( ! empty( $_POST['blog'] ) && is_array( $_POST['blog'] ) ) {
+ foreach ( $_POST['blog'] as $id => $users ) {
+ foreach ( $users as $blogid => $user_id ) {
+ if ( ! current_user_can( 'delete_user', $id ) ) {
+ continue;
+ }
+
+ if ( ! empty( $_POST['delete'] ) && 'reassign' == $_POST['delete'][ $blogid ][ $id ] ) {
+ remove_user_from_blog( $id, $blogid, $user_id );
+ } else {
+ remove_user_from_blog( $id, $blogid );
+ }
+ }
+ }
+ }
+ $i = 0;
+ if ( is_array( $_POST['user'] ) && ! empty( $_POST['user'] ) ) {
+ foreach ( $_POST['user'] as $id ) {
+ if ( ! current_user_can( 'delete_user', $id ) ) {
+ continue;
+ }
+ wpmu_delete_user( $id );
+ $i++;
+ }
+ }
+
+ if ( $i == 1 ) {
+ $deletefunction = 'delete';
+ } else {
+ $deletefunction = 'all_delete';
+ }
+
+ wp_redirect(
+ add_query_arg(
+ array(
+ 'updated' => 'true',
+ 'action' => $deletefunction,
+ ),
+ network_admin_url( 'users.php' )
+ )
+ );
+ exit();
+ }
+}
+
+$wp_list_table = _get_list_table( 'WP_MS_Users_List_Table' );
+$pagenum = $wp_list_table->get_pagenum();
+$wp_list_table->prepare_items();
+$total_pages = $wp_list_table->get_pagination_arg( 'total_pages' );
+
+if ( $pagenum > $total_pages && $total_pages > 0 ) {
+ wp_redirect( add_query_arg( 'paged', $total_pages ) );
+ exit;
+}
+$title = __( 'Users' );
+$parent_file = 'users.php';
+
+add_screen_option( 'per_page' );
+
+get_current_screen()->add_help_tab(
+ array(
+ 'id' => 'overview',
+ 'title' => __( 'Overview' ),
+ 'content' =>
+ '<p>' . __( 'This table shows all users across the network and the sites to which they are assigned.' ) . '</p>' .
+ '<p>' . __( 'Hover over any user on the list to make the edit links appear. The Edit link on the left will take you to their Edit User profile page; the Edit link on the right by any site name goes to an Edit Site screen for that site.' ) . '</p>' .
+ '<p>' . __( 'You can also go to the user&#8217;s profile page by clicking on the individual username.' ) . '</p>' .
+ '<p>' . __( 'You can sort the table by clicking on any of the table headings and switch between list and excerpt views by using the icons above the users list.' ) . '</p>' .
+ '<p>' . __( 'The bulk action will permanently delete selected users, or mark/unmark those selected as spam. Spam users will have posts removed and will be unable to sign up again with the same email addresses.' ) . '</p>' .
+ '<p>' . __( 'You can make an existing user an additional super admin by going to the Edit User profile page and checking the box to grant that privilege.' ) . '</p>',
+ )
+);
+
+get_current_screen()->set_help_sidebar(
+ '<p><strong>' . __( 'For more information:' ) . '</strong></p>' .
+ '<p>' . __( '<a href="https://codex.wordpress.org/Network_Admin_Users_Screen">Documentation on Network Users</a>' ) . '</p>' .
+ '<p>' . __( '<a href="https://wordpress.org/support/forum/multisite/">Support Forums</a>' ) . '</p>'
+);
+
+get_current_screen()->set_screen_reader_content(
+ array(
+ 'heading_views' => __( 'Filter users list' ),
+ 'heading_pagination' => __( 'Users list navigation' ),
+ 'heading_list' => __( 'Users list' ),
+ )
+);
+
+require_once( ABSPATH . 'wp-admin/admin-header.php' );
+
+if ( isset( $_REQUEST['updated'] ) && $_REQUEST['updated'] == 'true' && ! empty( $_REQUEST['action'] ) ) {
+ ?>
+ <div id="message" class="updated notice is-dismissible"><p>
+ <?php
+ switch ( $_REQUEST['action'] ) {
+ case 'delete':
+ _e( 'User deleted.' );
+ break;
+ case 'all_spam':
+ _e( 'Users marked as spam.' );
+ break;
+ case 'all_notspam':
+ _e( 'Users removed from spam.' );
+ break;
+ case 'all_delete':
+ _e( 'Users deleted.' );
+ break;
+ case 'add':
+ _e( 'User added.' );
+ break;
+ }
+ ?>
+ </p></div>
+ <?php
+}
+?>
+<div class="wrap">
+ <h1 class="wp-heading-inline"><?php esc_html_e( 'Users' ); ?></h1>
+
+ <?php
+ if ( current_user_can( 'create_users' ) ) :
+ ?>
+ <a href="<?php echo network_admin_url( 'user-new.php' ); ?>" class="page-title-action"><?php echo esc_html_x( 'Add New', 'user' ); ?></a>
+ <?php
+ endif;
+
+ if ( strlen( $usersearch ) ) {
+ /* translators: %s: search keywords */
+ printf( '<span class="subtitle">' . __( 'Search results for &#8220;%s&#8221;' ) . '</span>', esc_html( $usersearch ) );
+ }
+ ?>
+
+ <hr class="wp-header-end">
+
+ <?php $wp_list_table->views(); ?>
+
+ <form method="get" class="search-form">
+ <?php $wp_list_table->search_box( __( 'Search Users' ), 'all-user' ); ?>
+ </form>
+
+ <form id="form-user-list" action="users.php?action=allusers" method="post">
+ <?php $wp_list_table->display(); ?>
+ </form>
+</div>
+
+<?php require_once( ABSPATH . 'wp-admin/admin-footer.php' ); ?>