Network Admin, first pass. see #14435

git-svn-id: http://svn.automattic.com/wordpress/trunk@15481 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
ryan 2010-07-30 20:34:54 +00:00
parent 2f90a8c63c
commit 21e3f0f7fa
27 changed files with 2741 additions and 2529 deletions

View File

@ -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);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" <?php do_action('admin_xml_ns'); ?> <?php language_attributes(); ?>>
@ -86,7 +97,11 @@ document.body.className = c;
<div id="wpcontent">
<div id="wphead">
<?php
$blog_name = get_bloginfo('name', 'display');
if ( is_network_admin() )
$blog_name = esc_html($current_site->site_name);
else
$blog_name = get_bloginfo('name', 'display');
if ( '' == $blog_name ) {
$blog_name = '&nbsp;';
} else {
@ -111,7 +126,7 @@ if ( function_exists('mb_strlen') ) {
<a href="<?php echo trailingslashit( get_bloginfo( 'url' ) ); ?>" title="<?php esc_attr_e('Visit Site') ?>">
<span id="site-title"><?php echo $blog_name ?></span>
</a>
<?php if ( current_user_can('manage_options') && '1' != get_option('blog_public') ): ?>
<?php if ( !is_network_admin() && current_user_can('manage_options') && '1' != get_option('blog_public') ): ?>
<a id="privacy-on-link" href="options-privacy.php" title="<?php echo esc_attr( apply_filters('privacy_on_link_title', __('Your site is asking search engines not to index its content') ) ); ?>"><?php echo apply_filters('privacy_on_link_text', __('Search Engines Blocked') ); ?></a>
<?php endif; ?>
</h1>
@ -123,7 +138,13 @@ if ( function_exists('mb_strlen') ) {
<p><?php
$links = array();
$links[5] = sprintf(__('Howdy, <a href="%1$s" title="Edit your profile">%2$s</a>'), 'profile.php', $user_identity);
$links[15] = '| <a href="' . wp_logout_url() . '" title="' . __('Log Out') . '">' . __('Log Out') . '</a>';
if ( is_multisite() && is_super_admin() ) {
if ( !is_network_admin() )
$links[10] = '| <a href="' . network_admin_url() . '" title="' . esc_attr__('Network Admin') . '">' . __('Network Admin') . '</a>';
elseif ($last_blog = get_user_option('last-blog-admin-visited') )
$links[10] = '| <a href="' . get_admin_url($last_blog) . '" title="' . esc_attr__('Site Admin') . '">' . __('Site Admin') . '</a>';
}
$links[15] = '| <a href="' . wp_logout_url() . '" title="' . esc_attr__('Log Out') . '">' . __('Log Out') . '</a>';
$links = apply_filters('admin_user_info_links', $links, $current_user);
ksort($links);
@ -132,7 +153,7 @@ echo implode(' ', $links);
?></p>
</div>
<?php favorite_actions($current_screen); ?>
<?php !is_network_admin() ? favorite_actions($current_screen) : ''; ?>
</div>
</div>

View File

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

211
wp-admin/includes/menu.php Normal file
View File

@ -0,0 +1,211 @@
<?php
/**
* Build Administration Menu.
*
* @package WordPress
* @subpackage Administration
*/
if ( is_network_admin() )
do_action('_network_admin_menu');
else
do_action('_admin_menu');
// 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);
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, $compat);
$_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);
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.') );
}
?>

View File

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

View File

@ -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,
'<p>' . __('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:') . '</p>' .
'<ul><li>' . __('Site Admin is now Super Admin (we highly encourage you to get yourself a cape!).') . '</li>' .
'<li>' . __('Blogs are now called Sites; Site is now called Network.') . '</li></ul>' .
'<p>' . __('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.') . '</p>' .
'<p><strong>' . __('For more information:') . '</strong></p>' .
'<p>' . __('<a href="http://codex.wordpress.org/Super_Admin_Super_Admin_Menu" target="_blank">Documentation on Super Admin Menu</a>') . '</p>' .
'<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
);
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 );
?>
<div class="wrap">
<?php screen_icon(); ?>
<h2><?php echo esc_html( $title ); ?></h2>
<ul class="subsubsub">
<li><a href="ms-sites.php#form-add-site"><?php _e( 'Create a New Site' ); ?></a> |</li>
<li><a href="ms-users.php#form-add-user"><?php _e( 'Create a New User' ); ?></a></li>
</ul>
<br class="clear" />
<p class="youhave"><?php echo $sentence; ?></p>
<?php do_action( 'wpmuadminresult', '' ); ?>
<form name="searchform" action="ms-users.php" method="get">
<p>
<input type="hidden" name="action" value="users" />
<input type="text" name="s" value="" size="17" />
<input class="button" type="submit" name="submit" value="<?php esc_attr_e( 'Search Users' ); ?>" />
</p>
</form>
<form name="searchform" action="ms-sites.php" method="get">
<p>
<input type="hidden" name="action" value="blogs" />
<input type="hidden" name="searchaction" value="name" />
<input type="text" name="s" value="" size="17" />
<input class="button" type="submit" name="blog_name" value="<?php esc_attr_e( 'Search Sites' ); ?>" />
</p>
</form>
<?php do_action( 'mu_rightnow_end' ); ?>
<?php do_action( 'mu_activity_box_end' ); ?>
</div>
<?php include( './admin-footer.php' ); ?>
wp_redirect( network_admin_url() );

View File

@ -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 <a href="%s">options page</a>.', 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&#8217;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: <code>%s</code>' ), implode( '</code>, <code>', $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 <a href="%s">sites page</a>', 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.' ) );
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" <?php if ( function_exists( 'language_attributes' ) ) language_attributes(); ?>>
<head>
<title><?php _e( 'WordPress &rsaquo; Confirm your action' ); ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
wp_admin_css( 'install', true );
wp_admin_css( 'ie', true );
?>
</head>
<body>
<h1 id="logo"><img alt="WordPress" src="<?php echo esc_attr( admin_url( 'images/wordpress-logo.png' ) ); ?>" /></h1>
<form action="ms-edit.php?action=<?php echo esc_attr( $_GET['action2'] ) ?>" method="post">
<input type="hidden" name="action" value="<?php echo esc_attr( $_GET['action2'] ) ?>" />
<input type="hidden" name="id" value="<?php echo esc_attr( $id ); ?>" />
<input type="hidden" name="_wp_http_referer" value="<?php echo esc_attr( wp_get_referer() ); ?>" />
<?php wp_nonce_field( $_GET['action2'], '_wpnonce', false ); ?>
<p><?php echo esc_html( stripslashes( $_GET['msg'] ) ); ?></p>
<p class="submit"><input class="button" type="submit" value="<?php _e( 'Confirm' ); ?>" /></p>
</form>
</body>
</html>
<?php
break;
// Users
case 'deleteuser':
if ( ! current_user_can( 'manage_network_users' ) )
wp_die( __( 'You do not have permission to access this page.' ) );
check_admin_referer( 'deleteuser' );
if ( $id != '0' && $id != '1' ) {
$_POST['allusers'] = array( $id ); // confirm_delete_users() can only handle with arrays
$title = __( 'Users' );
$parent_file = 'ms-admin.php';
require_once( 'admin-header.php' );
echo '<div class="wrap">';
confirm_delete_users( $_POST['allusers'] );
echo '</div>';
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 '<div class="wrap">';
confirm_delete_users( $_POST['allusers'] );
echo '</div>';
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() );

View File

