mirror of
https://github.com/WordPress/WordPress.git
synced 2024-12-22 17:18:32 +01:00
AJAXify user addition. Props mdawaffe. fixes #2624
git-svn-id: http://svn.automattic.com/wordpress/trunk@3677 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
3d2347a655
commit
cebb0a3a15
@ -209,6 +209,25 @@ case 'update-meta' :
|
||||
header('Content-type: text/xml');
|
||||
die($r);
|
||||
break;
|
||||
case 'add-user' :
|
||||
if ( !current_user_can('edit_users') )
|
||||
die('-1');
|
||||
require_once( ABSPATH . WPINC . '/registration-functions.php');
|
||||
$user_id = add_user();
|
||||
if ( is_wp_error( $user_id ) ) {
|
||||
foreach( $user_id->get_error_codes() as $code)
|
||||
foreach( $user_id->get_error_messages($code) as $message )
|
||||
echo "$message<br />";
|
||||
exit;
|
||||
} elseif ( !$user_id ) {
|
||||
die('0');
|
||||
}
|
||||
$r = "<?xml version='1.0' standalone='yes'?><ajaxresponse><user><id>$user_id</id><newitem><![CDATA[<table><tbody>";
|
||||
$r .= user_row( $user_id );
|
||||
$r .= "</tbody></table>]]></newitem></user></ajaxresponse>";
|
||||
header('Content-type: text/xml');
|
||||
die($r);
|
||||
break;
|
||||
default :
|
||||
die('0');
|
||||
break;
|
||||
|
@ -361,15 +361,38 @@ function get_category_to_edit($id) {
|
||||
return $category;
|
||||
}
|
||||
|
||||
function wp_dropdown_roles( $default = false ) {
|
||||
global $wp_roles;
|
||||
$r = '';
|
||||
foreach($wp_roles->role_names as $role => $name)
|
||||
if ( $default == $role ) // Make default first in list
|
||||
$p = "\n\t<option selected='selected' value='$role'>$name</option>";
|
||||
else
|
||||
$r .= "\n\t<option value='$role'>$name</option>";
|
||||
echo $p . $r;
|
||||
}
|
||||
|
||||
|
||||
// Creates a new user from the "Users" form using $_POST information.
|
||||
|
||||
function add_user() {
|
||||
return edit_user();
|
||||
if ( func_num_args() ) { // The hackiest hack that ever did hack
|
||||
global $current_user, $wp_roles;
|
||||
$user_id = func_get_arg(0);
|
||||
if (isset ($_POST['role'])) {
|
||||
if($user_id != $current_user->id || $wp_roles->role_objects[$_POST['role']]->has_cap('edit_users')) {
|
||||
$user = new WP_User($user_id);
|
||||
$user->set_role($_POST['role']);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
add_action('user_register', 'add_user'); // See above
|
||||
return edit_user();
|
||||
}
|
||||
}
|
||||
|
||||
function edit_user($user_id = 0) {
|
||||
global $current_user, $wp_roles, $wpdb;
|
||||
|
||||
if ($user_id != 0) {
|
||||
$update = true;
|
||||
$user->ID = $user_id;
|
||||
@ -417,49 +440,49 @@ function edit_user($user_id = 0) {
|
||||
if (isset ($_POST['yim']))
|
||||
$user->yim = wp_specialchars(trim($_POST['yim']));
|
||||
|
||||
$errors = array ();
|
||||
$errors = new WP_Error();
|
||||
|
||||
/* checking that username has been typed */
|
||||
if ($user->user_login == '')
|
||||
$errors['user_login'] = __('<strong>ERROR</strong>: Please enter a username.');
|
||||
$errors->add('user_login', __('<strong>ERROR</strong>: Please enter a username.'));
|
||||
|
||||
/* checking the password has been typed twice */
|
||||
do_action('check_passwords', array ($user->user_login, & $pass1, & $pass2));
|
||||
|
||||
if (!$update) {
|
||||
if ($pass1 == '' || $pass2 == '')
|
||||
$errors['pass'] = __('<strong>ERROR</strong>: Please enter your password twice.');
|
||||
$errors->add('pass', __('<strong>ERROR</strong>: Please enter your password twice.'));
|
||||
} else {
|
||||
if ((empty ($pass1) && !empty ($pass2)) || (empty ($pass2) && !empty ($pass1)))
|
||||
$errors['pass'] = __("<strong>ERROR</strong>: you typed your new password only once.");
|
||||
$errors->add('pass', __("<strong>ERROR</strong>: you typed your new password only once."));
|
||||
}
|
||||
|
||||
/* Check for "\" in password */
|
||||
if( strpos( " ".$pass1, "\\" ) )
|
||||
$errors['pass'] = __('<strong>ERROR</strong>: Passwords may not contain the character "\\".');
|
||||
$errors->add('pass', __('<strong>ERROR</strong>: Passwords may not contain the character "\\".'));
|
||||
|
||||
/* checking the password has been typed twice the same */
|
||||
if ($pass1 != $pass2)
|
||||
$errors['pass'] = __('<strong>ERROR</strong>: Please type the same password in the two password fields.');
|
||||
$errors->add('pass', __('<strong>ERROR</strong>: Please type the same password in the two password fields.'));
|
||||
|
||||
if (!empty ($pass1))
|
||||
$user->user_pass = $pass1;
|
||||
|
||||
if ( !validate_username($user->user_login) )
|
||||
$errors['user_login'] = __('<strong>ERROR</strong>: This username is invalid. Please enter a valid username.');
|
||||
$errors->add('user_login', __('<strong>ERROR</strong>: This username is invalid. Please enter a valid username.'));
|
||||
|
||||
if (!$update && username_exists($user->user_login))
|
||||
$errors['user_login'] = __('<strong>ERROR</strong>: This username is already registered, please choose another one.');
|
||||
$errors->add('user_login', __('<strong>ERROR</strong>: This username is already registered, please choose another one.'));
|
||||
|
||||
/* checking e-mail address */
|
||||
if (empty ($user->user_email)) {
|
||||
$errors['user_email'] = __("<strong>ERROR</strong>: please type an e-mail address");
|
||||
$errors->add('user_email', __("<strong>ERROR</strong>: please type an e-mail address"));
|
||||
} else
|
||||
if (!is_email($user->user_email)) {
|
||||
$errors['user_email'] = __("<strong>ERROR</strong>: the email address isn't correct");
|
||||
$errors->add('user_email', __("<strong>ERROR</strong>: the email address isn't correct"));
|
||||
}
|
||||
|
||||
if (count($errors) != 0)
|
||||
if ( $errors->get_error_codes() )
|
||||
return $errors;
|
||||
|
||||
if ($update) {
|
||||
@ -468,8 +491,7 @@ function edit_user($user_id = 0) {
|
||||
$user_id = wp_insert_user(get_object_vars($user));
|
||||
wp_new_user_notification($user_id);
|
||||
}
|
||||
|
||||
return $errors;
|
||||
return $user_id;
|
||||
}
|
||||
|
||||
|
||||
@ -692,6 +714,33 @@ function page_rows($parent = 0, $level = 0, $pages = 0, $hierarchy = true) {
|
||||
}
|
||||
}
|
||||
|
||||
function user_row( $user_object, $style = '' ) {
|
||||
if ( !(is_object($user_object) && is_a($user_object, 'WP_User')) )
|
||||
$user_object = new WP_User( (int) $user_object );
|
||||
$email = $user_object->user_email;
|
||||
$url = $user_object->user_url;
|
||||
$short_url = str_replace('http://', '', $url);
|
||||
$short_url = str_replace('www.', '', $short_url);
|
||||
if ('/' == substr($short_url, -1))
|
||||
$short_url = substr($short_url, 0, -1);
|
||||
if (strlen($short_url) > 35)
|
||||
$short_url = substr($short_url, 0, 32).'...';
|
||||
$numposts = get_usernumposts($user_object->ID);
|
||||
if (0 < $numposts) $numposts = "<a href='edit.php?author=$user_object->ID' title='" . __('View posts') . "'>$numposts</a>";
|
||||
$r = "<tr id='user-$user_object->ID'$style>
|
||||
<td><input type='checkbox' name='users[]' id='user_{$user_object->ID}' value='{$user_object->ID}' /> <label for='user_{$user_object->ID}'>{$user_object->ID}</label></td>
|
||||
<td><label for='user_{$user_object->ID}'><strong>$user_object->user_login</strong></label></td>
|
||||
<td><label for='user_{$user_object->ID}'>$user_object->first_name $user_object->last_name</label></td>
|
||||
<td><a href='mailto:$email' title='" . sprintf(__('e-mail: %s'), $email) . "'>$email</a></td>
|
||||
<td><a href='$url' title='website: $url'>$short_url</a></td>";
|
||||
$r .= "\n\t\t<td align='right'>$numposts</td>";
|
||||
$r .= "\n\t\t<td>";
|
||||
if (current_user_can('edit_users'))
|
||||
$r .= "<a href='user-edit.php?user_id=$user_object->ID' class='edit'>".__('Edit')."</a>";
|
||||
$r .= "</td>\n\t</tr>";
|
||||
return $r;
|
||||
}
|
||||
|
||||
function wp_dropdown_cats($currentcat = 0, $currentparent = 0, $parent = 0, $level = 0, $categories = 0) {
|
||||
global $wpdb, $bgcolor;
|
||||
if (!$categories) {
|
||||
|
@ -40,6 +40,9 @@ function addLoadEvent(func) {if ( typeof wpOnload!='function'){wpOnload=func;}el
|
||||
<?php if ( 'categories.php' == $pagenow && 'edit' != $action ) { ?>
|
||||
<script type="text/javascript" src="categories.js"></script>
|
||||
<?php } ?>
|
||||
<?php if ( $users_js ) { ?>
|
||||
<script type="text/javascript" src="users.js"></script>
|
||||
<?php } ?>
|
||||
<?php if ( $dbx_js ) { ?>
|
||||
<script type="text/javascript" src="../wp-includes/js/dbx.js"></script>
|
||||
<script type="text/javascript">
|
||||
|
@ -40,7 +40,7 @@ for ($i=0; $i<count($wpvarstoreset); $i += 1) {
|
||||
}
|
||||
}
|
||||
|
||||
$xfn_js = $sack_js = $list_js = $cat_js = $dbx_js = $pmeta_js = $editing = false;
|
||||
$xfn_js = $sack_js = $list_js = $cat_js = $users_js = $dbx_js = $pmeta_js = $editing = false;
|
||||
|
||||
require(ABSPATH . '/wp-admin/menu.php');
|
||||
|
||||
|
@ -9,7 +9,7 @@ function dimSomething(what,id,dimClass){return theList.ajaxDimmer(what,id,dimCla
|
||||
function WPAjax(file, responseEl){//class WPAjax extends sack
|
||||
this.getResponseElement=function(r){var p=document.getElementById(r+'-p');if(!p){p=document.createElement('span');p.id=r+'ajax-response-p';document.getElementById(r).appendChild(p);}this.myResponseElement=p; }
|
||||
this.parseAjaxResponse=function(){
|
||||
if(isNaN(this.response)){this.myResponseElement.innerHTML="<?php _e('Error: '); ?>"+this.response;return false;}
|
||||
if(isNaN(this.response)){this.myResponseElement.innerHTML='<div class="error">'+this.response+'</div>';return false;}
|
||||
this.response=parseInt(this.response,10);
|
||||
if(-1==this.response){this.myResponseElement.innerHTML="<?php _e("You don't have permission to do that."); ?>";return false;}
|
||||
else if(0==this.response){this.myResponseElement.innerHTML="<?php _e("Something odd happened. Try refreshing the page? Either that or what you tried to change never existed in the first place."); ?>";return false;}
|
||||
@ -17,7 +17,7 @@ function WPAjax(file, responseEl){//class WPAjax extends sack
|
||||
}
|
||||
this.parseAjaxResponseXML=function(){
|
||||
if(this.responseXML&&typeof this.responseXML=='object')return true;
|
||||
if(isNaN(this.response)){this.myResponseElement.innerHTML="<?php _e('Error: '); ?>"+this.response;return false;}
|
||||
if(isNaN(this.response)){this.myResponseElement.innerHTML='<div class="error">'+this.response+'</div>';return false;}
|
||||
var r=parseInt(this.response,10);
|
||||
if(-1==r){this.myResponseElement.innerHTML="<?php _e("You don't have permission to do that."); ?>";}
|
||||
else if(0==r){this.myResponseElement.innerHTML="<?php _e("Invalid Entry."); ?>";}
|
||||
@ -153,7 +153,7 @@ function listMan(theListId){
|
||||
this.getListItems();
|
||||
}
|
||||
//No submit unless eval(code) returns true.
|
||||
function killSubmit(code,e){if(!e){if(window.event)e=window.event;else return;}var t=e.target?e.target:e.srcElement;if(('text'==t.type&&e.keyCode==13)||('submit'==t.type&&'click'==e.type)){if(!eval(code));e.returnValue=false;e.cancelBubble=true;return false;}}
|
||||
function killSubmit(code,e){if(!e){if(window.event)e=window.event;else return;}var t=e.target?e.target:e.srcElement;if(('text'==t.type&&e.keyCode==13)||('submit'==t.type&&'click'==e.type)){if(!eval(code)){e.returnValue=false;e.cancelBubble=true;return false;}}}
|
||||
//Pretty func from ALA http://www.alistapart.com/articles/gettingstartedwithajax
|
||||
function getNodeValue(tree,el){return tree.getElementsByTagName(el)[0].firstChild.nodeValue;}
|
||||
//Generic but lame JS closure
|
||||
|
@ -54,12 +54,7 @@ include('./admin-header.php');
|
||||
<tr valign="top">
|
||||
<th scope="row"><?php _e('New User Default Role:') ?></th>
|
||||
<td><label for="default_role">
|
||||
<select name="default_role" id="default_role"><?php
|
||||
foreach($wp_roles->role_names as $role => $name) {
|
||||
$selected = (get_settings('default_role') == $role) ? 'selected="selected"' : '';
|
||||
echo "<option {$selected} value=\"{$role}\">{$name}</option>";
|
||||
}
|
||||
?></select></label>
|
||||
<select name="default_role" id="default_role"><?php wp_dropdown_roles( get_settings('default_role') ); ?></select></label>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
@ -111,4 +106,4 @@ endfor;
|
||||
|
||||
</div>
|
||||
|
||||
<?php include('./admin-footer.php') ?>
|
||||
<?php include('./admin-footer.php') ?>
|
||||
|
@ -9,10 +9,10 @@ if ( !$_POST )
|
||||
|
||||
$errors = edit_user($user_ID);
|
||||
|
||||
if (count($errors) != 0) {
|
||||
foreach ($errors as $id => $error) {
|
||||
echo $error . '<br/>';
|
||||
}
|
||||
if ( is_wp_error( $errors ) ) {
|
||||
foreach( $errors->get_error_codes() as $code)
|
||||
foreach( $errors->get_error_messages($code) as $message )
|
||||
echo "$message<br />";
|
||||
exit;
|
||||
}
|
||||
|
||||
@ -30,4 +30,4 @@ else
|
||||
wp_redirect( $to );
|
||||
exit;
|
||||
|
||||
?>
|
||||
?>
|
||||
|
@ -34,14 +34,12 @@ case 'update':
|
||||
|
||||
check_admin_referer();
|
||||
|
||||
$errors = array();
|
||||
|
||||
if (!current_user_can('edit_users'))
|
||||
$errors['head'] = __('You do not have permission to edit this user.');
|
||||
$errors = new WP_Error('head', __('You do not have permission to edit this user.'));
|
||||
else
|
||||
$errors = edit_user($user_id);
|
||||
|
||||
if(count($errors) == 0) {
|
||||
if( !is_wp_error( $errors ) ) {
|
||||
header("Location: user-edit.php?user_id=$user_id&updated=true");
|
||||
exit;
|
||||
}
|
||||
@ -51,7 +49,9 @@ include ('admin-header.php');
|
||||
|
||||
$profileuser = new WP_User($user_id);
|
||||
|
||||
if (!current_user_can('edit_users')) $errors['head'] = __('You do not have permission to edit this user.');
|
||||
if (!current_user_can('edit_users'))
|
||||
if ( !is_wp_error( $errors ) )
|
||||
$errors = new WP_Error('head', __('You do not have permission to edit this user.'));
|
||||
?>
|
||||
|
||||
<?php if ( isset($_GET['updated']) ) : ?>
|
||||
@ -59,11 +59,13 @@ if (!current_user_can('edit_users')) $errors['head'] = __('You do not have permi
|
||||
<p><strong><?php _e('User updated.') ?></strong></p>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php if ( count($errors) != 0 ) : ?>
|
||||
<?php if ( is_wp_error( $errors ) ) : ?>
|
||||
<div class="error">
|
||||
<ul>
|
||||
<?php
|
||||
foreach($errors as $error) echo "<li>$error</li>";
|
||||
foreach( $errors->get_error_codes() as $code)
|
||||
foreach( $errors->get_error_messages($code) as $message )
|
||||
echo "<li>$message</li>";
|
||||
?>
|
||||
</ul>
|
||||
</div>
|
||||
|
@ -79,7 +79,7 @@ case 'delete':
|
||||
}
|
||||
|
||||
if ( !current_user_can('edit_users') )
|
||||
$error['edit_users'] = __('You can’t delete users.');
|
||||
$error = new WP_Error('edit_users', __('You can’t delete users.'));
|
||||
|
||||
$userids = $_POST['users'];
|
||||
|
||||
@ -133,15 +133,19 @@ break;
|
||||
case 'adduser':
|
||||
check_admin_referer();
|
||||
|
||||
$errors = add_user();
|
||||
|
||||
if(count($errors) == 0) {
|
||||
$user_id = add_user();
|
||||
if ( is_wp_error( $user_id ) )
|
||||
$errors = $user_id;
|
||||
else {
|
||||
header('Location: users.php?update=add');
|
||||
die();
|
||||
}
|
||||
|
||||
default:
|
||||
|
||||
$list_js = true;
|
||||
$users_js = true;
|
||||
|
||||
include ('admin-header.php');
|
||||
|
||||
$userids = $wpdb->get_col("SELECT ID FROM $wpdb->users;");
|
||||
@ -187,11 +191,13 @@ default:
|
||||
break;
|
||||
}
|
||||
endif;
|
||||
if ( isset($errors) ) : ?>
|
||||
if ( is_wp_error( $errors ) ) : ?>
|
||||
<div class="error">
|
||||
<ul>
|
||||
<?php
|
||||
foreach($errors as $error) echo "<li>$error</li>";
|
||||
foreach( $errors->get_error_codes() as $code)
|
||||
foreach( $errors->get_error_messages($code) as $message )
|
||||
echo "<li>$message</li>";
|
||||
?>
|
||||
</ul>
|
||||
</div>
|
||||
@ -209,51 +215,27 @@ default:
|
||||
?>
|
||||
|
||||
<tr>
|
||||
<th colspan="8" align="left">
|
||||
<h3><?php echo $wp_roles->role_names[$role]; ?></h3>
|
||||
</th></tr>
|
||||
|
||||
<tr>
|
||||
<th><?php _e('ID') ?></th>
|
||||
<th><?php _e('Username') ?></th>
|
||||
<th><?php _e('Name') ?></th>
|
||||
<th><?php _e('E-mail') ?></th>
|
||||
<th><?php _e('Website') ?></th>
|
||||
<th><?php _e('Posts') ?></th>
|
||||
<th> </th>
|
||||
<th colspan="8" align="left"><h3><?php echo $wp_roles->role_names[$role]; ?></h3></th>
|
||||
</tr>
|
||||
<?php
|
||||
<tr>
|
||||
<th><?php _e('ID') ?></th>
|
||||
<th><?php _e('Username') ?></th>
|
||||
<th><?php _e('Name') ?></th>
|
||||
<th><?php _e('E-mail') ?></th>
|
||||
<th><?php _e('Website') ?></th>
|
||||
<th><?php _e('Posts') ?></th>
|
||||
<th> </th>
|
||||
</tr>
|
||||
<tbody id="role-<?php echo $role; ?>"><?php
|
||||
$style = '';
|
||||
foreach ($roleclass as $user_object) {
|
||||
$email = $user_object->user_email;
|
||||
$url = $user_object->user_url;
|
||||
$short_url = str_replace('http://', '', $url);
|
||||
$short_url = str_replace('www.', '', $short_url);
|
||||
if ('/' == substr($short_url, -1))
|
||||
$short_url = substr($short_url, 0, -1);
|
||||
if (strlen($short_url) > 35)
|
||||
$short_url = substr($short_url, 0, 32).'...';
|
||||
$style = ('class="alternate"' == $style) ? '' : 'class="alternate"';
|
||||
$numposts = get_usernumposts($user_object->ID);
|
||||
if (0 < $numposts) $numposts = "<a href='edit.php?author=$user_object->ID' title='" . __('View posts') . "'>$numposts</a>";
|
||||
echo "
|
||||
<tr $style>
|
||||
<td><input type='checkbox' name='users[]' id='user_{$user_object->ID}' value='{$user_object->ID}' /> <label for='user_{$user_object->ID}'>{$user_object->ID}</label></td>
|
||||
<td><label for='user_{$user_object->ID}'><strong>$user_object->user_login</strong></label></td>
|
||||
<td><label for='user_{$user_object->ID}'>$user_object->first_name $user_object->last_name</label></td>
|
||||
<td><a href='mailto:$email' title='" . sprintf(__('e-mail: %s'), $email) . "'>$email</a></td>
|
||||
<td><a href='$url' title='website: $url'>$short_url</a></td>";
|
||||
echo "<td align='right'>$numposts</td>";
|
||||
echo '<td>';
|
||||
if (current_user_can('edit_users'))
|
||||
echo "<a href='user-edit.php?user_id=$user_object->ID' class='edit'>".__('Edit')."</a>";
|
||||
echo '</td>';
|
||||
echo '</tr>';
|
||||
$style = (' class="alternate"' == $style) ? '' : ' class="alternate"';
|
||||
echo "\n\t" . user_row( $user_object, $style );
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
|
||||
</tbody>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
@ -261,16 +243,12 @@ default:
|
||||
|
||||
|
||||
<h2><?php _e('Update Users'); ?></h2>
|
||||
<?php
|
||||
$role_select = '<select name="new_role">';
|
||||
foreach($wp_roles->role_names as $role => $name) {
|
||||
$role_select .= "<option value=\"{$role}\">{$name}</option>";
|
||||
}
|
||||
$role_select .= '</select>';
|
||||
?>
|
||||
<ul style="list-style:none;">
|
||||
<li><input type="radio" name="action" id="action0" value="delete" /> <label for="action0"><?php _e('Delete checked users.'); ?></label></li>
|
||||
<li><input type="radio" name="action" id="action1" value="promote" /> <?php echo '<label for="action1">'.__('Set the Role of checked users to:')."</label> $role_select"; ?></li>
|
||||
<li>
|
||||
<input type="radio" name="action" id="action1" value="promote" /> <label for="action1"><?php _e('Set the Role of checked users to:'); ?></label>
|
||||
<select name="new_role"><?php wp_dropdown_roles(); ?></select>
|
||||
</li>
|
||||
</ul>
|
||||
<p class="submit"><input type="submit" value="<?php _e('Update »'); ?>" /></p>
|
||||
</div>
|
||||
@ -313,11 +291,16 @@ if ( $show_password_fields ) :
|
||||
<input name="pass2" type="password" id="pass2" /></td>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
<tr>
|
||||
<th scope="row"><?php _e('Role'); ?></th>
|
||||
<td><select name="role" id="role"><?php wp_dropdown_roles( get_settings('default_role') ); ?></select></td>
|
||||
</tr>
|
||||
</table>
|
||||
<p class="submit">
|
||||
<input name="adduser" type="submit" id="adduser" value="<?php _e('Add User »') ?>" />
|
||||
<input name="adduser" type="submit" id="addusersub" value="<?php _e('Add User »') ?>" />
|
||||
</p>
|
||||
</form>
|
||||
<div id="ajax-response"></div>
|
||||
</div>
|
||||
<?php
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user