diff --git a/wp-admin/admin-header.php b/wp-admin/admin-header.php index 61ba38b214..a2ce5c13e7 100644 --- a/wp-admin/admin-header.php +++ b/wp-admin/admin-header.php @@ -11,9 +11,20 @@ if ( ! defined( 'WP_ADMIN' ) ) require_once( './admin.php' ); get_admin_page_title(); + $title = esc_html( strip_tags( $title ) ); + wp_user_settings(); wp_menu_unfold(); + +// Save the ID of the last blog admin area visited if super admin. +if ( is_multisite() && !is_network_admin() && is_super_admin() ) { + $last_blog = get_user_option('last-blog-admin-visited'); + if ( $last_blog != $blog_id ) + update_user_option(get_current_user_id(), 'last-blog-admin-visited', $blog_id, true); + unset($last_blog); +} + ?> > @@ -86,7 +97,11 @@ document.body.className = c;
- +
diff --git a/wp-admin/admin.php b/wp-admin/admin.php index 998ff1ff1e..f48827a20b 100644 --- a/wp-admin/admin.php +++ b/wp-admin/admin.php @@ -14,6 +14,9 @@ if ( !defined('WP_ADMIN') ) define('WP_ADMIN', TRUE); +if ( !defined('WP_NETWORK_ADMIN') ) + define('WP_NETWORK_ADMIN', FALSE); + if ( isset($_GET['import']) && !defined('WP_LOAD_IMPORTERS') ) define('WP_LOAD_IMPORTERS', true); @@ -90,7 +93,10 @@ if ( isset($_GET['taxonomy']) ) else $taxnow = ''; -require(ABSPATH . 'wp-admin/menu.php'); +if ( WP_NETWORK_ADMIN ) + require(ABSPATH . 'wp-admin/network/menu.php'); +else + require(ABSPATH . 'wp-admin/menu.php'); if ( current_user_can( 'manage_options' ) ) @ini_set( 'memory_limit', apply_filters( 'admin_memory_limit', '256M' ) ); diff --git a/wp-admin/includes/menu.php b/wp-admin/includes/menu.php new file mode 100644 index 0000000000..8222d1ae3e --- /dev/null +++ b/wp-admin/includes/menu.php @@ -0,0 +1,211 @@ + $sub) { + foreach ($sub as $index => $data) { + if ( ! current_user_can($data[1]) ) { + unset(${$sub_loop}[$parent][$index]); + $_wp_submenu_nopriv[$parent][$data[2]] = true; + } + } + unset($index, $data); + + if ( empty(${$sub_loop}[$parent]) ) + unset(${$sub_loop}[$parent]); + } + unset($sub, $parent); +} +unset($sub_loop); + +// Loop over the top-level menu. +// Menus for which the original parent is not accessible due to lack of privs will have the next +// submenu in line be assigned as the new menu parent. +foreach ( $menu as $id => $data ) { + if ( empty($submenu[$data[2]]) ) + continue; + $subs = $submenu[$data[2]]; + $first_sub = array_shift($subs); + $old_parent = $data[2]; + $new_parent = $first_sub[2]; + // If the first submenu is not the same as the assigned parent, + // make the first submenu the new parent. + if ( $new_parent != $old_parent ) { + $_wp_real_parent_file[$old_parent] = $new_parent; + $menu[$id][2] = $new_parent; + + foreach ($submenu[$old_parent] as $index => $data) { + $submenu[$new_parent][$index] = $submenu[$old_parent][$index]; + unset($submenu[$old_parent][$index]); + } + unset($submenu[$old_parent], $index); + + if ( isset($_wp_submenu_nopriv[$old_parent]) ) + $_wp_submenu_nopriv[$new_parent] = $_wp_submenu_nopriv[$old_parent]; + } +} +unset($id, $data, $subs, $first_sub, $old_parent, $new_parent); + +if ( is_network_admin() ) + do_action('network_admin_menu', ''); +else + do_action('admin_menu', ''); + +// Remove menus that have no accessible submenus and require privs that the user does not have. +// Run re-parent loop again. +foreach ( $menu as $id => $data ) { + if ( ! current_user_can($data[1]) ) + $_wp_menu_nopriv[$data[2]] = true; + + // If submenu is empty... + if ( empty($submenu[$data[2]]) ) { + // And user doesn't have privs, remove menu. + if ( isset( $_wp_menu_nopriv[$data[2]] ) ) { + unset($menu[$id]); + } + } +} +unset($id, $data); + +// Remove any duplicated seperators +$seperator_found = false; +foreach ( $menu as $id => $data ) { + if ( 0 == strcmp('wp-menu-separator', $data[4] ) ) { + if (false == $seperator_found) { + $seperator_found = true; + } else { + unset($menu[$id]); + $seperator_found = false; + } + } else { + $seperator_found = false; + } +} +unset($id, $data); + +function add_cssclass($add, $class) { + $class = empty($class) ? $add : $class .= ' ' . $add; + return $class; +} + +function add_menu_classes($menu) { + + $first = $lastorder = false; + $i = 0; + $mc = count($menu); + foreach ( $menu as $order => $top ) { + $i++; + + if ( 0 == $order ) { // dashboard is always shown/single + $menu[0][4] = add_cssclass('menu-top-first', $top[4]); + $lastorder = 0; + continue; + } + + if ( 0 === strpos($top[2], 'separator') ) { // if separator + $first = true; + $c = $menu[$lastorder][4]; + $menu[$lastorder][4] = add_cssclass('menu-top-last', $c); + continue; + } + + if ( $first ) { + $c = $menu[$order][4]; + $menu[$order][4] = add_cssclass('menu-top-first', $c); + $first = false; + } + + if ( $mc == $i ) { // last item + $c = $menu[$order][4]; + $menu[$order][4] = add_cssclass('menu-top-last', $c); + } + + $lastorder = $order; + } + + return apply_filters( 'add_menu_classes', $menu ); +} + +uksort($menu, "strnatcasecmp"); // make it all pretty + +if ( apply_filters('custom_menu_order', false) ) { + $menu_order = array(); + foreach ( $menu as $menu_item ) { + $menu_order[] = $menu_item[2]; + } + unset($menu_item); + $default_menu_order = $menu_order; + $menu_order = apply_filters('menu_order', $menu_order); + $menu_order = array_flip($menu_order); + $default_menu_order = array_flip($default_menu_order); + + function sort_menu($a, $b) { + global $menu_order, $default_menu_order; + $a = $a[2]; + $b = $b[2]; + if ( isset($menu_order[$a]) && !isset($menu_order[$b]) ) { + return -1; + } elseif ( !isset($menu_order[$a]) && isset($menu_order[$b]) ) { + return 1; + } elseif ( isset($menu_order[$a]) && isset($menu_order[$b]) ) { + if ( $menu_order[$a] == $menu_order[$b] ) + return 0; + return ($menu_order[$a] < $menu_order[$b]) ? -1 : 1; + } else { + return ($default_menu_order[$a] <= $default_menu_order[$b]) ? -1 : 1; + } + } + + usort($menu, 'sort_menu'); + unset($menu_order, $default_menu_order); +} + +$menu = add_menu_classes($menu); + +if ( !user_can_access_admin_page() ) { + do_action('admin_page_access_denied'); + wp_die( __('You do not have sufficient permissions to access this page.') ); +} + +?> \ No newline at end of file diff --git a/wp-admin/menu.php b/wp-admin/menu.php index 91e4c03061..f064b08ddf 100644 --- a/wp-admin/menu.php +++ b/wp-admin/menu.php @@ -25,23 +25,7 @@ $awaiting_mod = wp_count_comments(); $awaiting_mod = $awaiting_mod->moderated; -if ( is_multisite() && is_super_admin() ) { - /* translators: Network menu item */ - $menu[0] = array(__('Super Admin'), 'manage_network', 'ms-admin.php', '', 'menu-top menu-top-first menu-icon-site', 'menu-site', 'div'); - $submenu[ 'ms-admin.php' ][1] = array( __('Admin'), 'manage_network', 'ms-admin.php' ); - /* translators: Sites menu item */ - $submenu[ 'ms-admin.php' ][5] = array( __('Sites'), 'manage_sites', 'ms-sites.php' ); - $submenu[ 'ms-admin.php' ][10] = array( __('Users'), 'manage_network_users', 'ms-users.php' ); - $submenu[ 'ms-admin.php' ][20] = array( __('Themes'), 'manage_network_themes', 'ms-themes.php' ); - $submenu[ 'ms-admin.php' ][25] = array( __('Options'), 'manage_network_options', 'ms-options.php' ); - $submenu[ 'ms-admin.php' ][30] = array( __('Update'), 'manage_network', 'ms-upgrade-network.php' ); - - $menu[1] = array( '', 'read', 'separator1', '', 'wp-menu-separator' ); - - $menu[2] = array( __('Dashboard'), 'read', 'index.php', '', 'menu-top menu-icon-dashboard', 'menu-dashboard', 'div' ); -} else { - $menu[2] = array( __('Dashboard'), 'read', 'index.php', '', 'menu-top menu-top-first menu-icon-dashboard', 'menu-dashboard', 'div' ); -} +$menu[2] = array( __('Dashboard'), 'read', 'index.php', '', 'menu-top menu-top-first menu-icon-dashboard', 'menu-dashboard', 'div' ); if ( is_multisite() || is_super_admin() ) { $submenu[ 'index.php' ][0] = array( __('Dashboard'), 'read', 'index.php' ); @@ -234,213 +218,20 @@ $_wp_real_parent_file['edit-pages.php'] = 'edit.php?post_type=page'; $_wp_real_parent_file['page-new.php'] = 'edit.php?post_type=page'; $_wp_real_parent_file['wpmu-admin.php'] = 'ms-admin.php'; -do_action('_admin_menu'); +// ensure we're backwards compatible +$compat = array( + 'index' => 'dashboard', + 'edit' => 'posts', + 'post' => 'posts', + 'upload' => 'media', + 'link-manager' => 'links', + 'edit-pages' => 'pages', + 'page' => 'pages', + 'edit-comments' => 'comments', + 'options-general' => 'settings', + 'themes' => 'appearance', + ); -// Create list of page plugin hook names. -foreach ($menu as $menu_page) { - if ( false !== $pos = strpos($menu_page[2], '?') ) { - // Handle post_type=post|page|foo pages. - $hook_name = substr($menu_page[2], 0, $pos); - $hook_args = substr($menu_page[2], $pos + 1); - wp_parse_str($hook_args, $hook_args); - // Set the hook name to be the post type. - if ( isset($hook_args['post_type']) ) - $hook_name = $hook_args['post_type']; - else - $hook_name = basename($hook_name, '.php'); - unset($hook_args); - } else { - $hook_name = basename($menu_page[2], '.php'); - } - $hook_name = sanitize_title($hook_name); - - // ensure we're backwards compatible - $compat = array( - 'index' => 'dashboard', - 'edit' => 'posts', - 'post' => 'posts', - 'upload' => 'media', - 'link-manager' => 'links', - 'edit-pages' => 'pages', - 'page' => 'pages', - 'edit-comments' => 'comments', - 'options-general' => 'settings', - 'themes' => 'appearance', - ); - - if ( isset($compat[$hook_name]) ) - $hook_name = $compat[$hook_name]; - elseif ( !$hook_name ) - continue; - - $admin_page_hooks[$menu_page[2]] = $hook_name; -} -unset($menu_page); - -$_wp_submenu_nopriv = array(); -$_wp_menu_nopriv = array(); -// Loop over submenus and remove pages for which the user does not have privs. -foreach ( array( 'submenu' ) as $sub_loop ) { - foreach ($$sub_loop as $parent => $sub) { - foreach ($sub as $index => $data) { - if ( ! current_user_can($data[1]) ) { - unset(${$sub_loop}[$parent][$index]); - $_wp_submenu_nopriv[$parent][$data[2]] = true; - } - } - unset($index, $data); - - if ( empty(${$sub_loop}[$parent]) ) - unset(${$sub_loop}[$parent]); - } - unset($sub, $parent); -} -unset($sub_loop); - -// Loop over the top-level menu. -// Menus for which the original parent is not accessible due to lack of privs will have the next -// submenu in line be assigned as the new menu parent. -foreach ( $menu as $id => $data ) { - if ( empty($submenu[$data[2]]) ) - continue; - $subs = $submenu[$data[2]]; - $first_sub = array_shift($subs); - $old_parent = $data[2]; - $new_parent = $first_sub[2]; - // If the first submenu is not the same as the assigned parent, - // make the first submenu the new parent. - if ( $new_parent != $old_parent ) { - $_wp_real_parent_file[$old_parent] = $new_parent; - $menu[$id][2] = $new_parent; - - foreach ($submenu[$old_parent] as $index => $data) { - $submenu[$new_parent][$index] = $submenu[$old_parent][$index]; - unset($submenu[$old_parent][$index]); - } - unset($submenu[$old_parent], $index); - - if ( isset($_wp_submenu_nopriv[$old_parent]) ) - $_wp_submenu_nopriv[$new_parent] = $_wp_submenu_nopriv[$old_parent]; - } -} -unset($id, $data, $subs, $first_sub, $old_parent, $new_parent); - -do_action('admin_menu', ''); - -// Remove menus that have no accessible submenus and require privs that the user does not have. -// Run re-parent loop again. -foreach ( $menu as $id => $data ) { - if ( ! current_user_can($data[1]) ) - $_wp_menu_nopriv[$data[2]] = true; - - // If submenu is empty... - if ( empty($submenu[$data[2]]) ) { - // And user doesn't have privs, remove menu. - if ( isset( $_wp_menu_nopriv[$data[2]] ) ) { - unset($menu[$id]); - } - } -} -unset($id, $data); - -// Remove any duplicated seperators -$seperator_found = false; -foreach ( $menu as $id => $data ) { - if ( 0 == strcmp('wp-menu-separator', $data[4] ) ) { - if (false == $seperator_found) { - $seperator_found = true; - } else { - unset($menu[$id]); - $seperator_found = false; - } - } else { - $seperator_found = false; - } -} -unset($id, $data); - -function add_cssclass($add, $class) { - $class = empty($class) ? $add : $class .= ' ' . $add; - return $class; -} - -function add_menu_classes($menu) { - - $first = $lastorder = false; - $i = 0; - $mc = count($menu); - foreach ( $menu as $order => $top ) { - $i++; - - if ( 0 == $order ) { // dashboard is always shown/single - $menu[0][4] = add_cssclass('menu-top-first', $top[4]); - $lastorder = 0; - continue; - } - - if ( 0 === strpos($top[2], 'separator') ) { // if separator - $first = true; - $c = $menu[$lastorder][4]; - $menu[$lastorder][4] = add_cssclass('menu-top-last', $c); - continue; - } - - if ( $first ) { - $c = $menu[$order][4]; - $menu[$order][4] = add_cssclass('menu-top-first', $c); - $first = false; - } - - if ( $mc == $i ) { // last item - $c = $menu[$order][4]; - $menu[$order][4] = add_cssclass('menu-top-last', $c); - } - - $lastorder = $order; - } - - return apply_filters( 'add_menu_classes', $menu ); -} - -uksort($menu, "strnatcasecmp"); // make it all pretty - -if ( apply_filters('custom_menu_order', false) ) { - $menu_order = array(); - foreach ( $menu as $menu_item ) { - $menu_order[] = $menu_item[2]; - } - unset($menu_item); - $default_menu_order = $menu_order; - $menu_order = apply_filters('menu_order', $menu_order); - $menu_order = array_flip($menu_order); - $default_menu_order = array_flip($default_menu_order); - - function sort_menu($a, $b) { - global $menu_order, $default_menu_order; - $a = $a[2]; - $b = $b[2]; - if ( isset($menu_order[$a]) && !isset($menu_order[$b]) ) { - return -1; - } elseif ( !isset($menu_order[$a]) && isset($menu_order[$b]) ) { - return 1; - } elseif ( isset($menu_order[$a]) && isset($menu_order[$b]) ) { - if ( $menu_order[$a] == $menu_order[$b] ) - return 0; - return ($menu_order[$a] < $menu_order[$b]) ? -1 : 1; - } else { - return ($default_menu_order[$a] <= $default_menu_order[$b]) ? -1 : 1; - } - } - - usort($menu, 'sort_menu'); - unset($menu_order, $default_menu_order); -} - -$menu = add_menu_classes($menu); - -if ( !user_can_access_admin_page() ) { - do_action('admin_page_access_denied'); - wp_die( __('You do not have sufficient permissions to access this page.') ); -} +require(ABSPATH . 'wp-admin/includes/menu.php'); ?> diff --git a/wp-admin/ms-admin.php b/wp-admin/ms-admin.php index 0461c5cb82..b302bbf855 100644 --- a/wp-admin/ms-admin.php +++ b/wp-admin/ms-admin.php @@ -9,68 +9,4 @@ require_once( './admin.php' ); -if ( !is_multisite() ) - wp_die( __( 'Multisite support is not enabled.' ) ); - -if ( ! current_user_can( 'manage_network' ) ) - wp_die( __( 'You do not have permission to access this page.' ) ); - -$title = __( 'Network Admin' ); -$parent_file = 'ms-admin.php'; - -add_contextual_help($current_screen, - '