@ -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,
'<p>' . __('This screen sets and changes options for the network as a whole. The first site is the main site in the network and network options are pulled from that original site&#8217;s options.') . '</p>' .
'<p>' . __('Operational settings has fields for the network&#8217;s name and admin email.') . '</p>' .
'<p>' . __('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.') . '</p>' .
'<p>' . __('Registration settings can disable/enable public signups. If you let others sign up for a site, install spam plugins. Spaces, not commas, should separate names banned as sites for this network.') . '</p>' .
'<p>' . __('New site settings are defaults applied when a new site is created in the network. These include welcome email for when a new site or user account is registered, and what&#8127;s put in the first post, page, comment, comment author, and comment URL.') . '</p>' .
'<p>' . __('Upload settings control the size of the uploaded files and the amount of available upload space for each site. You can change the default value for specific sites when you edit a particular site. Allowed file types are also listed (space separated only).') . '</p>' .
'<p>' . __('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.') . '</p>' .
'<p>' . __('Menu setting enables/disables the plugin menus from appearing for non super admins, so that only super admins, not site admins, have access to activate plugins.') . '</p>' .
'<p>' . __('Super admins can no longer be added on the Options screen. You must now go to the list of existing users on 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.') . '</p>' .
'<p><strong>' . __('For more information:') . '</strong></p>' .
'<p>' . __('<a href="http://codex.wordpress.org/Super_Admin_Options_SubPanel" target="_blank">Network Options Documentation</a>') . '</p>' .
'<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
);
include( './admin-header.php' );
if (isset($_GET['updated'])) {
?>
<div id="message" class="updated"><p><?php _e( 'Options saved.' ) ?></p></div>
<?php
}
?>
<div class="wrap">
<?php screen_icon(); ?>
<h2><?php _e( 'Network Options' ) ?></h2>
<form method="post" action="ms-edit.php?action=siteoptions">
<?php wp_nonce_field( 'siteoptions' ); ?>
<h3><?php _e( 'Operational Settings' ); ?></h3>
<table class="form-table">
<tr valign="top">
<th scope="row"><label for="site_name"><?php _e( 'Network Name' ) ?></label></th>
<td>
<input name="site_name" type="text" id="site_name" class="regular-text" value="<?php echo esc_attr( $current_site->site_name ) ?>" />
<br />
<?php _e( 'What you would like to call this website.' ) ?>
</td>
</tr>
<tr valign="top">
<th scope="row"><label for="admin_email"><?php _e( 'Network Admin Email' ) ?></label></th>
<td>
<input name="admin_email" type="text" id="admin_email" class="regular-text" value="<?php echo esc_attr( get_site_option('admin_email') ) ?>" />
<br />
<?php printf( __( 'Registration and support emails will come from this address. An address such as <code>support@%s</code> is recommended.' ), $current_site->domain ); ?>
</td>
</tr>
</table>
<h3><?php _e( 'Dashboard Settings' ); ?></h3>
<table class="form-table">
<tr valign="top">
<th scope="row"><label for="dashboard_blog"><?php _e( 'Dashboard Site' ) ?></label></th>
<td>
<?php
if ( $dashboard_blog = get_site_option( 'dashboard_blog' ) ) {
$details = get_blog_details( $dashboard_blog );
$blogname = untrailingslashit( sanitize_user( str_replace( '.', '', str_replace( $current_site->domain . $current_site->path, '', $details->domain . $details->path ) ) ) );
} else {
$blogname = '';
}?>
<input name="dashboard_blog_orig" type="hidden" id="dashboard_blog_orig" value="<?php echo esc_attr( $blogname ); ?>" />
<input name="dashboard_blog" type="text" id="dashboard_blog" value="<?php echo esc_attr( $blogname ); ?>" class="regular-text" />
<br />
<?php _e( 'Site path (&#8220;dashboard&#8221;, &#8220;control&#8221;, &#8220;manager&#8221;, etc.) or blog ID.<br />New users are added to this site as the user role defined below if they don&#8217;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.' ); ?>
</td>
</tr>
<tr valign="top">
<th scope="row"><label for="default_user_role"><?php _e( 'Dashboard User Default Role' ) ?></label></th>
<td>
<select name="default_user_role" id="default_user_role"><?php
wp_dropdown_roles( get_site_option( 'default_user_role', 'subscriber' ) );
?>
</select>
<br />
<?php _e( 'The default role for new users on the Dashboard site. &#8220;Subscriber&#8221; or &#8220;Contributor&#8221; roles are recommended.' ); ?>
</td>
</tr>
<tr valign="top">
<th scope="row"><label for="admin_notice_feed"><?php _e( 'Admin Notice Feed' ) ?></label></th>
<td><input name="admin_notice_feed" class="large-text" type="text" id="admin_notice_feed" value="<?php echo esc_attr( get_site_option( 'admin_notice_feed' ) ) ?>" size="80" /><br />
<?php _e( 'Display the latest post from this RSS or Atom feed on all site dashboards. Leave blank to disable.' ); ?><br />
<?php if ( get_site_option( 'admin_notice_feed' ) != get_home_url( $current_site->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/' ) ) ?></td>
</tr>
</table>
<h3><?php _e( 'Registration Settings' ); ?></h3>
<table class="form-table">
<tr valign="top">
<th scope="row"><?php _e( 'Allow new registrations' ) ?></th>
<?php
if ( !get_site_option( 'registration' ) )
update_site_option( 'registration', 'none' );
$reg = get_site_option( 'registration' );
?>
<td>
<label><input name="registration" type="radio" id="registration1" value="none"<?php checked( $reg, 'none') ?> /> <?php _e( 'Registration is disabled.' ); ?></label><br />
<label><input name="registration" type="radio" id="registration2" value="user"<?php checked( $reg, 'user') ?> /> <?php _e( 'User accounts may be registered.' ); ?></label><br />
<label><input name="registration" type="radio" id="registration3" value="blog"<?php checked( $reg, 'blog') ?> /> <?php _e( 'Logged in users may register new sites.' ); ?></label><br />
<label><input name="registration" type="radio" id="registration4" value="all"<?php checked( $reg, 'all') ?> /> <?php _e( 'Both sites and user accounts can be registered.' ); ?></label><br />
<p><?php _e( 'Disable or enable registration and who or what can be registered. (Default is disabled.)' ); ?></p>
<?php if ( is_subdomain_install() ) {
echo '<p>' . __( 'If registration is disabled, please set <code>NOBLOGREDIRECT</code> in <code>wp-config.php</code> to a URL you will redirect visitors to if they visit a non-existent site.' ) . '</p>';
} ?>
</td>
</tr>
<tr valign="top">
<th scope="row"><?php _e( 'Registration notification' ) ?></th>
<?php
if ( !get_site_option( 'registrationnotification' ) )
update_site_option( 'registrationnotification', 'yes' );
?>
<td>
<label><input name="registrationnotification" type="checkbox" id="registrationnotification" value="yes"<?php checked( get_site_option( 'registrationnotification' ), 'yes' ) ?> /> <?php _e( 'Send the network admin an email notification every time someone registers a site or user account.' ) ?></label>
</td>
</tr>
<tr valign="top" id="addnewusers">
<th scope="row"><?php _e( 'Add New Users' ) ?></th>
<td>
<label><input name="add_new_users" type="checkbox" id="add_new_users" value="1"<?php checked( get_site_option( 'add_new_users' ) ) ?> /> <?php _e( 'Allow site administrators to add new users to their site via the "Users->Add New" page.' ); ?></label>
</td>
</tr>
<tr valign="top">
<th scope="row"><label for="illegal_names"><?php _e( 'Banned Names' ) ?></label></th>
<td>
<input name="illegal_names" type="text" id="illegal_names" class="large-text" value="<?php echo esc_attr( implode( " ", get_site_option( 'illegal_names' ) ) ); ?>" size="45" />
<br />
<?php _e( 'Users are not allowed to register these sites. Separate names by spaces.' ) ?>
</td>
</tr>
<tr valign="top">
<th scope="row"><label for="limited_email_domains"><?php _e( 'Limited Email Registrations' ) ?></label></th>
<td>
<?php $limited_email_domains = get_site_option( 'limited_email_domains' );
$limited_email_domains = str_replace( ' ', "\n", $limited_email_domains ); ?>
<textarea name="limited_email_domains" id="limited_email_domains" cols="45" rows="5">
<?php echo wp_htmledit_pre( $limited_email_domains == '' ? '' : implode( "\n", (array) $limited_email_domains ) ); ?></textarea>
<br />
<?php _e( 'If you want to limit site registrations to certain domains. One domain per line.' ) ?>
</td>
</tr>
<tr valign="top">
<th scope="row"><label for="banned_email_domains"><?php _e('Banned Email Domains') ?></label></th>
<td>
<textarea name="banned_email_domains" id="banned_email_domains" cols="45" rows="5">
<?php echo wp_htmledit_pre( get_site_option( 'banned_email_domains' ) == '' ? '' : implode( "\n", (array) get_site_option( 'banned_email_domains' ) ) ); ?></textarea>
<br />
<?php _e( 'If you want to ban domains from site registrations. One domain per line.' ) ?>
</td>
</tr>
</table>
<h3><?php _e('New Site Settings'); ?></h3>
<table class="form-table">
<tr valign="top">
<th scope="row"><label for="welcome_email"><?php _e( 'Welcome Email' ) ?></label></th>
<td>
<textarea name="welcome_email" id="welcome_email" rows="5" cols="45" class="large-text">
<?php echo wp_htmledit_pre( stripslashes( get_site_option( 'welcome_email' ) ) ) ?></textarea>
<br />
<?php _e( 'The welcome email sent to new site owners.' ) ?>
</td>
</tr>
<tr valign="top">
<th scope="row"><label for="welcome_user_email"><?php _e( 'Welcome User Email' ) ?></label></th>
<td>
<textarea name="welcome_user_email" id="welcome_user_email" rows="5" cols="45" class="large-text">
<?php echo wp_htmledit_pre( stripslashes( get_site_option( 'welcome_user_email' ) ) ) ?></textarea>
<br />
<?php _e( 'The welcome email sent to new users.' ) ?>
</td>
</tr>
<tr valign="top">
<th scope="row"><label for="first_post"><?php _e( 'First Post' ) ?></label></th>
<td>
<textarea name="first_post" id="first_post" rows="5" cols="45" class="large-text">
<?php echo wp_htmledit_pre( stripslashes( get_site_option( 'first_post' ) ) ) ?></textarea>
<br />
<?php _e( 'The first post on a new site.' ) ?>
</td>
</tr>
<tr valign="top">
<th scope="row"><label for="first_page"><?php _e( 'First Page' ) ?></label></th>
<td>
<textarea name="first_page" id="first_page" rows="5" cols="45" class="large-text">
<?php echo wp_htmledit_pre( stripslashes( get_site_option('first_page') ) ) ?></textarea>
<br />
<?php _e( 'The first page on a new site.' ) ?>
</td>
</tr>
<tr valign="top">
<th scope="row"><label for="first_comment"><?php _e( 'First Comment' ) ?></label></th>
<td>
<textarea name="first_comment" id="first_comment" rows="5" cols="45" class="large-text">
<?php echo wp_htmledit_pre( stripslashes( get_site_option('first_comment') ) ) ?></textarea>
<br />
<?php _e( 'The first comment on a new site.' ) ?>
</td>
</tr>
<tr valign="top">
<th scope="row"><label for="first_comment_author"><?php _e( 'First Comment Author' ) ?></label></th>
<td>
<input type="text" size="40" name="first_comment_author" id="first_comment_author" value="<?php echo get_site_option('first_comment_author') ?>" />
<br />
<?php _e( 'The author of the first comment on a new site.' ) ?>
</td>
</tr>
<tr valign="top">
<th scope="row"><label for="first_comment_url"><?php _e( 'First Comment URL' ) ?></label></th>
<td>
<input type="text" size="40" name="first_comment_url" id="first_comment_url" value="<?php echo esc_attr( get_site_option( 'first_comment_url' ) ) ?>" />
<br />
<?php _e( 'The URL for the first comment on a new site.' ) ?>
</td>
</tr>
</table>
<h3><?php _e( 'Upload Settings' ); ?></h3>
<table class="form-table">
<tr valign="top">
<th scope="row"><?php _e( 'Media upload buttons' ) ?></th>
<?php $mu_media_buttons = get_site_option( 'mu_media_buttons', array() ); ?>
<td><label><input type="checkbox" id="mu_media_buttons_image" name="mu_media_buttons[image]" value="1"<?php checked( ! empty( $mu_media_buttons['image'] ) ) ?>/> <?php _e( 'Images' ); ?></label><br />
<label><input type="checkbox" id="mu_media_buttons_video" name="mu_media_buttons[video]" value="1"<?php checked( ! empty( $mu_media_buttons['video'] ) ) ?>/> <?php _e( 'Videos' ); ?></label><br />
<label><input type="checkbox" id="mu_media_buttons_audio" name="mu_media_buttons[audio]" value="1"<?php checked( ! empty( $mu_media_buttons['audio'] ) ) ?>/> <?php _e( 'Music' ); ?></label><br />
<?php _e( 'The media upload buttons to display on the &#8220;Write Post&#8221; page. Make sure you update the allowed upload file types below as well.' ); ?></td>
</tr>
<tr valign="top">
<th scope="row"><?php _e( 'Site upload space' ) ?></th>
<td>
<label><input type="checkbox" id="upload_space_check_disabled" name="upload_space_check_disabled" value="0"<?php checked( get_site_option( 'upload_space_check_disabled' ), 0 ) ?>/> <?php printf( __( 'Limit total size of files uploaded to %s MB' ), '</label><label><input name="blog_upload_space" type="text" id="blog_upload_space" value="' . esc_attr( get_site_option('blog_upload_space', 10) ) . '" size="3" />' ); ?></label><br />
</td>
</tr>
<tr valign="top">
<th scope="row"><label for="upload_filetypes"><?php _e( 'Upload file types' ) ?></label></th>
<td><input name="upload_filetypes" type="text" id="upload_filetypes" class="large-text" value="<?php echo esc_attr( get_site_option('upload_filetypes', 'jpg jpeg png gif') ) ?>" size="45" /></td>
</tr>
<tr valign="top">
<th scope="row"><label for="fileupload_maxk"><?php _e( 'Max upload file size' ) ?></label></th>
<td><?php printf( _x( '%s KB', 'File size in kilobytes' ), '<input name="fileupload_maxk" type="text" id="fileupload_maxk" value="' . esc_attr( get_site_option( 'fileupload_maxk', 300 ) ) . '" size="5" />' ); ?></td>
</tr>
</table>
<?php
$languages = get_available_languages();
if ( ! empty( $languages ) ) {
$lang = get_site_option( 'WPLANG' );
?>
<h3><?php _e( 'Network Wide Settings' ); ?></h3>
<div class="updated inline"><p><strong><?php _e( 'Notice:' ); ?></strong> <?php _e( 'These settings may be overridden by site owners.' ); ?></p></div>
<table class="form-table">
<?php
?>
<tr valign="top">
<th><label for="WPLANG"><?php _e( 'Default Language' ) ?></label></th>
<td>
<select name="WPLANG" id="WPLANG">
<?php mu_dropdown_languages( $languages, get_site_option( 'WPLANG' ) ); ?>
</select>
</td>
</tr>
</table>
<?php
} // languages
?>
<h3><?php _e( 'Menu Settings' ); ?></h3>
<table id="menu" class="form-table">
<tr valign="top">
<th scope="row"><?php _e( 'Enable administration menus' ); ?></th>
<td>
<?php
$menu_perms = get_site_option( 'menu_items' );
$menu_items = apply_filters( 'mu_menu_items', array( 'plugins' => __( 'Plugins' ) ) );
foreach ( (array) $menu_items as $key => $val ) {
echo "<label><input type='checkbox' name='menu_items[" . $key . "]' value='1'" . ( isset( $menu_perms[$key] ) ? checked( $menu_perms[$key], '1', false ) : '' ) . " /> " . esc_html( $val ) . "</label><br/>";
}
?>
</td>
</tr>
</table>
<?php do_action( 'wpmu_options' ); // Add more options here ?>
<p class="submit"><input type="submit" class="button-primary" name="Submit" value="<?php esc_attr_e( 'Save Changes' ) ?>" /></p>
</form>
</div>
<?php include( './admin-footer.php' ); ?>
wp_redirect( network_admin_url('settings.php') );

View File

@ -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,
'<p>' . __('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).') . '</p>' .
'<p>' . __('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.') . '</p>' .
'<p><strong>' . __('For more information:') . '</strong></p>' .
'<p>' . __('<a href="http://codex.wordpress.org/Super_Admin_Sites_Edit_Site" target="_blank">Documentation on Editing Sites</a>') . '</p>' .
'<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
);
} else {
add_contextual_help($current_screen,
'<p>' . __('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.') . '</p>' .
'<p>' . __('This is the main table of all sites on this network. Switch between list and excerpt views by using the icons above the right side of the table.') . '</p>' .
'<p>' . __('Hovering over each site reveals seven options (three for the primary site):') . '</p>' .
'<ul><li>' . __('an Edit link to a separate Edit Site screen.') . '</li>' .
'<li>' . __('Backend means the Dashboard for that site.') . '</li>' .
'<li>' . __('Deactivate, Archive, and Spam which lead to confirmation screens. These actions can be reversed later.') . '</li>' .
'<li>' . __('Delete which is a permanent action after the confirmations screen.') . '</li>' .
'<li>' . __('Visit to go to the frontend site live.') . '</li></ul>' .
'<p>' . __('The site ID is used internally, and is not shown on the front end of the site or to users/viewers.') . '</p>' .
'<p>' . __('Clicking on bold settings can re-sort this table. The upper right icons switch between list and excerpt views.') . '</p>' .
'<p>' . __("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.") . '</p>' .
'<p>' . __('If the admin email for the new site does not exist in the database, a new user will also be created.') . '</p>' .
'<p><strong>' . __('For more information:') . '</strong></p>' .
'<p>' . __('<a href="http://codex.wordpress.org/Super_Admin_Sites_SubPanel" target="_blank">Documentation on Sites</a>') . '</p>' .
'<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
);
}
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'] ) ) {
?>
<div id="message" class="updated"><p>
<?php
switch ( $_GET['action'] ) {
case 'all_notspam':
_e( 'Sites removed from spam.' );
break;
case 'all_spam':
_e( 'Sites marked as spam.' );
break;
case 'all_delete':
_e( 'Sites deleted.' );
break;
case 'delete':
_e( 'Site deleted.' );
break;
case 'add-blog':
_e( 'Site added.' );
break;
case 'archive':
_e( 'Site archived.' );
break;
case 'unarchive':
_e( 'Site unarchived.' );
break;
case 'activate':
_e( 'Site activated.' );
break;
case 'deactivate':
_e( 'Site deactivated.' );
break;
case 'unspam':
_e( 'Site removed from spam.' );
break;
case 'spam':
_e( 'Site marked as spam.' );
break;
default:
_e( 'Settings saved.' );
break;
}
?>
</p></div>
<?php
}
$action = isset( $_GET['action'] ) ? $_GET['action'] : 'list';
switch ( $action ) {
// Edit site
case 'editblog':
$blog_prefix = $wpdb->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 );
?>
<div class="wrap">
<?php screen_icon(); ?>
<h2><?php _e( 'Edit Site' ); ?> - <a href="<?php echo esc_url( get_home_url( $id ) ); ?>"><?php echo esc_url( get_home_url( $id ) ); ?></a></h2>
<form method="post" action="ms-edit.php?action=updateblog">
<?php wp_nonce_field( 'editblog' ); ?>
<input type="hidden" name="id" value="<?php echo esc_attr( $id ) ?>" />
<div class="metabox-holder" style="width:49%;float:left;">
<div id="blogedit_bloginfo" class="postbox">
<h3 class="hndle"><span><?php _e( 'Site info (wp_blogs)' ); ?></span></h3>
<div class="inside">
<table class="form-table">
<tr class="form-field form-required">
<th scope="row"><?php _e( 'Domain' ) ?></th>
<?php
$protocol = is_ssl() ? 'https://' : 'http://';
if ( $is_main_site ) { ?>
<td><code><?php echo $protocol; echo esc_attr( $details->domain ) ?></code></td>
<?php } else { ?>
<td><?php echo $protocol; ?><input name="blog[domain]" type="text" id="domain" value="<?php echo esc_attr( $details->domain ) ?>" size="33" /></td>
<?php } ?>
</tr>
<tr class="form-field form-required">
<th scope="row"><?php _e( 'Path' ) ?></th>
<?php if ( $is_main_site ) { ?>
<td><code><?php echo esc_attr( $details->path ) ?></code></td>
<?php } else { ?>
<td><input name="blog[path]" type="text" id="path" value="<?php echo esc_attr( $details->path ) ?>" size="40" style='margin-bottom:5px;' />
<br /><input type="checkbox" style="width:20px;" name="update_home_url" value="update" <?php if ( get_blog_option( $id, 'siteurl' ) == untrailingslashit( get_blogaddress_by_id ($id ) ) || get_blog_option( $id, 'home' ) == untrailingslashit( get_blogaddress_by_id( $id ) ) ) echo 'checked="checked"'; ?> /> <?php _e( 'Update <code>siteurl</code> and <code>home</code> as well.' ); ?></td>
<?php } ?>
</tr>
<tr class="form-field">
<th scope="row"><?php _ex( 'Registered', 'site' ) ?></th>
<td><input name="blog[registered]" type="text" id="blog_registered" value="<?php echo esc_attr( $details->registered ) ?>" size="40" /></td>
</tr>
<tr class="form-field">
<th scope="row"><?php _e('Last Updated') ?></th>
<td><input name="blog[last_updated]" type="text" id="blog_last_updated" value="<?php echo esc_attr( $details->last_updated ) ?>" size="40" /></td>
</tr>
<?php
$radio_fields = array( 'public' => __( '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 ) {
?>
<tr>
<th scope="row"><?php echo $field_label; ?></th>
<td>
<input type="radio" name="blog[<?php echo $field_key; ?>]" id="blog_<?php echo $field_key; ?>_1" value="1"<?php checked( $details->$field_key, 1 ); ?> />
<label for="blog_<?php echo $field_key; ?>_1"><?php _e('Yes'); ?></label>
<input type="radio" name="blog[<?php echo $field_key; ?>]" id="blog_<?php echo $field_key; ?>_0" value="0"<?php checked( $details->$field_key, 0 ); ?> />
<label for="blog_<?php echo $field_key; ?>_0"><?php _e('No'); ?></label>
</td>
</tr>
<?php } ?>
</table>
<p class="submit" style="text-align:center;"><input type="submit" name="Submit" value="<?php esc_attr_e( 'Update Options' ) ?>" /></p>
</div>
</div>
<div id="blogedit_blogoptions" class="postbox" >
<h3 class="hndle"><span><?php printf( __( 'Site options (%soptions)' ), $blog_prefix ); ?></span></h3>
<div class="inside">
<table class="form-table">
<?php
$editblog_default_role = 'subscriber';
foreach ( $options as $option ) {
if ( $option->option_name == 'default_role' )
$editblog_default_role = $option->option_value;
$disabled = false;
$class = 'all-options';
if ( is_serialized( $option->option_value ) ) {
if ( is_serialized_string( $option->option_value ) ) {
$option->option_value = esc_html( maybe_unserialize( $option->option_value ), 'single' );
} else {
$option->option_value = 'SERIALIZED DATA';
$disabled = true;
$class = 'all-options disabled';
}
}
if ( strpos( $option->option_value, "\n" ) !== false ) {
?>
<tr class="form-field">
<th scope="row"><?php echo ucwords( str_replace( "_", " ", $option->option_name ) ) ?></th>
<td><textarea class="<?php echo $class; ?>" rows="5" cols="40" name="option[<?php echo esc_attr( $option->option_name ) ?>]" id="<?php echo esc_attr( $option->option_name ) ?>"<?php disabled( $disabled ) ?>><?php echo wp_htmledit_pre( $option->option_value ) ?></textarea></td>
</tr>
<?php
} else {
?>
<tr class="form-field">
<th scope="row"><?php echo esc_html( ucwords( str_replace( "_", " ", $option->option_name ) ) ); ?></th>
<?php if ( $is_main_site && in_array( $option->option_name, array( 'siteurl', 'home' ) ) ) { ?>
<td><code><?php echo esc_html( $option->option_value ) ?></code></td>
<?php } else { ?>
<td><input class="<?php echo $class; ?>" name="option[<?php echo esc_attr( $option->option_name ) ?>]" type="text" id="<?php echo esc_attr( $option->option_name ) ?>" value="<?php echo esc_attr( $option->option_value ) ?>" size="40" <?php disabled( $disabled ) ?> /></td>
<?php } ?>
</tr>
<?php
}
} // End foreach
?>
</table>
<p class="submit" style="text-align:center;"><input type="submit" name="Submit" value="<?php esc_attr_e( 'Update Options' ) ?>" /></p>
</div>
</div>
</div>
<div class="metabox-holder" style="width:49%;float:right;">
<?php
// Site Themes
$themes = get_themes();
$blog_allowed_themes = wpmu_get_blog_allowedthemes( $id );
$allowed_themes = get_site_option( 'allowedthemes' );
if ( ! $allowed_themes )
$allowed_themes = array_keys( $themes );
$out = '';
foreach ( $themes as $key => $theme ) {
$theme_key = esc_html( $theme['Stylesheet'] );
if ( ! isset( $allowed_themes[$theme_key] ) ) {
$checked = isset( $blog_allowed_themes[ $theme_key ] ) ? 'checked="checked"' : '';
$out .= '<tr class="form-field form-required">
<th title="' . esc_attr( $theme["Description"] ).'" scope="row">' . esc_html( $key ) . '</th>
<td><label><input name="theme[' . esc_attr( $theme_key ) . ']" type="checkbox" style="width:20px;" value="on" '.$checked.'/> ' . __( 'Active' ) . '</label></td>
</tr>';
}
}
if ( $out != '' ) {
?>
<div id="blogedit_blogthemes" class="postbox">
<h3 class="hndle"><span><?php esc_html_e( 'Site Themes' ); ?></span></h3>
<div class="inside">
<p class="description"><?php _e( 'Activate the themename of an existing theme and hit "Update Options" to allow the theme for this site.' ) ?></p>
<table class="form-table">
<?php echo $out; ?>
</table>
<p class="submit" style="text-align:center;"><input type="submit" name="Submit" value="<?php esc_attr_e( 'Update Options' ) ?>" /></p>
</div></div>
<?php }
// Site users
$blogusers = get_users_of_blog( $id );
if ( is_array( $blogusers ) ) {
echo '<div id="blogedit_blogusers" class="postbox"><h3 class="hndle"><span>' . __( 'Site Users' ) . '</span></h3><div class="inside">';
echo '<table class="form-table">';
echo "<tr><th>" . __( 'User' ) . "</th><th>" . __( 'Role' ) . "</th><th>" . __( 'Password' ) . "</th><th>" . __( 'Remove' ) . "</th></tr>";
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 '<tr><td><a href="user-edit.php?user_id=' . $val->user_id . '">' . $val->user_login . '</a></td>';
if ( $val->user_id != $current_user->data->ID ) {
?>
<td>
<select name="role[<?php echo $val->user_id ?>]" id="new_role_1"><?php
foreach ( $editblog_roles as $role => $role_assoc ){
$name = translate_user_role( $role_assoc['name'] );
echo '<option ' . selected( $role, $existing_role, false ) . ' value="' . esc_attr( $role ) . '">' . esc_html( $name ) . '</option>';
}
?>
</select>
</td>
<td>
<input type="text" name="user_password[<?php echo esc_attr( $val->user_id ) ?>]" />
</td>
<?php
echo '<td><input title="' . __( 'Click to remove user' ) . '" type="checkbox" name="blogusers[' . esc_attr( $val->user_id ) . ']" /></td>';
} else {
echo "<td><strong>" . __ ( 'N/A' ) . "</strong></td><td><strong>" . __ ( 'N/A' ) . "</strong></td><td><strong>" . __( 'N/A' ) . "</strong></td>";
}
echo '</tr>';
}
echo "</table>";
echo '<p class="submit" style="text-align:center;"><input type="submit" name="Submit" value="' . esc_attr__( 'Update Options' ) . '" /></p>';
echo "</div></div>";
}
?>
<div id="blogedit_blogadduser" class="postbox">
<h3 class="hndle"><span><?php _e( 'Add a new user' ); ?></span></h3>
<div class="inside">
<p class="description"><?php _e( 'Enter the username of an existing user and hit &#8220;Update Options&#8221; to add the user.' ) ?></p>
<table class="form-table">
<tr>
<th scope="row"><?php _e( 'User&nbsp;Login:' ) ?></th>
<td><input type="text" name="newuser" id="newuser" /></td>
</tr>
<tr>
<th scope="row"><?php _e( 'Role:' ) ?></th>
<td>
<select name="new_role" id="new_role_0">
<?php
reset( $editblog_roles );
foreach ( $editblog_roles as $role => $role_assoc ){
$name = translate_user_role( $role_assoc['name'] );
$selected = ( $role == $editblog_default_role ) ? 'selected="selected"' : '';
echo '<option ' . $selected . ' value="' . esc_attr( $role ) . '">' . esc_html( $name ) . '</option>';
}
?>
</select>
</td>
</tr>
</table>
<p class="submit" style="text-align:center;"><input type="submit" name="Submit" value="<?php esc_attr_e( 'Update Options' ) ?>" /></p>
</div>
</div>
<div id="blogedit_miscoptions" class="postbox">
<h3 class="hndle"><span><?php _e( 'Misc Site Actions' ) ?></span></h3>
<div class="inside">
<table class="form-table">
<?php do_action( 'wpmueditblogaction', $id ); ?>
</table>
<p class="submit" style="text-align:center;"><input type="submit" name="Submit" value="<?php esc_attr_e( 'Update Options' ) ?>" /></p>
</div>
</div>
</div>
<div style="clear:both;"></div>
</form>
</div>
<?php
break;
// List sites
case 'list':
default:
$pagenum = isset( $_GET['paged'] ) ? absint( $_GET['paged'] ) : 0;
if ( empty($pagenum) )
$pagenum = 1;
$per_page = (int) get_user_option( 'ms_sites_per_page' );
if ( empty( $per_page ) || $per_page < 1 )
$per_page = 15;
$per_page = apply_filters( 'ms_sites_per_page', $per_page );
$s = isset( $_GET['s'] ) ? stripslashes( trim( $_GET[ 's' ] ) ) : '';
$like_s = esc_sql( like_escape( $s ) );
$query = "SELECT * FROM {$wpdb->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' => __( '&laquo;' ),
'next_text' => __( '&raquo;' ),
'total' => $num_pages,
'current' => $pagenum
));
if ( empty( $_GET['mode'] ) )
$mode = 'list';
else
$mode = esc_attr( $_GET['mode'] );
?>
<div class="wrap">
<?php screen_icon(); ?>
<h2><?php _e('Sites') ?>
<a href="#form-add-site" class="button add-new-h2"><?php echo esc_html_x( 'Add New', 'sites' ); ?></a>
<?php
if ( isset( $_GET['s'] ) && $_GET['s'] )
printf( '<span class="subtitle">' . __( 'Search results for &#8220;%s&#8221;' ) . '</span>', esc_html( $s ) );
?>
</h2>
<form action="ms-sites.php" method="get" id="ms-search">
<p class="search-box">
<input type="hidden" name="action" value="blogs" />
<input type="text" name="s" value="<?php echo esc_attr( $s ); ?>" />
<input type="submit" class="button" value="<?php esc_attr_e( 'Search Site by' ) ?>" />
<select name="searchaction">
<option value="name" selected="selected"><?php _e( 'Name' ); ?></option>
<option value="id"><?php _e( 'ID' ); ?></option>
<option value="ip"><?php _e( 'IP address' ); ?></option>
</select>
</p>
</form>
<form id="form-site-list" action="ms-edit.php?action=allblogs" method="post">
<input type="hidden" name="mode" value="<?php echo esc_attr( $mode ); ?>" />
<div class="tablenav">
<div class="alignleft actions">
<select name="action">
<option value="-1" selected="selected"><?php _e( 'Bulk Actions' ); ?></option>
<option value="delete"><?php _e( 'Delete' ); ?></option>
<option value="spam"><?php _ex( 'Mark as Spam', 'site' ); ?></option>
<option value="notspam"><?php _ex( 'Not Spam', 'site' ); ?></option>
</select>
<input type="submit" value="<?php esc_attr_e( 'Apply' ); ?>" name="doaction" id="doaction" class="button-secondary action" />
<?php wp_nonce_field( 'bulk-ms-sites', '_wpnonce_bulk-ms-sites' ); ?>
</div>
<?php if ( $page_links ) { ?>
<div class="tablenav-pages">
<?php $page_links_text = sprintf( '<span class="displaying-num">' . __( 'Displaying %s&#8211;%s of %s' ) . '</span>%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; ?>
</div>
<?php } ?>
<div class="view-switch">
<a href="<?php echo esc_url( add_query_arg( 'mode', 'list', $_SERVER['REQUEST_URI'] ) ) ?>"><img <?php if ( 'list' == $mode ) echo 'class="current"'; ?> id="view-switch-list" src="<?php echo esc_url( includes_url( 'images/blank.gif' ) ); ?>" width="20" height="20" title="<?php _e( 'List View' ) ?>" alt="<?php _e( 'List View' ) ?>" /></a>
<a href="<?php echo esc_url( add_query_arg( 'mode', 'excerpt', $_SERVER['REQUEST_URI'] ) ) ?>"><img <?php if ( 'excerpt' == $mode ) echo 'class="current"'; ?> id="view-switch-excerpt" src="<?php echo esc_url( includes_url( 'images/blank.gif' ) ); ?>" width="20" height="20" title="<?php _e( 'Excerpt View' ) ?>" alt="<?php _e( 'Excerpt View' ) ?>" /></a>
</div>
</div>
<div class="clear"></div>
<?php
// define the columns to display, the syntax is 'internal name' => '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 );
?>
<table class="widefat">
<thead>
<tr>
<th class="manage-column column-cb check-column" id="cb" scope="col">
<input type="checkbox" />
</th>
<?php
$col_url = '';
foreach($sites_columns as $column_id => $column_display_name) {
$column_link = "<a href='";
$order2 = '';
if ( $order_by == $column_id )
$order2 = ( $order == 'DESC' ) ? 'ASC' : 'DESC';
$column_link .= esc_url( add_query_arg( array( 'order' => $order2, 'paged' => $pagenum, 'sortby' => $column_id ), remove_query_arg( array('action', 'updated'), $_SERVER['REQUEST_URI'] ) ) );
$column_link .= "'>{$column_display_name}</a>";
$col_url .= '<th scope="col">' . ( ( $column_id == 'users' || $column_id == 'plugins' ) ? $column_display_name : $column_link ) . '</th>';
}
echo $col_url ?>
</tr>
</thead>
<tfoot>
<tr>
<th class="manage-column column-cb check-column" id="cb1" scope="col">
<input type="checkbox" />
</th>
<?php echo $col_url ?>
</tr>
</tfoot>
<tbody id="the-site-list" class="list:site">
<?php
$status_list = array( 'archived' => 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 .= "<span class='post-state'>$state$sep</span>";
}
}
echo "<tr class='$class'>";
$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': ?>
<th scope="row" class="check-column">
<input type="checkbox" id="blog_<?php echo $blog['blog_id'] ?>" name="allblogs[]" value="<?php echo esc_attr( $blog['blog_id'] ) ?>" />
</th>
<th valign="top" scope="row">
<?php echo $blog['blog_id'] ?>
</th>
<?php
break;
case 'blogname': ?>
<td class="column-title">
<a href="<?php echo esc_url( admin_url( 'ms-sites.php?action=editblog&amp;id=' . $blog['blog_id'] ) ); ?>" class="edit"><?php echo $blogname . $blog_state; ?></a>
<?php
if ( 'list' != $mode )
echo '<p>' . sprintf( _x( '%1$s &#8211; <em>%2$s</em>', '%1$s: site name. %2$s: site tagline.' ), get_blog_option( $blog['blog_id'], 'blogname' ), get_blog_option( $blog['blog_id'], 'blogdescription ' ) ) . '</p>';
// Preordered.
$actions = array(
'edit' => '', 'backend' => '',
'activate' => '', 'deactivate' => '',
'archive' => '', 'unarchive' => '',
'spam' => '', 'unspam' => '',
'delete' => '',
'visit' => '',
);
$actions['edit'] = '<span class="edit"><a href="' . esc_url( admin_url( 'ms-sites.php?action=editblog&amp;id=' . $blog['blog_id'] ) ) . '">' . __( 'Edit' ) . '</a></span>';
$actions['backend'] = "<span class='backend'><a href='" . esc_url( get_admin_url($blog['blog_id']) ) . "' class='edit'>" . __( 'Backend' ) . '</a></span>';
if ( $current_site->blog_id != $blog['blog_id'] ) {
if ( get_blog_status( $blog['blog_id'], 'deleted' ) == '1' )
$actions['activate'] = '<span class="activate"><a href="' . esc_url( admin_url( 'ms-edit.php?action=confirm&amp;action2=activateblog&amp;id=' . $blog['blog_id'] . '&amp;msg=' . urlencode( sprintf( __( 'You are about to activate the site %s' ), $blogname ) ) ) ) . '">' . __( 'Activate' ) . '</a></span>';
else
$actions['deactivate'] = '<span class="activate"><a href="' . esc_url( admin_url( 'ms-edit.php?action=confirm&amp;action2=deactivateblog&amp;id=' . $blog['blog_id'] . '&amp;msg=' . urlencode( sprintf( __( 'You are about to deactivate the site %s' ), $blogname ) ) ) ) . '">' . __( 'Deactivate' ) . '</a></span>';
if ( get_blog_status( $blog['blog_id'], 'archived' ) == '1' )
$actions['unarchive'] = '<span class="archive"><a href="' . esc_url( admin_url( 'ms-edit.php?action=confirm&amp;action2=unarchiveblog&amp;id=' . $blog['blog_id'] . '&amp;msg=' . urlencode( sprintf( __( 'You are about to unarchive the site %s.' ), $blogname ) ) ) ) . '">' . __( 'Unarchive' ) . '</a></span>';
else
$actions['archive'] = '<span class="archive"><a href="' . esc_url( admin_url( 'ms-edit.php?action=confirm&amp;action2=archiveblog&amp;id=' . $blog['blog_id'] . '&amp;msg=' . urlencode( sprintf( __( 'You are about to archive the site %s.' ), $blogname ) ) ) ) . '">' . _x( 'Archive', 'verb; site' ) . '</a></span>';
if ( get_blog_status( $blog['blog_id'], 'spam' ) == '1' )
$actions['unspam'] = '<span class="spam"><a href="' . esc_url( admin_url( 'ms-edit.php?action=confirm&amp;action2=unspamblog&amp;id=' . $blog['blog_id'] . '&amp;msg=' . urlencode( sprintf( __( 'You are about to unspam the site %s.' ), $blogname ) ) ) ) . '">' . _x( 'Not Spam', 'site' ) . '</a></span>';
else
$actions['spam'] = '<span class="spam"><a href="' . esc_url( admin_url( 'ms-edit.php?action=confirm&amp;action2=spamblog&amp;id=' . $blog['blog_id'] . '&amp;msg=' . urlencode( sprintf( __( 'You are about to mark the site %s as spam.' ), $blogname ) ) ) ) . '">' . _x( 'Spam', 'site' ) . '</a></span>';
$actions['delete'] = '<span class="delete"><a href="' . esc_url( admin_url( 'ms-edit.php?action=confirm&amp;action2=deleteblog&amp;id=' . $blog['blog_id'] . '&amp;msg=' . urlencode( sprintf( __( 'You are about to delete the site %s.' ), $blogname ) ) ) ) . '">' . __( 'Delete' ) . '</a></span>';
}
$actions['visit'] = "<span class='view'><a href='" . esc_url( get_home_url( $blog['blog_id'] ) ) . "' rel='permalink'>" . __( 'Visit' ) . '</a></span>';
$actions = array_filter( $actions );
if ( count( $actions ) ) : ?>
<div class="row-actions">
<?php echo implode( ' | ', $actions ); ?>
</div>
<?php endif; ?>
</td>
<?php
break;
case 'lastupdated': ?>
<td valign="top">
<?php
if ( 'list' == $mode )
$date = 'Y/m/d';
else
$date = 'Y/m/d \<\b\r \/\> g:i:s a';
echo ( $blog['last_updated'] == '0000-00-00 00:00:00' ) ? __( 'Never' ) : mysql2date( __( $date ), $blog['last_updated'] ); ?>
</td>
<?php
break;
case 'registered': ?>
<td valign="top">
<?php
if ( $blog['registered'] == '0000-00-00 00:00:00' )
echo '&#x2014;';
else
echo mysql2date( __( $date ), $blog['registered'] );
?>
</td>
<?php
break;
case 'users': ?>
<td valign="top">
<?php
$blogusers = get_users_of_blog( $blog['blog_id'] );
if ( is_array( $blogusers ) ) {
$blogusers_warning = '';
if ( count( $blogusers ) > 5 ) {
$blogusers = array_slice( $blogusers, 0, 5 );
$blogusers_warning = __( 'Only showing first 5 users.' ) . ' <a href="' . esc_url( get_admin_url( $blog['blog_id'], 'users.php' ) ) . '">' . __( 'More' ) . '</a>';
}
foreach ( $blogusers as $key => $val ) {
echo '<a href="' . esc_url( admin_url( 'user-edit.php?user_id=' . $val->user_id ) ) . '">' . esc_html( $val->user_login ) . '</a> ';
if ( 'list' != $mode )
echo '(' . $val->user_email . ')';
echo '<br />';
}
if ( $blogusers_warning != '' )
echo '<strong>' . $blogusers_warning . '</strong><br />';
}
?>
</td>
<?php
break;
case 'plugins': ?>
<?php if ( has_filter( 'wpmublogsaction' ) ) { ?>
<td valign="top">
<?php do_action( 'wpmublogsaction', $blog['blog_id'] ); ?>
</td>
<?php } ?>
<?php break;
default: ?>
<?php if ( has_filter( 'manage_blogs_custom_column' ) ) { ?>
<td valign="top">
<?php do_action( 'manage_blogs_custom_column', $column_name, $blog['blog_id'] ); ?>
</td>
<?php } ?>
<?php break;
}
}
?>
</tr>
<?php
}
} else { ?>
<tr>
<td colspan="<?php echo (int) count( $sites_columns ); ?>"><?php _e( 'No sites found.' ) ?></td>
</tr>
<?php
} // end if ($blogs)
?>
</tbody>
</table>
<div class="tablenav">
<?php
if ( $page_links )
echo "<div class='tablenav-pages'>$page_links_text</div>";
?>
<div class="alignleft actions">
<select name="action2">
<option value="-1" selected="selected"><?php _e( 'Bulk Actions' ); ?></option>
<option value="delete"><?php _e( 'Delete' ); ?></option>
<option value="spam"><?php _ex( 'Mark as Spam', 'site' ); ?></option>
<option value="notspam"><?php _ex( 'Not Spam', 'site' ); ?></option>
</select>
<input type="submit" value="<?php esc_attr_e( 'Apply' ); ?>" name="doaction2" id="doaction2" class="button-secondary action" />
</div>
<br class="clear" />
</div>
</form>
</div>
<div id="form-add-site" class="wrap">
<h3><?php _e( 'Add Site' ) ?></h3>
<form method="post" action="ms-edit.php?action=addblog">
<?php wp_nonce_field( 'add-blog', '_wpnonce_add-blog' ) ?>
<table class="form-table">
<tr class="form-field form-required">
<th scope="row"><?php _e( 'Site Address' ) ?></th>
<td>
<?php if ( is_subdomain_install() ) { ?>
<input name="blog[domain]" type="text" class="regular-text" title="<?php _e( 'Domain' ) ?>"/>.<?php echo preg_replace( '|^www\.|', '', $current_site->domain );?>
<?php } else {
echo $current_site->domain . $current_site->path ?><input name="blog[domain]" class="regular-text" type="text" title="<?php _e( 'Domain' ) ?>"/>
<?php }
echo '<p>' . __( 'Only the characters a-z and 0-9 recommended.' ) . '</p>';
?>
</td>
</tr>
<tr class="form-field form-required">
<th scope="row"><?php _e( 'Site Title' ) ?></th>
<td><input name="blog[title]" type="text" class="regular-text" title="<?php _e( 'Title' ) ?>"/></td>
</tr>
<tr class="form-field form-required">
<th scope="row"><?php _e( 'Admin Email' ) ?></th>
<td><input name="blog[email]" type="text" class="regular-text" title="<?php _e( 'Email' ) ?>"/></td>
</tr>
<tr class="form-field">
<td colspan="2"><?php _e( 'A new user will be created if the above email address is not in the database.' ) ?><br /><?php _e( 'The username and password will be mailed to this email address.' ) ?></td>
</tr>
</table>
<p class="submit">
<input class="button" type="submit" name="go" value="<?php esc_attr_e( 'Add Site' ) ?>" /></p>
</form>
</div>
<?php
break;
} // end switch( $action )
include( './admin-footer.php' ); ?>
wp_redirect( network_admin_url('sites.php') );

