Skip to content

Commit

Permalink
feature 1668, user manager redesign: ability to add a new user (call …
Browse files Browse the repository at this point in the history
…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
  • Loading branch information
plegall committed Oct 30, 2013
1 parent f79ae09 commit df6718f
Show file tree
Hide file tree
Showing 7 changed files with 211 additions and 76 deletions.
4 changes: 4 additions & 0 deletions admin/include/add_core_tabs.inc.php
Expand Up @@ -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;
Expand Down
118 changes: 105 additions & 13 deletions admin/themes/default/template/user_list.tpl
Expand Up @@ -8,14 +8,77 @@ 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}];
{/footer_script}

{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 = [
{
Expand Down Expand Up @@ -264,28 +327,57 @@ 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}

<div class="titrePage">
<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>

Expand Down
14 changes: 14 additions & 0 deletions admin/user_list.php
Expand Up @@ -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 |
// +-----------------------------------------------------------------------+
Expand Down Expand Up @@ -73,6 +86,7 @@
array(
'users' => $users,
'all_users' => join(',', $user_ids),
'Double_Password' => $conf['double_password_type_in_admin']
)
);

Expand Down
92 changes: 59 additions & 33 deletions include/functions_user.inc.php
Expand Up @@ -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;

Expand Down Expand Up @@ -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();
Expand All @@ -203,9 +203,9 @@ function register_user($login, $password, $mail_address,
$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']
);
}

Expand All @@ -215,40 +215,66 @@ function register_user($login, $password, $mail_address,
}

$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;
Expand Down
19 changes: 18 additions & 1 deletion include/ws_functions.inc.php
Expand Up @@ -3561,7 +3561,24 @@ function ws_users_getList($params, &$service)
*/
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)
{
Expand Down

0 comments on commit df6718f

Please sign in to comment.