/** * Adds a group of users(by their IDs) to a certain group * * @access public * @param int $guid Group's ID * @param array $users Array with user id * @return mixed True on success or Jaws_Error on failure */ function AddUsersToGroup($guid, $users) { $userModel = new Jaws_User(); $group = $userModel->GetGroup((int) $guid); if (!$group) { return new Jaws_Error(_t('USERS_GROUPS_GROUP_NOT_EXIST')); } $postedUsers = array(); foreach ($users as $k => $v) { $postedUsers[$v] = $v; } $list = $userModel->GetUsers(); foreach ($list as $user) { if ($userModel->UserIsInGroup($user['id'], $guid)) { if (!isset($postedUsers[$user['id']])) { if (!$GLOBALS['app']->Session->IsSuperAdmin() && $user['superadmin']) { continue; } $userModel->DeleteUserFromGroup($user['id'], $guid); } } else { if (isset($postedUsers[$user['id']])) { $userModel->AddUserToGroup($user['id'], $guid); } } } return true; }
/** * Update a user's group * * @access public * @return void */ function UpdateGroup() { $this->gadget->CheckPermission('ManageUserGroups'); $post = jaws()->request->fetch(array('gid', 'name', 'title', 'description', 'enabled'), 'post'); $selected_members = jaws()->request->fetch('members:array', 'post'); $user = $GLOBALS['app']->Session->GetAttribute('user'); $post['enabled'] = (bool) $post['enabled']; $jUser = new Jaws_User(); $res = $jUser->UpdateGroup($post['gid'], $post, $user); $current_members_info = $jUser->GetUsers($post['gid']); $current_members = array(); foreach ($current_members_info as $member_info) { $current_members[] = $member_info['id']; } $new_member = array_diff($selected_members, $current_members); if (!Jaws_Error::isError($res) && count($new_member) > 0) { // TODO: improve performance foreach ($new_member as $member) { $res = $jUser->AddUserToGroup($member, $post['gid'], $user); } } $removed_member = array_diff($current_members, $selected_members); if (!Jaws_Error::isError($res) && count($removed_member) > 0) { // TODO: improve performance foreach ($removed_member as $member) { $res = $jUser->DeleteUserFromGroup($member, $post['gid'], $user); } } if (Jaws_Error::isError($res)) { $GLOBALS['app']->Session->PushResponse($res->getMessage(), 'Users.Groups', RESPONSE_ERROR); } elseif ($res == true) { $GLOBALS['app']->Session->PushResponse(_t('USERS_GROUPS_UPDATED', $post['title']), 'Users.Groups', RESPONSE_NOTICE); } Jaws_Header::Location($this->gadget->urlMap('Groups')); }