View File

@ -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,
'<p>' . __('This screen enables and disables the inclusion of themes available to choose in the Appearance menu for each site. It does not activate or deactivate which theme a site is currently using.') . '</p>' .
'<p>' . __('If the network admin disables a theme that is in use, it can still remain selected on that site. If another theme is chosen, the disabled theme will not appear in the site&#8217;s Appearance > Themes screen.') . '</p>' .
'<p>' . __('Themes can be enabled on a site by site basis by the network admin on the Edit Site screen you go to via the Edit action link on the Sites screen.') . '</p>' .
'<p><strong>' . __('For more information:') . '</strong></p>' .
'<p>' . __('<a href="http://codex.wordpress.org/Super_Admin_Themes_SubPanel" target="_blank">Documentation on Network Themes</a>') . '</p>' .
'<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
);
require_once( './admin-header.php' );
if ( isset( $_GET['updated'] ) ) {
?>
<div id="message" class="updated"><p><?php _e( 'Site themes saved.' ) ?></p></div>
<?php
}
$themes = get_themes();
$allowed_themes = get_site_allowed_themes();
?>
<div class="wrap">
<form action="<?php echo esc_url( admin_url( 'ms-edit.php?action=updatethemes' ) ); ?>" method="post">
<?php screen_icon(); ?>
<h2><?php _e( 'Network Themes' ) ?></h2>
<p><?php _e( 'Themes must be enabled for your network before they will be available to individual sites.' ) ?></p>
<p class="submit">
<input type="submit" value="<?php _e( 'Apply Changes' ) ?>" /></p>
<table class="widefat">
<thead>
<tr>
<th style="width:15%;"><?php _e( 'Enable' ) ?></th>
<th style="width:25%;"><?php _e( 'Theme' ) ?></th>
<th style="width:10%;"><?php _e( 'Version' ) ?></th>
<th style="width:60%;"><?php _e( 'Description' ) ?></th>
</tr>
</thead>
<tbody id="plugins">
<?php
$total_theme_count = $activated_themes_count = 0;
$class = '';
foreach ( (array) $themes as $key => $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;
}
?>
<tr valign="top" class="<?php echo $class . ' ' . $class1; ?>">
<td>
<label><input name="theme[<?php echo $theme_key ?>]" type="radio" id="enabled_<?php echo $theme_key ?>" value="enabled" <?php checked( $enabled ) ?> /> <?php _e( 'Yes' ) ?></label>
&nbsp;&nbsp;&nbsp;
<label><input name="theme[<?php echo $theme_key ?>]" type="radio" id="disabled_<?php echo $theme_key ?>" value="disabled" <?php checked( $disabled ) ?> /> <?php _e( 'No' ) ?></label>
</td>
<th scope="row" style="text-align:left;"><?php echo $key ?></th>
<td><?php echo $theme['Version'] ?></td>
<td><?php echo $theme['Description'] ?></td>
</tr>
<?php } ?>
</tbody>
</table>
<p class="submit">
<input type="submit" value="<?php _e( 'Apply Changes' ) ?>" /></p>
</form>
<h3><?php _e( 'Total' )?></h3>
<p>
<?php printf( __( 'Themes Installed: %d' ), $total_theme_count); ?>
<br />
<?php printf( __( 'Themes Enabled: %d' ), $activated_themes_count); ?>
</p>
</div>
<?php include( './admin-footer.php' ); ?>
wp_redirect( network_admin_url('themes.php') );

View File

