mirror of
https://github.com/Piwigo/Piwigo.git
synced 2026-06-01 20:04:51 +02:00
feature 1668, user manager redesign: ability to add a new user (call to pwg.users.add through AJAX)
Move the "send connection settings" code to function register_user (avoid code duplication). git-svn-id: http://piwigo.org/svn/trunk@25237 68402e56-0260-453c-a942-63ccdbb3a9ee
This commit is contained in:
@@ -61,6 +61,10 @@ function add_core_tabs($sheets, $tab_id)
|
||||
case 'comments':
|
||||
$sheets[''] = array('caption' => l10n('User comments'), 'url' => '');
|
||||
break;
|
||||
|
||||
case 'users':
|
||||
$sheets[''] = array('caption' => '<span class="icon-users"> </span>'.l10n('User list'), 'url' => '');
|
||||
break;
|
||||
|
||||
case 'configuration':
|
||||
global $conf_link;
|
||||
|
||||
@@ -8,7 +8,9 @@ var selectedMessage_pattern = "{'%d of %d photos selected'|@translate}";
|
||||
var selectedMessage_none = "{'No photo selected, %d photos in current set'|@translate}";
|
||||
var selectedMessage_all = "{'All %d photos are selected'|@translate}";
|
||||
var applyOnDetails_pattern = "{'on the %d selected users'|@translate}";
|
||||
var newUser_pattern = "✔ {'User %s added'|translate}";
|
||||
var missingConfirm = "{'You need to confirm deletion'|translate}";
|
||||
var missingUsername = "{'Please, enter a login'|translate}";
|
||||
|
||||
var allUsers = [{$all_users}];
|
||||
var selection = [{$selection}];
|
||||
@@ -16,6 +18,67 @@ var selection = [{$selection}];
|
||||
|
||||
{footer_script}{literal}
|
||||
jQuery(document).ready(function() {
|
||||
/**
|
||||
* Add user
|
||||
*/
|
||||
jQuery("#addUser").click(function() {
|
||||
jQuery("#addUserForm").toggle();
|
||||
jQuery("#showAddUser .infos").hide();
|
||||
jQuery("input[name=username]").focus();
|
||||
return false;
|
||||
});
|
||||
|
||||
jQuery("#addUserClose").click(function() {
|
||||
jQuery("#addUserForm").hide();
|
||||
return false;
|
||||
});
|
||||
|
||||
jQuery("#addUserForm").submit(function() {
|
||||
jQuery.ajax({
|
||||
url: "ws.php?format=json&method=pwg.users.add",
|
||||
type:"POST",
|
||||
data: jQuery(this).serialize(),
|
||||
beforeSend: function() {
|
||||
jQuery("#addUserForm .errors").hide();
|
||||
|
||||
if (jQuery("input[name=username]").val() == "") {
|
||||
jQuery("#addUserForm .errors").html('✘ '+missingUsername).show();
|
||||
return false;
|
||||
}
|
||||
|
||||
jQuery("#addUserForm .loading").show();
|
||||
},
|
||||
success:function(data) {
|
||||
oTable.fnDraw();
|
||||
jQuery("#addUserForm .loading").hide();
|
||||
|
||||
var data = jQuery.parseJSON(data);
|
||||
if (data.stat == 'ok') {
|
||||
jQuery("#addUserForm input[type=text], #addUserForm input[type=password]").val("");
|
||||
|
||||
var new_user = data.result.users[0];
|
||||
allUsers.push(parseInt(new_user.id));
|
||||
jQuery("#showAddUser .infos").html(sprintf(newUser_pattern, new_user.username)).show();
|
||||
checkSelection();
|
||||
|
||||
jQuery("#addUserForm").hide();
|
||||
}
|
||||
else {
|
||||
jQuery("#addUserForm .errors").html('✘ '+data.message).show();
|
||||
}
|
||||
},
|
||||
error:function(XMLHttpRequest, textStatus, errorThrows) {
|
||||
jQuery("#addUserForm .loading").hide();
|
||||
}
|
||||
});
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
/**
|
||||
* Table with users
|
||||
*/
|
||||
|
||||
/* first column must be prefixed with the open/close icon */
|
||||
var aoColumns = [
|
||||
{
|
||||
@@ -264,8 +327,9 @@ jQuery(document).ready(function() {
|
||||
.dataTables_wrapper, .dataTables_info {clear:none;}
|
||||
table.dataTable {clear:right;padding-top:10px;}
|
||||
.bulkAction {margin-top:10px;}
|
||||
.actionButtons {margin-left:0;}
|
||||
#applyActionBlock .infos {background-image:none; padding:2px 5px; margin:0;border-radius:5px;}
|
||||
#addUserForm p {margin-left:0;}
|
||||
#applyActionBlock .actionButtons {margin-left:0;}
|
||||
span.infos, span.errors {background-image:none; padding:2px 5px; margin:0;border-radius:5px;}
|
||||
</style>
|
||||
{/literal}
|
||||
|
||||
@@ -273,19 +337,47 @@ table.dataTable {clear:right;padding-top:10px;}
|
||||
<h2>{'User list'|@translate}</h2>
|
||||
</div>
|
||||
|
||||
<form style="display:none" class="filter" method="post" name="add_user" action="{$F_ADD_ACTION}">
|
||||
<p class="showCreateAlbum" id="showAddUser">
|
||||
<a href="#" id="addUser">{'Add a user'|translate}</a>
|
||||
<span class="infos" style="display:none"></span>
|
||||
</p>
|
||||
|
||||
<form id="addUserForm" style="display:none" method="post" name="add_user" action="{$F_ADD_ACTION}">
|
||||
<fieldset>
|
||||
<legend>{'Add a user'|@translate}</legend>
|
||||
<label>{'Username'|@translate} <input type="text" name="login" maxlength="50" size="20"></label>
|
||||
{if $Double_Password}
|
||||
<label>{'Password'|@translate} <input type="password" name="password"></label>
|
||||
<label>{'Confirm Password'|@translate} <input type="password" name="password_conf" id="password_conf"></label>
|
||||
{else}
|
||||
<label>{'Password'|@translate} <input type="text" name="password"></label>
|
||||
{/if}
|
||||
<label>{'Email address'|@translate} <input type="text" name="email"></label>
|
||||
<label>{'Send connection settings by email'|@translate} <input type="checkbox" name="send_password_by_mail" value="1" checked="checked"></label>
|
||||
<label> <input class="submit" type="submit" name="submit_add" value="{'Submit'|@translate}"></label>
|
||||
|
||||
<p>
|
||||
<strong>{'Username'|translate}</strong><br>
|
||||
<input type="text" name="username" maxlength="50" size="20">
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>{'Password'|translate}</strong><br>
|
||||
<input type="{if $Double_Password}password{else}text{/if}" name="password">
|
||||
</p>
|
||||
|
||||
{if $Double_Password}
|
||||
<p>
|
||||
<strong>{'Confirm Password'|@translate}</strong><br>
|
||||
<input type="password" name="password_confirm">
|
||||
</p>
|
||||
{/if}
|
||||
|
||||
<p>
|
||||
<strong>{'Email address'|@translate}</strong><br>
|
||||
<input type="text" name="email">
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<label><input type="checkbox" name="send_password_by_mail"> <strong>{'Send connection settings by email'|@translate}</strong></label>
|
||||
</p>
|
||||
|
||||
<p class="actionButtons">
|
||||
<input class="submit" name="submit_add" type="submit" value="{'Submit'|@translate}">
|
||||
<a href="#" id="addUserClose">{'Cancel'|@translate}</a>
|
||||
<span class="loading" style="display:none"><img src="themes/default/images/ajax-loader-small.gif"></span>
|
||||
<span class="errors" style="display:none"></span>
|
||||
</p>
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
|
||||
@@ -25,6 +25,19 @@
|
||||
* Add users and manage users list
|
||||
*/
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | tabs |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/tabsheet.class.php');
|
||||
|
||||
$my_base_url = get_root_url().'admin.php?page=';
|
||||
|
||||
$tabsheet = new tabsheet();
|
||||
$tabsheet->set_id('users');
|
||||
$tabsheet->select('user_list');
|
||||
$tabsheet->assign();
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | groups list |
|
||||
// +-----------------------------------------------------------------------+
|
||||
@@ -73,6 +86,7 @@ $template->assign(
|
||||
array(
|
||||
'users' => $users,
|
||||
'all_users' => join(',', $user_ids),
|
||||
'Double_Password' => $conf['double_password_type_in_admin']
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
@@ -125,12 +125,12 @@ function search_case_username($username)
|
||||
* @param string $login
|
||||
* @param string $password
|
||||
* @param string $mail_adress
|
||||
* @param bool $with_notifications
|
||||
* @param bool $notify_admin
|
||||
* @param &array $errors
|
||||
* @param bool $notify_user
|
||||
* @return int|bool
|
||||
*/
|
||||
function register_user($login, $password, $mail_address,
|
||||
$with_notification = true, &$errors = array())
|
||||
function register_user($login, $password, $mail_address, $notify_admin=true, &$errors = array(), $notify_user=false)
|
||||
{
|
||||
global $conf;
|
||||
|
||||
@@ -169,24 +169,24 @@ function register_user($login, $password, $mail_address,
|
||||
}
|
||||
}
|
||||
|
||||
$errors = trigger_event('register_user_check',
|
||||
$errors,
|
||||
array(
|
||||
'username'=>$login,
|
||||
'password'=>$password,
|
||||
'email'=>$mail_address,
|
||||
)
|
||||
);
|
||||
$errors = trigger_event(
|
||||
'register_user_check',
|
||||
$errors,
|
||||
array(
|
||||
'username'=>$login,
|
||||
'password'=>$password,
|
||||
'email'=>$mail_address,
|
||||
)
|
||||
);
|
||||
|
||||
// if no error until here, registration of the user
|
||||
if (count($errors) == 0)
|
||||
{
|
||||
$insert =
|
||||
array(
|
||||
$conf['user_fields']['username'] => pwg_db_real_escape_string($login),
|
||||
$conf['user_fields']['password'] => $conf['password_hash']($password),
|
||||
$conf['user_fields']['email'] => $mail_address
|
||||
);
|
||||
$insert = array(
|
||||
$conf['user_fields']['username'] => pwg_db_real_escape_string($login),
|
||||
$conf['user_fields']['password'] => $conf['password_hash']($password),
|
||||
$conf['user_fields']['email'] => $mail_address
|
||||
);
|
||||
|
||||
single_insert(USERS_TABLE, $insert);
|
||||
$user_id = pwg_db_insert_id();
|
||||
@@ -203,9 +203,9 @@ SELECT id
|
||||
$inserts = array();
|
||||
while ($row = pwg_db_fetch_assoc($result))
|
||||
{
|
||||
$inserts[] = array(
|
||||
'user_id' => $user_id,
|
||||
'group_id' => $row['id']
|
||||
$inserts[] = array(
|
||||
'user_id' => $user_id,
|
||||
'group_id' => $row['id']
|
||||
);
|
||||
}
|
||||
|
||||
@@ -215,40 +215,66 @@ SELECT id
|
||||
}
|
||||
|
||||
$override = null;
|
||||
if ($with_notification and $conf['browser_language'])
|
||||
if ($notify_admin and $conf['browser_language'])
|
||||
{
|
||||
if ( !get_browser_language($override['language']) )
|
||||
if (!get_browser_language($override['language']))
|
||||
{
|
||||
$override=null;
|
||||
}
|
||||
}
|
||||
create_user_infos($user_id, $override);
|
||||
|
||||
if ($with_notification and $conf['email_admin_on_new_user'])
|
||||
if ($notify_admin and $conf['email_admin_on_new_user'])
|
||||
{
|
||||
include_once(PHPWG_ROOT_PATH.'include/functions_mail.inc.php');
|
||||
$admin_url = get_absolute_root_url()
|
||||
.'admin.php?page=user_list&username='.$login;
|
||||
$admin_url = get_absolute_root_url().'admin.php?page=user_list&username='.$login;
|
||||
|
||||
$keyargs_content = array
|
||||
(
|
||||
$keyargs_content = array(
|
||||
get_l10n_args('User: %s', stripslashes($login)),
|
||||
get_l10n_args('Email: %s', $_POST['mail_address']),
|
||||
get_l10n_args('', ''),
|
||||
get_l10n_args('Admin: %s', $admin_url)
|
||||
);
|
||||
);
|
||||
|
||||
pwg_mail_notification_admins
|
||||
(
|
||||
pwg_mail_notification_admins(
|
||||
get_l10n_args('Registration of %s', stripslashes($login)),
|
||||
$keyargs_content
|
||||
);
|
||||
);
|
||||
}
|
||||
|
||||
trigger_action('register_user',
|
||||
if ($notify_user and email_check_format($mail_address))
|
||||
{
|
||||
include_once(PHPWG_ROOT_PATH.'include/functions_mail.inc.php');
|
||||
|
||||
$keyargs_content = array(
|
||||
get_l10n_args('Hello %s,', $login),
|
||||
get_l10n_args('Thank you for registering at %s!', $conf['gallery_title']),
|
||||
get_l10n_args('', ''),
|
||||
get_l10n_args('Here are your connection settings', ''),
|
||||
get_l10n_args('Username: %s', $login),
|
||||
get_l10n_args('Password: %s', $password),
|
||||
get_l10n_args('Email: %s', $mail_address),
|
||||
get_l10n_args('', ''),
|
||||
get_l10n_args('If you think you\'ve received this email in error, please contact us at %s', get_webmaster_mail_address()),
|
||||
);
|
||||
|
||||
pwg_mail(
|
||||
$mail_address,
|
||||
array(
|
||||
'subject' => '['.$conf['gallery_title'].'] '.l10n('Registration'),
|
||||
'content' => l10n_args($keyargs_content),
|
||||
'content_format' => 'text/plain',
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
trigger_action(
|
||||
'register_user',
|
||||
array(
|
||||
'id'=>$user_id,
|
||||
'username'=>$login,
|
||||
'email'=>$mail_address,
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
return $user_id;
|
||||
|
||||
@@ -3561,7 +3561,24 @@ SELECT user_id, group_id
|
||||
*/
|
||||
function ws_users_add($params, &$service)
|
||||
{
|
||||
$user_id = register_user($params['username'], $params['password'], $params['email'], false, $errors);
|
||||
global $conf;
|
||||
|
||||
if ($conf['double_password_type_in_admin'])
|
||||
{
|
||||
if ($params['password'] != $params['password_confirm'])
|
||||
{
|
||||
return new PwgError(WS_ERR_INVALID_PARAM, l10n('The passwords do not match'));
|
||||
}
|
||||
}
|
||||
|
||||
$user_id = register_user(
|
||||
$params['username'],
|
||||
$params['password'],
|
||||
$params['email'],
|
||||
false, // notify admin
|
||||
$errors,
|
||||
$params['send_password_by_mail']
|
||||
);
|
||||
|
||||
if (!$user_id)
|
||||
{
|
||||
|
||||
+9
-29
@@ -60,40 +60,20 @@ if (isset($_POST['submit']))
|
||||
$page['errors'][] = l10n('The passwords do not match');
|
||||
}
|
||||
|
||||
register_user($_POST['login'],
|
||||
$_POST['password'],
|
||||
$_POST['mail_address'],
|
||||
true,
|
||||
$page['errors']);
|
||||
register_user(
|
||||
$_POST['login'],
|
||||
$_POST['password'],
|
||||
$_POST['mail_address'],
|
||||
true,
|
||||
$page['errors'],
|
||||
isset($_POST['send_password_by_mail'])
|
||||
);
|
||||
|
||||
if (count($page['errors']) == 0)
|
||||
{
|
||||
// email notification
|
||||
if (isset($_POST['send_password_by_mail']) and isset($_POST['mail_address']))
|
||||
if (isset($_POST['send_password_by_mail']) and email_check_format($_POST['mail_address']))
|
||||
{
|
||||
include_once(PHPWG_ROOT_PATH.'include/functions_mail.inc.php');
|
||||
|
||||
$keyargs_content = array(
|
||||
get_l10n_args('Hello %s,', $_POST['login']),
|
||||
get_l10n_args('Thank you for registering at %s!', $conf['gallery_title']),
|
||||
get_l10n_args('', ''),
|
||||
get_l10n_args('Here are your connection settings', ''),
|
||||
get_l10n_args('Username: %s', $_POST['login']),
|
||||
get_l10n_args('Password: %s', $_POST['password']),
|
||||
get_l10n_args('Email: %s', $_POST['mail_address']),
|
||||
get_l10n_args('', ''),
|
||||
get_l10n_args('If you think you\'ve received this email in error, please contact us at %s', get_webmaster_mail_address()),
|
||||
);
|
||||
|
||||
pwg_mail(
|
||||
$_POST['mail_address'],
|
||||
array(
|
||||
'subject' => '['.$conf['gallery_title'].'] '.l10n('Registration'),
|
||||
'content' => l10n_args($keyargs_content),
|
||||
'content_format' => 'text/plain',
|
||||
)
|
||||
);
|
||||
|
||||
$_SESSION['page_infos'][] = l10n('Successfully registered, you will soon receive an email with your connection settings. Welcome!');
|
||||
}
|
||||
|
||||
|
||||
@@ -826,7 +826,9 @@ function ws_addDefaultMethods( $arr )
|
||||
array(
|
||||
'username' => array(),
|
||||
'password' => array('default'=>null),
|
||||
'password_confirm' => array('flags'=>WS_PARAM_OPTIONAL),
|
||||
'email' => array('default'=>null),
|
||||
'send_password_by_mail' => array('default'=>false, 'type'=>WS_TYPE_BOOL),
|
||||
),
|
||||
'<b>Admin & POST only.</b> Registers a new user.',
|
||||
null,
|
||||
|
||||
Reference in New Issue
Block a user