' . __('Until WordPress 3.0, running multiple sites required using WordPress MU instead of regular WordPress. In version 3.0, these applications have merged. If you are a former MU user, you should be aware of the following changes:') . '

' . - '' . - '

' . __('This screen provides the network administrator with links to the screens for Sites and Users to either create a new site or user, or to search existing users and sites. Those screens are also accessible through the left-hand navigation in the Super Admin section.') . '

' . - '

' . __('For more information:') . '

' . - '

' . __('Documentation on Super Admin Menu') . '

' . - '

' . __('Support Forums') . '

' -); - -require_once( './admin-header.php' ); - -$c_users = get_user_count(); -$c_blogs = get_blog_count(); - -$user_text = sprintf( _n( '%s user', '%s users', $c_users ), number_format_i18n( $c_users ) ); -$blog_text = sprintf( _n( '%s site', '%s sites', $c_blogs ), number_format_i18n( $c_blogs ) ); - -$sentence = sprintf( __( 'You have %1$s and %2$s.' ), $blog_text, $user_text ); -?> - -
- -

- - -
- -

- - -
-

- - - -

-
- -
-

- - - - -

-
- - - -
- - +wp_redirect( network_admin_url() ); \ No newline at end of file diff --git a/wp-admin/ms-edit.php b/wp-admin/ms-edit.php index c58c25c97f..e4aecab759 100644 --- a/wp-admin/ms-edit.php +++ b/wp-admin/ms-edit.php @@ -9,629 +9,4 @@ require_once( './admin.php' ); -if ( ! is_multisite() ) - wp_die( __( 'Multisite support is not enabled.' ) ); - -if ( empty( $_GET['action'] ) ) - wp_redirect( admin_url( 'ms-admin.php' ) ); - -do_action( 'wpmuadminedit' , ''); - -if ( isset( $_GET['id' ]) ) - $id = intval( $_GET['id'] ); -elseif ( isset( $_POST['id'] ) ) - $id = intval( $_POST['id'] ); - -switch ( $_GET['action'] ) { - case 'siteoptions': - check_admin_referer( 'siteoptions' ); - if ( ! current_user_can( 'manage_network_options' ) ) - wp_die( __( 'You do not have permission to access this page.' ) ); - - if ( empty( $_POST ) ) - wp_die( sprintf( __( 'You probably need to go back to the options page.', esc_url( admin_url( 'ms-options.php' ) ) ) ) ); - - if ( isset($_POST['WPLANG']) && ( '' === $_POST['WPLANG'] || in_array( $_POST['WPLANG'], get_available_languages() ) ) ) - update_site_option( 'WPLANG', $_POST['WPLANG'] ); - - if ( is_email( $_POST['admin_email'] ) ) - update_site_option( 'admin_email', $_POST['admin_email'] ); - - $illegal_names = split( ' ', $_POST['illegal_names'] ); - foreach ( (array) $illegal_names as $name ) { - $name = trim( $name ); - if ( $name != '' ) - $names[] = trim( $name ); - } - update_site_option( 'illegal_names', $names ); - - if ( $_POST['limited_email_domains'] != '' ) { - $limited_email_domains = str_replace( ' ', "\n", $_POST['limited_email_domains'] ); - $limited_email_domains = split( "\n", stripslashes( $limited_email_domains ) ); - $limited_email = array(); - foreach ( (array) $limited_email_domains as $domain ) { - $domain = trim( $domain ); - if ( ! preg_match( '/(--|\.\.)/', $domain ) && preg_match( '|^([a-zA-Z0-9-\.])+$|', $domain ) ) - $limited_email[] = trim( $domain ); - } - update_site_option( 'limited_email_domains', $limited_email ); - } else { - update_site_option( 'limited_email_domains', '' ); - } - - if ( $_POST['banned_email_domains'] != '' ) { - $banned_email_domains = split( "\n", stripslashes( $_POST['banned_email_domains'] ) ); - $banned = array(); - foreach ( (array) $banned_email_domains as $domain ) { - $domain = trim( $domain ); - if ( ! preg_match( '/(--|\.\.)/', $domain ) && preg_match( '|^([a-zA-Z0-9-\.])+$|', $domain ) ) - $banned[] = trim( $domain ); - } - update_site_option( 'banned_email_domains', $banned ); - } else { - update_site_option( 'banned_email_domains', '' ); - } - update_site_option( 'default_user_role', $_POST['default_user_role'] ); - if ( trim( $_POST['dashboard_blog_orig'] ) == '' ) - $_POST['dashboard_blog_orig'] = $current_site->blog_id; - if ( trim( $_POST['dashboard_blog'] ) == '' ) { - $_POST['dashboard_blog'] = $current_site->blog_id; - $dashboard_blog_id = $current_site->blog_id; - } elseif ( ! preg_match( '/(--|\.)/', $_POST['dashboard_blog'] ) && preg_match( '|^([a-zA-Z0-9-\.])+$|', $_POST['dashboard_blog'] ) ) { - $dashboard_blog = $_POST['dashboard_blog']; - $blog_details = get_blog_details( $dashboard_blog ); - if ( false === $blog_details ) { - if ( is_numeric( $dashboard_blog ) ) - wp_die( __( 'A dashboard site referenced by ID must already exist' ) ); - if ( is_subdomain_install() ) { - $domain = $dashboard_blog . '.' . $current_site->domain; - $path = $current_site->path; - } else { - $domain = $current_site->domain; - $path = trailingslashit( $current_site->path . $dashboard_blog ); - } - $wpdb->hide_errors(); - $dashboard_blog_id = wpmu_create_blog( $domain, $path, __( 'My Dashboard' ), $current_user->id , array( 'public' => 0 ), $current_site->id ); - $wpdb->show_errors(); - } else { - $dashboard_blog_id = $blog_details->blog_id; - } - } - if ( is_wp_error( $dashboard_blog_id ) ) - wp_die( __( 'Problem creating dashboard site: ' ) . $dashboard_blog_id->get_error_message() ); - if ( $_POST['dashboard_blog_orig'] != $_POST['dashboard_blog'] ) { - $users = get_users_of_blog( get_site_option( 'dashboard_blog' ) ); - $move_users = array(); - foreach ( (array)$users as $user ) { - $user_meta_value = unserialize( $user->meta_value ); - if ( is_array( $user_meta_value ) && array_pop( $var_by_ref = array_keys( $user_meta_value ) ) == 'subscriber' ) - $move_users[] = $user->user_id; - } - if ( false == empty( $move_users ) ) { - foreach ( (array)$move_users as $user_id ) { - remove_user_from_blog($user_id, get_site_option( 'dashboard_blog' ) ); - add_user_to_blog( $dashboard_blog_id, $user_id, get_site_option( 'default_user_role', 'subscriber' ) ); - update_user_meta( $user_id, 'primary_blog', $dashboard_blog_id ); - } - } - } - update_site_option( 'dashboard_blog', $dashboard_blog_id ); - - $options = array( 'registrationnotification', 'registration', 'add_new_users', 'menu_items', 'mu_media_buttons', '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', 'admin_notice_feed', 'global_terms_enabled' ); - $checked_options = array( 'mu_media_buttons' => 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; - } - foreach ( $options as $option_name ) { - if ( ! isset($_POST[$option_name]) ) - continue; - $value = stripslashes_deep( $_POST[$option_name] ); - update_site_option( $option_name, $value ); - } - - // Update more options here - do_action( 'update_wpmu_options' ); - - wp_redirect( add_query_arg( 'updated', 'true', admin_url( 'ms-options.php' ) ) ); - exit(); - break; - case 'addblog': - check_admin_referer( 'add-blog', '_wpnonce_add-blog' ); - - if ( ! current_user_can( 'manage_sites' ) ) - wp_die( __( 'You do not have permission to access this page.' ) ); - - if ( is_array( $_POST['blog'] ) == false ) - wp_die( __( 'Can’t create an empty site.' ) ); - $blog = $_POST['blog']; - $domain = ''; - if ( ! preg_match( '/(--)/', $blog['domain'] ) && preg_match( '|^([a-zA-Z0-9-])+$|', $blog['domain'] ) ) - $domain = strtolower( $blog['domain'] ); - - // If not a subdomain install, make sure the domain isn't a reserved word - if ( ! is_subdomain_install() ) { - $subdirectory_reserved_names = apply_filters( 'subdirectory_reserved_names', array( 'page', 'comments', 'blog', 'files', 'feed' ) ); - if ( in_array( $domain, $subdirectory_reserved_names ) ) - wp_die( sprintf( __('The following words are reserved for use by WordPress functions and cannot be used as blog names: %s' ), implode( ', ', $subdirectory_reserved_names ) ) ); - } - - $email = sanitize_email( $blog['email'] ); - $title = $blog['title']; - - if ( empty( $domain ) ) - wp_die( __( 'Missing or invalid site address.' ) ); - if ( empty( $email ) ) - wp_die( __( 'Missing email address.' ) ); - if ( !is_email( $email ) ) - wp_die( __( 'Invalid email address.' ) ); - - if ( is_subdomain_install() ) { - $newdomain = $domain . '.' . preg_replace( '|^www\.|', '', $current_site->domain ); - $path = $base; - } else { - $newdomain = $current_site->domain; - $path = $base . $domain . '/'; - } - - $password = 'N/A'; - $user_id = email_exists($email); - if ( !$user_id ) { // Create a new user with a random password - $password = wp_generate_password(); - $user_id = wpmu_create_user( $domain, $password, $email ); - if ( false == $user_id ) - wp_die( __( 'There was an error creating the user.' ) ); - else - wp_new_user_notification( $user_id, $password ); - } - - $wpdb->hide_errors(); - $id = wpmu_create_blog( $newdomain, $path, $title, $user_id , array( 'public' => 1 ), $current_site->id ); - $wpdb->show_errors(); - if ( !is_wp_error( $id ) ) { - $dashboard_blog = get_dashboard_blog(); - if ( !is_super_admin( $user_id ) && get_user_option( 'primary_blog', $user_id ) == $dashboard_blog->blog_id ) - update_user_option( $user_id, 'primary_blog', $id, true ); - $content_mail = sprintf( __( "New site created by %1s\n\nAddress: http://%2s\nName: %3s"), $current_user->user_login , $newdomain . $path, stripslashes( $title ) ); - wp_mail( get_site_option('admin_email'), sprintf( __( '[%s] New Site Created' ), $current_site->site_name ), $content_mail, 'From: "Site Admin" <' . get_site_option( 'admin_email' ) . '>' ); - wpmu_welcome_notification( $id, $user_id, $password, $title, array( 'public' => 1 ) ); - wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => 'add-blog' ), wp_get_referer() ) ); - exit(); - } else { - wp_die( $id->get_error_message() ); - } - break; - - case 'updateblog': - check_admin_referer( 'editblog' ); - if ( ! current_user_can( 'manage_sites' ) ) - wp_die( __( 'You do not have permission to access this page.' ) ); - - if ( empty( $_POST ) ) - wp_die( sprintf( __( 'You probably need to go back to the sites page', esc_url( admin_url( 'ms-sites.php' ) ) ) ) ); - - switch_to_blog( $id ); - - // themes - $allowedthemes = array(); - if ( isset($_POST['theme']) && is_array( $_POST['theme'] ) ) { - foreach ( $_POST['theme'] as $theme => $val ) { - if ( 'on' == $val ) - $allowedthemes[$theme] = true; - } - } - update_option( 'allowedthemes', $allowedthemes ); - - // options - if ( is_array( $_POST['option'] ) ) { - $c = 1; - $count = count( $_POST['option'] ); - $skip_options = array( 'allowedthemes' ); // Don't update these options since they are handled elsewhere in the form. - foreach ( (array) $_POST['option'] as $key => $val ) { - if ( $key === 0 || is_array( $val ) || in_array($key, $skip_options) ) - continue; // Avoids "0 is a protected WP option and may not be modified" error when edit blog options - if ( $c == $count ) - update_option( $key, stripslashes( $val ) ); - else - update_option( $key, stripslashes( $val ), false ); // no need to refresh blog details yet - $c++; - } - } - - // home and siteurl - if ( isset( $_POST['update_home_url'] ) && $_POST['update_home_url'] == 'update' ) { - $blog_address = get_blogaddress_by_domain( $_POST['blog']['domain'], $_POST['blog']['path'] ); - if ( get_option( 'siteurl' ) != $blog_address ) - update_option( 'siteurl', $blog_address ); - - if ( get_option( 'home' ) != $blog_address ) - update_option( 'home', $blog_address ); - } - - // rewrite rules can't be flushed during switch to blog - delete_option( 'rewrite_rules' ); - - // update blogs table - $blog_data = stripslashes_deep( $_POST['blog'] ); - update_blog_details( $id, $blog_data ); - - // get blog prefix - $blog_prefix = $wpdb->get_blog_prefix( $id ); - - // user roles - if ( isset( $_POST['role'] ) && is_array( $_POST['role'] ) == true ) { - $newroles = $_POST['role']; - - reset( $newroles ); - foreach ( (array) $newroles as $userid => $role ) { - $user = new WP_User( $userid ); - if ( empty( $user->ID ) ) - continue; - $user->for_blog( $id ); - $user->set_role( $role ); - } - } - - // remove user - if ( isset( $_POST['blogusers'] ) && is_array( $_POST['blogusers'] ) ) { - reset( $_POST['blogusers'] ); - foreach ( (array) $_POST['blogusers'] as $key => $val ) - remove_user_from_blog( $key, $id ); - } - - // change password - if ( isset( $_POST['user_password'] ) && is_array( $_POST['user_password'] ) ) { - reset( $_POST['user_password'] ); - $newroles = $_POST['role']; - foreach ( (array) $_POST['user_password'] as $userid => $pass ) { - unset( $_POST['role'] ); - $_POST['role'] = $newroles[ $userid ]; - if ( $pass != '' ) { - $cap = $wpdb->get_var( $wpdb->prepare( "SELECT meta_value FROM {$wpdb->usermeta} WHERE user_id = %d AND meta_key = '{$blog_prefix}capabilities' AND meta_value = 'a:0:{}'", $userid ) ); - $userdata = get_userdata($userid); - $_POST['pass1'] = $_POST['pass2'] = $pass; - $_POST['email'] = $userdata->user_email; - $_POST['rich_editing'] = $userdata->rich_editing; - edit_user( $userid ); - if ( $cap == null ) - $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->usermeta} WHERE user_id = %d AND meta_key = '{$blog_prefix}capabilities' AND meta_value = 'a:0:{}'", $userid ) ); - } - } - unset( $_POST['role'] ); - $_POST['role'] = $newroles; - } - - // add user - if ( !empty( $_POST['newuser'] ) ) { - $newuser = $_POST['newuser']; - $userid = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM " . $wpdb->users . " WHERE user_login = %s", $newuser ) ); - if ( $userid ) { - $user = $wpdb->get_var( "SELECT user_id FROM " . $wpdb->usermeta . " WHERE user_id='$userid' AND meta_key='{$blog_prefix}capabilities'" ); - if ( $user == false ) - add_user_to_blog( $id, $userid, $_POST['new_role'] ); - } - } - do_action( 'wpmu_update_blog_options' ); - restore_current_blog(); - wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => 'editblog', 'id' => $id ), wp_get_referer() ) ); - break; - - case 'deleteblog': - check_admin_referer('deleteblog'); - if ( ! current_user_can( 'manage_sites' ) ) - wp_die( __( 'You do not have permission to access this page.' ) ); - - if ( $id != '0' && $id != $current_site->blog_id ) - wpmu_delete_blog( $id, true ); - - wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => 'delete' ), wp_get_referer() ) ); - exit(); - break; - - case 'allblogs': - if ( isset( $_POST['doaction']) || isset($_POST['doaction2'] ) ) { - check_admin_referer( 'bulk-ms-sites', '_wpnonce_bulk-ms-sites' ); - - if ( ! current_user_can( 'manage_sites' ) ) - wp_die( __( 'You do not have permission to access this page.' ) ); - - if ( $_GET['action'] != -1 || $_POST['action2'] != -1 ) - $doaction = $_POST['action'] != -1 ? $_POST['action'] : $_POST['action2']; - - - foreach ( (array) $_POST['allblogs'] as $key => $val ) { - if ( $val != '0' && $val != $current_site->blog_id ) { - switch ( $doaction ) { - case 'delete': - $blogfunction = 'all_delete'; - wpmu_delete_blog( $val, true ); - break; - - case 'spam': - $blogfunction = 'all_spam'; - update_blog_status( $val, 'spam', '1', 0 ); - set_time_limit( 60 ); - break; - - case 'notspam': - $blogfunction = 'all_notspam'; - update_blog_status( $val, 'spam', '0', 0 ); - set_time_limit( 60 ); - break; - } - } else { - wp_die( __( 'You are not allowed to change the current site.' ) ); - } - } - - wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => $blogfunction ), wp_get_referer() ) ); - exit(); - } else { - wp_redirect( admin_url( 'ms-sites.php' ) ); - } - break; - - case 'archiveblog': - check_admin_referer( 'archiveblog' ); - if ( ! current_user_can( 'manage_sites' ) ) - wp_die( __( 'You do not have permission to access this page.' ) ); - - update_blog_status( $id, 'archived', '1' ); - do_action( 'archive_blog', $id ); - wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => 'archive' ), wp_get_referer() ) ); - exit(); - break; - - case 'unarchiveblog': - check_admin_referer( 'unarchiveblog' ); - if ( ! current_user_can( 'manage_sites' ) ) - wp_die( __( 'You do not have permission to access this page.' ) ); - - do_action( 'unarchive_blog', $id ); - update_blog_status( $id, 'archived', '0' ); - wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => 'unarchive' ), wp_get_referer() ) ); - exit(); - break; - - case 'activateblog': - check_admin_referer( 'activateblog' ); - if ( ! current_user_can( 'manage_sites' ) ) - wp_die( __( 'You do not have permission to access this page.' ) ); - - update_blog_status( $id, 'deleted', '0' ); - do_action( 'activate_blog', $id ); - wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => 'activate' ), wp_get_referer() ) ); - exit(); - break; - - case 'deactivateblog': - check_admin_referer( 'deactivateblog' ); - if ( ! current_user_can( 'manage_sites' ) ) - wp_die( __( 'You do not have permission to access this page.' ) ); - - do_action( 'deactivate_blog', $id ); - update_blog_status( $id, 'deleted', '1' ); - wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => 'deactivate' ), wp_get_referer() ) ); - exit(); - break; - - case 'unspamblog': - check_admin_referer( 'unspamblog' ); - if ( ! current_user_can( 'manage_sites' ) ) - wp_die( __( 'You do not have permission to access this page.' ) ); - - update_blog_status( $id, 'spam', '0' ); - wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => 'unspam' ), wp_get_referer() ) ); - exit(); - break; - - case 'spamblog': - check_admin_referer( 'spamblog' ); - if ( ! current_user_can( 'manage_sites' ) ) - wp_die( __( 'You do not have permission to access this page.' ) ); - - update_blog_status( $id, 'spam', '1' ); - wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => 'spam' ), wp_get_referer() ) ); - exit(); - break; - - // Themes - case 'updatethemes': - if ( ! current_user_can( 'manage_network_themes' ) ) - wp_die( __( 'You do not have permission to access this page.' ) ); - - if ( is_array( $_POST['theme'] ) ) { - $themes = get_themes(); - reset( $themes ); - $allowed_themes = array(); - foreach ( (array) $themes as $key => $theme ) { - if ( $_POST['theme'][ esc_html( $theme['Stylesheet'] ) ] == 'enabled' ) - $allowed_themes[ esc_html( $theme['Stylesheet'] ) ] = true; - } - update_site_option( 'allowedthemes', $allowed_themes ); - } - wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => 'themes' ), wp_get_referer() ) ); - exit(); - break; - - // Common - case 'confirm': - if ( !headers_sent() ) { - nocache_headers(); - header( 'Content-Type: text/html; charset=utf-8' ); - } - if ( $current_site->blog_id == $id ) - wp_die( __( 'You are not allowed to change the current site.' ) ); - ?> - - > - - <?php _e( 'WordPress › Confirm your action' ); ?> - - - - - -

WordPress

-
- - - - -

-

-
- - - '; - confirm_delete_users( $_POST['allusers'] ); - echo ''; - require_once( 'admin-footer.php' ); - exit(); - } else { - wp_redirect( admin_url( 'ms-users.php' ) ); - } - break; - - case 'allusers': - if ( ! current_user_can( 'manage_network_users' ) ) - wp_die( __( 'You do not have permission to access this page.' ) ); - - if ( isset( $_POST['doaction']) || isset($_POST['doaction2'] ) ) { - check_admin_referer( 'bulk-ms-users', '_wpnonce_bulk-ms-users' ); - - if ( $_GET['action'] != -1 || $_POST['action2'] != -1 ) - $doaction = $_POST['action'] != -1 ? $_POST['action'] : $_POST['action2']; - - foreach ( (array) $_POST['allusers'] as $key => $val ) { - if ( !empty( $val ) ) { - switch ( $doaction ) { - case 'delete': - $title = __( 'Users' ); - $parent_file = 'ms-admin.php'; - require_once( 'admin-header.php' ); - echo '
'; - confirm_delete_users( $_POST['allusers'] ); - echo '
'; - require_once( 'admin-footer.php' ); - exit(); - break; - - case 'spam': - $user = new WP_User( $val ); - if ( in_array( $user->user_login, get_super_admins() ) ) - wp_die( sprintf( __( 'Warning! User cannot be modified. The user %s is a network administrator.' ), esc_html( $user->user_login ) ) ); - - $userfunction = 'all_spam'; - $blogs = get_blogs_of_user( $val, true ); - foreach ( (array) $blogs as $key => $details ) { - if ( $details->userblog_id != $current_site->blog_id ) // main blog not a spam ! - update_blog_status( $details->userblog_id, 'spam', '1' ); - } - update_user_status( $val, 'spam', '1', 1 ); - break; - - case 'notspam': - $userfunction = 'all_notspam'; - $blogs = get_blogs_of_user( $val, true ); - foreach ( (array) $blogs as $key => $details ) - update_blog_status( $details->userblog_id, 'spam', '0' ); - - update_user_status( $val, 'spam', '0', 1 ); - break; - } - } - } - - wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => $userfunction ), wp_get_referer() ) ); - exit(); - } else { - wp_redirect( admin_url( 'ms-users.php' ) ); - } - break; - - case 'dodelete': - check_admin_referer( 'ms-users-delete' ); - if ( ! current_user_can( 'manage_network_users' ) ) - wp_die( __( 'You do not have permission to access this page.' ) ); - - if ( ! empty( $_POST['blog'] ) && is_array( $_POST['blog'] ) ) { - foreach ( $_POST['blog'] as $id => $users ) { - foreach ( $users as $blogid => $user_id ) { - if ( ! empty( $_POST['delete'] ) && 'reassign' == $_POST['delete'][$blogid][$id] ) - remove_user_from_blog( $id, $blogid, $user_id ); - else - remove_user_from_blog( $id, $blogid ); - } - } - } - $i = 0; - if ( is_array( $_POST['user'] ) && ! empty( $_POST['user'] ) ) - foreach( $_POST['user'] as $id ) { - wpmu_delete_user( $id ); - $i++; - } - - if ( $i == 1 ) - $deletefunction = 'delete'; - else - $deletefunction = 'all_delete'; - - wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => $deletefunction ), admin_url( 'ms-users.php' ) ) ); - break; - - case 'adduser': - check_admin_referer( 'add-user', '_wpnonce_add-user' ); - if ( ! current_user_can( 'manage_network_users' ) ) - wp_die( __( 'You do not have permission to access this page.' ) ); - - if ( is_array( $_POST['user'] ) == false ) - wp_die( __( 'Cannot create an empty user.' ) ); - $user = $_POST['user']; - if ( empty($user['username']) && empty($user['email']) ) - wp_die( __( 'Missing username and email.' ) ); - elseif ( empty($user['username']) ) - wp_die( __( 'Missing username.' ) ); - elseif ( empty($user['email']) ) - wp_die( __( 'Missing email.' ) ); - - $password = wp_generate_password(); - $user_id = wpmu_create_user( esc_html( strtolower( $user['username'] ) ), $password, esc_html( $user['email'] ) ); - - if ( false == $user_id ) - wp_die( __( 'Duplicated username or email address.' ) ); - else - wp_new_user_notification( $user_id, $password ); - - if ( get_site_option( 'dashboard_blog' ) == false ) - add_user_to_blog( $current_site->blog_id, $user_id, get_site_option( 'default_user_role', 'subscriber' ) ); - else - add_user_to_blog( get_site_option( 'dashboard_blog' ), $user_id, get_site_option( 'default_user_role', 'subscriber' ) ); - - wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => 'add' ), wp_get_referer() ) ); - exit(); - break; - - default: - wp_redirect( admin_url( 'ms-admin.php' ) ); - break; -} -?> +wp_redirect( network_admin_url() ); \ No newline at end of file diff --git a/wp-admin/ms-options.php b/wp-admin/ms-options.php index f6121bfafe..784ac24f17 100644 --- a/wp-admin/ms-options.php +++ b/wp-admin/ms-options.php @@ -9,310 +9,4 @@ require_once( './admin.php' ); -if ( ! is_multisite() ) - wp_die( __( 'Multisite support is not enabled.' ) ); - -if ( ! current_user_can( 'manage_network_options' ) ) - wp_die( __( 'You do not have permission to access this page.' ) ); - -$title = __( 'Network Options' ); -$parent_file = 'ms-admin.php'; - -add_contextual_help($current_screen, - '

' . __('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.') . '

' . - '

' . __('Dashboard Site is an option to give a site to users who do not have a site on the system. Their default role is Subscriber, but that default can be changed. The Admin Notice Feed can provide a notice on all dashboards of the latest post via RSS or Atom, or provide no such notice if left blank.') . '

' . - '

' . __('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).') . '