@ -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,
'<p>' . __('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.') . '</p>' .
'<p>' . __('If a version update to core has not happened, clicking this button won&#8217;t affect anything.') . '</p>' .
'<p>' . __('If this process fails for any reason, users logging in to their sites will force the same update.') . '</p>' .
'<p><strong>' . __('For more information:') . '</strong></p>' .
'<p>' . __('<a href="http://codex.wordpress.org/Super_Admin_Update_SubPanel" target="_blank">Update Network Documentation</a>') . '</p>' .
'<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
);
require_once('admin-header.php');
if ( ! current_user_can( 'manage_network' ) )
wp_die( __( 'You do not have permission to access this page.' ) );
echo '<div class="wrap">';
screen_icon();
echo '<h2>' . __( 'Update Network' ) . '</h2>';
$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 '<p>' . __( 'All done!' ) . '</p>';
break;
}
echo "<ul>";
foreach ( (array) $blogs as $details ) {
$siteurl = get_blog_option( $details['blog_id'], 'siteurl' );
echo "<li>$siteurl</li>";
$response = wp_remote_get( trailingslashit( $siteurl ) . "wp-admin/upgrade.php?step=upgrade_db", array( 'timeout' => 120, 'httpversion' => '1.1' ) );
if ( is_wp_error( $response ) )
wp_die( sprintf( __( 'Warning! Problem updating %1$s. Your server may not be able to connect to sites running on it. Error message: <em>%2$s</em>' ), $siteurl, $response->get_error_message() ) );
do_action( 'after_mu_upgrade', $response );
do_action( 'wpmu_upgrade_site', $details[ 'blog_id' ] );
}
echo "</ul>";
?><p><?php _e( 'If your browser doesn&#8217;t start loading the next page automatically, click this link:' ); ?> <a class="button" href="ms-upgrade-network.php?action=upgrade&amp;n=<?php echo ($n + 5) ?>"><?php _e("Next Sites"); ?></a></p>
<script type='text/javascript'>
<!--
function nextpage() {
location.href = "ms-upgrade-network.php?action=upgrade&n=<?php echo ($n + 5) ?>";
}
setTimeout( "nextpage()", 250 );
//-->
</script><?php
break;
case 'show':
default:
?><p><?php _e( 'You can update all the sites on your network through this page. It works by calling the update script of each site automatically. Hit the link below to update.' ); ?></p>
<p><a class="button" href="ms-upgrade-network.php?action=upgrade"><?php _e("Update Network"); ?></a></p><?php
do_action( 'wpmu_upgrade_page' );
break;
}
?>
</div>
<?php include('./admin-footer.php'); ?>
wp_redirect( network_admin_url('upgrade.php') );

View File

@ -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,
'<p>' . __('This table shows all users across the network and the sites to which they are assigned.') . '</p>' .
'<p>' . __('Hover over any user on the list to make the edit links appear. The Edit link on the left will take you to 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.') . '</p>' .
'<p>' . __('You can also go to the user&#8217;s profile page by clicking on the individual username.') . '</p>' .
'<p>' . __('You can sort the table by clicking on any of the bold headings and switch between list and excerpt views by using the icons in the upper right.') . '</p>' .
'<p>' . __('The bulk action will permanently delete selected users, or mark/unmark those selected as spam. Spam users will have posts removed and will be unable to sign up again with the same email addresses.') . '</p>' .
'<p>' . __('Add User will add that person to this table and send them an email.') . '</p>' .
'<p>' . __('Users who are signed up to the network without a site are added as subscribers to the main or primary dashboard site, giving them profile pages to manage their accounts. These users will only see Dashboard and My Sites in the main navigation until a site is created for them.') . '</p>' .
'<p>' . __('You can make an existing user an additional super admin by going to the Edit User profile page and checking the box to grant that privilege.') . '</p>' .
'<p><strong>' . __('For more information:') . '</strong></p>' .
'<p>' . __('<a href="http://codex.wordpress.org/Super_Admin_Users_SubPanel" target="_blank">Network Users Documentation</a>') . '</p>' .
'<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
);
wp_enqueue_script( 'admin-forms' );
require_once( './admin-header.php' );
if ( isset( $_GET['updated'] ) && $_GET['updated'] == 'true' && ! empty( $_GET['action'] ) ) {
?>
<div id="message" class="updated"><p>
<?php
switch ( $_GET['action'] ) {
case 'delete':
_e( 'User deleted.' );
break;
case 'all_spam':
_e( 'Users marked as spam.' );
break;
case 'all_notspam':
_e( 'Users removed from spam.' );
break;
case 'all_delete':
_e( 'Users deleted.' );
break;
case 'add':
_e( 'User added.' );
break;
}
?>
</p></div>
<?php
}
$pagenum = isset( $_GET['paged'] ) ? absint( $_GET['paged'] ) : 0;
if ( empty( $pagenum ) )
$pagenum = 1;
$per_page = (int) get_user_option( 'ms_users_per_page' );
if ( empty( $per_page ) || $per_page < 1 )
$per_page = 15;
$per_page = apply_filters( 'ms_users_per_page', $per_page );
$s = isset( $_GET['s'] ) ? stripslashes( trim( $_GET[ 's' ] ) ) : '';
$like_s = esc_sql( like_escape( $s ) );
$query = "SELECT * FROM {$wpdb->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' => __( '&laquo;' ),
'next_text' => __( '&raquo;' ),
'total' => $num_pages,
'current' => $pagenum
));
if ( empty( $_GET['mode'] ) )
$mode = 'list';
else
$mode = esc_attr( $_GET['mode'] );
?>
<div class="wrap">
<?php screen_icon(); ?>
<h2><?php esc_html_e( 'Users' ); ?>
<a href="#form-add-user" class="button add-new-h2"><?php echo esc_html_x( 'Add New' , 'users'); ?></a>
<?php
if ( isset( $_GET['s'] ) && $_GET['s'] )
printf( '<span class="subtitle">' . __( 'Search results for &#8220;%s&#8221;' ) . '</span>', esc_html( $s ) );
?>
</h2>
<form action="ms-users.php" method="get" class="search-form">
<p class="search-box">
<input type="text" name="s" value="<?php echo esc_attr( $s ); ?>" class="search-input" id="user-search-input" />
<input type="submit" id="post-query-submit" value="<?php esc_attr_e( 'Search Users' ) ?>" class="button" />
</p>
</form>
<form id="form-user-list" action='ms-edit.php?action=allusers' method='post'>
<input type="hidden" name="mode" value="<?php echo esc_attr( $mode ); ?>" />
<div class="tablenav">
<div class="alignleft actions">
<select name="action">
<option value="-1" selected="selected"><?php _e( 'Bulk Actions' ); ?></option>
<option value="delete"><?php _e( 'Delete' ); ?></option>
<option value="spam"><?php _ex( 'Mark as Spam', 'user' ); ?></option>
<option value="notspam"><?php _ex( 'Not Spam', 'user' ); ?></option>
</select>
<input type="submit" value="<?php esc_attr_e( 'Apply' ); ?>" name="doaction" id="doaction" class="button-secondary action" />
<?php wp_nonce_field( 'bulk-ms-users', '_wpnonce_bulk-ms-users' ); ?>
</div>
<?php if ( $page_links ) { ?>
<div class="tablenav-pages">
<?php $page_links_text = sprintf( '<span class="displaying-num">' . __( 'Displaying %s&#8211;%s of %s' ) . '</span>%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; ?>
</div>
<?php } ?>
<div class="view-switch">
<a href="<?php echo esc_url( add_query_arg( 'mode', 'list', $_SERVER['REQUEST_URI'] ) ) ?>"><img <?php if ( 'list' == $mode ) echo 'class="current"'; ?> id="view-switch-list" src="<?php echo esc_url( includes_url( 'images/blank.gif' ) ); ?>" width="20" height="20" title="<?php _e( 'List View' ) ?>" alt="<?php _e( 'List View' ) ?>" /></a>
<a href="<?php echo esc_url( add_query_arg( 'mode', 'excerpt', $_SERVER['REQUEST_URI'] ) ) ?>"><img <?php if ( 'excerpt' == $mode ) echo 'class="current"'; ?> id="view-switch-excerpt" src="<?php echo esc_url( includes_url( 'images/blank.gif' ) ); ?>" width="20" height="20" title="<?php _e( 'Excerpt View' ) ?>" alt="<?php _e( 'Excerpt View' ) ?>" /></a>
</div>
</div>
<div class="clear"></div>
<?php
// define the columns to display, the syntax is 'internal name' => '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 );
?>
<table class="widefat">
<thead>
<tr>
<th class="manage-column column-cb check-column" scope="col">
<input type="checkbox" />
</th>
<?php
$col_url = '';
foreach($users_columns as $column_id => $column_display_name) {
$column_link = "<a href='";
$order2 = '';
if ( $order_by == $column_id )
$order2 = ( $order == 'DESC' ) ? 'ASC' : 'DESC';
$column_link .= esc_url( add_query_arg( array( 'order' => $order2, 'paged' => $pagenum, 'sortby' => $column_id ), remove_query_arg( array( 'action', 'updated' ), $_SERVER['REQUEST_URI'] ) ) );
$column_link .= "'>{$column_display_name}</a>";
$col_url .= '<th scope="col">' . ( $column_id == 'blogs' ? $column_display_name : $column_link ) . '</th>';
}
echo $col_url; ?>
</tr>
</thead>
<tfoot>
<tr>
<th class="manage-column column-cb check-column" scope="col">
<input type="checkbox" />
</th>
<?php echo $col_url; ?>
</tr>
</tfoot>
<tbody id="the-user-list" class="list:user">
<?php if ( $user_list ) {
$class = '';
$super_admins = get_super_admins();
foreach ( (array) $user_list as $user ) {
$class = ( 'alternate' == $class ) ? '' : 'alternate';
$status_list = array( 'spam' => 'site-spammed', 'deleted' => 'site-deleted' );
foreach ( $status_list as $status => $col ) {
if ( $user[$status] )
$class = $col;
}
?>
<tr class="<?php echo $class; ?>">
<?php
foreach( (array) $users_columns as $column_name=>$column_display_name ) :
switch( $column_name ) {
case 'id': ?>
<th scope="row" class="check-column">
<input type="checkbox" id="blog_<?php echo $user['ID'] ?>" name="allusers[]" value="<?php echo esc_attr( $user['ID'] ) ?>" />
</th>
<th valign="top" scope="row">
<?php echo $user['ID'] ?>
</th>
<?php
break;
case 'login':
$avatar = get_avatar( $user['user_email'], 32 );
$edit_link = ( $current_user->ID == $user['ID'] ) ? 'profile.php' : 'user-edit.php?user_id=' . $user['ID'];
?>
<td class="username column-username">
<?php echo $avatar; ?><strong><a href="<?php echo esc_url( admin_url( $edit_link ) ); ?>" class="edit"><?php echo stripslashes( $user['user_login'] ); ?></a><?php
if ( in_array( $user['user_login'], $super_admins ) )
echo ' - ' . __( 'Super admin' );
?></strong>
<br/>
<div class="row-actions">
<span class="edit"><a href="<?php echo esc_url( admin_url( $edit_link ) ); ?>"><?php _e( 'Edit' ); ?></a></span>
<?php if ( ! in_array( $user['user_login'], $super_admins ) ) { ?>
| <span class="delete"><a href="<?php echo $delete = esc_url( admin_url( add_query_arg( '_wp_http_referer', urlencode( stripslashes( $_SERVER['REQUEST_URI'] ) ), wp_nonce_url( 'ms-edit.php', 'deleteuser' ) . '&amp;action=deleteuser&amp;id=' . $user['ID'] ) ) ); ?>" class="delete"><?php _e( 'Delete' ); ?></a></span>
<?php } ?>
</div>
</td>
<?php
break;
case 'name': ?>
<td class="name column-name"><?php echo $user['display_name'] ?></td>
<?php
break;
case 'email': ?>
<td class="email column-email"><a href="mailto:<?php echo $user['user_email'] ?>"><?php echo $user['user_email'] ?></a></td>
<?php
break;
case 'registered':
if ( 'list' == $mode )
$date = 'Y/m/d';
else
$date = 'Y/m/d \<\b\r \/\> g:i:s a';
?>
<td><?php echo mysql2date( __( $date ), $user['user_registered'] ); ?></td>
<?php
break;
case 'blogs':
$blogs = get_blogs_of_user( $user['ID'], true );
?>
<td>
<?php
if ( is_array( $blogs ) ) {
foreach ( (array) $blogs as $key => $val ) {
$path = ( $val->path == '/' ) ? '' : $val->path;
echo '<a href="'. esc_url( admin_url( 'ms-sites.php?action=editblog&amp;id=' . $val->userblog_id ) ) .'">' . str_replace( '.' . $current_site->domain, '', $val->domain . $path ) . '</a>';
echo ' <small class="row-actions">';
// Edit
echo '<a href="'. esc_url( admin_url( 'ms-sites.php?action=editblog&amp;id=' . $val->userblog_id ) ) .'">' . __( 'Edit' ) . '</a> | ';
// View
echo '<a ';
if ( get_blog_status( $val->userblog_id, 'spam' ) == 1 )
echo 'style="background-color: #faa" ';
echo 'href="' . esc_url( get_home_url( $val->userblog_id ) ) . '">' . __( 'View' ) . '</a>';
echo '</small><br />';
}
}
?>
</td>
<?php
break;
default: ?>
<td><?php do_action( 'manage_users_custom_column', $column_name, $user['ID'] ); ?></td>
<?php
break;
}
endforeach
?>
</tr>
<?php
}
} else {
?>
<tr>
<td colspan="<?php echo (int) count($users_columns); ?>"><?php _e( 'No users found.' ) ?></td>
</tr>
<?php
} // end if ($users)
?>
</tbody>
</table>
<div class="tablenav">
<?php
if ( $page_links )
echo "<div class='tablenav-pages'>$page_links_text</div>";
?>
<div class="alignleft actions">
<select name="action2">
<option value="-1" selected="selected"><?php _e( 'Bulk Actions' ); ?></option>
<option value="delete"><?php _e( 'Delete' ); ?></option>
<option value="spam"><?php _ex( 'Mark as Spam', 'user' ); ?></option>
<option value="notspam"><?php _ex( 'Not Spam', 'user' ); ?></option>
</select>
<input type="submit" value="<?php esc_attr_e( 'Apply' ); ?>" name="doaction2" id="doaction2" class="button-secondary action" />
</div>
<br class="clear" />
</div>
</form>
</div>
<?php
if ( apply_filters( 'show_adduser_fields', true ) ) :
?>
<div class="wrap" id="form-add-user">
<h3><?php _e( 'Add User' ) ?></h3>
<form action="ms-edit.php?action=adduser" method="post">
<table class="form-table">
<tr class="form-field form-required">
<th scope="row"><?php _e( 'Username' ) ?></th>
<td><input type="text" class="regular-text" name="user[username]" /></td>
</tr>
<tr class="form-field form-required">
<th scope="row"><?php _e( 'Email' ) ?></th>
<td><input type="text" class="regular-text" name="user[email]" /></td>
</tr>
<tr class="form-field">
<td colspan="2"><?php _e( 'Username and password will be mailed to the above email address.' ) ?></td>
</tr>
</table>
<p class="submit">
<?php wp_nonce_field( 'add-user', '_wpnonce_add-user' ) ?>
<input class="button" type="submit" value="<?php esc_attr_e( 'Add user' ) ?>" /></p>
</form>
</div>
<?php endif; ?>
<?php include( './admin-footer.php' ); ?>
wp_redirect( network_admin_url('users.php') );

View File

@ -0,0 +1,13 @@
<?php
define('WP_NETWORK_ADMIN', TRUE);
require_once( dirname(dirname(__FILE__)) . '/admin.php');
if ( ! is_multisite() )
wp_die( __( 'Multisite support is not enabled.' ) );
if ( ! is_main_site() )
wp_redirect( network_admin_url() );
?>

637
wp-admin/network/edit.php Normal file
View File

@ -0,0 +1,637 @@
<?php
/**
* Action handler for Multisite administration panels.
*
* @package WordPress
* @subpackage Multisite
* @since 3.0.0
*/
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 <a href="%s">options page</a>.', 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&#8217;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: <code>%s</code>' ), implode( '</code>, <code>', $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 <a href="%s">sites page</a>', 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.' ) );
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" <?php if ( function_exists( 'language_attributes' ) ) language_attributes(); ?>>
<head>
<title><?php _e( 'WordPress &rsaquo; Confirm your action' ); ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
wp_admin_css( 'install', true );
wp_admin_css( 'ie', true );
?>
</head>
<body>
<h1 id="logo"><img alt="WordPress" src="<?php echo esc_attr( admin_url( 'images/wordpress-logo.png' ) ); ?>" /></h1>
<form action="ms-edit.php?action=<?php echo esc_attr( $_GET['action2'] ) ?>" method="post">
<input type="hidden" name="action" value="<?php echo esc_attr( $_GET['action2'] ) ?>" />
<input type="hidden" name="id" value="<?php echo esc_attr( $id ); ?>" />
<input type="hidden" name="_wp_http_referer" value="<?php echo esc_attr( wp_get_referer() ); ?>" />
<?php wp_nonce_field( $_GET['action2'], '_wpnonce', false ); ?>
<p><?php echo esc_html( stripslashes( $_GET['msg'] ) ); ?></p>
<p class="submit"><input class="button" type="submit" value="<?php _e( 'Confirm' ); ?>" /></p>
</form>
</body>
</html>
<?php
break;
// Users
case 'deleteuser':
if ( ! current_user_can( 'manage_network_users' ) )
wp_die( __( 'You do not have permission to access this page.' ) );
check_admin_referer( 'deleteuser' );
if ( $id != '0' && $id != '1' ) {
$_POST['allusers'] = array( $id ); // confirm_delete_users() can only handle with arrays
$title = __( 'Users' );
$parent_file = 'ms-admin.php';
require_once( 'admin-header.php' );
echo '<div class="wrap">';
confirm_delete_users( $_POST['allusers'] );
echo '</div>';
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 '<div class="wrap">';
confirm_delete_users( $_POST['allusers'] );
echo '</div>';
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;
}
?>

View File

@ -0,0 +1,76 @@
<?php
/**
* Multisite administration panel.
*
* @package WordPress
* @subpackage Multisite
* @since 3.0.0
*/
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 = 'index.php';
add_contextual_help($current_screen,
'<p>' . __('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:') . '</p>' .
'<ul><li>' . __('Site Admin is now Super Admin (we highly encourage you to get yourself a cape!).') . '</li>' .
'<li>' . __('Blogs are now called Sites; Site is now called Network.') . '</li></ul>' .
'<p>' . __('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.') . '</p>' .
'<p><strong>' . __('For more information:') . '</strong></p>' .
'<p>' . __('<a href="http://codex.wordpress.org/Super_Admin_Super_Admin_Menu" target="_blank">Documentation on Super Admin Menu</a>') . '</p>' .
'<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
);
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 );
?>
<div class="wrap">
<?php screen_icon(); ?>
<h2><?php echo esc_html( $title ); ?></h2>
<ul class="subsubsub">
<li><a href="sites.php#form-add-site"><?php _e( 'Create a New Site' ); ?></a> |</li>
<li><a href="users.php#form-add-user"><?php _e( 'Create a New User' ); ?></a></li>
</ul>
<br class="clear" />
<p class="youhave"><?php echo $sentence; ?></p>
<?php do_action( 'wpmuadminresult', '' ); ?>
<form name="searchform" action="users.php" method="get">
<p>
<input type="hidden" name="action" value="users" />
<input type="text" name="s" value="" size="17" />
<input class="button" type="submit" name="submit" value="<?php esc_attr_e( 'Search Users' ); ?>" />
</p>
</form>
<form name="searchform" action="sites.php" method="get">
<p>
<input type="hidden" name="action" value="blogs" />
<input type="hidden" name="searchaction" value="name" />
<input type="text" name="s" value="" size="17" />
<input class="button" type="submit" name="blog_name" value="<?php esc_attr_e( 'Search Sites' ); ?>" />
</p>
</form>
<?php do_action( 'mu_rightnow_end' ); ?>
<?php do_action( 'mu_activity_box_end' ); ?>
</div>
<?php include( '../admin-footer.php' ); ?>

