From 5913af8a72e384f8fee89501b3a297b70460c1e0 Mon Sep 17 00:00:00 2001 From: Morris Jobke Date: Mon, 15 Dec 2014 12:43:42 +0100 Subject: Mail address of users is now changable in the user management * introduced new route settings/users/{id}/mailAddress * kept old responses * better error messages * dropped lostpassword.php from settings/ajax * cleaned up the UserList.add() and hand in user object instead of each attribute as another parameter * check for change permission of mail address * proper response messages --- settings/js/personal.js | 17 +++++- settings/js/users/users.js | 134 ++++++++++++++++++++++++++++++++------------- 2 files changed, 110 insertions(+), 41 deletions(-) (limited to 'settings/js') diff --git a/settings/js/personal.js b/settings/js/personal.js index b2efa7c37f9..1ce9da55d85 100644 --- a/settings/js/personal.js +++ b/settings/js/personal.js @@ -45,9 +45,20 @@ function changeEmailAddress () { } emailInfo.defaultValue = emailInfo.val(); OC.msg.startSaving('#lostpassword .msg'); - var post = $("#lostpassword").serialize(); - $.post('ajax/lostpassword.php', post, function (data) { - OC.msg.finishedSaving('#lostpassword .msg', data); + var post = $("#lostpassword").serializeArray(); + $.ajax({ + type: 'PUT', + url: OC.generateUrl('/settings/users/{id}/mailAddress', {id: OC.currentUser}), + data: { + mailAddress: post[0].value + } + }).done(function(result){ + // I know the following 4 lines look weird, but that is how it works + // in jQuery - for success the first parameter is the result + // for failure the first parameter is the result object + OC.msg.finishedSaving('#lostpassword .msg', result); + }).fail(function(result){ + OC.msg.finishedSaving('#lostpassword .msg', result.responseJSON); }); } diff --git a/settings/js/users/users.js b/settings/js/users/users.js index e0eb5ff1601..3e05d12c9af 100644 --- a/settings/js/users/users.js +++ b/settings/js/users/users.js @@ -28,7 +28,25 @@ var UserList = { this.$el.find('.quota-user').singleSelect().on('change', this.onQuotaSelect); }, - add: function (username, displayname, groups, subadmin, quota, storageLocation, lastLogin, sort, backend) { + /** + * Add a user row from user object + * + * @param user object containing following keys: + * { + * 'name': 'username', + * 'displayname': 'Users display name', + * 'groups': ['group1', 'group2'], + * 'subadmin': ['group4', 'group5'], + * 'quota': '10 GB', + * 'storageLocation': '/srv/www/owncloud/data/username', + * 'lastLogin': '1418632333' + * 'backend': 'LDAP', + * 'email': 'username@example.org' + * } + * @param sort + * @returns table row created for this user + */ + add: function (user, sort) { var $tr = $userListBody.find('tr:first-child').clone(); // this removes just the `display:none` of the template row $tr.removeAttr('style'); @@ -40,17 +58,19 @@ var UserList = { * Avatar or placeholder */ if ($tr.find('div.avatardiv').length){ - $tr.find('.avatardiv').imageplaceholder(username, displayname); - $('div.avatardiv', $tr).avatar(username, 32); + $tr.find('.avatardiv').imageplaceholder(user.name, user.displayname); + $('div.avatardiv', $tr).avatar(user.name, 32); } /** * add username and displayname to row (in data and visible markup */ - $tr.data('uid', username); - $tr.data('displayname', displayname); - $tr.find('td.name').text(username); - $tr.find('td.displayName > span').text(displayname); + $tr.data('uid', user.name); + $tr.data('displayname', user.displayname); + $tr.data('mailAddress', user.email); + $tr.find('td.name').text(user.name); + $tr.find('td.displayName > span').text(user.displayname); + $tr.find('td.mailAddress > span').text(user.email); /** * groups and subadmins @@ -58,13 +78,13 @@ var UserList = { // make them look like the multiselect buttons // until they get time to really get initialized groupsSelect = $('') - .data('username', username) - .data('user-groups', groups); + .data('username', user.name) + .data('user-groups', user.groups); if ($tr.find('td.subadmins').length > 0) { subAdminSelect = $('').val(mailAddress); + $td.children('span').replaceWith($input); + $input + .focus() + .keypress(function (event) { + if (event.keyCode === 13) { + if ($(this).val().length > 0) { + $input.blur(); + $.ajax({ + type: 'PUT', + url: OC.generateUrl('/settings/users/{id}/mailAddress', {id: uid}), + data: { + mailAddress: $(this).val() + } + }).fail(function (result) { + OC.Notification.show(result.responseJSON.data.message); + // reset the values + $tr.data('mailAddress', mailAddress); + $tr.children('.mailAddress').children('span').text(mailAddress); + }); + } else { + $input.blur(); + } + } + }) + .blur(function () { + var mailAddress = $input.val(); + var $span = $('').text(mailAddress); + $tr.data('mailAddress', mailAddress); + $input.replaceWith($span); + }); + }); + // init the quota field select box after it is shown the first time $('#app-settings').one('show', function() { $(this).find('#default_quota').singleSelect().on('change', UserList.onQuotaSelect); @@ -739,20 +801,8 @@ $(document).ready(function () { GroupList.setUserCount($li, userCount + 1); } } - if (result.homeExists){ - OC.Notification.hide(); - OC.Notification.show(t('settings', 'Warning: Home directory for user "{user}" already exists', {user: result.username})); - if (UserList.notificationTimeout){ - window.clearTimeout(UserList.notificationTimeout); - } - UserList.notificationTimeout = window.setTimeout( - function(){ - OC.Notification.hide(); - UserList.notificationTimeout = null; - }, 10000); - } if(!UserList.has(username)) { - UserList.add(username, username, result.groups, null, 'default', result.storageLocation, 0, true, result.backend); + UserList.add(result, true); } $('#newusername').focus(); GroupList.incEveryoneCount(); @@ -777,7 +827,15 @@ $(document).ready(function () { $("#userlist .lastLogin").hide(); } }); - // Option to display/hide the "Last Login" column + // Option to display/hide the "Mail Address" column + $('#CheckboxEmailAddress').click(function() { + if ($('#CheckboxEmailAddress').is(':checked')) { + $("#userlist .mailAddress").show(); + } else { + $("#userlist .mailAddress").hide(); + } + }); + // Option to display/hide the "User Backend" column $('#CheckboxUserBackend').click(function() { if ($('#CheckboxUserBackend').is(':checked')) { $("#userlist .userBackend").show(); -- cgit v1.2.3