' . - '

' . __('Checkboxes for media upload buttons set which are shown in the visual editor. If unchecked, a generic upload button is still visible; other media types can still be uploaded if on the allowed file types list.') . '

' . - '

' . __('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 Super 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.') . '

' . - '

' . __('For more information:') . '

' . - '

' . __('Network Options Documentation') . '

' . - '

' . __('Support Forums') . '

' -); - -include( './admin-header.php' ); - -if (isset($_GET['updated'])) { - ?> -

- - -
- -

-
- -

- - - - - - - - - - -
- -
- -
- -
- support@%s is recommended.' ), $current_site->domain ); ?> -
-

- - - - - - - - - - - - - -
- domain . $current_site->path, '', $details->domain . $details->path ) ) ) ); - } else { - $blogname = ''; - }?> - - -
- New users are added to this site as the user role defined below if they don’t have a site. Leave blank for the main site. Users with the Subscriber role on the old site will be moved to the new site if changed. The new site will be created if it does not exist.' ); ?> -
- -
- -

-
- - id, 'feed/' ) ) - echo __( 'A good one to use would be the feed from your main site: ' ) . esc_url( get_home_url( $current_site->id, 'feed/' ) ) ?>
-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
-
-

- ' . __( 'If registration is disabled, please set NOBLOGREDIRECT in wp-config.php to a URL you will redirect visitors to if they visit a non-existent site.' ) . '

'; - } ?> -
- -
- -
- " size="45" /> -
- -
- - -
- -
- -
- -
-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
- -
-

- - - - - - - - - - - - - - - - - - - - - -

-
-
-
-
' ); ?>
- - -

-

- - - - - - -
- -
- - -

- - - - - - - - - -

-
-
- - +wp_redirect( network_admin_url('settings.php') ); \ No newline at end of file diff --git a/wp-admin/ms-sites.php b/wp-admin/ms-sites.php index 13397d7f20..119b030955 100644 --- a/wp-admin/ms-sites.php +++ b/wp-admin/ms-sites.php @@ -9,739 +9,4 @@ require_once( './admin.php' ); -if ( ! is_multisite() ) - wp_die( __( 'Multisite support is not enabled.' ) ); - -if ( ! current_user_can( 'manage_sites' ) ) - wp_die( __( 'You do not have permission to access this page.' ) ); - -$title = __( 'Sites' ); -$parent_file = 'ms-admin.php'; - -if ( isset( $_GET['action'] ) && 'editblog' == $_GET['action'] ) { - add_contextual_help($current_screen, - '

' . __('This extensive list of options has five modules: Site Info, Site Options, allowing Site Themes for this given site, changing user roles and passwords for that site, adding a new user, and Miscellaneous Site Actions (upload size limits).') . '

' . - '

' . __('Note that some fields in Site Options are grayed out and say Serialized Data. These are stored values in the database which you cannot change from here.') . '

' . - '

' . __('For more information:') . '

' . - '

' . __('Documentation on Editing Sites') . '

' . - '

' . __('Support Forums') . '

' - ); -} else { - add_contextual_help($current_screen, - '

' . __('Add New takes you farther down on this same page. 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):') . '

' . - '' . - '

' . __('The site ID is used internally, and is not shown on the front end of the site or to users/viewers.') . '

' . - '

' . __('Clicking on bold settings can re-sort this table. The upper right icons switch between list and excerpt views.') . '

' . - '

' . __("Clicking on Add Site, after filling out the address, title, and admin's email address, adds the site instantly to the network and this table. You may want to then click on the action link to edit options for that site.") . '

' . - '

' . __('If the admin email for the new site does not exist in the database, a new user will also be created.') . '

' . - '

' . __('For more information:') . '

' . - '

' . __('Documentation on Sites') . '

' . - '

' . __('Support Forums') . '

' - ); -} - -wp_enqueue_script( 'admin-forms' ); - -require_once( './admin-header.php' ); - -$id = isset( $_GET['id'] ) ? intval( $_GET['id'] ) : 0; - -if ( isset( $_GET['updated'] ) && $_GET['updated'] == 'true' && ! empty( $_GET['action'] ) ) { - ?> -

- -

- get_blog_prefix( $id ); - $options = $wpdb->get_results( "SELECT * FROM {$blog_prefix}options WHERE option_name NOT LIKE '\_%' AND option_name NOT LIKE '%user_roles'" ); - $details = get_blog_details( $id ); - if ( $details->site_id != $wpdb->siteid ) - wp_die( __( 'You do not have permission to access this page.' ) ); - - $editblog_roles = get_blog_option( $id, "{$blog_prefix}user_roles" ); - $is_main_site = is_main_site( $id ); - ?> -
- -

-

-
- - -
-
-

-
- - - - - - - - - - - - - - - - - - - - - - - - - - __( 'Public' ) ); - if ( ! $is_main_site ) { - $radio_fields['archived'] = __( 'Archived' ); - $radio_fields['spam'] = _x( 'Spam', 'site' ); - $radio_fields['deleted'] = __( 'Deleted' ); - } - $radio_fields['mature'] = __( 'Mature' ); - foreach ( $radio_fields as $field_key => $field_label ) { - ?> - - - - - -
domain ) ?>
path ) ?> -
/> siteurl and home as well.' ); ?>
- $field_key, 1 ); ?> /> - - $field_key, 0 ); ?> /> - -
-

