UNPKG

sheercms

Version:

Sheer Cliff CMS is a simple and powerful content management system (CMS) for Node JS.

359 lines (306 loc) 10.9 kB
/* Angular Controller: User */ app.controller('UserController', function($scope, $rootScope, $timeout, $modal, UserService, RoleService) { $scope.data = { title: "Users & Roles", message: "", messageType: "", //alert-success, alert-warning, alert-info, alert-danger isAuthorized: false }; $scope.buttons = { back: false, newUser: true, newRole: true, deleteRole: false, refresh: true }; $scope.users = []; $scope.editUser = null; $scope.userProps = { title: "", message: "", saveBtnText: "Create", isNewUser: true, changePwd: false }; $scope.roles = []; $scope.role = null; $scope.setView = function(view) { if ($scope.data.view != view) { $scope.users = []; $scope.data.view = view; if (view == 'Editors') { $scope.data.role = "Editor"; $scope.data.title = 'Editors'; } else if (view == 'Publishers'){ $scope.data.role = "Publisher"; $scope.data.title = 'Publishers'; } else if (view == 'Administrators'){ $scope.data.role = "Administrator" $scope.data.title = 'Administrators'; } else if (view == 'Members'){ $scope.data.role = "Member"; $scope.data.title = 'Members'; } //load the users of this type loadUsers(1); } }; $scope.openNewUser = function() { var roles = []; if ($scope.role) roles.push($scope.role.name); var editUser = new User("", "", "", "", roles, true, false); var props = { saveBtnText: "Create", title: "Create a new user", isNewUser: true, changePwd: false }; var modalInstance = $modal.open({ templateUrl: 'UserPropsDialog', controller: UserPropsDialogController, windowClass: 'medium-dialog', resolve: { props: function() { return props; }, user: function() { return editUser; }, roles: function() { return $scope.roles; }, parentScope: function() { return $scope; } } }); modalInstance.result.then(function (result) { //modal close }, function () { //modal cancelled }); }; $scope.editUser = function(user) { var props = { saveBtnText: "Save", title: "User Properties", isNewUser: false, changePwd: false }; var editUser = new User(user.username, user.email, user.firstName, user.lastName, user.roles, user.active, user.protected); var modalInstance = $modal.open({ templateUrl: 'UserPropsDialog', controller: UserPropsDialogController, windowClass: 'medium-dialog', resolve: { props: function() { return props; }, user: function() { return editUser; }, roles: function() { return $scope.roles; }, parentScope: function() { return $scope; } } }); modalInstance.result.then(function (result) { //model close }, function () { //modal cancelled }); }; $scope.back = function() { $scope.role = null; $scope.buttons.back = false; $scope.buttons.newRole = true; $scope.buttons.deleteRole = false; clearMessage(); }; $scope.newRole = function() { var name = prompt("Enter the name of the new role:"); if (name && name.length > 0) { setMessage("Creating role...", "alert-info"); RoleService.createRole(name).then(function(data) { setMessage(data.message, (data.success === true ? "alert-success" : "alert-danger"), true); if (data.success) { //reload the roles list loadRoles(); } }); } }; $scope.selectRole = function(role) { $scope.role = role; $scope.buttons.back = true; $scope.buttons.newRole = false; $scope.buttons.deleteRole = (role.protected !== true && role.allUsers !== true); //load the users in this role loadUsers(role, true, true); }; $scope.deleteRole = function() { var role = $scope.role; if (role && role.allUsers !== true && role.locked !== true && confirm("Are you sure you want to delete this role?")) { setMessage("Deleting role...", "alert-info"); RoleService.deleteRole(role.name).then(function(data) { if (data.success) { $scope.back(); loadRoles(); } setMessage(data.message, (data.success === true ? "alert-success" : "alert-danger"), true); }); } }; $scope.saveRole = function() { setMessage("Saving role...", "alert-info"); RoleService.updateRole($scope.role).then(function(data) { setMessage(data.message, (data.success === true ? "alert-success" : "alert-danger"), true); }); }; $scope.refresh = function() { if ($scope.role) reloadUsers(); else loadRoles(true, false); }; $scope.reloadUsers = function() { loadUsers($scope.role, true, false); }; function loadUsers(role, showMsg, useCache) { if (showMsg === true) setMessage("Loading users...", "alert-info", false); var name = role.allUsers === true ? null : role.name; UserService.getUsers(name, useCache).then(function(data) { if (data.success === false || showMsg === true) setMessage(data.message, (data.success === true ? "alert-success" : "alert-danger"), true); if (data.success) $scope.users = data.users; if ($scope.users === null) $scope.users = []; }); } function isNullOrEmpty(s) { return (s && s.length > 0) ? false : true; } function User(username, email, fname, lname, roles, active, protected) { var self = this; self.username = username; self.email = email; self.firstName = fname; self.lastName = lname; self.roles = roles; self.active = active; self.protected = protected; self.password = ""; self.confirmPassword = ""; } //start with the Editors //$scope.setView('Editors'); function init() { $scope.$parent.resize('.user-view'); if ($scope.global.isAdmin === true) { $scope.data.isAuthorized = true; loadRoles(true, true); } else { $scope.data.isAuthorized = false; } } function loadRoles(showMsg, useCache) { if (showMsg === true) setMessage("Loading role...", "alert-info", false); RoleService.getRoles(useCache).then(function(data) { if (data.success === false || showMsg === true) setMessage(data.message, (data.success === true ? "alert-success" : "alert-danger"), true); var roles = []; if (data.success === true && data.roles) roles = data.roles; roles.unshift({allUsers: true, name: '[All Users]', desc: 'All users in the system.', locked: ''}); $scope.roles = roles; }); } function clearMessage() { $scope.data.message = ""; $scope.data.messageType = ""; } function setMessage(msg, type, doTimeout) { $scope.data.messageType = type; $scope.data.message = msg; if (doTimeout === true) timeoutClearMessage(); } function timeoutClearMessage() { $timeout(function() { clearMessage(); }, 4000); } init(); }); var UserPropsDialogController = function ($scope, $modalInstance, UserService, props, user, roles, parentScope) { $scope.data = { message: "", messageType: "" }; $scope.props = props; $scope.editUser = user; $scope.roles = roles; $scope.canDelete = (user.protected !== true && props.isNewUser !== true); $scope.ok = function() { saveUser($scope.editUser, $scope.props.changePwd, $scope.props.isNewUser); /*$modalInstance.close({ user: $scope.editUser, changePwd: $scope.props.changePwd, isNewUser: $scope.props.isNewUser });*/ }; $scope.deleteUser = function() { if (confirm("Are you sure you want to delete this user?")) { //show message on screen $scope.data.message = "Deleting user..."; $scope.data.messageType = "alert-info"; UserService.deleteUser($scope.editUser.username).then(function(result) { if (result.success === true) { parentScope.reloadUsers(); $modalInstance.close(); } else { $scope.data.messageType = "alert-danger"; $scope.data.message = result.message; } }); } }; $scope.cancel = function () { $modalInstance.dismiss('cancel'); }; function saveUser(user, changePwd, isNewUser) { //show message on screen $scope.data.message = isNewUser === true ? "Creating the new user..." : "Updating user properties..."; $scope.data.messageType = "alert-info"; UserService.saveUser(user, changePwd, isNewUser).then(function(result) { if (result.success === true) { $scope.data.messageType = "alert-success"; $scope.data.message = result.message; $scope.props.isNewUser = false; parentScope.reloadUsers(); //is this the current user? if (result.user && result.user.username === parentScope.pageData.user.username) { parentScope.pageData.user = result.user; parentScope.setHelloName(); } } else { $scope.data.messageType = "alert-danger"; $scope.data.message = result.message; } }); } };