23
wp-admin/network/menu.php Normal file
View File

@ -0,0 +1,23 @@
<?php
/* translators: Network menu item */
$menu[0] = array(__('Dashboard'), 'manage_network', 'index.php', '', 'menu-top menu-top-first menu-icon-site', 'menu-site', 'div');
$menu[4] = array( '', 'read', 'separator1', '', 'wp-menu-separator' );
/* translators: Sites menu item */
$menu[5] = array(__('Sites'), 'manage_sites', 'sites.php', '', 'menu-top menu-icon-site', 'menu-site', 'div');
$menu[10] = array(__('Users'), 'manage_network_users', 'users.php', '', 'menu-top menu-icon-users', 'menu-users', 'div');
$menu[15] = array(__('Themes'), 'manage_network_themes', 'themes.php', '', 'menu-top menu-icon-appearance', 'menu-appearance', 'div');
$menu[20] = array(__('Plugins'), 'manage_network_plugins', 'plugins.php', '', 'menu-top menu-icon-plugins', 'menu-plugins', 'div');
$menu[25] = array(__('Settings'), 'manage_network_options', 'settings.php', '', 'menu-top menu-icon-settings', 'menu-settings', 'div');
$menu[30] = array(__('Update'), 'manage_network', 'upgrade.php', '', 'menu-top menu-icon-tools', 'menu-update', 'div');
$menu[99] = array( '', 'read', 'separator-last', '', 'wp-menu-separator-last' );
$compat = array();
$submenu = array();
require(ABSPATH . 'wp-admin/includes/menu.php');
?>

View File

@ -0,0 +1,5 @@
<?php
require_once( './admin.php' );
require( '../plugins.php' );

View File

@ -0,0 +1,5 @@
<?php
require_once( './admin.php' );
require( '../profile.php' );

View File