-
-
- -
-

-
- - option_name == 'default_role' ) - $editblog_default_role = $option->option_value; - $disabled = false; - $class = 'all-options'; - if ( is_serialized( $option->option_value ) ) { - if ( is_serialized_string( $option->option_value ) ) { - $option->option_value = esc_html( maybe_unserialize( $option->option_value ), 'single' ); - } else { - $option->option_value = 'SERIALIZED DATA'; - $disabled = true; - $class = 'all-options disabled'; - } - } - if ( strpos( $option->option_value, "\n" ) !== false ) { - ?> - - - - - - - - option_name, array( 'siteurl', 'home' ) ) ) { ?> - - - - - - -
option_name ) ) ?>
option_name ) ) ); ?>option_value ) ?> />
-

-
-
-
- -
- $theme ) { - $theme_key = esc_html( $theme['Stylesheet'] ); - if ( ! isset( $allowed_themes[$theme_key] ) ) { - $checked = isset( $blog_allowed_themes[ $theme_key ] ) ? 'checked="checked"' : ''; - $out .= ' - ' . esc_html( $key ) . ' - - '; - } - } - - if ( $out != '' ) { - ?> -
-

-
-

- - -
-

-
-

' . __( 'Site Users' ) . '

'; - echo ''; - echo ""; - reset( $blogusers ); - foreach ( (array) $blogusers as $key => $val ) { - if ( isset( $val->meta_value ) && ! $val->meta_value ) - continue; - $t = @unserialize( $val->meta_value ); - if ( is_array( $t ) ) { - reset( $t ); - $existing_role = key( $t ); - } - echo ''; - if ( $val->user_id != $current_user->data->ID ) { - ?> - - - '; - } else { - echo ""; - } - echo ''; - } - echo "
" . __( 'User' ) . "" . __( 'Role' ) . "" . __( 'Password' ) . "" . __( 'Remove' ) . "
' . $val->user_login . ' - - - - " . __ ( 'N/A' ) . "" . __ ( 'N/A' ) . "" . __( 'N/A' ) . "
"; - echo '

'; - echo "
"; - } - ?> - -
-

-
-

- - - - - - - - - -
- -
-

-
-
- -
-

-
- - -
-

-
-
-
- -
- - - blogs} WHERE site_id = '{$wpdb->siteid}' "; - - if ( isset( $_GET['searchaction'] ) ) { - if ( 'name' == $_GET['searchaction'] ) { - $query .= " AND ( {$wpdb->blogs}.domain LIKE '%{$like_s}%' OR {$wpdb->blogs}.path LIKE '%{$like_s}%' ) "; - } elseif ( 'id' == $_GET['searchaction'] ) { - $query .= " AND {$wpdb->blogs}.blog_id = '{$like_s}' "; - } elseif ( 'ip' == $_GET['searchaction'] ) { - $query = "SELECT * - FROM {$wpdb->blogs}, {$wpdb->registration_log} - WHERE site_id = '{$wpdb->siteid}' - AND {$wpdb->blogs}.blog_id = {$wpdb->registration_log}.blog_id - AND {$wpdb->registration_log}.IP LIKE ('%{$like_s}%')"; - } - } - - $order_by = isset( $_GET['sortby'] ) ? $_GET['sortby'] : 'id'; - if ( $order_by == 'registered' ) { - $query .= ' ORDER BY registered '; - } elseif ( $order_by == 'lastupdated' ) { - $query .= ' ORDER BY last_updated '; - } elseif ( $order_by == 'blogname' ) { - $query .= ' ORDER BY domain '; - } else { - $order_by = 'id'; - $query .= " ORDER BY {$wpdb->blogs}.blog_id "; - } - - $order = ( isset( $_GET['order'] ) && 'DESC' == $_GET['order'] ) ? "DESC" : "ASC"; - $query .= $order; - - $total = $wpdb->get_var( str_replace( 'SELECT *', 'SELECT COUNT(blog_id)', $query ) ); - - $query .= " LIMIT " . intval( ( $pagenum - 1 ) * $per_page ) . ", " . intval( $per_page ); - $blog_list = $wpdb->get_results( $query, ARRAY_A ); - - $num_pages = ceil($total / $per_page); - $page_links = paginate_links( array( - 'base' => add_query_arg( 'paged', '%#%' ), - 'format' => '', - 'prev_text' => __( '«' ), - 'next_text' => __( '»' ), - 'total' => $num_pages, - 'current' => $pagenum - )); - - if ( empty( $_GET['mode'] ) ) - $mode = 'list'; - else - $mode = esc_attr( $_GET['mode'] ); - ?> - -
- -

- - ' . __( 'Search results for “%s”' ) . '', esc_html( $s ) ); - ?> -

- - - -
- -
-
- - - -
- - -
- ' . __( 'Displaying %s–%s of %s' ) . '%s', - number_format_i18n( ( $pagenum - 1 ) * $per_page + 1 ), - number_format_i18n( min( $pagenum * $per_page, $total ) ), - number_format_i18n( $total ), - $page_links - ); echo $page_links_text; ?> -
- - - - -
- -
- - 'display name' - $blogname_columns = ( is_subdomain_install() ) ? __( 'Domain' ) : __( 'Path' ); - $sites_columns = array( - 'id' => __( 'ID' ), - 'blogname' => $blogname_columns, - 'lastupdated' => __( 'Last Updated'), - 'registered' => _x( 'Registered', 'site' ), - 'users' => __( 'Users' ) - ); - - if ( has_filter( 'wpmublogsaction' ) ) - $sites_columns['plugins'] = __( 'Actions' ); - - $sites_columns = apply_filters( 'wpmu_blogs_columns', $sites_columns ); - ?> - - - - - - $column_display_name) { - $column_link = " $order2, 'paged' => $pagenum, 'sortby' => $column_id ), remove_query_arg( array('action', 'updated'), $_SERVER['REQUEST_URI'] ) ) ); - $column_link .= "'>{$column_display_name}"; - $col_url .= ''; - } - echo $col_url ?> - - - - - - - - - - array( 'site-archived', __( 'Archived' ) ), 'spam' => array( 'site-spammed', _x( 'Spam', 'site' ) ), 'deleted' => array( 'site-deleted', __( 'Deleted' ) ), 'mature' => array( 'site-mature', __( 'Mature' ) ) ); - if ( $blog_list ) { - $class = ''; - foreach ( $blog_list as $blog ) { - $class = ( 'alternate' == $class ) ? '' : 'alternate'; - reset( $status_list ); - - $blog_states = array(); - foreach ( $status_list as $status => $col ) { - if ( get_blog_status( $blog['blog_id'], $status ) == 1 ) { - $class = $col[0]; - $blog_states[] = $col[1]; - } - } - $blog_state = ''; - if ( ! empty( $blog_states ) ) { - $state_count = count( $blog_states ); - $i = 0; - $blog_state .= ' - '; - foreach ( $blog_states as $state ) { - ++$i; - ( $i == $state_count ) ? $sep = '' : $sep = ', '; - $blog_state .= "$state$sep"; - } - } - echo ""; - - $blogname = ( is_subdomain_install() ) ? str_replace( '.'.$current_site->domain, '', $blog['domain'] ) : $blog['path']; - foreach ( $sites_columns as $column_name=>$column_display_name ) { - switch ( $column_name ) { - case 'id': ?> - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - ' . ( ( $column_id == 'users' || $column_id == 'plugins' ) ? $column_display_name : $column_link ) . '
- -
- - - - - - ' . sprintf( _x( '%1$s – %2$s', '%1$s: site name. %2$s: site tagline.' ), get_blog_option( $blog['blog_id'], 'blogname' ), get_blog_option( $blog['blog_id'], 'blogdescription ' ) ) . '

'; - - // Preordered. - $actions = array( - 'edit' => '', 'backend' => '', - 'activate' => '', 'deactivate' => '', - 'archive' => '', 'unarchive' => '', - 'spam' => '', 'unspam' => '', - 'delete' => '', - 'visit' => '', - ); - - $actions['edit'] = '' . __( 'Edit' ) . ''; - $actions['backend'] = "" . __( 'Backend' ) . ''; - if ( $current_site->blog_id != $blog['blog_id'] ) { - if ( get_blog_status( $blog['blog_id'], 'deleted' ) == '1' ) - $actions['activate'] = '' . __( 'Activate' ) . ''; - else - $actions['deactivate'] = '' . __( 'Deactivate' ) . ''; - - if ( get_blog_status( $blog['blog_id'], 'archived' ) == '1' ) - $actions['unarchive'] = '' . __( 'Unarchive' ) . ''; - else - $actions['archive'] = '' . _x( 'Archive', 'verb; site' ) . ''; - - if ( get_blog_status( $blog['blog_id'], 'spam' ) == '1' ) - $actions['unspam'] = '' . _x( 'Not Spam', 'site' ) . ''; - else - $actions['spam'] = '' . _x( 'Spam', 'site' ) . ''; - - $actions['delete'] = '' . __( 'Delete' ) . ''; - } - - $actions['visit'] = "" . __( 'Visit' ) . ''; - $actions = array_filter( $actions ); - if ( count( $actions ) ) : ?> -
- -
- -
- g:i:s a'; - echo ( $blog['last_updated'] == '0000-00-00 00:00:00' ) ? __( 'Never' ) : mysql2date( __( $date ), $blog['last_updated'] ); ?> - - - - 5 ) { - $blogusers = array_slice( $blogusers, 0, 5 ); - $blogusers_warning = __( 'Only showing first 5 users.' ) . ' ' . __( 'More' ) . ''; - } - foreach ( $blogusers as $key => $val ) { - echo '' . esc_html( $val->user_login ) . ' '; - if ( 'list' != $mode ) - echo '(' . $val->user_email . ')'; - echo '
'; - } - if ( $blogusers_warning != '' ) - echo '' . $blogusers_warning . '
'; - } - ?> -
- - - -
-
- $page_links_text
"; - ?> - -
- - -
-
-
- - - - -
-

-
- - - - - - - - - - - - - - - - - -
- - .domain );?> - domain . $current_site->path ?> - ' . __( 'Only the characters a-z and 0-9 recommended.' ) . '

'; - ?> -

-

-

