sheercms
Version:
Sheer Cliff CMS is a simple and powerful content management system (CMS) for Node JS.
359 lines (306 loc) • 10.9 kB
JavaScript
/*
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;
}
});
}
};