aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorplegall <plg@piwigo.org>2013-10-30 12:54:46 +0000
committerplegall <plg@piwigo.org>2013-10-30 12:54:46 +0000
commitdf6718f3f868b226328ff292f2b5d13f054850ea (patch)
tree9e072dcce0034e64c6f9b6dba7c0a8e704a603df
parentf79ae0902b1fedac5cd5eb66d06c3f9fd7703146 (diff)
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
-rw-r--r--admin/include/add_core_tabs.inc.php4
-rw-r--r--admin/themes/default/template/user_list.tpl118
-rw-r--r--admin/user_list.php14
-rw-r--r--include/functions_user.inc.php92
-rw-r--r--include/ws_functions.inc.php19
-rw-r--r--register.php38
-rw-r--r--ws.php2
7 files changed, 211 insertions, 76 deletions
diff --git a/admin/include/add_core_tabs.inc.php b/admin/include/add_core_tabs.inc.php
index 443775d38..9769cb32c 100644
--- a/admin/include/add_core_tabs.inc.php
+++ b/admin/include/add_core_tabs.inc.php
@@ -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;
diff --git a/admin/themes/default/template/user_list.tpl b/admin/themes/default/template/user_list.tpl
index 11a97c29d..6cd7de900 100644
--- a/admin/themes/default/template/user_list.tpl
+++ b/admin/themes/default/template/user_list.tpl
@@ -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 = "&#x2714; {'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('&#x2718; '+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('&#x2718; '+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>&nbsp; <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>
diff --git a/admin/user_list.php b/admin/user_list.php
index a9744a0d2..3c0b6488d 100644
--- a/admin/user_list.php
+++ b/admin/user_list.php
@@ -26,6 +26,19 @@
*/
// +-----------------------------------------------------------------------+
+// | 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']
)
);
diff --git a/include/functions_user.inc.php b/include/functions_user.inc.php
index d48f4362d..f6e2cd925 100644
--- a/include/functions_user.inc.php
+++ b/include/functions_user.inc.php
@@ -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
- );
+ );
+ }
+
+ 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',
+ trigger_action(
+ 'register_user',
array(
'id'=>$user_id,
'username'=>$login,
'email'=>$mail_address,
- )
+ )
);
return $user_id;
diff --git a/include/ws_functions.inc.php b/include/ws_functions.inc.php
index b86fe6fd6..8faf96260 100644
--- a/include/ws_functions.inc.php
+++ b/include/ws_functions.inc.php
@@ -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)
{
diff --git a/register.php b/register.php
index 4e55fe70d..a4c8f910b 100644
--- a/register.php
+++ b/register.php
@@ -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!');
}
diff --git a/ws.php b/ws.php
index f60203762..d55f9d900 100644
--- a/ws.php
+++ b/ws.php
@@ -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,