-
-
- +wp_redirect( network_admin_url('sites.php') ); \ No newline at end of file diff --git a/wp-admin/ms-themes.php b/wp-admin/ms-themes.php index e6fd9b57b6..b7ad093bc4 100644 --- a/wp-admin/ms-themes.php +++ b/wp-admin/ms-themes.php @@ -9,91 +9,4 @@ require_once( './admin.php' ); -if ( ! current_user_can( 'manage_network_themes' ) ) - wp_die( __( 'You do not have permission to access this page.' ) ); - -$title = __( 'Network Themes' ); -$parent_file = 'ms-admin.php'; - -add_contextual_help($current_screen, - '

' . __('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.') . '

' . - '

' . __('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’s Appearance > Themes screen.') . '

' . - '

' . __('Themes can be enabled on a site by site basis by the network admin on the Edit Site screen you go to via the Edit action link on the Sites screen.') . '

' . - '

' . __('For more information:') . '

' . - '

' . __('Documentation on Network Themes') . '

' . - '

' . __('Support Forums') . '

' -); - -require_once( './admin-header.php' ); - -if ( isset( $_GET['updated'] ) ) { - ?> -

- -
-
- -

-

-

-

- - - - - - - - - - - $theme ) { - $total_theme_count++; - $theme_key = esc_html( $theme['Stylesheet'] ); - $class = ( 'alt' == $class ) ? '' : 'alt'; - $class1 = $enabled = $disabled = ''; - $enabled = $disabled = false; - - if ( isset( $allowed_themes[$theme_key] ) == true ) { - $enabled = true; - $activated_themes_count++; - $class1 = 'active'; - } else { - $disabled = true; - } - ?> - - - - - - - - -
- -     - -
- -

-

-
- -

-

- -
- -

-
- - +wp_redirect( network_admin_url('themes.php') ); \ No newline at end of file diff --git a/wp-admin/ms-upgrade-network.php b/wp-admin/ms-upgrade-network.php index 5bcee65067..5e2ef281b4 100644 --- a/wp-admin/ms-upgrade-network.php +++ b/wp-admin/ms-upgrade-network.php @@ -9,77 +9,4 @@ require_once('admin.php'); -if ( !is_multisite() ) - wp_die( __( 'Multisite support is not enabled.' ) ); - -require_once( ABSPATH . WPINC . '/http.php' ); - -$title = __( 'Update Network' ); -$parent_file = 'ms-admin.php'; - -add_contextual_help($current_screen, - '

' . __('Only use this screen once you have updated to a new version of WordPress through Dashboard > Updates. Clicking the Update Network button will step through each site in the network, five at a time, and make sure any database upgrades are applied.') . '

' . - '

' . __('If a version update to core has not happened, clicking this button won’t affect anything.') . '

' . - '

' . __('If this process fails for any reason, users logging in to their sites will force the same update.') . '

' . - '

' . __('For more information:') . '

' . - '

' . __('Update Network Documentation') . '

' . - '

' . __('Support Forums') . '

' -); - -require_once('admin-header.php'); - -if ( ! current_user_can( 'manage_network' ) ) - wp_die( __( 'You do not have permission to access this page.' ) ); - -echo '
'; -screen_icon(); -echo '

' . __( 'Update Network' ) . '

'; - -$action = isset($_GET['action']) ? $_GET['action'] : 'show'; - -switch ( $action ) { - case "upgrade": - $n = ( isset($_GET['n']) ) ? intval($_GET['n']) : 0; - - if ( $n < 5 ) { - global $wp_db_version; - update_site_option( 'wpmu_upgrade_site', $wp_db_version ); - } - - $blogs = $wpdb->get_results( "SELECT * FROM {$wpdb->blogs} WHERE site_id = '{$wpdb->siteid}' AND spam = '0' AND deleted = '0' AND archived = '0' ORDER BY registered DESC LIMIT {$n}, 5", ARRAY_A ); - if ( empty( $blogs ) ) { - echo '

' . __( 'All done!' ) . '

'; - break; - } - echo ""; - ?>

-

-

-
- - +wp_redirect( network_admin_url('upgrade.php') ); \ No newline at end of file diff --git a/wp-admin/ms-users.php b/wp-admin/ms-users.php index 594406acfb..4fe48a552c 100644 --- a/wp-admin/ms-users.php +++ b/wp-admin/ms-users.php @@ -9,370 +9,4 @@ require_once( './admin.php' ); -if ( !is_multisite() ) - wp_die( __( 'Multisite support is not enabled.' ) ); - -if ( ! current_user_can( 'manage_network_users' ) ) - wp_die( __( 'You do not have permission to access this page.' ) ); - -$title = __( 'Users' ); -$parent_file = 'ms-admin.php'; - -add_contextual_help($current_screen, - '

' . __('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 his or her 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 bold headings and switch between list and excerpt views by using the icons in the upper right.') . '

' . - '

' . __('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.') . '

' . - '

' . __('Add User will add that person to this table and send them an email.') . '

' . - '

' . __('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.') . '

' . - '

' . __('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.') . '

' . - '

' . __('For more information:') . '

' . - '

' . __('Network Users Documentation') . '

' . - '

' . __('Support Forums') . '

' -); - -wp_enqueue_script( 'admin-forms' ); - -require_once( './admin-header.php' ); - -if ( isset( $_GET['updated'] ) && $_GET['updated'] == 'true' && ! empty( $_GET['action'] ) ) { - ?> -

- -

- users}"; - - if ( !empty( $like_s ) ) { - $query .= " WHERE user_login LIKE '%$like_s%' OR user_email LIKE '%$like_s%'"; - } - - $order_by = isset( $_GET['sortby'] ) ? $_GET['sortby'] : 'id'; - if ( $order_by == 'email' ) { - $query .= ' ORDER BY user_email '; - } elseif ( $order_by == 'login' ) { - $query .= ' ORDER BY user_login '; - } elseif ( $order_by == 'name' ) { - $query .= ' ORDER BY display_name '; - } elseif ( $order_by == 'registered' ) { - $query .= ' ORDER BY user_registered '; - } else { - $order_by = 'id'; - $query .= ' ORDER BY ID '; - } - - $order = ( isset( $_GET['order'] ) && 'DESC' == $_GET['order'] ) ? 'DESC' : 'ASC'; - $query .= $order; - - $total = $wpdb->get_var( str_replace( 'SELECT *', 'SELECT COUNT(ID)', $query ) ); - - $query .= " LIMIT " . intval( ( $pagenum - 1 ) * $per_page) . ", " . intval( $per_page ); - - $user_list = $wpdb->get_results( $query, ARRAY_A ); - - $num_pages = ceil( $total / $per_page ); - $page_links = paginate_links( array( - 'base' => add_query_arg( 'paged', '%#%' ), - 'format' => '', - 'prev_text' => __( '«' ), - 'next_text' => __( '»' ), - 'total' => $num_pages, - 'current' => $pagenum - )); - - if ( empty( $_GET['mode'] ) ) - $mode = 'list'; - else - $mode = esc_attr( $_GET['mode'] ); - - ?> -
- -

- - ' . __( 'Search results for “%s”' ) . '', esc_html( $s ) ); - ?> -

- -
- -
- -
- -
-
- - - -
- - -
- ' . __( 'Displaying %s–%s of %s' ) . '%s', - number_format_i18n( ( $pagenum - 1 ) * $per_page + 1 ), - number_format_i18n( min( $pagenum * $per_page, $total ) ), - number_format_i18n( $total ), - $page_links - ); echo $page_links_text; ?> -
- - - -
-
- - 'display name' - $users_columns = array( - 'id' => __( 'ID' ), - 'login' => __( 'Username' ), - 'name' => __( 'Name' ), - 'email' => __( 'E-mail' ), - 'registered' => _x( 'Registered', 'user' ), - 'blogs' => __( 'Sites' ) - ); - $users_columns = apply_filters( 'wpmu_users_columns', $users_columns ); - ?> - - - - - $column_display_name) { - $column_link = " $order2, 'paged' => $pagenum, 'sortby' => $column_id ), remove_query_arg( array( 'action', 'updated' ), $_SERVER['REQUEST_URI'] ) ) ); - $column_link .= "'>{$column_display_name}"; - $col_url .= ''; - } - echo $col_url; ?> - - - - - - - - - - 'site-spammed', 'deleted' => 'site-deleted' ); - - foreach ( $status_list as $status => $col ) { - if ( $user[$status] ) - $class = $col; - } - - ?> - - $column_display_name ) : - switch( $column_name ) { - case 'id': ?> - - - ID == $user['ID'] ) ? 'profile.php' : 'user-edit.php?user_id=' . $user['ID']; - ?> - - - - - - g:i:s a'; - ?> - - - - - - - - - - - - - -
- - ' . ( $column_id == 'blogs' ? $column_display_name : $column_link ) . '
- -
- - - - - -
-
- - - | - -
-
- $val ) { - $path = ( $val->path == '/' ) ? '' : $val->path; - echo '' . str_replace( '.' . $current_site->domain, '', $val->domain . $path ) . ''; - echo ' '; - - // Edit - echo '' . __( 'Edit' ) . ' | '; - - // View - echo 'userblog_id, 'spam' ) == 1 ) - echo 'style="background-color: #faa" '; - echo 'href="' . esc_url( get_home_url( $val->userblog_id ) ) . '">' . __( 'View' ) . ''; - - echo '
'; - } - } - ?> -
- -
- $page_links_text
"; - ?> - -
- - -
-
-
- - - - - -
-

-
- - - - - - - - - - - - -
-

- -

-
-
- - - +wp_redirect( network_admin_url('users.php') ); \ No newline at end of file diff --git a/wp-admin/network/admin.php b/wp-admin/network/admin.php new file mode 100644 index 0000000000..20965be0ec --- /dev/null +++ b/wp-admin/network/admin.php @@ -0,0 +1,13 @@ + \ No newline at end of file diff --git a/wp-admin/network/edit.php b/wp-admin/network/edit.php new file mode 100644 index 0000000000..c58c25c97f --- /dev/null +++ b/wp-admin/network/edit.php @@ -0,0 +1,637 @@ +options page.', esc_url( admin_url( 'ms-options.php' ) ) ) ) ); + + if ( isset($_POST['WPLANG']) && ( '' === $_POST['WPLANG'] || in_array( $_POST['WPLANG'], get_available_languages() ) ) ) + update_site_option( 'WPLANG', $_POST['WPLANG'] ); + + if ( is_email( $_POST['admin_email'] ) ) + update_site_option( 'admin_email', $_POST['admin_email'] ); + + $illegal_names = split( ' ', $_POST['illegal_names'] ); + foreach ( (array) $illegal_names as $name ) { + $name = trim( $name ); + if ( $name != '' ) + $names[] = trim( $name ); + } + update_site_option( 'illegal_names', $names ); + + if ( $_POST['limited_email_domains'] != '' ) { + $limited_email_domains = str_replace( ' ', "\n", $_POST['limited_email_domains'] ); + $limited_email_domains = split( "\n", stripslashes( $limited_email_domains ) ); + $limited_email = array(); + foreach ( (array) $limited_email_domains as $domain ) { + $domain = trim( $domain ); + if ( ! preg_match( '/(--|\.\.)/', $domain ) && preg_match( '|^([a-zA-Z0-9-\.])+$|', $domain ) ) + $limited_email[] = trim( $domain ); + } + update_site_option( 'limited_email_domains', $limited_email ); + } else { + update_site_option( 'limited_email_domains', '' ); + } + + if ( $_POST['banned_email_domains'] != '' ) { + $banned_email_domains = split( "\n", stripslashes( $_POST['banned_email_domains'] ) ); + $banned = array(); + foreach ( (array) $banned_email_domains as $domain ) { + $domain = trim( $domain ); + if ( ! preg_match( '/(--|\.\.)/', $domain ) && preg_match( '|^([a-zA-Z0-9-\.])+$|', $domain ) ) + $banned[] = trim( $domain ); + } + update_site_option( 'banned_email_domains', $banned ); + } else { + update_site_option( 'banned_email_domains', '' ); + } + update_site_option( 'default_user_role', $_POST['default_user_role'] ); + if ( trim( $_POST['dashboard_blog_orig'] ) == '' ) + $_POST['dashboard_blog_orig'] = $current_site->blog_id; + if ( trim( $_POST['dashboard_blog'] ) == '' ) { + $_POST['dashboard_blog'] = $current_site->blog_id; + $dashboard_blog_id = $current_site->blog_id; + } elseif ( ! preg_match( '/(--|\.)/', $_POST['dashboard_blog'] ) && preg_match( '|^([a-zA-Z0-9-\.])+$|', $_POST['dashboard_blog'] ) ) { + $dashboard_blog = $_POST['dashboard_blog']; + $blog_details = get_blog_details( $dashboard_blog ); + if ( false === $blog_details ) { + if ( is_numeric( $dashboard_blog ) ) + wp_die( __( 'A dashboard site referenced by ID must already exist' ) ); + if ( is_subdomain_install() ) { + $domain = $dashboard_blog . '.' . $current_site->domain; + $path = $current_site->path; + } else { + $domain = $current_site->domain; + $path = trailingslashit( $current_site->path . $dashboard_blog ); + } + $wpdb->hide_errors(); + $dashboard_blog_id = wpmu_create_blog( $domain, $path, __( 'My Dashboard' ), $current_user->id , array( 'public' => 0 ), $current_site->id ); + $wpdb->show_errors(); + } else { + $dashboard_blog_id = $blog_details->blog_id; + } + } + if ( is_wp_error( $dashboard_blog_id ) ) + wp_die( __( 'Problem creating dashboard site: ' ) . $dashboard_blog_id->get_error_message() ); + if ( $_POST['dashboard_blog_orig'] != $_POST['dashboard_blog'] ) { + $users = get_users_of_blog( get_site_option( 'dashboard_blog' ) ); + $move_users = array(); + foreach ( (array)$users as $user ) { + $user_meta_value = unserialize( $user->meta_value ); + if ( is_array( $user_meta_value ) && array_pop( $var_by_ref = array_keys( $user_meta_value ) ) == 'subscriber' ) + $move_users[] = $user->user_id; + } + if ( false == empty( $move_users ) ) { + foreach ( (array)$move_users as $user_id ) { + remove_user_from_blog($user_id, get_site_option( 'dashboard_blog' ) ); + add_user_to_blog( $dashboard_blog_id, $user_id, get_site_option( 'default_user_role', 'subscriber' ) ); + update_user_meta( $user_id, 'primary_blog', $dashboard_blog_id ); + } + } + } + update_site_option( 'dashboard_blog', $dashboard_blog_id ); + + $options = array( 'registrationnotification', 'registration', 'add_new_users', 'menu_items', 'mu_media_buttons', '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', 'admin_notice_feed', 'global_terms_enabled' ); + $checked_options = array( 'mu_media_buttons' => 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; + } + foreach ( $options as $option_name ) { + if ( ! isset($_POST[$option_name]) ) + continue; + $value = stripslashes_deep( $_POST[$option_name] ); + update_site_option( $option_name, $value ); + } + + // Update more options here + do_action( 'update_wpmu_options' ); + + wp_redirect( add_query_arg( 'updated', 'true', admin_url( 'ms-options.php' ) ) ); + exit(); + break; + case 'addblog': + check_admin_referer( 'add-blog', '_wpnonce_add-blog' ); + + if ( ! current_user_can( 'manage_sites' ) ) + wp_die( __( 'You do not have permission to access this page.' ) ); + + if ( is_array( $_POST['blog'] ) == false ) + wp_die( __( 'Can’t create an empty site.' ) ); + $blog = $_POST['blog']; + $domain = ''; + if ( ! preg_match( '/(--)/', $blog['domain'] ) && preg_match( '|^([a-zA-Z0-9-])+$|', $blog['domain'] ) ) + $domain = strtolower( $blog['domain'] ); + + // If not a subdomain install, make sure the domain isn't a reserved word + if ( ! is_subdomain_install() ) { + $subdirectory_reserved_names = apply_filters( 'subdirectory_reserved_names', array( 'page', 'comments', 'blog', 'files', 'feed' ) ); + if ( in_array( $domain, $subdirectory_reserved_names ) ) + wp_die( sprintf( __('The following words are reserved for use by WordPress functions and cannot be used as blog names: %s' ), implode( '
, ', $subdirectory_reserved_names ) ) ); + } + + $email = sanitize_email( $blog['email'] ); + $title = $blog['title']; + + if ( empty( $domain ) ) + wp_die( __( 'Missing or invalid site address.' ) ); + if ( empty( $email ) ) + wp_die( __( 'Missing email address.' ) ); + if ( !is_email( $email ) ) + wp_die( __( 'Invalid email address.' ) ); + + if ( is_subdomain_install() ) { + $newdomain = $domain . '.' . preg_replace( '|^www\.|', '', $current_site->domain ); + $path = $base; + } else { + $newdomain = $current_site->domain; + $path = $base . $domain . '/'; + } + + $password = 'N/A'; + $user_id = email_exists($email); + if ( !$user_id ) { // Create a new user with a random password + $password = wp_generate_password(); + $user_id = wpmu_create_user( $domain, $password, $email ); + if ( false == $user_id ) + wp_die( __( 'There was an error creating the user.' ) ); + else + wp_new_user_notification( $user_id, $password ); + } + + $wpdb->hide_errors(); + $id = wpmu_create_blog( $newdomain, $path, $title, $user_id , array( 'public' => 1 ), $current_site->id ); + $wpdb->show_errors(); + if ( !is_wp_error( $id ) ) { + $dashboard_blog = get_dashboard_blog(); + if ( !is_super_admin( $user_id ) && get_user_option( 'primary_blog', $user_id ) == $dashboard_blog->blog_id ) + update_user_option( $user_id, 'primary_blog', $id, true ); + $content_mail = sprintf( __( "New site created by %1s\n\nAddress: http://%2s\nName: %3s"), $current_user->user_login , $newdomain . $path, stripslashes( $title ) ); + wp_mail( get_site_option('admin_email'), sprintf( __( '[%s] New Site Created' ), $current_site->site_name ), $content_mail, 'From: "Site Admin" <' . get_site_option( 'admin_email' ) . '>' ); + wpmu_welcome_notification( $id, $user_id, $password, $title, array( 'public' => 1 ) ); + wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => 'add-blog' ), wp_get_referer() ) ); + exit(); + } else { + wp_die( $id->get_error_message() ); + } + break; + + case 'updateblog': + check_admin_referer( 'editblog' ); + if ( ! current_user_can( 'manage_sites' ) ) + wp_die( __( 'You do not have permission to access this page.' ) ); + + if ( empty( $_POST ) ) + wp_die( sprintf( __( 'You probably need to go back to the sites page', esc_url( admin_url( 'ms-sites.php' ) ) ) ) ); + + switch_to_blog( $id ); + + // themes + $allowedthemes = array(); + if ( isset($_POST['theme']) && is_array( $_POST['theme'] ) ) { + foreach ( $_POST['theme'] as $theme => $val ) { + if ( 'on' == $val ) + $allowedthemes[$theme] = true; + } + } + update_option( 'allowedthemes', $allowedthemes ); + + // options + if ( is_array( $_POST['option'] ) ) { + $c = 1; + $count = count( $_POST['option'] ); + $skip_options = array( 'allowedthemes' ); // Don't update these options since they are handled elsewhere in the form. + foreach ( (array) $_POST['option'] as $key => $val ) { + if ( $key === 0 || is_array( $val ) || in_array($key, $skip_options) ) + continue; // Avoids "0 is a protected WP option and may not be modified" error when edit blog options + if ( $c == $count ) + update_option( $key, stripslashes( $val ) ); + else + update_option( $key, stripslashes( $val ), false ); // no need to refresh blog details yet + $c++; + } + } + + // home and siteurl + if ( isset( $_POST['update_home_url'] ) && $_POST['update_home_url'] == 'update' ) { + $blog_address = get_blogaddress_by_domain( $_POST['blog']['domain'], $_POST['blog']['path'] ); + if ( get_option( 'siteurl' ) != $blog_address ) + update_option( 'siteurl', $blog_address ); + + if ( get_option( 'home' ) != $blog_address ) + update_option( 'home', $blog_address ); + } + + // rewrite rules can't be flushed during switch to blog + delete_option( 'rewrite_rules' ); + + // update blogs table + $blog_data = stripslashes_deep( $_POST['blog'] ); + update_blog_details( $id, $blog_data ); + + // get blog prefix + $blog_prefix = $wpdb->get_blog_prefix( $id ); + + // user roles + if ( isset( $_POST['role'] ) && is_array( $_POST['role'] ) == true ) { + $newroles = $_POST['role']; + + reset( $newroles ); + foreach ( (array) $newroles as $userid => $role ) { + $user = new WP_User( $userid ); + if ( empty( $user->ID ) ) + continue; + $user->for_blog( $id ); + $user->set_role( $role ); + } + } + + // remove user + if ( isset( $_POST['blogusers'] ) && is_array( $_POST['blogusers'] ) ) { + reset( $_POST['blogusers'] ); + foreach ( (array) $_POST['blogusers'] as $key => $val ) + remove_user_from_blog( $key, $id ); + } + + // change password + if ( isset( $_POST['user_password'] ) && is_array( $_POST['user_password'] ) ) { + reset( $_POST['user_password'] ); + $newroles = $_POST['role']; + foreach ( (array) $_POST['user_password'] as $userid => $pass ) { + unset( $_POST['role'] ); + $_POST['role'] = $newroles[ $userid ]; + if ( $pass != '' ) { + $cap = $wpdb->get_var( $wpdb->prepare( "SELECT meta_value FROM {$wpdb->usermeta} WHERE user_id = %d AND meta_key = '{$blog_prefix}capabilities' AND meta_value = 'a:0:{}'", $userid ) ); + $userdata = get_userdata($userid); + $_POST['pass1'] = $_POST['pass2'] = $pass; + $_POST['email'] = $userdata->user_email; + $_POST['rich_editing'] = $userdata->rich_editing; + edit_user( $userid ); + if ( $cap == null ) + $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->usermeta} WHERE user_id = %d AND meta_key = '{$blog_prefix}capabilities' AND meta_value = 'a:0:{}'", $userid ) ); + } + } + unset( $_POST['role'] ); + $_POST['role'] = $newroles; + } + + // add user + if ( !empty( $_POST['newuser'] ) ) { + $newuser = $_POST['newuser']; + $userid = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM " . $wpdb->users . " WHERE user_login = %s", $newuser ) ); + if ( $userid ) { + $user = $wpdb->get_var( "SELECT user_id FROM " . $wpdb->usermeta . " WHERE user_id='$userid' AND meta_key='{$blog_prefix}capabilities'" ); + if ( $user == false ) + add_user_to_blog( $id, $userid, $_POST['new_role'] ); + } + } + do_action( 'wpmu_update_blog_options' ); + restore_current_blog(); + wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => 'editblog', 'id' => $id ), wp_get_referer() ) ); + break; + + case 'deleteblog': + check_admin_referer('deleteblog'); + if ( ! current_user_can( 'manage_sites' ) ) + wp_die( __( 'You do not have permission to access this page.' ) ); + + if ( $id != '0' && $id != $current_site->blog_id ) + wpmu_delete_blog( $id, true ); + + wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => 'delete' ), wp_get_referer() ) ); + exit(); + break; + + case 'allblogs': + if ( isset( $_POST['doaction']) || isset($_POST['doaction2'] ) ) { + check_admin_referer( 'bulk-ms-sites', '_wpnonce_bulk-ms-sites' ); + + if ( ! current_user_can( 'manage_sites' ) ) + wp_die( __( 'You do not have permission to access this page.' ) ); + + if ( $_GET['action'] != -1 || $_POST['action2'] != -1 ) + $doaction = $_POST['action'] != -1 ? $_POST['action'] : $_POST['action2']; + + + foreach ( (array) $_POST['allblogs'] as $key => $val ) { + if ( $val != '0' && $val != $current_site->blog_id ) { + switch ( $doaction ) { + case 'delete': + $blogfunction = 'all_delete'; + wpmu_delete_blog( $val, true ); + break; + + case 'spam': + $blogfunction = 'all_spam'; + update_blog_status( $val, 'spam', '1', 0 ); + set_time_limit( 60 ); + break; + + case 'notspam': + $blogfunction = 'all_notspam'; + update_blog_status( $val, 'spam', '0', 0 ); + set_time_limit( 60 ); + break; + } + } else { + wp_die( __( 'You are not allowed to change the current site.' ) ); + } + } + + wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => $blogfunction ), wp_get_referer() ) ); + exit(); + } else { + wp_redirect( admin_url( 'ms-sites.php' ) ); + } + break; + + case 'archiveblog': + check_admin_referer( 'archiveblog' ); + if ( ! current_user_can( 'manage_sites' ) ) + wp_die( __( 'You do not have permission to access this page.' ) ); + + update_blog_status( $id, 'archived', '1' ); + do_action( 'archive_blog', $id ); + wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => 'archive' ), wp_get_referer() ) ); + exit(); + break; + + case 'unarchiveblog': + check_admin_referer( 'unarchiveblog' ); + if ( ! current_user_can( 'manage_sites' ) ) + wp_die( __( 'You do not have permission to access this page.' ) ); + + do_action( 'unarchive_blog', $id ); + update_blog_status( $id, 'archived', '0' ); + wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => 'unarchive' ), wp_get_referer() ) ); + exit(); + break; + + case 'activateblog': + check_admin_referer( 'activateblog' ); + if ( ! current_user_can( 'manage_sites' ) ) + wp_die( __( 'You do not have permission to access this page.' ) ); + + update_blog_status( $id, 'deleted', '0' ); + do_action( 'activate_blog', $id ); + wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => 'activate' ), wp_get_referer() ) ); + exit(); + break; + + case 'deactivateblog': + check_admin_referer( 'deactivateblog' ); + if ( ! current_user_can( 'manage_sites' ) ) + wp_die( __( 'You do not have permission to access this page.' ) ); + + do_action( 'deactivate_blog', $id ); + update_blog_status( $id, 'deleted', '1' ); + wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => 'deactivate' ), wp_get_referer() ) ); + exit(); + break; + + case 'unspamblog': + check_admin_referer( 'unspamblog' ); + if ( ! current_user_can( 'manage_sites' ) ) + wp_die( __( 'You do not have permission to access this page.' ) ); + + update_blog_status( $id, 'spam', '0' ); + wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => 'unspam' ), wp_get_referer() ) ); + exit(); + break; + + case 'spamblog': + check_admin_referer( 'spamblog' ); + if ( ! current_user_can( 'manage_sites' ) ) + wp_die( __( 'You do not have permission to access this page.' ) ); + + update_blog_status( $id, 'spam', '1' ); + wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => 'spam' ), wp_get_referer() ) ); + exit(); + break; + + // Themes + case 'updatethemes': + if ( ! current_user_can( 'manage_network_themes' ) ) + wp_die( __( 'You do not have permission to access this page.' ) ); + + if ( is_array( $_POST['theme'] ) ) { + $themes = get_themes(); + reset( $themes ); + $allowed_themes = array(); + foreach ( (array) $themes as $key => $theme ) { + if ( $_POST['theme'][ esc_html( $theme['Stylesheet'] ) ] == 'enabled' ) + $allowed_themes[ esc_html( $theme['Stylesheet'] ) ] = true; + } + update_site_option( 'allowedthemes', $allowed_themes ); + } + wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => 'themes' ), wp_get_referer() ) ); + exit(); + break; + + // Common + case 'confirm': + if ( !headers_sent() ) { + nocache_headers(); + header( 'Content-Type: text/html; charset=utf-8' ); + } + if ( $current_site->blog_id == $id ) + wp_die( __( 'You are not allowed to change the current site.' ) ); + ?> + + > + + <?php _e( 'WordPress › Confirm your action' ); ?> + + + + + +

WordPress

+
+ + + + +

+

+
+ + + '; + confirm_delete_users( $_POST['allusers'] ); + echo ''; + require_once( 'admin-footer.php' ); + exit(); + } else { + wp_redirect( admin_url( 'ms-users.php' ) ); + } + break; + + case 'allusers': + if ( ! current_user_can( 'manage_network_users' ) ) + wp_die( __( 'You do not have permission to access this page.' ) ); + + if ( isset( $_POST['doaction']) || isset($_POST['doaction2'] ) ) { + check_admin_referer( 'bulk-ms-users', '_wpnonce_bulk-ms-users' ); + + if ( $_GET['action'] != -1 || $_POST['action2'] != -1 ) + $doaction = $_POST['action'] != -1 ? $_POST['action'] : $_POST['action2']; + + foreach ( (array) $_POST['allusers'] as $key => $val ) { + if ( !empty( $val ) ) { + switch ( $doaction ) { + case 'delete': + $title = __( 'Users' ); + $parent_file = 'ms-admin.php'; + require_once( 'admin-header.php' ); + echo '
'; + confirm_delete_users( $_POST['allusers'] ); + echo '
'; + require_once( 'admin-footer.php' ); + exit(); + break; + + case 'spam': + $user = new WP_User( $val ); + if ( in_array( $user->user_login, get_super_admins() ) ) + wp_die( sprintf( __( 'Warning! User cannot be modified. The user %s is a network administrator.' ), esc_html( $user->user_login ) ) ); + + $userfunction = 'all_spam'; + $blogs = get_blogs_of_user( $val, true ); + foreach ( (array) $blogs as $key => $details ) { + if ( $details->userblog_id != $current_site->blog_id ) // main blog not a spam ! + update_blog_status( $details->userblog_id, 'spam', '1' ); + } + update_user_status( $val, 'spam', '1', 1 ); + break; + + case 'notspam': + $userfunction = 'all_notspam'; + $blogs = get_blogs_of_user( $val, true ); + foreach ( (array) $blogs as $key => $details ) + update_blog_status( $details->userblog_id, 'spam', '0' ); + + update_user_status( $val, 'spam', '0', 1 ); + break; + } + } + } + + wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => $userfunction ), wp_get_referer() ) ); + exit(); + } else { + wp_redirect( admin_url( 'ms-users.php' ) ); + } + break; + + case 'dodelete': + check_admin_referer( 'ms-users-delete' ); + if ( ! current_user_can( 'manage_network_users' ) ) + wp_die( __( 'You do not have permission to access this page.' ) ); + + if ( ! empty( $_POST['blog'] ) && is_array( $_POST['blog'] ) ) { + foreach ( $_POST['blog'] as $id => $users ) { + foreach ( $users as $blogid => $user_id ) { + if ( ! empty( $_POST['delete'] ) && 'reassign' == $_POST['delete'][$blogid][$id] ) + remove_user_from_blog( $id, $blogid, $user_id ); + else + remove_user_from_blog( $id, $blogid ); + } + } + } + $i = 0; + if ( is_array( $_POST['user'] ) && ! empty( $_POST['user'] ) ) + foreach( $_POST['user'] as $id ) { + wpmu_delete_user( $id ); + $i++; + } + + if ( $i == 1 ) + $deletefunction = 'delete'; + else + $deletefunction = 'all_delete'; + + wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => $deletefunction ), admin_url( 'ms-users.php' ) ) ); + break; + + case 'adduser': + check_admin_referer( 'add-user', '_wpnonce_add-user' ); + if ( ! current_user_can( 'manage_network_users' ) ) + wp_die( __( 'You do not have permission to access this page.' ) ); + + if ( is_array( $_POST['user'] ) == false ) + wp_die( __( 'Cannot create an empty user.' ) ); + $user = $_POST['user']; + if ( empty($user['username']) && empty($user['email']) ) + wp_die( __( 'Missing username and email.' ) ); + elseif ( empty($user['username']) ) + wp_die( __( 'Missing username.' ) ); + elseif ( empty($user['email']) ) + wp_die( __( 'Missing email.' ) ); + + $password = wp_generate_password(); + $user_id = wpmu_create_user( esc_html( strtolower( $user['username'] ) ), $password, esc_html( $user['email'] ) ); + + if ( false == $user_id ) + wp_die( __( 'Duplicated username or email address.' ) ); + else + wp_new_user_notification( $user_id, $password ); + + if ( get_site_option( 'dashboard_blog' ) == false ) + add_user_to_blog( $current_site->blog_id, $user_id, get_site_option( 'default_user_role', 'subscriber' ) ); + else + add_user_to_blog( get_site_option( 'dashboard_blog' ), $user_id, get_site_option( 'default_user_role', 'subscriber' ) ); + + wp_redirect( add_query_arg( array( 'updated' => 'true', 'action' => 'add' ), wp_get_referer() ) ); + exit(); + break; + + default: + wp_redirect( admin_url( 'ms-admin.php' ) ); + break; +} +?> diff --git a/wp-admin/network/index.php b/wp-admin/network/index.php new file mode 100644 index 0000000000..c2ac6231b6 --- /dev/null +++ b/wp-admin/network/index.php @@ -0,0 +1,76 @@ +' . __('Until WordPress 3.0, running multiple sites required using WordPress MU instead of regular WordPress. In version 3.0, these applications have merged. If you are a former MU user, you should be aware of the following changes:') . '

' . + '' . + '

' . __('This screen provides the network administrator with links to the screens for Sites and Users to either create a new site or user, or to search existing users and sites. Those screens are also accessible through the left-hand navigation in the Super Admin section.') . '

' . + '

' . __('For more information:') . '

' . + '

' . __('Documentation on Super Admin Menu') . '

' . + '

' . __('Support Forums') . '

' +); + +require_once( '../admin-header.php' ); + +$c_users = get_user_count(); +$c_blogs = get_blog_count(); + +$user_text = sprintf( _n( '%s user', '%s users', $c_users ), number_format_i18n( $c_users ) ); +$blog_text = sprintf( _n( '%s site', '%s sites', $c_blogs ), number_format_i18n( $c_blogs ) ); + +$sentence = sprintf( __( 'You have %1$s and %2$s.' ), $blog_text, $user_text ); +?> + +
+ +

+ + +
+ +

+ + +
+

+ + + +

+
+ +
+

+ + + + +

+
+ + + +
+ + diff --git a/wp-admin/network/menu.php b/wp-admin/network/menu.php new file mode 100644 index 0000000000..62d09b05f9 --- /dev/null +++ b/wp-admin/network/menu.php @@ -0,0 +1,23 @@ + \ No newline at end of file diff --git a/wp-admin/network/plugins.php b/wp-admin/network/plugins.php new file mode 100644 index 0000000000..7e04e70399 --- /dev/null +++ b/wp-admin/network/plugins.php @@ -0,0 +1,5 @@ +' . __('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.') . '

' . + '

' . __('Dashboard Site is an option to give a site to users who do not have a site on the system. Their default role is Subscriber, but that default can be changed. The Admin Notice Feed can provide a notice on all dashboards of the latest post via RSS or Atom, or provide no such notice if left blank.') . '

' . + '

' . __('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).') . '

' . + '

' . __('Checkboxes for media upload buttons set which are shown in the visual editor. If unchecked, a generic upload button is still visible; other media types can still be uploaded if on the allowed file types list.') . '

' . + '

' . __('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 Super 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.') . '

' . + '

' . __('For more information:') . '

' . + '

' . __('Network Options Documentation') . '

' . + '

' . __('Support Forums') . '

' +); + +include( '../admin-header.php' ); + +if (isset($_GET['updated'])) { + ?> +

+ + +
+ +

+
+ +

+ + + + + + + + + + +
+ +
+ +
+ +
+ support@%s is recommended.' ), $current_site->domain ); ?> +
+

+ + + + + + + + + + + + + +
+ domain . $current_site->path, '', $details->domain . $details->path ) ) ) ); + } else { + $blogname = ''; + }?> + + +
+ New users are added to this site as the user role defined below if they don’t have a site. Leave blank for the main site. Users with the Subscriber role on the old site will be moved to the new site if changed. The new site will be created if it does not exist.' ); ?> +
+ +
+ +

+
+ + id, 'feed/' ) ) + echo __( 'A good one to use would be the feed from your main site: ' ) . esc_url( get_home_url( $current_site->id, 'feed/' ) ) ?>
+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+