@ -0,0 +1,318 @@
<?php
/**
* Multisite network settings administration panel.
*
* @package WordPress
* @subpackage Multisite
* @since 3.0.0
*/
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 = 'settings.php';
add_contextual_help($current_screen,
'<p>' . __('This screen sets and changes options for the network as a whole. The first site is the main site in the network and network options are pulled from that original site&#8217;s options.') . '</p>' .
'<p>' . __('Operational settings has fields for the network&#8217;s name and admin email.') . '</p>' .
'<p>' . __('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.') . '</p>' .
'<p>' . __('Registration settings can disable/enable public signups. If you let others sign up for a site, install spam plugins. Spaces, not commas, should separate names banned as sites for this network.') . '</p>' .
'<p>' . __('New site settings are defaults applied when a new site is created in the network. These include welcome email for when a new site or user account is registered, and what&#8127;s put in the first post, page, comment, comment author, and comment URL.') . '</p>' .
'<p>' . __('Upload settings control the size of the uploaded files and the amount of available upload space for each site. You can change the default value for specific sites when you edit a particular site. Allowed file types are also listed (space separated only).') . '</p>' .
'<p>' . __('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.') . '</p>' .
'<p>' . __('Menu setting enables/disables the plugin menus from appearing for non super admins, so that only super admins, not site admins, have access to activate plugins.') . '</p>' .
'<p>' . __('Super admins can no longer be added on the Options screen. You must now go to the list of existing users on 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.') . '</p>' .
'<p><strong>' . __('For more information:') . '</strong></p>' .
'<p>' . __('<a href="http://codex.wordpress.org/Super_Admin_Options_SubPanel" target="_blank">Network Options Documentation</a>') . '</p>' .
'<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
);
include( '../admin-header.php' );
if (isset($_GET['updated'])) {
?>
<div id="message" class="updated"><p><?php _e( 'Options saved.' ) ?></p></div>
<?php
}
?>
<div class="wrap">
<?php screen_icon(); ?>
<h2><?php _e( 'Network Options' ) ?></h2>
<form method="post" action="edit.php?action=siteoptions">
<?php wp_nonce_field( 'siteoptions' ); ?>
<h3><?php _e( 'Operational Settings' ); ?></h3>
<table class="form-table">
<tr valign="top">
<th scope="row"><label for="site_name"><?php _e( 'Network Name' ) ?></label></th>
<td>
<input name="site_name" type="text" id="site_name" class="regular-text" value="<?php echo esc_attr( $current_site->site_name ) ?>" />
<br />
<?php _e( 'What you would like to call this website.' ) ?>
</td>
</tr>
<tr valign="top">
<th scope="row"><label for="admin_email"><?php _e( 'Network Admin Email' ) ?></label></th>
<td>
<input name="admin_email" type="text" id="admin_email" class="regular-text" value="<?php echo esc_attr( get_site_option('admin_email') ) ?>" />
<br />
<?php printf( __( 'Registration and support emails will come from this address. An address such as <code>support@%s</code> is recommended.' ), $current_site->domain ); ?>
</td>
</tr>
</table>
<h3><?php _e( 'Dashboard Settings' ); ?></h3>
<table class="form-table">
<tr valign="top">
<th scope="row"><label for="dashboard_blog"><?php _e( 'Dashboard Site' ) ?></label></th>
<td>
<?php
if ( $dashboard_blog = get_site_option( 'dashboard_blog' ) ) {
$details = get_blog_details( $dashboard_blog );
$blogname = untrailingslashit( sanitize_user( str_replace( '.', '', str_replace( $current_site->domain . $current_site->path, '', $details->domain . $details->path ) ) ) );
} else {
$blogname = '';
}?>
<input name="dashboard_blog_orig" type="hidden" id="dashboard_blog_orig" value="<?php echo esc_attr( $blogname ); ?>" />
<input name="dashboard_blog" type="text" id="dashboard_blog" value="<?php echo esc_attr( $blogname ); ?>" class="regular-text" />
<br />
<?php _e( 'Site path (&#8220;dashboard&#8221;, &#8220;control&#8221;, &#8220;manager&#8221;, etc.) or blog ID.<br />New users are added to this site as the user role defined below if they don&#8217;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.' ); ?>
</td>
</tr>
<tr valign="top">
<th scope="row"><label for="default_user_role"><?php _e( 'Dashboard User Default Role' ) ?></label></th>
<td>
<select name="default_user_role" id="default_user_role"><?php
wp_dropdown_roles( get_site_option( 'default_user_role', 'subscriber' ) );
?>
</select>
<br />
<?php _e( 'The default role for new users on the Dashboard site. &#8220;Subscriber&#8221; or &#8220;Contributor&#8221; roles are recommended.' ); ?>
</td>
</tr>
<tr valign="top">
<th scope="row"><label for="admin_notice_feed"><?php _e( 'Admin Notice Feed' ) ?></label></th>
<td><input name="admin_notice_feed" class="large-text" type="text" id="admin_notice_feed" value="<?php echo esc_attr( get_site_option( 'admin_notice_feed' ) ) ?>" size="80" /><br />
<?php _e( 'Display the latest post from this RSS or Atom feed on all site dashboards. Leave blank to disable.' ); ?><br />
<?php if ( get_site_option( 'admin_notice_feed' ) != get_home_url( $current_site->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/' ) ) ?></td>
</tr>
</table>
<h3><?php _e( 'Registration Settings' ); ?></h3>
<table class="form-table">
<tr valign="top">
<th scope="row"><?php _e( 'Allow new registrations' ) ?></th>
<?php
if ( !get_site_option( 'registration' ) )
update_site_option( 'registration', 'none' );
$reg = get_site_option( 'registration' );
?>
<td>
<label><input name="registration" type="radio" id="registration1" value="none"<?php checked( $reg, 'none') ?> /> <?php _e( 'Registration is disabled.' ); ?></label><br />
<label><input name="registration" type="radio" id="registration2" value="user"<?php checked( $reg, 'user') ?> /> <?php _e( 'User accounts may be registered.' ); ?></label><br />
<label><input name="registration" type="radio" id="registration3" value="blog"<?php checked( $reg, 'blog') ?> /> <?php _e( 'Logged in users may register new sites.' ); ?></label><br />
<label><input name="registration" type="radio" id="registration4" value="all"<?php checked( $reg, 'all') ?> /> <?php _e( 'Both sites and user accounts can be registered.' ); ?></label><br />
<p><?php _e( 'Disable or enable registration and who or what can be registered. (Default is disabled.)' ); ?></p>
<?php if ( is_subdomain_install() ) {
echo '<p>' . __( 'If registration is disabled, please set <code>NOBLOGREDIRECT</code> in <code>wp-config.php</code> to a URL you will redirect visitors to if they visit a non-existent site.' ) . '</p>';
} ?>
</td>
</tr>
<tr valign="top">
<th scope="row"><?php _e( 'Registration notification' ) ?></th>
<?php
if ( !get_site_option( 'registrationnotification' ) )
update_site_option( 'registrationnotification', 'yes' );
?>
<td>
<label><input name="registrationnotification" type="checkbox" id="registrationnotification" value="yes"<?php checked( get_site_option( 'registrationnotification' ), 'yes' ) ?> /> <?php _e( 'Send the network admin an email notification every time someone registers a site or user account.' ) ?></label>
</td>
</tr>
<tr valign="top" id="addnewusers">
<th scope="row"><?php _e( 'Add New Users' ) ?></th>
<td>
<label><input name="add_new_users" type="checkbox" id="add_new_users" value="1"<?php checked( get_site_option( 'add_new_users' ) ) ?> /> <?php _e( 'Allow site administrators to add new users to their site via the "Users->Add New" page.' ); ?></label>
</td>
</tr>
<tr valign="top">
<th scope="row"><label for="illegal_names"><?php _e( 'Banned Names' ) ?></label></th>
<td>
<input name="illegal_names" type="text" id="illegal_names" class="large-text" value="<?php echo esc_attr( implode( " ", get_site_option( 'illegal_names' ) ) ); ?>" size="45" />
<br />
<?php _e( 'Users are not allowed to register these sites. Separate names by spaces.' ) ?>
</td>
</tr>
<tr valign="top">
<th scope="row"><label for="limited_email_domains"><?php _e( 'Limited Email Registrations' ) ?></label></th>
<td>
<?php $limited_email_domains = get_site_option( 'limited_email_domains' );
$limited_email_domains = str_replace( ' ', "\n", $limited_email_domains ); ?>
<textarea name="limited_email_domains" id="limited_email_domains" cols="45" rows="5">
<?php echo wp_htmledit_pre( $limited_email_domains == '' ? '' : implode( "\n", (array) $limited_email_domains ) ); ?></textarea>
<br />
<?php _e( 'If you want to limit site registrations to certain domains. One domain per line.' ) ?>
</td>
</tr>
<tr valign="top">
<th scope="row"><label for="banned_email_domains"><?php _e('Banned Email Domains') ?></label></th>
<td>
<textarea name="banned_email_domains" id="banned_email_domains" cols="45" rows="5">
<?php echo wp_htmledit_pre( get_site_option( 'banned_email_domains' ) == '' ? '' : implode( "\n", (array) get_site_option( 'banned_email_domains' ) ) ); ?></textarea>
<br />
<?php _e( 'If you want to ban domains from site registrations. One domain per line.' ) ?>
</td>
</tr>
</table>
<h3><?php _e('New Site Settings'); ?></h3>
<table class="form-table">
<tr valign="top">
<th scope="row"><label for="welcome_email"><?php _e( 'Welcome Email' ) ?></label></th>
<td>
<textarea name="welcome_email" id="welcome_email" rows="5" cols="45" class="large-text">
<?php echo wp_htmledit_pre( stripslashes( get_site_option( 'welcome_email' ) ) ) ?></textarea>
<br />
<?php _e( 'The welcome email sent to new site owners.' ) ?>
</td>
</tr>
<tr valign="top">
<th scope="row"><label for="welcome_user_email"><?php _e( 'Welcome User Email' ) ?></label></th>
<td>
<textarea name="welcome_user_email" id="welcome_user_email" rows="5" cols="45" class="large-text">
<?php echo wp_htmledit_pre( stripslashes( get_site_option( 'welcome_user_email' ) ) ) ?></textarea>
<br />
<?php _e( 'The welcome email sent to new users.' ) ?>
</td>
</tr>
<tr valign="top">
<th scope="row"><label for="first_post"><?php _e( 'First Post' ) ?></label></th>
<td>
<textarea name="first_post" id="first_post" rows="5" cols="45" class="large-text">
<?php echo wp_htmledit_pre( stripslashes( get_site_option( 'first_post' ) ) ) ?></textarea>
<br />
<?php _e( 'The first post on a new site.' ) ?>
</td>
</tr>
<tr valign="top">
<th scope="row"><label for="first_page"><?php _e( 'First Page' ) ?></label></th>
<td>
<textarea name="first_page" id="first_page" rows="5" cols="45" class="large-text">
<?php echo wp_htmledit_pre( stripslashes( get_site_option('first_page') ) ) ?></textarea>
<br />
<?php _e( 'The first page on a new site.' ) ?>
</td>
</tr>
<tr valign="top">
<th scope="row"><label for="first_comment"><?php _e( 'First Comment' ) ?></label></th>
<td>
<textarea name="first_comment" id="first_comment" rows="5" cols="45" class="large-text">
<?php echo wp_htmledit_pre( stripslashes( get_site_option('first_comment') ) ) ?></textarea>
<br />
<?php _e( 'The first comment on a new site.' ) ?>
</td>
</tr>
<tr valign="top">
<th scope="row"><label for="first_comment_author"><?php _e( 'First Comment Author' ) ?></label></th>
<td>
<input type="text" size="40" name="first_comment_author" id="first_comment_author" value="<?php echo get_site_option('first_comment_author') ?>" />
<br />
<?php _e( 'The author of the first comment on a new site.' ) ?>
</td>
</tr>
<tr valign="top">
<th scope="row"><label for="first_comment_url"><?php _e( 'First Comment URL' ) ?></label></th>
<td>
<input type="text" size="40" name="first_comment_url" id="first_comment_url" value="<?php echo esc_attr( get_site_option( 'first_comment_url' ) ) ?>" />
<br />
<?php _e( 'The URL for the first comment on a new site.' ) ?>
</td>
</tr>
</table>
<h3><?php _e( 'Upload Settings' ); ?></h3>
<table class="form-table">
<tr valign="top">
<th scope="row"><?php _e( 'Media upload buttons' ) ?></th>
<?php $mu_media_buttons = get_site_option( 'mu_media_buttons', array() ); ?>
<td><label><input type="checkbox" id="mu_media_buttons_image" name="mu_media_buttons[image]" value="1"<?php checked( ! empty( $mu_media_buttons['image'] ) ) ?>/> <?php _e( 'Images' ); ?></label><br />
<label><input type="checkbox" id="mu_media_buttons_video" name="mu_media_buttons[video]" value="1"<?php checked( ! empty( $mu_media_buttons['video'] ) ) ?>/> <?php _e( 'Videos' ); ?></label><br />
<label><input type="checkbox" id="mu_media_buttons_audio" name="mu_media_buttons[audio]" value="1"<?php checked( ! empty( $mu_media_buttons['audio'] ) ) ?>/> <?php _e( 'Music' ); ?></label><br />
<?php _e( 'The media upload buttons to display on the &#8220;Write Post&#8221; page. Make sure you update the allowed upload file types below as well.' ); ?></td>
</tr>
<tr valign="top">
<th scope="row"><?php _e( 'Site upload space' ) ?></th>
<td>
<label><input type="checkbox" id="upload_space_check_disabled" name="upload_space_check_disabled" value="0"<?php checked( get_site_option( 'upload_space_check_disabled' ), 0 ) ?>/> <?php printf( __( 'Limit total size of files uploaded to %s MB' ), '</label><label><input name="blog_upload_space" type="text" id="blog_upload_space" value="' . esc_attr( get_site_option('blog_upload_space', 10) ) . '" size="3" />' ); ?></label><br />
</td>
</tr>
<tr valign="top">
<th scope="row"><label for="upload_filetypes"><?php _e( 'Upload file types' ) ?></label></th>
<td><input name="upload_filetypes" type="text" id="upload_filetypes" class="large-text" value="<?php echo esc_attr( get_site_option('upload_filetypes', 'jpg jpeg png gif') ) ?>" size="45" /></td>
</tr>
<tr valign="top">
<th scope="row"><label for="fileupload_maxk"><?php _e( 'Max upload file size' ) ?></label></th>
<td><?php printf( _x( '%s KB', 'File size in kilobytes' ), '<input name="fileupload_maxk" type="text" id="fileupload_maxk" value="' . esc_attr( get_site_option( 'fileupload_maxk', 300 ) ) . '" size="5" />' ); ?></td>
</tr>
</table>
<?php
$languages = get_available_languages();
if ( ! empty( $languages ) ) {
$lang = get_site_option( 'WPLANG' );
?>
<h3><?php _e( 'Network Wide Settings' ); ?></h3>
<div class="updated inline"><p><strong><?php _e( 'Notice:' ); ?></strong> <?php _e( 'These settings may be overridden by site owners.' ); ?></p></div>
<table class="form-table">
<?php
?>
<tr valign="top">
<th><label for="WPLANG"><?php _e( 'Default Language' ) ?></label></th>
<td>
<select name="WPLANG" id="WPLANG">
<?php mu_dropdown_languages( $languages, get_site_option( 'WPLANG' ) ); ?>
</select>
</td>
</tr>
</table>
<?php
} // languages
?>
<h3><?php _e( 'Menu Settings' ); ?></h3>
<table id="menu" class="form-table">
<tr valign="top">
<th scope="row"><?php _e( 'Enable administration menus' ); ?></th>
<td>
<?php
$menu_perms = get_site_option( 'menu_items' );
$menu_items = apply_filters( 'mu_menu_items', array( 'plugins' => __( 'Plugins' ) ) );
foreach ( (array) $menu_items as $key => $val ) {
echo "<label><input type='checkbox' name='menu_items[" . $key . "]' value='1'" . ( isset( $menu_perms[$key] ) ? checked( $menu_perms[$key], '1', false ) : '' ) . " /> " . esc_html( $val ) . "</label><br/>";
}
?>
</td>
</tr>
</table>
<?php do_action( 'wpmu_options' ); // Add more options here ?>
<p class="submit"><input type="submit" class="button-primary" name="Submit" value="<?php esc_attr_e( 'Save Changes' ) ?>" /></p>
</form>
</div>
<?php include( '../admin-footer.php' ); ?>

747
wp-admin/network/sites.php Normal file
View File

@ -0,0 +1,747 @@
<?php
/**
* Multisite sites administration panel.
*
* @package WordPress
* @subpackage Multisite
* @since 3.0.0
*/
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 = 'sites.php';
if ( isset( $_GET['action'] ) && 'editblog' == $_GET['action'] ) {
add_contextual_help($current_screen,
'<p>' . __('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).') . '</p>' .
'<p>' . __('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.') . '</p>' .
'<p><strong>' . __('For more information:') . '</strong></p>' .
'<p>' . __('<a href="http://codex.wordpress.org/Super_Admin_Sites_Edit_Site" target="_blank">Documentation on Editing Sites</a>') . '</p>' .
'<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
);
} else {
add_contextual_help($current_screen,
'<p>' . __('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.') . '</p>' .
'<p>' . __('This is the main table of all sites on this network. Switch between list and excerpt views by using the icons above the right side of the table.') . '</p>' .
'<p>' . __('Hovering over each site reveals seven options (three for the primary site):') . '</p>' .
'<ul><li>' . __('an Edit link to a separate Edit Site screen.') . '</li>' .
'<li>' . __('Backend means the Dashboard for that site.') . '</li>' .
'<li>' . __('Deactivate, Archive, and Spam which lead to confirmation screens. These actions can be reversed later.') . '</li>' .
'<li>' . __('Delete which is a permanent action after the confirmations screen.') . '</li>' .
'<li>' . __('Visit to go to the frontend site live.') . '</li></ul>' .
'<p>' . __('The site ID is used internally, and is not shown on the front end of the site or to users/viewers.') . '</p>' .
'<p>' . __('Clicking on bold settings can re-sort this table. The upper right icons switch between list and excerpt views.') . '</p>' .
'<p>' . __("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.") . '</p>' .
'<p>' . __('If the admin email for the new site does not exist in the database, a new user will also be created.') . '</p>' .
'<p><strong>' . __('For more information:') . '</strong></p>' .
'<p>' . __('<a href="http://codex.wordpress.org/Super_Admin_Sites_SubPanel" target="_blank">Documentation on Sites</a>') . '</p>' .
'<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
);
}
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'] ) ) {
?>
<div id="message" class="updated"><p>
<?php
switch ( $_GET['action'] ) {
case 'all_notspam':
_e( 'Sites removed from spam.' );
break;
case 'all_spam':
_e( 'Sites marked as spam.' );
break;
case 'all_delete':
_e( 'Sites deleted.' );
break;
case 'delete':
_e( 'Site deleted.' );
break;
case 'add-blog':
_e( 'Site added.' );
break;
case 'archive':
_e( 'Site archived.' );
break;
case 'unarchive':
_e( 'Site unarchived.' );
break;
case 'activate':
_e( 'Site activated.' );
break;
case 'deactivate':
_e( 'Site deactivated.' );
break;
case 'unspam':
_e( 'Site removed from spam.' );
break;
case 'spam':
_e( 'Site marked as spam.' );
break;
default:
_e( 'Settings saved.' );
break;
}
?>
</p></div>
<?php
}
$action = isset( $_GET['action'] ) ? $_GET['action'] : 'list';
switch ( $action ) {
// Edit site
case 'editblog':
$blog_prefix = $wpdb->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 );
?>
<div class="wrap">
<?php screen_icon(); ?>
<h2><?php _e( 'Edit Site' ); ?> - <a href="<?php echo esc_url( get_home_url( $id ) ); ?>"><?php echo esc_url( get_home_url( $id ) ); ?></a></h2>
<form method="post" action="edit.php?action=updateblog">
<?php wp_nonce_field( 'editblog' ); ?>
<input type="hidden" name="id" value="<?php echo esc_attr( $id ) ?>" />
<div class="metabox-holder" style="width:49%;float:left;">
<div id="blogedit_bloginfo" class="postbox">
<h3 class="hndle"><span><?php _e( 'Site info (wp_blogs)' ); ?></span></h3>
<div class="inside">
<table class="form-table">
<tr class="form-field form-required">
<th scope="row"><?php _e( 'Domain' ) ?></th>
<?php
$protocol = is_ssl() ? 'https://' : 'http://';
if ( $is_main_site ) { ?>
<td><code><?php echo $protocol; echo esc_attr( $details->domain ) ?></code></td>
<?php } else { ?>
<td><?php echo $protocol; ?><input name="blog[domain]" type="text" id="domain" value="<?php echo esc_attr( $details->domain ) ?>" size="33" /></td>
<?php } ?>
</tr>
<tr class="form-field form-required">
<th scope="row"><?php _e( 'Path' ) ?></th>
<?php if ( $is_main_site ) { ?>
<td><code><?php echo esc_attr( $details->path ) ?></code></td>
<?php } else { ?>
<td><input name="blog[path]" type="text" id="path" value="<?php echo esc_attr( $details->path ) ?>" size="40" style='margin-bottom:5px;' />
<br /><input type="checkbox" style="width:20px;" name="update_home_url" value="update" <?php if ( get_blog_option( $id, 'siteurl' ) == untrailingslashit( get_blogaddress_by_id ($id ) ) || get_blog_option( $id, 'home' ) == untrailingslashit( get_blogaddress_by_id( $id ) ) ) echo 'checked="checked"'; ?> /> <?php _e( 'Update <code>siteurl</code> and <code>home</code> as well.' ); ?></td>
<?php } ?>
</tr>
<tr class="form-field">
<th scope="row"><?php _ex( 'Registered', 'site' ) ?></th>
<td><input name="blog[registered]" type="text" id="blog_registered" value="<?php echo esc_attr( $details->registered ) ?>" size="40" /></td>
</tr>
<tr class="form-field">
<th scope="row"><?php _e('Last Updated') ?></th>
<td><input name="blog[last_updated]" type="text" id="blog_last_updated" value="<?php echo esc_attr( $details->last_updated ) ?>" size="40" /></td>
</tr>
<?php
$radio_fields = array( 'public' => __( '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 ) {
?>
<tr>
<th scope="row"><?php echo $field_label; ?></th>
<td>
<input type="radio" name="blog[<?php echo $field_key; ?>]" id="blog_<?php echo $field_key; ?>_1" value="1"<?php checked( $details->$field_key, 1 ); ?> />
<label for="blog_<?php echo $field_key; ?>_1"><?php _e('Yes'); ?></label>
<input type="radio" name="blog[<?php echo $field_key; ?>]" id="blog_<?php echo $field_key; ?>_0" value="0"<?php checked( $details->$field_key, 0 ); ?> />
<label for="blog_<?php echo $field_key; ?>_0"><?php _e('No'); ?></label>
</td>
</tr>
<?php } ?>
</table>
<p class="submit" style="text-align:center;"><input type="submit" name="Submit" value="<?php esc_attr_e( 'Update Options' ) ?>" /></p>
</div>
</div>
<div id="blogedit_blogoptions" class="postbox" >
<h3 class="hndle"><span><?php printf( __( 'Site options (%soptions)' ), $blog_prefix ); ?></span></h3>
<div class="inside">
<table class="form-table">
<?php
$editblog_default_role = 'subscriber';
foreach ( $options as $option ) {
if ( $option->option_name == 'default_role' )
$editblog_default_role = $option->option_value;
$disabled = false;
$class = 'all-options';
if ( is_serialized( $option->option_value ) ) {
if ( is_serialized_string( $option->option_value ) ) {
$option->option_value = esc_html( maybe_unserialize( $option->option_value ), 'single' );
} else {
$option->option_value = 'SERIALIZED DATA';
$disabled = true;
$class = 'all-options disabled';
}
}
if ( strpos( $option->option_value, "\n" ) !== false ) {
?>
<tr class="form-field">
<th scope="row"><?php echo ucwords( str_replace( "_", " ", $option->option_name ) ) ?></th>
<td><textarea class="<?php echo $class; ?>" rows="5" cols="40" name="option[<?php echo esc_attr( $option->option_name ) ?>]" id="<?php echo esc_attr( $option->option_name ) ?>"<?php disabled( $disabled ) ?>><?php echo wp_htmledit_pre( $option->option_value ) ?></textarea></td>
</tr>
<?php
} else {
?>
<tr class="form-field">
<th scope="row"><?php echo esc_html( ucwords( str_replace( "_", " ", $option->option_name ) ) ); ?></th>
<?php if ( $is_main_site && in_array( $option->option_name, array( 'siteurl', 'home' ) ) ) { ?>
<td><code><?php echo esc_html( $option->option_value ) ?></code></td>
<?php } else { ?>
<td><input class="<?php echo $class; ?>" name="option[<?php echo esc_attr( $option->option_name ) ?>]" type="text" id="<?php echo esc_attr( $option->option_name ) ?>" value="<?php echo esc_attr( $option->option_value ) ?>" size="40" <?php disabled( $disabled ) ?> /></td>
<?php } ?>
</tr>
<?php
}
} // End foreach
?>
</table>
<p class="submit" style="text-align:center;"><input type="submit" name="Submit" value="<?php esc_attr_e( 'Update Options' ) ?>" /></p>
</div>
</div>
</div>
<div class="metabox-holder" style="width:49%;float:right;">
<?php
// Site Themes
$themes = get_themes();
$blog_allowed_themes = wpmu_get_blog_allowedthemes( $id );
$allowed_themes = get_site_option( 'allowedthemes' );
if ( ! $allowed_themes )
$allowed_themes = array_keys( $themes );
$out = '';
foreach ( $themes as $key => $theme ) {
$theme_key = esc_html( $theme['Stylesheet'] );
if ( ! isset( $allowed_themes[$theme_key] ) ) {
$checked = isset( $blog_allowed_themes[ $theme_key ] ) ? 'checked="checked"' : '';
$out .= '<tr class="form-field form-required">
<th title="' . esc_attr( $theme["Description"] ).'" scope="row">' . esc_html( $key ) . '</th>
<td><label><input name="theme[' . esc_attr( $theme_key ) . ']" type="checkbox" style="width:20px;" value="on" '.$checked.'/> ' . __( 'Active' ) . '</label></td>
</tr>';
}
}
if ( $out != '' ) {
?>
<div id="blogedit_blogthemes" class="postbox">
<h3 class="hndle"><span><?php esc_html_e( 'Site Themes' ); ?></span></h3>
<div class="inside">
<p class="description"><?php _e( 'Activate the themename of an existing theme and hit "Update Options" to allow the theme for this site.' ) ?></p>
<table class="form-table">
<?php echo $out; ?>
</table>
<p class="submit" style="text-align:center;"><input type="submit" name="Submit" value="<?php esc_attr_e( 'Update Options' ) ?>" /></p>
</div></div>
<?php }
// Site users
$blogusers = get_users_of_blog( $id );
if ( is_array( $blogusers ) ) {
echo '<div id="blogedit_blogusers" class="postbox"><h3 class="hndle"><span>' . __( 'Site Users' ) . '</span></h3><div class="inside">';
echo '<table class="form-table">';
echo "<tr><th>" . __( 'User' ) . "</th><th>" . __( 'Role' ) . "</th><th>" . __( 'Password' ) . "</th><th>" . __( 'Remove' ) . "</th></tr>";
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 '<tr><td><a href="user-edit.php?user_id=' . $val->user_id . '">' . $val->user_login . '</a></td>';
if ( $val->user_id != $current_user->data->ID ) {
?>
<td>
<select name="role[<?php echo $val->user_id ?>]" id="new_role_1"><?php
foreach ( $editblog_roles as $role => $role_assoc ){
$name = translate_user_role( $role_assoc['name'] );
echo '<option ' . selected( $role, $existing_role, false ) . ' value="' . esc_attr( $role ) . '">' . esc_html( $name ) . '</option>';
}
?>
</select>
</td>
<td>
<input type="text" name="user_password[<?php echo esc_attr( $val->user_id ) ?>]" />
</td>
<?php
echo '<td><input title="' . __( 'Click to remove user' ) . '" type="checkbox" name="blogusers[' . esc_attr( $val->user_id ) . ']" /></td>';
} else {
echo "<td><strong>" . __ ( 'N/A' ) . "</strong></td><td><strong>" . __ ( 'N/A' ) . "</strong></td><td><strong>" . __( 'N/A' ) . "</strong></td>";
}
echo '</tr>';
}
echo "</table>";
echo '<p class="submit" style="text-align:center;"><input type="submit" name="Submit" value="' . esc_attr__( 'Update Options' ) . '" /></p>';
echo "</div></div>";
}
?>
<div id="blogedit_blogadduser" class="postbox">
<h3 class="hndle"><span><?php _e( 'Add a new user' ); ?></span></h3>
<div class="inside">
<p class="description"><?php _e( 'Enter the username of an existing user and hit &#8220;Update Options&#8221; to add the user.' ) ?></p>
<table class="form-table">
<tr>
<th scope="row"><?php _e( 'User&nbsp;Login:' ) ?></th>
<td><input type="text" name="newuser" id="newuser" /></td>
</tr>
<tr>
<th scope="row"><?php _e( 'Role:' ) ?></th>
<td>
<select name="new_role" id="new_role_0">
<?php
reset( $editblog_roles );
foreach ( $editblog_roles as $role => $role_assoc ){
$name = translate_user_role( $role_assoc['name'] );
$selected = ( $role == $editblog_default_role ) ? 'selected="selected"' : '';
echo '<option ' . $selected . ' value="' . esc_attr( $role ) . '">' . esc_html( $name ) . '</option>';
}
?>
</select>
</td>
</tr>
</table>
<p class="submit" style="text-align:center;"><input type="submit" name="Submit" value="<?php esc_attr_e( 'Update Options' ) ?>" /></p>
</div>
</div>
<div id="blogedit_miscoptions" class="postbox">
<h3 class="hndle"><span><?php _e( 'Misc Site Actions' ) ?></span></h3>
<div class="inside">
<table class="form-table">
<?php do_action( 'wpmueditblogaction', $id ); ?>
</table>
<p class="submit" style="text-align:center;"><input type="submit" name="Submit" value="<?php esc_attr_e( 'Update Options' ) ?>" /></p>
</div>
</div>
</div>
<div style="clear:both;"></div>
</form>
</div>
<?php
break;
// List sites
case 'list':
default:
$pagenum = isset( $_GET['paged'] ) ? absint( $_GET['paged'] ) : 0;
if ( empty($pagenum) )
$pagenum = 1;
$per_page = (int) get_user_option( 'ms_sites_per_page' );
if ( empty( $per_page ) || $per_page < 1 )
$per_page = 15;
$per_page = apply_filters( 'ms_sites_per_page', $per_page );
$s = isset( $_GET['s'] ) ? stripslashes( trim( $_GET[ 's' ] ) ) : '';
$like_s = esc_sql( like_escape( $s ) );
$query = "SELECT * FROM {$wpdb->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' => __( '&laquo;' ),
'next_text' => __( '&raquo;' ),
'total' => $num_pages,
'current' => $pagenum
));
if ( empty( $_GET['mode'] ) )
$mode = 'list';
else
$mode = esc_attr( $_GET['mode'] );
?>
<div class="wrap">
<?php screen_icon(); ?>
<h2><?php _e('Sites') ?>
<a href="#form-add-site" class="button add-new-h2"><?php echo esc_html_x( 'Add New', 'sites' ); ?></a>
<?php
if ( isset( $_GET['s'] ) && $_GET['s'] )
printf( '<span class="subtitle">' . __( 'Search results for &#8220;%s&#8221;' ) . '</span>', esc_html( $s ) );
?>
</h2>
<form action="sites.php" method="get" id="ms-search">
<p class="search-box">
<input type="hidden" name="action" value="blogs" />
<input type="text" name="s" value="<?php echo esc_attr( $s ); ?>" />
<input type="submit" class="button" value="<?php esc_attr_e( 'Search Site by' ) ?>" />
<select name="searchaction">
<option value="name" selected="selected"><?php _e( 'Name' ); ?></option>
<option value="id"><?php _e( 'ID' ); ?></option>
<option value="ip"><?php _e( 'IP address' ); ?></option>
</select>
</p>
</form>
<form id="form-site-list" action="edit.php?action=allblogs" method="post">
<input type="hidden" name="mode" value="<?php echo esc_attr( $mode ); ?>" />
<div class="tablenav">
<div class="alignleft actions">
<select name="action">
<option value="-1" selected="selected"><?php _e( 'Bulk Actions' ); ?></option>
<option value="delete"><?php _e( 'Delete' ); ?></option>
<option value="spam"><?php _ex( 'Mark as Spam', 'site' ); ?></option>
<option value="notspam"><?php _ex( 'Not Spam', 'site' ); ?></option>
</select>
<input type="submit" value="<?php esc_attr_e( 'Apply' ); ?>" name="doaction" id="doaction" class="button-secondary action" />
<?php wp_nonce_field( 'bulk-ms-sites', '_wpnonce_bulk-ms-sites' ); ?>
</div>
<?php if ( $page_links ) { ?>
<div class="tablenav-pages">
<?php $page_links_text = sprintf( '<span class="displaying-num">' . __( 'Displaying %s&#8211;%s of %s' ) . '</span>%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; ?>
</div>
<?php } ?>
<div class="view-switch">
<a href="<?php echo esc_url( add_query_arg( 'mode', 'list', $_SERVER['REQUEST_URI'] ) ) ?>"><img <?php if ( 'list' == $mode ) echo 'class="current"'; ?> id="view-switch-list" src="<?php echo esc_url( includes_url( 'images/blank.gif' ) ); ?>" width="20" height="20" title="<?php _e( 'List View' ) ?>" alt="<?php _e( 'List View' ) ?>" /></a>
<a href="<?php echo esc_url( add_query_arg( 'mode', 'excerpt', $_SERVER['REQUEST_URI'] ) ) ?>"><img <?php if ( 'excerpt' == $mode ) echo 'class="current"'; ?> id="view-switch-excerpt" src="<?php echo esc_url( includes_url( 'images/blank.gif' ) ); ?>" width="20" height="20" title="<?php _e( 'Excerpt View' ) ?>" alt="<?php _e( 'Excerpt View' ) ?>" /></a>
</div>
</div>
<div class="clear"></div>
<?php
// define the columns to display, the syntax is 'internal name' => '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 );
?>
<table class="widefat">
<thead>
<tr>
<th class="manage-column column-cb check-column" id="cb" scope="col">
<input type="checkbox" />
</th>
<?php
$col_url = '';
foreach($sites_columns as $column_id => $column_display_name) {
$column_link = "<a href='";
$order2 = '';
if ( $order_by == $column_id )
$order2 = ( $order == 'DESC' ) ? 'ASC' : 'DESC';
$column_link .= esc_url( add_query_arg( array( 'order' => $order2, 'paged' => $pagenum, 'sortby' => $column_id ), remove_query_arg( array('action', 'updated'), $_SERVER['REQUEST_URI'] ) ) );
$column_link .= "'>{$column_display_name}</a>";
$col_url .= '<th scope="col">' . ( ( $column_id == 'users' || $column_id == 'plugins' ) ? $column_display_name : $column_link ) . '</th>';
}
echo $col_url ?>
</tr>
</thead>
<tfoot>
<tr>
<th class="manage-column column-cb check-column" id="cb1" scope="col">
<input type="checkbox" />
</th>
<?php echo $col_url ?>
</tr>
</tfoot>
<tbody id="the-site-list" class="list:site">
<?php
$status_list = array( 'archived' => 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 .= "<span class='post-state'>$state$sep</span>";
}
}
echo "<tr class='$class'>";
$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': ?>
<th scope="row" class="check-column">
<input type="checkbox" id="blog_<?php echo $blog['blog_id'] ?>" name="allblogs[]" value="<?php echo esc_attr( $blog['blog_id'] ) ?>" />
</th>
<th valign="top" scope="row">
<?php echo $blog['blog_id'] ?>
</th>
<?php
break;
case 'blogname': ?>
<td class="column-title">
<a href="<?php echo esc_url( network_admin_url( 'sites.php?action=editblog&amp;id=' . $blog['blog_id'] ) ); ?>" class="edit"><?php echo $blogname . $blog_state; ?></a>
<?php
if ( 'list' != $mode )
echo '<p>' . sprintf( _x( '%1$s &#8211; <em>%2$s</em>', '%1$s: site name. %2$s: site tagline.' ), get_blog_option( $blog['blog_id'], 'blogname' ), get_blog_option( $blog['blog_id'], 'blogdescription ' ) ) . '</p>';
// Preordered.
$actions = array(
'edit' => '', 'backend' => '',
'activate' => '', 'deactivate' => '',
'archive' => '', 'unarchive' => '',
'spam' => '', 'unspam' => '',
'delete' => '',
'visit' => '',
);
$actions['edit'] = '<span class="edit"><a href="' . esc_url( network_admin_url( 'sites.php?action=editblog&amp;id=' . $blog['blog_id'] ) ) . '">' . __( 'Edit' ) . '</a></span>';
$actions['backend'] = "<span class='backend'><a href='" . esc_url( get_admin_url($blog['blog_id']) ) . "' class='edit'>" . __( 'Backend' ) . '</a></span>';
if ( $current_site->blog_id != $blog['blog_id'] ) {
if ( get_blog_status( $blog['blog_id'], 'deleted' ) == '1' )
$actions['activate'] = '<span class="activate"><a href="' . esc_url( network_admin_url( 'edit.php?action=confirm&amp;action2=activateblog&amp;id=' . $blog['blog_id'] . '&amp;msg=' . urlencode( sprintf( __( 'You are about to activate the site %s' ), $blogname ) ) ) ) . '">' . __( 'Activate' ) . '</a></span>';
else
$actions['deactivate'] = '<span class="activate"><a href="' . esc_url( network_admin_url( 'edit.php?action=confirm&amp;action2=deactivateblog&amp;id=' . $blog['blog_id'] . '&amp;msg=' . urlencode( sprintf( __( 'You are about to deactivate the site %s' ), $blogname ) ) ) ) . '">' . __( 'Deactivate' ) . '</a></span>';
if ( get_blog_status( $blog['blog_id'], 'archived' ) == '1' )
$actions['unarchive'] = '<span class="archive"><a href="' . esc_url( network_admin_url( 'edit.php?action=confirm&amp;action2=unarchiveblog&amp;id=' . $blog['blog_id'] . '&amp;msg=' . urlencode( sprintf( __( 'You are about to unarchive the site %s.' ), $blogname ) ) ) ) . '">' . __( 'Unarchive' ) . '</a></span>';
else
$actions['archive'] = '<span class="archive"><a href="' . esc_url( network_admin_url( 'edit.php?action=confirm&amp;action2=archiveblog&amp;id=' . $blog['blog_id'] . '&amp;msg=' . urlencode( sprintf( __( 'You are about to archive the site %s.' ), $blogname ) ) ) ) . '">' . _x( 'Archive', 'verb; site' ) . '</a></span>';
if ( get_blog_status( $blog['blog_id'], 'spam' ) == '1' )
$actions['unspam'] = '<span class="spam"><a href="' . esc_url( network_admin_url( 'edit.php?action=confirm&amp;action2=unspamblog&amp;id=' . $blog['blog_id'] . '&amp;msg=' . urlencode( sprintf( __( 'You are about to unspam the site %s.' ), $blogname ) ) ) ) . '">' . _x( 'Not Spam', 'site' ) . '</a></span>';
else
$actions['spam'] = '<span class="spam"><a href="' . esc_url( network_admin_url( 'edit.php?action=confirm&amp;action2=spamblog&amp;id=' . $blog['blog_id'] . '&amp;msg=' . urlencode( sprintf( __( 'You are about to mark the site %s as spam.' ), $blogname ) ) ) ) . '">' . _x( 'Spam', 'site' ) . '</a></span>';
$actions['delete'] = '<span class="delete"><a href="' . esc_url( network_admin_url( 'edit.php?action=confirm&amp;action2=deleteblog&amp;id=' . $blog['blog_id'] . '&amp;msg=' . urlencode( sprintf( __( 'You are about to delete the site %s.' ), $blogname ) ) ) ) . '">' . __( 'Delete' ) . '</a></span>';
}
$actions['visit'] = "<span class='view'><a href='" . esc_url( get_home_url( $blog['blog_id'] ) ) . "' rel='permalink'>" . __( 'Visit' ) . '</a></span>';
$actions = array_filter( $actions );
if ( count( $actions ) ) : ?>
<div class="row-actions">
<?php echo implode( ' | ', $actions ); ?>
</div>
<?php endif; ?>
</td>
<?php
break;
case 'lastupdated': ?>
<td valign="top">
<?php
if ( 'list' == $mode )
$date = 'Y/m/d';
else
$date = 'Y/m/d \<\b\r \/\> g:i:s a';
echo ( $blog['last_updated'] == '0000-00-00 00:00:00' ) ? __( 'Never' ) : mysql2date( __( $date ), $blog['last_updated'] ); ?>
</td>
<?php
break;
case 'registered': ?>
<td valign="top">
<?php
if ( $blog['registered'] == '0000-00-00 00:00:00' )
echo '&#x2014;';
else
echo mysql2date( __( $date ), $blog['registered'] );
?>
</td>
<?php
break;
case 'users': ?>
<td valign="top">
<?php
$blogusers = get_users_of_blog( $blog['blog_id'] );
if ( is_array( $blogusers ) ) {
$blogusers_warning = '';
if ( count( $blogusers ) > 5 ) {
$blogusers = array_slice( $blogusers, 0, 5 );
$blogusers_warning = __( 'Only showing first 5 users.' ) . ' <a href="' . esc_url( get_admin_url( $blog['blog_id'], 'users.php' ) ) . '">' . __( 'More' ) . '</a>';
}
foreach ( $blogusers as $key => $val ) {
echo '<a href="' . esc_url( admin_url( 'user-edit.php?user_id=' . $val->user_id ) ) . '">' . esc_html( $val->user_login ) . '</a> ';
if ( 'list' != $mode )
echo '(' . $val->user_email . ')';
echo '<br />';
}
if ( $blogusers_warning != '' )
echo '<strong>' . $blogusers_warning . '</strong><br />';
}
?>
</td>
<?php
break;
case 'plugins': ?>
<?php if ( has_filter( 'wpmublogsaction' ) ) { ?>
<td valign="top">
<?php do_action( 'wpmublogsaction', $blog['blog_id'] ); ?>
</td>
<?php } ?>
<?php break;
default: ?>
<?php if ( has_filter( 'manage_blogs_custom_column' ) ) { ?>
<td valign="top">
<?php do_action( 'manage_blogs_custom_column', $column_name, $blog['blog_id'] ); ?>
</td>
<?php } ?>
<?php break;
}
}
?>
</tr>
<?php
}
} else { ?>
<tr>
<td colspan="<?php echo (int) count( $sites_columns ); ?>"><?php _e( 'No sites found.' ) ?></td>
</tr>
<?php
} // end if ($blogs)
?>
</tbody>
</table>
<div class="tablenav">
<?php
if ( $page_links )
echo "<div class='tablenav-pages'>$page_links_text</div>";
?>
<div class="alignleft actions">
<select name="action2">
<option value="-1" selected="selected"><?php _e( 'Bulk Actions' ); ?></option>
<option value="delete"><?php _e( 'Delete' ); ?></option>
<option value="spam"><?php _ex( 'Mark as Spam', 'site' ); ?></option>
<option value="notspam"><?php _ex( 'Not Spam', 'site' ); ?></option>
</select>
<input type="submit" value="<?php esc_attr_e( 'Apply' ); ?>" name="doaction2" id="doaction2" class="button-secondary action" />
</div>
<br class="clear" />
</div>
</form>
</div>
<div id="form-add-site" class="wrap">
<h3><?php _e( 'Add Site' ) ?></h3>
<form method="post" action="edit.php?action=addblog">
<?php wp_nonce_field( 'add-blog', '_wpnonce_add-blog' ) ?>
<table class="form-table">
<tr class="form-field form-required">
<th scope="row"><?php _e( 'Site Address' ) ?></th>
<td>
<?php if ( is_subdomain_install() ) { ?>
<input name="blog[domain]" type="text" class="regular-text" title="<?php _e( 'Domain' ) ?>"/>.<?php echo preg_replace( '|^www\.|', '', $current_site->domain );?>
<?php } else {
echo $current_site->domain . $current_site->path ?><input name="blog[domain]" class="regular-text" type="text" title="<?php _e( 'Domain' ) ?>"/>
<?php }
echo '<p>' . __( 'Only the characters a-z and 0-9 recommended.' ) . '</p>';
?>
</td>
</tr>
<tr class="form-field form-required">
<th scope="row"><?php _e( 'Site Title' ) ?></th>
<td><input name="blog[title]" type="text" class="regular-text" title="<?php _e( 'Title' ) ?>"/></td>
</tr>
<tr class="form-field form-required">
<th scope="row"><?php _e( 'Admin Email' ) ?></th>
<td><input name="blog[email]" type="text" class="regular-text" title="<?php _e( 'Email' ) ?>"/></td>
</tr>
<tr class="form-field">
<td colspan="2"><?php _e( 'A new user will be created if the above email address is not in the database.' ) ?><br /><?php _e( 'The username and password will be mailed to this email address.' ) ?></td>
</tr>
</table>
<p class="submit">
<input class="button" type="submit" name="go" value="<?php esc_attr_e( 'Add Site' ) ?>" /></p>
</form>
</div>
<?php
break;
} // end switch( $action )
include( '../admin-footer.php' ); ?>

