From df6718f3f868b226328ff292f2b5d13f054850ea Mon Sep 17 00:00:00 2001 From: plegall Date: Wed, 30 Oct 2013 12:54:46 +0000 Subject: 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 --- admin/include/add_core_tabs.inc.php | 4 + admin/themes/default/template/user_list.tpl | 118 +++++++++++++++++++++++++--- admin/user_list.php | 14 ++++ include/functions_user.inc.php | 92 ++++++++++++++-------- include/ws_functions.inc.php | 19 ++++- register.php | 38 +++------ ws.php | 2 + 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' => ' '.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 = "✔ {'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;} {/literal} @@ -273,19 +337,47 @@ table.dataTable {clear:right;padding-top:10px;}

{'User list'|@translate}

- 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 @@ -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'] ) ); 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), ), 'Admin & POST only. Registers a new user.', null, -- cgit v1.2.3