+ ' . __( 'If registration is disabled, please set NOBLOGREDIRECT in wp-config.php to a URL you will redirect visitors to if they visit a non-existent site.' ) . '

'; + } ?> +
+ +
+ +
+ " size="45" /> +
+ +
+ + +
+ +
+ +
+ +
+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+

+ + + + + + + + + + + + + + + + + + + + + +

+
+
+
+
' ); ?>
+ + +

+

+ + + + + + +
+ +
+ + +

+ + + + + + + + + +

+
+
+ + diff --git a/wp-admin/network/sites.php b/wp-admin/network/sites.php new file mode 100644 index 0000000000..837ecd01c2 --- /dev/null +++ b/wp-admin/network/sites.php @@ -0,0 +1,747 @@ +' . __('This extensive list of options has five modules: Site Info, Site Options, allowing Site Themes for this given site, changing user roles and passwords for that site, adding a new user, and Miscellaneous Site Actions (upload size limits).') . '

' . + '

' . __('Note that some fields in Site Options are grayed out and say Serialized Data. These are stored values in the database which you cannot change from here.') . '

' . + '

' . __('For more information:') . '

' . + '

' . __('Documentation on Editing Sites') . '

' . + '

' . __('Support Forums') . '

' + ); +} else { + add_contextual_help($current_screen, + '