View File

@ -0,0 +1,99 @@
<?php
/**
* Multisite themes administration panel.
*
* @package WordPress
* @subpackage Multisite
* @since 3.0.0
*/
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 = 'themes.php';
add_contextual_help($current_screen,
'<p>' . __('This screen enables and disables the inclusion of themes available to choose in the Appearance menu for each site. It does not activate or deactivate which theme a site is currently using.') . '</p>' .
'<p>' . __('If the network admin disables a theme that is in use, it can still remain selected on that site. If another theme is chosen, the disabled theme will not appear in the site&#8217;s Appearance > Themes screen.') . '</p>' .
'<p>' . __('Themes can be enabled on a site by site basis by the network admin on the Edit Site screen you go to via the Edit action link on the Sites screen.') . '</p>' .
'<p><strong>' . __('For more information:') . '</strong></p>' .
'<p>' . __('<a href="http://codex.wordpress.org/Super_Admin_Themes_SubPanel" target="_blank">Documentation on Network Themes</a>') . '</p>' .
'<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
);
require_once( '../admin-header.php' );
if ( isset( $_GET['updated'] ) ) {
?>
<div id="message" class="updated"><p><?php _e( 'Site themes saved.' ) ?></p></div>
<?php
}
$themes = get_themes();
$allowed_themes = get_site_allowed_themes();
?>
<div class="wrap">
<form action="<?php echo esc_url( network_admin_url( 'edit.php?action=updatethemes' ) ); ?>" method="post">
<?php screen_icon(); ?>
<h2><?php _e( 'Network Themes' ) ?></h2>
<p><?php _e( 'Themes must be enabled for your network before they will be available to individual sites.' ) ?></p>
<p class="submit">
<input type="submit" value="<?php _e( 'Apply Changes' ) ?>" /></p>
<table class="widefat">
<thead>
<tr>
<th style="width:15%;"><?php _e( 'Enable' ) ?></th>
<th style="width:25%;"><?php _e( 'Theme' ) ?></th>
<th style="width:10%;"><?php _e( 'Version' ) ?></th>
<th style="width:60%;"><?php _e( 'Description' ) ?></th>
</tr>
</thead>
<tbody id="plugins">
<?php
$total_theme_count = $activated_themes_count = 0;
$class = '';
foreach ( (array) $themes as $key => $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;
}
?>
<tr valign="top" class="<?php echo $class . ' ' . $class1; ?>">
<td>
<label><input name="theme[<?php echo $theme_key ?>]" type="radio" id="enabled_<?php echo $theme_key ?>" value="enabled" <?php checked( $enabled ) ?> /> <?php _e( 'Yes' ) ?></label>
&nbsp;&nbsp;&nbsp;
<label><input name="theme[<?php echo $theme_key ?>]" type="radio" id="disabled_<?php echo $theme_key ?>" value="disabled" <?php checked( $disabled ) ?> /> <?php _e( 'No' ) ?></label>
</td>
<th scope="row" style="text-align:left;"><?php echo $key ?></th>
<td><?php echo $theme['Version'] ?></td>
<td><?php echo $theme['Description'] ?></td>
</tr>
<?php } ?>
</tbody>
</table>
<p class="submit">
<input type="submit" value="<?php _e( 'Apply Changes' ) ?>" /></p>
</form>
<h3><?php _e( 'Total' )?></h3>
<p>
<?php printf( __( 'Themes Installed: %d' ), $total_theme_count); ?>
<br />
<?php printf( __( 'Themes Enabled: %d' ), $activated_themes_count); ?>
</p>
</div>
<?php include( '../admin-footer.php' ); ?>

View File

@ -0,0 +1,85 @@
<?php
/**
* Multisite upgrade administration panel.
*
* @package WordPress
* @subpackage Multisite
* @since 3.0.0
*/
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 = 'upgrade.php';
add_contextual_help($current_screen,
'<p>' . __('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.') . '</p>' .
'<p>' . __('If a version update to core has not happened, clicking this button won&#8217;t affect anything.') . '</p>' .
'<p>' . __('If this process fails for any reason, users logging in to their sites will force the same update.') . '</p>' .
'<p><strong>' . __('For more information:') . '</strong></p>' .
'<p>' . __('<a href="http://codex.wordpress.org/Super_Admin_Update_SubPanel" target="_blank">Update Network Documentation</a>') . '</p>' .
'<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
);
require_once('../admin-header.php');
if ( ! current_user_can( 'manage_network' ) )
wp_die( __( 'You do not have permission to access this page.' ) );
echo '<div class="wrap">';
screen_icon();
echo '<h2>' . __( 'Update Network' ) . '</h2>';
$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 '<p>' . __( 'All done!' ) . '</p>';
break;
}
echo "<ul>";
foreach ( (array) $blogs as $details ) {
$siteurl = get_blog_option( $details['blog_id'], 'siteurl' );
echo "<li>$siteurl</li>";
$response = wp_remote_get( trailingslashit( $siteurl ) . "wp-admin/upgrade.php?step=upgrade_db", array( 'timeout' => 120, 'httpversion' => '1.1' ) );
if ( is_wp_error( $response ) )
wp_die( sprintf( __( 'Warning! Problem updating %1$s. Your server may not be able to connect to sites running on it. Error message: <em>%2$s</em>' ), $siteurl, $response->get_error_message() ) );
do_action( 'after_mu_upgrade', $response );
do_action( 'wpmu_upgrade_site', $details[ 'blog_id' ] );
}
echo "</ul>";
?><p><?php _e( 'If your browser doesn&#8217;t start loading the next page automatically, click this link:' ); ?> <a class="button" href="ms-upgrade-network.php?action=upgrade&amp;n=<?php echo ($n + 5) ?>"><?php _e("Next Sites"); ?></a></p>
<script type='text/javascript'>
<!--
function nextpage() {
location.href = "upgrade.php?action=upgrade&n=<?php echo ($n + 5) ?>";
}
setTimeout( "nextpage()", 250 );
//-->
</script><?php
break;
case 'show':
default:
?><p><?php _e( 'You can update all the sites on your network through this page. It works by calling the update script of each site automatically. Hit the link below to update.' ); ?></p>
<p><a class="button" href="upgrade.php?action=upgrade"><?php _e("Update Network"); ?></a></p><?php
do_action( 'wpmu_upgrade_page' );
break;
}
?>
</div>
<?php include('../admin-footer.php'); ?>

View File

@ -0,0 +1,5 @@
<?php
require_once( './admin.php' );
require( '../user-edit.php' );

378
wp-admin/network/users.php Normal file
View File

