From 89801f76ea91f6eca4a0bc7371849356f58c4677 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 18 Jan 2017 14:35:30 +0100 Subject: Use the provisioning api in the user management to handle group memberships Signed-off-by: Joas Schilling --- settings/js/users/groups.js | 4 ++- settings/js/users/users.js | 75 +++++++++++++++++++++++++++++---------------- 2 files changed, 51 insertions(+), 28 deletions(-) (limited to 'settings') diff --git a/settings/js/users/groups.js b/settings/js/users/groups.js index cfe01c17530..aac1609bce7 100644 --- a/settings/js/users/groups.js +++ b/settings/js/users/groups.js @@ -225,7 +225,9 @@ GroupList = { toggleAddGroup: function (event) { if (GroupList.isAddGroupButtonVisible()) { - event.stopPropagation(); + if (event) { + event.stopPropagation(); + } $('#newgroup-form').show(); $('#newgroup-init').hide(); $('#newgroupname').focus(); diff --git a/settings/js/users/users.js b/settings/js/users/users.js index a2ccc059f15..3cf7b5e810a 100644 --- a/settings/js/users/users.js +++ b/settings/js/users/users.js @@ -420,42 +420,63 @@ var UserList = { var $element = $(element); - var checkHandler = null; + var addUserToGroup = null, + removeUserFromGroup = null; if(user) { // Only if in a user row, and not the #newusergroups select - checkHandler = function (group) { - if (user === OC.currentUser && group === 'admin') { + var handleUserGroupMembership = function (group, add) { + if (user === OC.getCurrentUser().uid && group === 'admin') { return false; } if (!OC.isUserAdmin() && checked.length === 1 && checked[0] === group) { return false; } - $.post( - OC.filePath('settings', 'ajax', 'togglegroups.php'), - { - username: user, - group: group + + if (add && OC.isUserAdmin() && UserList.availableGroups.indexOf(group) === -1) { + GroupList.createGroup(group); + if (UserList.availableGroups.indexOf(group) === -1) { + UserList.availableGroups.push(group); + } + } + + $.ajax({ + url: OC.linkToOCS('cloud/users/' + user , 2) + 'groups', + data: { + groupid: group }, - function (response) { - if (response.status === 'success') { - GroupList.update(); - var groupName = response.data.groupname; - if (UserList.availableGroups.indexOf(groupName) === -1 && - response.data.action === 'add' - ) { - UserList.availableGroups.push(groupName); - } + type: add ? 'POST' : 'DELETE', + beforeSend: function (request) { + request.setRequestHeader('Accept', 'application/json'); + }, + success: function() { + GroupList.update(); + if (add && UserList.availableGroups.indexOf(group) === -1) { + UserList.availableGroups.push(group); + } - if (response.data.action === 'add') { - GroupList.incGroupCount(groupName); - } else { - GroupList.decGroupCount(groupName); - } + if (add) { + GroupList.incGroupCount(group); + } else { + GroupList.decGroupCount(group); } - if (response.data.message) { - OC.Notification.show(response.data.message); + }, + error: function() { + if (add) { + OC.Notification.show(t('settings', 'Unable to add user to group {group}', { + group: group + })); + } else { + OC.Notification.show(t('settings', 'Unable to remove user from group {group}', { + group: group + })); } } - ); + }); + }; + addUserToGroup = function (group) { + return handleUserGroupMembership(group, true); + }; + removeUserFromGroup = function (group) { + return handleUserGroupMembership(group, false); }; } var addGroup = function (select, group) { @@ -473,8 +494,8 @@ var UserList = { createText: label, selectedFirst: true, checked: checked, - oncheck: checkHandler, - onuncheck: checkHandler, + oncheck: addUserToGroup, + onuncheck: removeUserFromGroup, minWidth: 100 }); }, -- cgit v1.2.3 From 916cc57b0ee827ac9635a6c7b4b2fdbc47e03491 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 18 Jan 2017 14:36:23 +0100 Subject: Remove the old ajax file Signed-off-by: Joas Schilling --- settings/ajax/togglegroups.php | 92 ------------------------------------------ 1 file changed, 92 deletions(-) delete mode 100644 settings/ajax/togglegroups.php (limited to 'settings') diff --git a/settings/ajax/togglegroups.php b/settings/ajax/togglegroups.php deleted file mode 100644 index b9958bef0c9..00000000000 --- a/settings/ajax/togglegroups.php +++ /dev/null @@ -1,92 +0,0 @@ - - * @author Christopher Schäpers - * @author Georg Ehrke - * @author Jakob Sack - * @author Lukas Reschke - * @author Robin Appelman - * @author Thomas Müller - * - * @license AGPL-3.0 - * - * This code is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License, version 3, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License, version 3, - * along with this program. If not, see - * - */ -OC_JSON::checkSubAdminUser(); -OCP\JSON::callCheck(); - -$lastConfirm = (int) \OC::$server->getSession()->get('last-password-confirm'); -if ($lastConfirm < (time() - 30 * 60 + 15)) { // allow 15 seconds delay - $l = \OC::$server->getL10N('core'); - OC_JSON::error(array( 'data' => array( 'message' => $l->t('Password confirmation is required')))); - exit(); -} - -$success = true; -$username = (string)$_POST['username']; -$group = (string)$_POST['group']; - -if($username === OC_User::getUser() && $group === "admin" && OC_User::isAdminUser($username)) { - $l = \OC::$server->getL10N('core'); - OC_JSON::error(array( 'data' => array( 'message' => $l->t('Admins can\'t remove themself from the admin group')))); - exit(); -} - -$isUserAccessible = false; -$isGroupAccessible = false; -$currentUserObject = \OC::$server->getUserSession()->getUser(); -$targetUserObject = \OC::$server->getUserManager()->get($username); -$targetGroupObject = \OC::$server->getGroupManager()->get($group); -if($targetUserObject !== null && $currentUserObject !== null && $targetGroupObject !== null) { - $isUserAccessible = \OC::$server->getGroupManager()->getSubAdmin()->isUserAccessible($currentUserObject, $targetUserObject); - $isGroupAccessible = \OC::$server->getGroupManager()->getSubAdmin()->isSubAdminofGroup($currentUserObject, $targetGroupObject); -} - -if(!OC_User::isAdminUser(OC_User::getUser()) - && (!$isUserAccessible - || !$isGroupAccessible)) { - $l = \OC::$server->getL10N('core'); - OC_JSON::error(array( 'data' => array( 'message' => $l->t('Authentication error') ))); - exit(); -} - -if(!OC_Group::groupExists($group)) { - OC_Group::createGroup($group); -} - -$l = \OC::$server->getL10N('settings'); - -$error = $l->t("Unable to add user to group %s", $group); -$action = "add"; - -// Toggle group -if( OC_Group::inGroup( $username, $group )) { - $action = "remove"; - $error = $l->t("Unable to remove user from group %s", $group); - $success = OC_Group::removeFromGroup( $username, $group ); - $usersInGroup=OC_Group::usersInGroup($group); -} -else{ - $success = OC_Group::addToGroup( $username, $group ); -} - -// Return Success story -if( $success ) { - OC_JSON::success(array("data" => array( "username" => $username, "action" => $action, "groupname" => $group ))); -} -else{ - OC_JSON::error(array("data" => array( "message" => $error ))); -} -- cgit v1.2.3