' . __('Add New takes you farther down on this same page. 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):') . '

' . + '' . + '

' . __('The site ID is used internally, and is not shown on the front end of the site or to users/viewers.') . '

' . + '

' . __('Clicking on bold settings can re-sort this table. The upper right icons switch between list and excerpt views.') . '

' . + '

' . __("Clicking on Add Site, after filling out the address, title, and admin's email address, adds the site instantly to the network and this table. You may want to then click on the action link to edit options for that site.") . '

' . + '

' . __('If the admin email for the new site does not exist in the database, a new user will also be created.') . '

' . + '

' . __('For more information:') . '

' . + '

' . __('Documentation on Sites') . '

' . + '

' . __('Support Forums') . '

' + ); +} + +wp_enqueue_script( 'admin-forms' ); + +require_once( '../admin-header.php' ); + +$id = isset( $_GET['id'] ) ? intval( $_GET['id'] ) : 0; + +if ( isset( $_GET['updated'] ) && $_GET['updated'] == 'true' && ! empty( $_GET['action'] ) ) { + ?> +

+ +

+ get_blog_prefix( $id ); + $options = $wpdb->get_results( "SELECT * FROM {$blog_prefix}options WHERE option_name NOT LIKE '\_%' AND option_name NOT LIKE '%user_roles'" ); + $details = get_blog_details( $id ); + if ( $details->site_id != $wpdb->siteid ) + wp_die( __( 'You do not have permission to access this page.' ) ); + + $editblog_roles = get_blog_option( $id, "{$blog_prefix}user_roles" ); + $is_main_site = is_main_site( $id ); + ?> +
+ +

-

+
+ + +
+
+

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + __( 'Public' ) ); + if ( ! $is_main_site ) { + $radio_fields['archived'] = __( 'Archived' ); + $radio_fields['spam'] = _x( 'Spam', 'site' ); + $radio_fields['deleted'] = __( 'Deleted' ); + } + $radio_fields['mature'] = __( 'Mature' ); + foreach ( $radio_fields as $field_key => $field_label ) { + ?> + + + + + +
domain ) ?>
path ) ?> +
/> siteurl and home as well.' ); ?>
+ $field_key, 1 ); ?> /> + + $field_key, 0 ); ?> /> + +
+

+
+
+ +
+

+
+ + option_name == 'default_role' ) + $editblog_default_role = $option->option_value; + $disabled = false; + $class = 'all-options'; + if ( is_serialized( $option->option_value ) ) { + if ( is_serialized_string( $option->option_value ) ) { + $option->option_value = esc_html( maybe_unserialize( $option->option_value ), 'single' ); + } else { + $option->option_value = 'SERIALIZED DATA'; + $disabled = true; + $class = 'all-options disabled'; + } + } + if ( strpos( $option->option_value, "\n" ) !== false ) { + ?> + + + + + + + + option_name, array( 'siteurl', 'home' ) ) ) { ?> + + + + + + +
option_name ) ) ?>
option_name ) ) ); ?>option_value ) ?> />
+

+
+
+
+ +
+ $theme ) { + $theme_key = esc_html( $theme['Stylesheet'] ); + if ( ! isset( $allowed_themes[$theme_key] ) ) { + $checked = isset( $blog_allowed_themes[ $theme_key ] ) ? 'checked="checked"' : ''; + $out .= ' + ' . esc_html( $key ) . ' + + '; + } + } + + if ( $out != '' ) { + ?> +
+

+
+

+ + +
+

+
+

' . __( 'Site Users' ) . '

'; + echo ''; + echo ""; + reset( $blogusers ); + foreach ( (array) $blogusers as $key => $val ) { + if ( isset( $val->meta_value ) && ! $val->meta_value ) + continue; + $t = @unserialize( $val->meta_value ); + if ( is_array( $t ) ) { + reset( $t ); + $existing_role = key( $t ); + } + echo ''; + if ( $val->user_id != $current_user->data->ID ) { + ?> + + + '; + } else { + echo ""; + } + echo ''; + } + echo "
" . __( 'User' ) . "" . __( 'Role' ) . "" . __( 'Password' ) . "" . __( 'Remove' ) . "
' . $val->user_login . ' + + + + " . __ ( 'N/A' ) . "" . __ ( 'N/A' ) . "" . __( 'N/A' ) . "
"; + echo '

'; + echo "
"; + } + ?> + +
+

+
+

+ + + + + + + + + +
+ +
+

+
+
+ +
+

+
+ + +
+

+
+
+
+ +
+ + + blogs} WHERE site_id = '{$wpdb->siteid}' "; + + if ( isset( $_GET['searchaction'] ) ) { + if ( 'name' == $_GET['searchaction'] ) { + $query .= " AND ( {$wpdb->blogs}.domain LIKE '%{$like_s}%' OR {$wpdb->blogs}.path LIKE '%{$like_s}%' ) "; + } elseif ( 'id' == $_GET['searchaction'] ) { + $query .= " AND {$wpdb->blogs}.blog_id = '{$like_s}' "; + } elseif ( 'ip' == $_GET['searchaction'] ) { + $query = "SELECT * + FROM {$wpdb->blogs}, {$wpdb->registration_log} + WHERE site_id = '{$wpdb->siteid}' + AND {$wpdb->blogs}.blog_id = {$wpdb->registration_log}.blog_id + AND {$wpdb->registration_log}.IP LIKE ('%{$like_s}%')"; + } + } + + $order_by = isset( $_GET['sortby'] ) ? $_GET['sortby'] : 'id'; + if ( $order_by == 'registered' ) { + $query .= ' ORDER BY registered '; + } elseif ( $order_by == 'lastupdated' ) { + $query .= ' ORDER BY last_updated '; + } elseif ( $order_by == 'blogname' ) { + $query .= ' ORDER BY domain '; + } else { + $order_by = 'id'; + $query .= " ORDER BY {$wpdb->blogs}.blog_id "; + } + + $order = ( isset( $_GET['order'] ) && 'DESC' == $_GET['order'] ) ? "DESC" : "ASC"; + $query .= $order; + + $total = $wpdb->get_var( str_replace( 'SELECT *', 'SELECT COUNT(blog_id)', $query ) ); + + $query .= " LIMIT " . intval( ( $pagenum - 1 ) * $per_page ) . ", " . intval( $per_page ); + $blog_list = $wpdb->get_results( $query, ARRAY_A ); + + $num_pages = ceil($total / $per_page); + $page_links = paginate_links( array( + 'base' => add_query_arg( 'paged', '%#%' ), + 'format' => '', + 'prev_text' => __( '«' ), + 'next_text' => __( '»' ), + 'total' => $num_pages, + 'current' => $pagenum + )); + + if ( empty( $_GET['mode'] ) ) + $mode = 'list'; + else + $mode = esc_attr( $_GET['mode'] ); + ?> + +
+ +

+ + ' . __( 'Search results for “%s”' ) . '', esc_html( $s ) ); + ?> +

+ + + +
+ +
+
+ + + +
+ + +
+ ' . __( 'Displaying %s–%s of %s' ) . '%s', + number_format_i18n( ( $pagenum - 1 ) * $per_page + 1 ), + number_format_i18n( min( $pagenum * $per_page, $total ) ), + number_format_i18n( $total ), + $page_links + ); echo $page_links_text; ?> +
+ + + + +
+ +
+ + 'display name' + $blogname_columns = ( is_subdomain_install() ) ? __( 'Domain' ) : __( 'Path' ); + $sites_columns = array( + 'id' => __( 'ID' ), + 'blogname' => $blogname_columns, + 'lastupdated' => __( 'Last Updated'), + 'registered' => _x( 'Registered', 'site' ), + 'users' => __( 'Users' ) + ); + + if ( has_filter( 'wpmublogsaction' ) ) + $sites_columns['plugins'] = __( 'Actions' ); + + $sites_columns = apply_filters( 'wpmu_blogs_columns', $sites_columns ); + ?> + + + + + + $column_display_name) { + $column_link = " $order2, 'paged' => $pagenum, 'sortby' => $column_id ), remove_query_arg( array('action', 'updated'), $_SERVER['REQUEST_URI'] ) ) ); + $column_link .= "'>{$column_display_name}"; + $col_url .= ''; + } + echo $col_url ?> + + + + + + + + + + array( 'site-archived', __( 'Archived' ) ), 'spam' => array( 'site-spammed', _x( 'Spam', 'site' ) ), 'deleted' => array( 'site-deleted', __( 'Deleted' ) ), 'mature' => array( 'site-mature', __( 'Mature' ) ) ); + if ( $blog_list ) { + $class = ''; + foreach ( $blog_list as $blog ) { + $class = ( 'alternate' == $class ) ? '' : 'alternate'; + reset( $status_list ); + + $blog_states = array(); + foreach ( $status_list as $status => $col ) { + if ( get_blog_status( $blog['blog_id'], $status ) == 1 ) { + $class = $col[0]; + $blog_states[] = $col[1]; + } + } + $blog_state = ''; + if ( ! empty( $blog_states ) ) { + $state_count = count( $blog_states ); + $i = 0; + $blog_state .= ' - '; + foreach ( $blog_states as $state ) { + ++$i; + ( $i == $state_count ) ? $sep = '' : $sep = ', '; + $blog_state .= "$state$sep"; + } + } + echo ""; + + $blogname = ( is_subdomain_install() ) ? str_replace( '.'.$current_site->domain, '', $blog['domain'] ) : $blog['path']; + foreach ( $sites_columns as $column_name=>$column_display_name ) { + switch ( $column_name ) { + case 'id': ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + ' . ( ( $column_id == 'users' || $column_id == 'plugins' ) ? $column_display_name : $column_link ) . '
+ +
+ + + + + + ' . sprintf( _x( '%1$s – %2$s', '%1$s: site name. %2$s: site tagline.' ), get_blog_option( $blog['blog_id'], 'blogname' ), get_blog_option( $blog['blog_id'], 'blogdescription ' ) ) . '

'; + + // Preordered. + $actions = array( + 'edit' => '', 'backend' => '', + 'activate' => '', 'deactivate' => '', + 'archive' => '', 'unarchive' => '', + 'spam' => '', 'unspam' => '', + 'delete' => '', + 'visit' => '', + ); + + $actions['edit'] = '' . __( 'Edit' ) . ''; + $actions['backend'] = "" . __( 'Backend' ) . ''; + if ( $current_site->blog_id != $blog['blog_id'] ) { + if ( get_blog_status( $blog['blog_id'], 'deleted' ) == '1' ) + $actions['activate'] = '' . __( 'Activate' ) . ''; + else + $actions['deactivate'] = '' . __( 'Deactivate' ) . ''; + + if ( get_blog_status( $blog['blog_id'], 'archived' ) == '1' ) + $actions['unarchive'] = '' . __( 'Unarchive' ) . ''; + else + $actions['archive'] = '' . _x( 'Archive', 'verb; site' ) . ''; + + if ( get_blog_status( $blog['blog_id'], 'spam' ) == '1' ) + $actions['unspam'] = '' . _x( 'Not Spam', 'site' ) . ''; + else + $actions['spam'] = '' . _x( 'Spam', 'site' ) . ''; + + $actions['delete'] = '' . __( 'Delete' ) . ''; + } + + $actions['visit'] = "" . __( 'Visit' ) . ''; + $actions = array_filter( $actions ); + if ( count( $actions ) ) : ?> +
+ +
+ +
+ g:i:s a'; + echo ( $blog['last_updated'] == '0000-00-00 00:00:00' ) ? __( 'Never' ) : mysql2date( __( $date ), $blog['last_updated'] ); ?> + + + + 5 ) { + $blogusers = array_slice( $blogusers, 0, 5 ); + $blogusers_warning = __( 'Only showing first 5 users.' ) . ' ' . __( 'More' ) . ''; + } + foreach ( $blogusers as $key => $val ) { + echo '' . esc_html( $val->user_login ) . ' '; + if ( 'list' != $mode ) + echo '(' . $val->user_email . ')'; + echo '
'; + } + if ( $blogusers_warning != '' ) + echo '' . $blogusers_warning . '
'; + } + ?> +
+ + + +
+
+ $page_links_text
"; + ?> + +
+ + +
+
+
+ + + + +
+

+
+ + + + + + + + + + + + + + + + + +
+ + .domain );?> + domain . $current_site->path ?> + ' . __( 'Only the characters a-z and 0-9 recommended.' ) . '

'; + ?> +

+

+

+
+
+ diff --git a/wp-admin/network/themes.php b/wp-admin/network/themes.php new file mode 100644 index 0000000000..c3de39d79b --- /dev/null +++ b/wp-admin/network/themes.php @@ -0,0 +1,99 @@ +' . __('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.') . '

' . + '

' . __('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’s Appearance > Themes screen.') . '

' . + '

' . __('Themes can be enabled on a site by site basis by the network admin on the Edit Site screen you go to via the Edit action link on the Sites screen.') . '

' . + '

' . __('For more information:') . '

' . + '

' . __('Documentation on Network Themes') . '

' . + '

' . __('Support Forums') . '

' +); + +require_once( '../admin-header.php' ); + +if ( isset( $_GET['updated'] ) ) { + ?> +

+ +
+
+ +

+

+

+

+ + + + + + + + + + + $theme ) { + $total_theme_count++; + $theme_key = esc_html( $theme['Stylesheet'] ); + $class = ( 'alt' == $class ) ? '' : 'alt'; + $class1 = $enabled = $disabled = ''; + $enabled = $disabled = false; + + if ( isset( $allowed_themes[$theme_key] ) == true ) { + $enabled = true; + $activated_themes_count++; + $class1 = 'active'; + } else { + $disabled = true; + } + ?> + + + + + + + + +
+ +     + +
+ +

+

+
+ +

+

+ +
+ +

+
+ + diff --git a/wp-admin/network/upgrade.php b/wp-admin/network/upgrade.php new file mode 100644 index 0000000000..eb61e91a48 --- /dev/null +++ b/wp-admin/network/upgrade.php @@ -0,0 +1,85 @@ +' . __('Only use this screen once you have updated to a new version of WordPress through Dashboard > Updates. Clicking the Update Network button will step through each site in the network, five at a time, and make sure any database upgrades are applied.') . '

' . + '

' . __('If a version update to core has not happened, clicking this button won’t affect anything.') . '

' . + '

' . __('If this process fails for any reason, users logging in to their sites will force the same update.') . '

' . + '

' . __('For more information:') . '

' . + '

' . __('Update Network Documentation') . '

' . + '

' . __('Support Forums') . '

' +); + +require_once('../admin-header.php'); + +if ( ! current_user_can( 'manage_network' ) ) + wp_die( __( 'You do not have permission to access this page.' ) ); + +echo '
'; +screen_icon(); +echo '

' . __( 'Update Network' ) . '

'; + +$action = isset($_GET['action']) ? $_GET['action'] : 'show'; + +switch ( $action ) { + case "upgrade": + $n = ( isset($_GET['n']) ) ? intval($_GET['n']) : 0; + + if ( $n < 5 ) { + global $wp_db_version; + update_site_option( 'wpmu_upgrade_site', $wp_db_version ); + } + + $blogs = $wpdb->get_results( "SELECT * FROM {$wpdb->blogs} WHERE site_id = '{$wpdb->siteid}' AND spam = '0' AND deleted = '0' AND archived = '0' ORDER BY registered DESC LIMIT {$n}, 5", ARRAY_A ); + if ( empty( $blogs ) ) { + echo '

' . __( 'All done!' ) . '

'; + break; + } + echo ""; + ?>

+

+

+
+ + diff --git a/wp-admin/network/user-edit.php b/wp-admin/network/user-edit.php new file mode 100644 index 0000000000..927a716c0b --- /dev/null +++ b/wp-admin/network/user-edit.php @@ -0,0 +1,5 @@ +' . __('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 his or her 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 bold headings and switch between list and excerpt views by using the icons in the upper right.') . '

' . + '

' . __('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.') . '

' . + '

' . __('Add User will add that person to this table and send them an email.') . '

' . + '

' . __('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.') . '

' . + '

' . __('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.') . '

' . + '

' . __('For more information:') . '

' . + '

' . __('Network Users Documentation') . '

' . + '

' . __('Support Forums') . '

' +); + +wp_enqueue_script( 'admin-forms' ); + +require_once( '../admin-header.php' ); + +if ( isset( $_GET['updated'] ) && $_GET['updated'] == 'true' && ! empty( $_GET['action'] ) ) { + ?> +

+ +

+ users}"; + + if ( !empty( $like_s ) ) { + $query .= " WHERE user_login LIKE '%$like_s%' OR user_email LIKE '%$like_s%'"; + } + + $order_by = isset( $_GET['sortby'] ) ? $_GET['sortby'] : 'id'; + if ( $order_by == 'email' ) { + $query .= ' ORDER BY user_email '; + } elseif ( $order_by == 'login' ) { + $query .= ' ORDER BY user_login '; + } elseif ( $order_by == 'name' ) { + $query .= ' ORDER BY display_name '; + } elseif ( $order_by == 'registered' ) { + $query .= ' ORDER BY user_registered '; + } else { + $order_by = 'id'; + $query .= ' ORDER BY ID '; + } + + $order = ( isset( $_GET['order'] ) && 'DESC' == $_GET['order'] ) ? 'DESC' : 'ASC'; + $query .= $order; + + $total = $wpdb->get_var( str_replace( 'SELECT *', 'SELECT COUNT(ID)', $query ) ); + + $query .= " LIMIT " . intval( ( $pagenum - 1 ) * $per_page) . ", " . intval( $per_page ); + + $user_list = $wpdb->get_results( $query, ARRAY_A ); + + $num_pages = ceil( $total / $per_page ); + $page_links = paginate_links( array( + 'base' => add_query_arg( 'paged', '%#%' ), + 'format' => '', + 'prev_text' => __( '«' ), + 'next_text' => __( '»' ), + 'total' => $num_pages, + 'current' => $pagenum + )); + + if ( empty( $_GET['mode'] ) ) + $mode = 'list'; + else + $mode = esc_attr( $_GET['mode'] ); + + ?> +
+ +