@ -0,0 +1,378 @@
<?php
/**
* Multisite users administration panel.
*
* @package WordPress
* @subpackage Multisite
* @since 3.0.0
*/
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 = 'users.php';
add_contextual_help($current_screen,
'<p>' . __('This table shows all users across the network and the sites to which they are assigned.') . '</p>' .
'<p>' . __('Hover over any user on the list to make the edit links appear. The Edit link on the left will take you to 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.') . '</p>' .
'<p>' . __('You can also go to the user&#8217;s profile page by clicking on the individual username.') . '</p>' .
'<p>' . __('You can sort the table by clicking on any of the bold headings and switch between list and excerpt views by using the icons in the upper right.') . '</p>' .
'<p>' . __('The bulk action will permanently delete selected users, or mark/unmark those selected as spam. Spam users will have posts removed and will be unable to sign up again with the same email addresses.') . '</p>' .
'<p>' . __('Add User will add that person to this table and send them an email.') . '</p>' .
'<p>' . __('Users who are signed up to the network without a site are added as subscribers to the main or primary dashboard site, giving them profile pages to manage their accounts. These users will only see Dashboard and My Sites in the main navigation until a site is created for them.') . '</p>' .
'<p>' . __('You can make an existing user an additional super admin by going to the Edit User profile page and checking the box to grant that privilege.') . '</p>' .
'<p><strong>' . __('For more information:') . '</strong></p>' .
'<p>' . __('<a href="http://codex.wordpress.org/Super_Admin_Users_SubPanel" target="_blank">Network Users Documentation</a>') . '</p>' .
'<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
);
wp_enqueue_script( 'admin-forms' );
require_once( '../admin-header.php' );
if ( isset( $_GET['updated'] ) && $_GET['updated'] == 'true' && ! empty( $_GET['action'] ) ) {
?>
<div id="message" class="updated"><p>
<?php
switch ( $_GET['action'] ) {
case 'delete':
_e( 'User deleted.' );
break;
case 'all_spam':
_e( 'Users marked as spam.' );
break;
case 'all_notspam':
_e( 'Users removed from spam.' );
break;
case 'all_delete':
_e( 'Users deleted.' );
break;
case 'add':
_e( 'User added.' );
break;
}
?>
</p></div>
<?php
}
$pagenum = isset( $_GET['paged'] ) ? absint( $_GET['paged'] ) : 0;
if ( empty( $pagenum ) )
$pagenum = 1;
$per_page = (int) get_user_option( 'ms_users_per_page' );
if ( empty( $per_page ) || $per_page < 1 )
$per_page = 15;
$per_page = apply_filters( 'ms_users_per_page', $per_page );
$s = isset( $_GET['s'] ) ? stripslashes( trim( $_GET[ 's' ] ) ) : '';
$like_s = esc_sql( like_escape( $s ) );
$query = "SELECT * FROM {$wpdb->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' => __( '&laquo;' ),
'next_text' => __( '&raquo;' ),
'total' => $num_pages,
'current' => $pagenum
));
if ( empty( $_GET['mode'] ) )
$mode = 'list';
else
$mode = esc_attr( $_GET['mode'] );
?>
<div class="wrap">
<?php screen_icon(); ?>
<h2><?php esc_html_e( 'Users' ); ?>
<a href="#form-add-user" class="button add-new-h2"><?php echo esc_html_x( 'Add New' , 'users'); ?></a>
<?php
if ( isset( $_GET['s'] ) && $_GET['s'] )
printf( '<span class="subtitle">' . __( 'Search results for &#8220;%s&#8221;' ) . '</span>', esc_html( $s ) );
?>
</h2>
<form action="users.php" method="get" class="search-form">
<p class="search-box">
<input type="text" name="s" value="<?php echo esc_attr( $s ); ?>" class="search-input" id="user-search-input" />
<input type="submit" id="post-query-submit" value="<?php esc_attr_e( 'Search Users' ) ?>" class="button" />
</p>
</form>
<form id="form-user-list" action='edit.php?action=allusers' method='post'>
<input type="hidden" name="mode" value="<?php echo esc_attr( $mode ); ?>" />
<div class="tablenav">
<div class="alignleft actions">
<select name="action">
<option value="-1" selected="selected"><?php _e( 'Bulk Actions' ); ?></option>
<option value="delete"><?php _e( 'Delete' ); ?></option>
<option value="spam"><?php _ex( 'Mark as Spam', 'user' ); ?></option>
<option value="notspam"><?php _ex( 'Not Spam', 'user' ); ?></option>
</select>
<input type="submit" value="<?php esc_attr_e( 'Apply' ); ?>" name="doaction" id="doaction" class="button-secondary action" />
<?php wp_nonce_field( 'bulk-ms-users', '_wpnonce_bulk-ms-users' ); ?>
</div>
<?php if ( $page_links ) { ?>
<div class="tablenav-pages">
<?php $page_links_text = sprintf( '<span class="displaying-num">' . __( 'Displaying %s&#8211;%s of %s' ) . '</span>%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; ?>
</div>
<?php } ?>
<div class="view-switch">
<a href="<?php echo esc_url( add_query_arg( 'mode', 'list', $_SERVER['REQUEST_URI'] ) ) ?>"><img <?php if ( 'list' == $mode ) echo 'class="current"'; ?> id="view-switch-list" src="<?php echo esc_url( includes_url( 'images/blank.gif' ) ); ?>" width="20" height="20" title="<?php _e( 'List View' ) ?>" alt="<?php _e( 'List View' ) ?>" /></a>
<a href="<?php echo esc_url( add_query_arg( 'mode', 'excerpt', $_SERVER['REQUEST_URI'] ) ) ?>"><img <?php if ( 'excerpt' == $mode ) echo 'class="current"'; ?> id="view-switch-excerpt" src="<?php echo esc_url( includes_url( 'images/blank.gif' ) ); ?>" width="20" height="20" title="<?php _e( 'Excerpt View' ) ?>" alt="<?php _e( 'Excerpt View' ) ?>" /></a>
</div>
</div>
<div class="clear"></div>
<?php
// define the columns to display, the syntax is 'internal name' => '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 );
?>
<table class="widefat">
<thead>
<tr>
<th class="manage-column column-cb check-column" scope="col">
<input type="checkbox" />
</th>
<?php
$col_url = '';
foreach($users_columns as $column_id => $column_display_name) {
$column_link = "<a href='";
$order2 = '';
if ( $order_by == $column_id )
$order2 = ( $order == 'DESC' ) ? 'ASC' : 'DESC';
$column_link .= esc_url( add_query_arg( array( 'order' => $order2, 'paged' => $pagenum, 'sortby' => $column_id ), remove_query_arg( array( 'action', 'updated' ), $_SERVER['REQUEST_URI'] ) ) );
$column_link .= "'>{$column_display_name}</a>";
$col_url .= '<th scope="col">' . ( $column_id == 'blogs' ? $column_display_name : $column_link ) . '</th>';
}
echo $col_url; ?>
</tr>
</thead>
<tfoot>
<tr>
<th class="manage-column column-cb check-column" scope="col">
<input type="checkbox" />
</th>
<?php echo $col_url; ?>
</tr>
</tfoot>
<tbody id="the-user-list" class="list:user">
<?php if ( $user_list ) {
$class = '';
$super_admins = get_super_admins();
foreach ( (array) $user_list as $user ) {
$class = ( 'alternate' == $class ) ? '' : 'alternate';
$status_list = array( 'spam' => 'site-spammed', 'deleted' => 'site-deleted' );
foreach ( $status_list as $status => $col ) {
if ( $user[$status] )
$class = $col;
}
?>
<tr class="<?php echo $class; ?>">
<?php
foreach( (array) $users_columns as $column_name=>$column_display_name ) :
switch( $column_name ) {
case 'id': ?>
<th scope="row" class="check-column">
<input type="checkbox" id="blog_<?php echo $user['ID'] ?>" name="allusers[]" value="<?php echo esc_attr( $user['ID'] ) ?>" />
</th>
<th valign="top" scope="row">
<?php echo $user['ID'] ?>
</th>
<?php
break;
case 'login':
$avatar = get_avatar( $user['user_email'], 32 );
$edit_link = ( $current_user->ID == $user['ID'] ) ? 'profile.php' : 'user-edit.php?user_id=' . $user['ID'];
?>
<td class="username column-username">
<?php echo $avatar; ?><strong><a href="<?php echo esc_url( network_admin_url( $edit_link ) ); ?>" class="edit"><?php echo stripslashes( $user['user_login'] ); ?></a><?php
if ( in_array( $user['user_login'], $super_admins ) )
echo ' - ' . __( 'Super admin' );
?></strong>
<br/>
<div class="row-actions">
<span class="edit"><a href="<?php echo esc_url( network_admin_url( $edit_link ) ); ?>"><?php _e( 'Edit' ); ?></a></span>
<?php if ( ! in_array( $user['user_login'], $super_admins ) ) { ?>
| <span class="delete"><a href="<?php echo $delete = esc_url( admin_url( add_query_arg( '_wp_http_referer', urlencode( stripslashes( $_SERVER['REQUEST_URI'] ) ), wp_nonce_url( 'edit.php', 'deleteuser' ) . '&amp;action=deleteuser&amp;id=' . $user['ID'] ) ) ); ?>" class="delete"><?php _e( 'Delete' ); ?></a></span>
<?php } ?>
</div>
</td>
<?php
break;
case 'name': ?>
<td class="name column-name"><?php echo $user['display_name'] ?></td>
<?php
break;
case 'email': ?>
<td class="email column-email"><a href="mailto:<?php echo $user['user_email'] ?>"><?php echo $user['user_email'] ?></a></td>
<?php
break;
case 'registered':
if ( 'list' == $mode )
$date = 'Y/m/d';
else
$date = 'Y/m/d \<\b\r \/\> g:i:s a';
?>
<td><?php echo mysql2date( __( $date ), $user['user_registered'] ); ?></td>
<?php
break;
case 'blogs':
$blogs = get_blogs_of_user( $user['ID'], true );
?>
<td>
<?php
if ( is_array( $blogs ) ) {
foreach ( (array) $blogs as $key => $val ) {
$path = ( $val->path == '/' ) ? '' : $val->path;
echo '<a href="'. esc_url( network_admin_url( 'sites.php?action=editblog&amp;id=' . $val->userblog_id ) ) .'">' . str_replace( '.' . $current_site->domain, '', $val->domain . $path ) . '</a>';
echo ' <small class="row-actions">';
// Edit
echo '<a href="'. esc_url( network_admin_url( 'sites.php?action=editblog&amp;id=' . $val->userblog_id ) ) .'">' . __( 'Edit' ) . '</a> | ';
// View
echo '<a ';
if ( get_blog_status( $val->userblog_id, 'spam' ) == 1 )
echo 'style="background-color: #faa" ';
echo 'href="' . esc_url( get_home_url( $val->userblog_id ) ) . '">' . __( 'View' ) . '</a>';
echo '</small><br />';
}
}
?>
</td>
<?php
break;
default: ?>
<td><?php do_action( 'manage_users_custom_column', $column_name, $user['ID'] ); ?></td>
<?php
break;
}
endforeach
?>
</tr>
<?php
}
} else {
?>
<tr>
<td colspan="<?php echo (int) count($users_columns); ?>"><?php _e( 'No users found.' ) ?></td>
</tr>
<?php
} // end if ($users)
?>
</tbody>
</table>
<div class="tablenav">
<?php
if ( $page_links )
echo "<div class='tablenav-pages'>$page_links_text</div>";
?>
<div class="alignleft actions">
<select name="action2">
<option value="-1" selected="selected"><?php _e( 'Bulk Actions' ); ?></option>
<option value="delete"><?php _e( 'Delete' ); ?></option>
<option value="spam"><?php _ex( 'Mark as Spam', 'user' ); ?></option>
<option value="notspam"><?php _ex( 'Not Spam', 'user' ); ?></option>
</select>
<input type="submit" value="<?php esc_attr_e( 'Apply' ); ?>" name="doaction2" id="doaction2" class="button-secondary action" />
</div>
<br class="clear" />
</div>
</form>
</div>
<?php
if ( apply_filters( 'show_adduser_fields', true ) ) :
?>
<div class="wrap" id="form-add-user">
<h3><?php _e( 'Add User' ) ?></h3>
<form action="edit.php?action=adduser" method="post">
<table class="form-table">
<tr class="form-field form-required">
<th scope="row"><?php _e( 'Username' ) ?></th>
<td><input type="text" class="regular-text" name="user[username]" /></td>
</tr>
<tr class="form-field form-required">
<th scope="row"><?php _e( 'Email' ) ?></th>
<td><input type="text" class="regular-text" name="user[email]" /></td>
</tr>
<tr class="form-field">
<td colspan="2"><?php _e( 'Username and password will be mailed to the above email address.' ) ?></td>
</tr>
</table>
<p class="submit">
<?php wp_nonce_field( 'add-user', '_wpnonce_add-user' ) ?>
<input class="button" type="submit" value="<?php esc_attr_e( 'Add user' ) ?>" /></p>
</form>
</div>
<?php endif; ?>
<?php include( '../admin-footer.php' ); ?>

View File

@ -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 '<div class="wrap">';
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');
?>
<div class="wrap">
<?php
@ -327,7 +327,7 @@ add_contextual_help($current_screen,
$title = __('Plugins');
require_once('./admin-header.php');
require_once(ABSPATH . 'wp-admin/admin-header.php');
$invalid = validate_active_plugins();
if ( !empty($invalid) )
@ -345,7 +345,7 @@ if ( !empty($invalid) )
<div id="message" class="updated"><p><?php echo $errmsg; ?></p>
<?php
if ( !isset($_GET['charsout']) && wp_verify_nonce($_GET['_error_nonce'], 'plugin-activation-error_' . $plugin) ) { ?>
<iframe style="border:0" width="100%" height="70px" src="<?php echo admin_url('plugins.php?action=error_scrape&amp;plugin=' . esc_attr($plugin) . '&amp;_wpnonce=' . esc_attr($_GET['_error_nonce'])); ?>"></iframe>
<iframe style="border:0" width="100%" height="70px" src="<?php echo 'plugins.php?action=error_scrape&amp;plugin=' . esc_attr($plugin) . '&amp;_wpnonce=' . esc_attr($_GET['_error_nonce']); ?>"></iframe>
<?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 .= '<p>' . $plugin_data['Description'] . '</p>';
} 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'] = '<a href="' . wp_nonce_url('plugins.php?action=deactivate&amp;networkwide=1&amp;plugin=' . $plugin_file . '&amp;plugin_status=' . $context . '&amp;paged=' . $page, 'deactivate-plugin_' . $plugin_file) . '" title="' . __('Deactivate this plugin') . '">' . __('Network Deactivate') . '</a>';
} else {
$actions['deactivate'] = '<a href="' . wp_nonce_url('plugins.php?action=deactivate&amp;plugin=' . $plugin_file . '&amp;plugin_status=' . $context . '&amp;paged=' . $page, 'deactivate-plugin_' . $plugin_file) . '" title="' . __('Deactivate this plugin') . '">' . __('Deactivate') . '</a>';
if ( current_user_can( 'manage_network_plugins' ) )
$actions['network_activate'] = '<a href="' . wp_nonce_url('plugins.php?action=activate&amp;networkwide=1&amp;plugin=' . $plugin_file . '&amp;plugin_status=' . $context . '&amp;paged=' . $page, 'activate-plugin_' . $plugin_file) . '" title="' . __('Activate this plugin for all sites in this network') . '" class="edit">' . __('Network Activate') . '</a>';
if ( current_user_can('delete_plugins') )
$actions['delete'] = '<a href="' . wp_nonce_url('plugins.php?action=delete-selected&amp;checked[]=' . $plugin_file . '&amp;plugin_status=' . $context . '&amp;paged=' . $page, 'bulk-manage-plugins') . '" title="' . __('Delete this plugin') . '" class="delete">' . __('Delete') . '</a>';
}
} else {
if ( is_multisite() && is_network_only_plugin( $plugin_file ) )
$actions['network_only'] = '<span title="' . __('This plugin can only be activated for all sites in a network') . '">' . __('Network Only') . '</span>';
else
if ( $is_active ) {
$actions['deactivate'] = '<a href="' . wp_nonce_url('plugins.php?action=deactivate&amp;plugin=' . $plugin_file . '&amp;plugin_status=' . $context . '&amp;paged=' . $page, 'deactivate-plugin_' . $plugin_file) . '" title="' . __('Deactivate this plugin') . '">' . __('Deactivate') . '</a>';
} else {
if ( is_network_only_plugin( $plugin_file ) && !is_network_admin() )
continue;
$actions['activate'] = '<a href="' . wp_nonce_url('plugins.php?action=activate&amp;plugin=' . $plugin_file . '&amp;plugin_status=' . $context . '&amp;paged=' . $page, 'activate-plugin_' . $plugin_file) . '" title="' . __('Activate this plugin') . '" class="edit">' . __('Activate') . '</a>';
if ( is_multisite() && current_user_can( 'manage_network_plugins' ) )
$actions['network_activate'] = '<a href="' . wp_nonce_url('plugins.php?action=activate&amp;networkwide=1&amp;plugin=' . $plugin_file . '&amp;plugin_status=' . $context . '&amp;paged=' . $page, 'activate-plugin_' . $plugin_file) . '" title="' . __('Activate this plugin for all sites in this network') . '" class="edit">' . __('Network Activate') . '</a>';
if ( current_user_can('delete_plugins') )
$actions['delete'] = '<a href="' . wp_nonce_url('plugins.php?action=delete-selected&amp;checked[]=' . $plugin_file . '&amp;plugin_status=' . $context . '&amp;paged=' . $page, 'bulk-manage-plugins') . '" title="' . __('Delete this plugin') . '" class="delete">' . __('Delete') . '</a>';
} // end if $is_active
if ( current_user_can('delete_plugins') )
$actions['delete'] = '<a href="' . wp_nonce_url('plugins.php?action=delete-selected&amp;checked[]=' . $plugin_file . '&amp;plugin_status=' . $context . '&amp;paged=' . $page, 'bulk-manage-plugins') . '" title="' . __('Delete this plugin') . '" class="delete">' . __('Delete') . '</a>';
} // end if $is_active
} // end if is_network_admin()
if ( current_user_can('edit_plugins') && is_writable(WP_PLUGIN_DIR . '/' . $plugin_file) )
$actions['edit'] = '<a href="plugin-editor.php?file=' . $plugin_file . '" title="' . __('Open this file in the Plugin Editor') . '" class="edit">' . __('Edit') . '</a>';
@ -689,7 +704,7 @@ function print_plugin_actions($context, $field_name = 'action' ) {
<?php do_action( 'pre_current_active_plugins', $all_plugins ) ?>
<form method="post" action="<?php echo admin_url('plugins.php') ?>">
<form method="post" action="plugins.php">
<?php wp_nonce_field('bulk-manage-plugins') ?>
<input type="hidden" name="plugin_status" value="<?php echo esc_attr($status) ?>" />
<input type="hidden" name="paged" value="<?php echo esc_attr($page) ?>" />
@ -783,5 +798,5 @@ print_plugin_actions($status, "action2");
</div>
<?php
include('./admin-footer.php');
include(ABSPATH . 'wp-admin/admin-footer.php');
?>

View File

@ -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');
?>
<?php if ( !IS_PROFILE_PAGE && is_super_admin( $profileuser->ID ) && current_user_can( 'manage_network_options' ) ) { ?>
@ -177,7 +177,7 @@ include ('admin-header.php');
<?php screen_icon(); ?>
<h2><?php echo esc_html( $title ); ?></h2>
<form id="your-profile" action="<?php echo esc_url( admin_url( IS_PROFILE_PAGE ? 'profile.php' : 'user-edit.php' ) ); ?>" method="post"<?php do_action('user_edit_form_tag'); ?>>
<form id="your-profile" action="<?php echo esc_url( self_admin_url( IS_PROFILE_PAGE ? 'profile.php' : 'user-edit.php' ) ); ?>" method="post"<?php do_action('user_edit_form_tag'); ?>>
<?php wp_nonce_field('update-user_' . $user_id) ?>
<?php if ( $wp_http_referer ) : ?>
<input type="hidden" name="wp_http_referer" value="<?php echo esc_url($wp_http_referer); ?>" />
@ -245,7 +245,7 @@ else
echo '<option value="" selected="selected">' . __('&mdash; No role for this site &mdash;') . '</option>';
?>
</select>
<?php if ( is_multisite() && current_user_can( 'manage_network_options' ) && !isset($super_admins) ) { ?>
<?php if ( is_multisite() && is_network_admin() && current_user_can( 'manage_network_options' ) && !isset($super_admins) ) { ?>
<p><label><input type="checkbox" id="super_admin" name="super_admin"<?php checked( is_super_admin( $profileuser->ID ) ); ?> /> <?php _e( 'Grant this user super admin privileges for the Network.'); ?></label></p>
<?php } ?>
</td></tr>
@ -307,7 +307,7 @@ else
$new_email = get_option( $current_user->ID . '_new_email' );
if ( $new_email && $new_email != $current_user->user_email ) : ?>
<div class="updated inline">
<p><?php printf( __('There is a pending change of your e-mail to <code>%1$s</code>. <a href="%2$s">Cancel</a>'), $new_email['newemail'], esc_url( admin_url( 'profile.php?dismiss=' . $current_user->ID . '_new_email' ) ) ); ?></p>
<p><?php printf( __('There is a pending change of your e-mail to <code>%1$s</code>. <a href="%2$s">Cancel</a>'), $new_email['newemail'], esc_url( self_admin_url( 'profile.php?dismiss=' . $current_user->ID . '_new_email' ) ) ); ?></p>
</div>
<?php endif; ?>
</td>
@ -398,5 +398,5 @@ break;
}
</script>
<?php
include('./admin-footer.php');
include( ABSPATH . 'wp-admin/admin-footer.php');
?>

View File

@ -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
*

View File

@ -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
*