+ + ' . __( 'Search results for “%s”' ) . '', esc_html( $s ) ); + ?> +

+ +
+ +
+ +
+ +
+
+ + + +
+ + +
+ ' . __( 'Displaying %s–%s of %s' ) . '%s', + number_format_i18n( ( $pagenum - 1 ) * $per_page + 1 ), + number_format_i18n( min( $pagenum * $per_page, $total ) ), + number_format_i18n( $total ), + $page_links + ); echo $page_links_text; ?> +
+ + + +
+
+ + 'display name' + $users_columns = array( + 'id' => __( 'ID' ), + 'login' => __( 'Username' ), + 'name' => __( 'Name' ), + 'email' => __( 'E-mail' ), + 'registered' => _x( 'Registered', 'user' ), + 'blogs' => __( 'Sites' ) + ); + $users_columns = apply_filters( 'wpmu_users_columns', $users_columns ); + ?> + + + + + $column_display_name) { + $column_link = " $order2, 'paged' => $pagenum, 'sortby' => $column_id ), remove_query_arg( array( 'action', 'updated' ), $_SERVER['REQUEST_URI'] ) ) ); + $column_link .= "'>{$column_display_name}"; + $col_url .= ''; + } + echo $col_url; ?> + + + + + + + + + + 'site-spammed', 'deleted' => 'site-deleted' ); + + foreach ( $status_list as $status => $col ) { + if ( $user[$status] ) + $class = $col; + } + + ?> + + $column_display_name ) : + switch( $column_name ) { + case 'id': ?> + + + ID == $user['ID'] ) ? 'profile.php' : 'user-edit.php?user_id=' . $user['ID']; + ?> + + + + + + g:i:s a'; + ?> + + + + + + + + + + + + + +
+ + ' . ( $column_id == 'blogs' ? $column_display_name : $column_link ) . '
+ +
+ + + + + +
+
+ + + | + +
+
+ $val ) { + $path = ( $val->path == '/' ) ? '' : $val->path; + echo '' . str_replace( '.' . $current_site->domain, '', $val->domain . $path ) . ''; + echo ' '; + + // Edit + echo '' . __( 'Edit' ) . ' | '; + + // View + echo 'userblog_id, 'spam' ) == 1 ) + echo 'style="background-color: #faa" '; + echo 'href="' . esc_url( get_home_url( $val->userblog_id ) ) . '">' . __( 'View' ) . ''; + + echo '
'; + } + } + ?> +
+ +
+ $page_links_text
"; + ?> + +
+ + +
+
+
+ + + + + +
+

+
+ + + + + + + + + + + + +
+

+ +

+
+
+ + + diff --git a/wp-admin/plugins.php b/wp-admin/plugins.php index d36f47e9cd..82129ec054 100644 --- a/wp-admin/plugins.php +++ b/wp-admin/plugins.php @@ -122,7 +122,7 @@ if ( !empty($action) ) { $title = __( 'Upgrade Plugins' ); $parent_file = 'plugins.php'; - require_once( './admin-header.php' ); + require_once( ABSPATH . 'wp-admin/admin-header.php' ); echo '
'; screen_icon(); @@ -219,7 +219,7 @@ if ( !empty($action) ) { if ( ! isset($_REQUEST['verify-delete']) ) { wp_enqueue_script('jquery'); - require_once('./admin-header.php'); + require_once(ABSPATH . 'wp-admin/admin-header.php'); ?>

- + @@ -384,9 +384,8 @@ $inactive_plugins = array(); $recent_plugins = array(); $recently_activated = get_option('recently_activated', array()); $upgrade_plugins = array(); -$network_plugins = array(); $mustuse_plugins = $dropins_plugins = array(); -if ( ! is_multisite() || current_user_can('manage_network_plugins') ) { +if ( ! is_multisite() || ( is_network_admin() && current_user_can('manage_network_plugins') ) ) { if ( apply_filters( 'show_advanced_plugins', true, 'mustuse' ) ) $mustuse_plugins = get_mu_plugins(); if ( apply_filters( 'show_advanced_plugins', true, 'dropins' ) ) @@ -413,16 +412,21 @@ foreach ( array( 'all_plugins', 'mustuse_plugins', 'dropins_plugins' ) as $plugi unset( $plugin_array_name ); foreach ( (array) $all_plugins as $plugin_file => $plugin_data) { + if ( is_network_admin() ) + $is_active = is_plugin_active_for_network($plugin_file); + else + $is_active = is_plugin_active($plugin_file); // Filter into individual sections - if ( is_multisite() && is_network_only_plugin( $plugin_file ) && !current_user_can( 'manage_network_plugins' ) ) { + if ( is_plugin_active_for_network($plugin_file) && !is_network_admin() ) { unset( $all_plugins[ $plugin_file ] ); continue; - } elseif ( is_plugin_active_for_network($plugin_file) ) { - $network_plugins[ $plugin_file ] = $plugin_data; - } elseif ( is_plugin_active($plugin_file) ) { + } elseif ( is_multisite() && is_network_only_plugin( $plugin_file ) && !current_user_can( 'manage_network_plugins' ) ) { + unset( $all_plugins[ $plugin_file ] ); + continue; + } elseif ( $is_active ) { $active_plugins[ $plugin_file ] = $plugin_data; } else { - if ( isset( $recently_activated[ $plugin_file ] ) ) // Was the plugin recently activated? + if ( !is_network_admin() && isset( $recently_activated[ $plugin_file ] ) ) // Was the plugin recently activated? $recent_plugins[ $plugin_file ] = $plugin_data; $inactive_plugins[ $plugin_file ] = $plugin_data; } @@ -439,7 +443,6 @@ $total_inactive_plugins = count($inactive_plugins); $total_active_plugins = count($active_plugins); $total_recent_plugins = count($recent_plugins); $total_upgrade_plugins = count($upgrade_plugins); -$total_network_plugins = count($network_plugins); $total_mustuse_plugins = count($mustuse_plugins); $total_dropins_plugins = count($dropins_plugins); @@ -543,8 +546,12 @@ function print_plugins_table($plugins, $context = '') { ); if ( 'mustuse' == $context ) { + if ( is_multisite() && !is_network_admin() ) + continue; $is_active = true; } elseif ( 'dropins' == $context ) { + if ( is_multisite() && !is_network_admin() ) + continue; $dropins = _get_dropins(); $plugin_name = $plugin_file; if ( $plugin_file != $plugin_data['Name'] ) @@ -563,29 +570,37 @@ function print_plugins_table($plugins, $context = '') { $description .= '

' . $plugin_data['Description'] . '

'; } else { $is_active_for_network = is_plugin_active_for_network($plugin_file); - $is_active = $is_active_for_network || is_plugin_active( $plugin_file ); - if ( $is_active_for_network && !is_super_admin() ) + if ( is_network_admin() ) + $is_active = $is_active_for_network; + else + $is_active = is_plugin_active( $plugin_file ); + + if ( $is_active_for_network && !is_super_admin() && !is_network_admin() ) continue; - if ( $is_active ) { + if ( is_network_admin() ) { if ( $is_active_for_network ) { - if ( is_super_admin() ) + if ( current_user_can( 'manage_network_plugins' ) ) $actions['network_deactivate'] = '' . __('Network Deactivate') . ''; } else { - $actions['deactivate'] = '' . __('Deactivate') . ''; + if ( current_user_can( 'manage_network_plugins' ) ) + $actions['network_activate'] = '' . __('Network Activate') . ''; + if ( current_user_can('delete_plugins') ) + $actions['delete'] = '' . __('Delete') . ''; } } else { - if ( is_multisite() && is_network_only_plugin( $plugin_file ) ) - $actions['network_only'] = '' . __('Network Only') . ''; - else + if ( $is_active ) { + $actions['deactivate'] = '' . __('Deactivate') . ''; + } else { + if ( is_network_only_plugin( $plugin_file ) && !is_network_admin() ) + continue; + $actions['activate'] = '' . __('Activate') . ''; - if ( is_multisite() && current_user_can( 'manage_network_plugins' ) ) - $actions['network_activate'] = '' . __('Network Activate') . ''; - - if ( current_user_can('delete_plugins') ) - $actions['delete'] = '' . __('Delete') . ''; - } // end if $is_active + if ( current_user_can('delete_plugins') ) + $actions['delete'] = '' . __('Delete') . ''; + } // end if $is_active + } // end if is_network_admin() if ( current_user_can('edit_plugins') && is_writable(WP_PLUGIN_DIR . '/' . $plugin_file) ) $actions['edit'] = '' . __('Edit') . ''; @@ -689,7 +704,7 @@ function print_plugin_actions($context, $field_name = 'action' ) { -
+ @@ -783,5 +798,5 @@ print_plugin_actions($status, "action2");
diff --git a/wp-admin/user-edit.php b/wp-admin/user-edit.php index 414dfb3f83..7f0de03e0d 100644 --- a/wp-admin/user-edit.php +++ b/wp-admin/user-edit.php @@ -84,12 +84,12 @@ if ( is_multisite() && IS_PROFILE_PAGE && isset( $_GET[ 'newuseremail' ] ) && $c $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->signups} SET user_email = %s WHERE user_login = %s", $user->user_email, $current_user->user_login ) ); wp_update_user( get_object_vars( $user ) ); delete_option( $current_user->ID . '_new_email' ); - wp_redirect( add_query_arg( array('updated' => 'true'), admin_url( 'profile.php' ) ) ); + wp_redirect( add_query_arg( array('updated' => 'true'), self_admin_url( 'profile.php' ) ) ); die(); } } elseif ( is_multisite() && IS_PROFILE_PAGE && !empty( $_GET['dismiss'] ) && $current_user->ID . '_new_email' == $_GET['dismiss'] ) { delete_option( $current_user->ID . '_new_email' ); - wp_redirect( add_query_arg( array('updated' => 'true'), admin_url( 'profile.php' ) ) ); + wp_redirect( add_query_arg( array('updated' => 'true'), self_admin_url( 'profile.php' ) ) ); die(); } @@ -138,7 +138,7 @@ if ( !is_multisite() ) { if ( $delete_role ) // stops users being added to current blog when they are edited delete_user_meta( $user_id, $blog_prefix . 'capabilities' ); - if ( is_multisite() && !IS_PROFILE_PAGE && current_user_can( 'manage_network_options' ) && !isset($super_admins) && empty( $_POST['super_admin'] ) == is_super_admin( $user_id ) ) + if ( is_multisite() && is_network_admin() & !IS_PROFILE_PAGE && current_user_can( 'manage_network_options' ) && !isset($super_admins) && empty( $_POST['super_admin'] ) == is_super_admin( $user_id ) ) empty( $_POST['super_admin'] ) ? revoke_super_admin( $user_id ) : grant_super_admin( $user_id ); } @@ -155,7 +155,7 @@ $profileuser = get_user_to_edit($user_id); if ( !current_user_can('edit_user', $user_id) ) wp_die(__('You do not have permission to edit this user.')); -include ('admin-header.php'); +include (ABSPATH . 'wp-admin/admin-header.php'); ?> ID ) && current_user_can( 'manage_network_options' ) ) { ?> @@ -177,7 +177,7 @@ include ('admin-header.php');

-> +> @@ -245,7 +245,7 @@ else echo ''; ?> - +

@@ -307,7 +307,7 @@ else $new_email = get_option( $current_user->ID . '_new_email' ); if ( $new_email && $new_email != $current_user->user_email ) : ?>
-

%1$s. Cancel'), $new_email['newemail'], esc_url( admin_url( 'profile.php?dismiss=' . $current_user->ID . '_new_email' ) ) ); ?>

+

%1$s. Cancel'), $new_email['newemail'], esc_url( self_admin_url( 'profile.php?dismiss=' . $current_user->ID . '_new_email' ) ) ); ?>

@@ -398,5 +398,5 @@ break; } diff --git a/wp-includes/link-template.php b/wp-includes/link-template.php index c769796728..ecedc2137f 100644 --- a/wp-includes/link-template.php +++ b/wp-includes/link-template.php @@ -2132,7 +2132,7 @@ function network_home_url( $path = '', $scheme = null ) { * @return string Admin url link with optional path appended */ function network_admin_url( $path = '', $scheme = 'admin' ) { - $url = network_site_url('wp-admin/', $scheme); + $url = network_site_url('wp-admin/network/', $scheme); if ( !empty($path) && is_string($path) && strpos($path, '..') === false ) $url .= ltrim($path, '/'); @@ -2140,6 +2140,23 @@ function network_admin_url( $path = '', $scheme = 'admin' ) { return apply_filters('network_admin_url', $url, $path); } +/** + * Retrieve the url to the admin area for either the current blog or the network depending on context. + * + * @package WordPress + * @since 3.1.0 + * + * @param string $path Optional path relative to the admin url + * @param string $scheme The scheme to use. Default is 'admin', which obeys force_ssl_admin() and is_ssl(). 'http' or 'https' can be passed to force those schemes. + * @return string Admin url link with optional path appended +*/ +function self_admin_url($path = '', $scheme = 'admin') { + if ( is_network_admin() ) + return network_admin_url($path, $scheme); + else + return admin_url($path, $scheme); +} + /** * Output rel=canonical for singular queries * diff --git a/wp-includes/load.php b/wp-includes/load.php index a514498a29..397b966751 100644 --- a/wp-includes/load.php +++ b/wp-includes/load.php @@ -568,6 +568,22 @@ function is_admin() { return false; } +/** + * Whether the current request is in WordPress network admin Panel + * + * Does not inform on whether the user is a network admin! Use capability checks to + * tell if the user should be accessing a section or not. + * + * @since 3.1.0 + * + * @return bool True if inside WordPress network administration pages. + */ +function is_network_admin() { + if ( defined( 'WP_NETWORK_ADMIN' ) ) + return WP_NETWORK_ADMIN; + return false; +} + /** * Whether Multisite support is enabled *