mirror of https://github.com/Ombi-app/Ombi
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
219 lines
7.1 KiB
219 lines
7.1 KiB
(function () {
|
|
|
|
var controller = function ($scope, userManagementService, moment) {
|
|
|
|
$scope.user = {}; // The local user
|
|
$scope.users = []; // list of users
|
|
|
|
$scope.features = []; // List of features
|
|
$scope.permissions = []; // List of permissions
|
|
|
|
$scope.selectedUser = {}; // User on the right side
|
|
|
|
$scope.selectedFeatures = {};
|
|
$scope.selectedPermissions = {};
|
|
|
|
$scope.minDate = "0001-01-01T00:00:00.0000000+00:00";
|
|
|
|
$scope.sortType = "username";
|
|
$scope.sortReverse = false;
|
|
$scope.searchTerm = "";
|
|
|
|
$scope.hideColumns = false;
|
|
|
|
var ReadOnlyPermission = "Read Only User";
|
|
var open = false;
|
|
|
|
// Select a user to populate on the right side
|
|
$scope.selectUser = function (id) {
|
|
var user = $scope.users.filter(function (item) {
|
|
return item.id === id;
|
|
});
|
|
$scope.selectedUser = user[0];
|
|
|
|
$scope.selectedUser.emailDisabled = $scope.selectedUser.type === 0 && $scope.selectedUser.managedUser == '';
|
|
openSidebar();
|
|
}
|
|
|
|
// Get all users in the system
|
|
$scope.getUsers = function () {
|
|
$scope.users = userManagementService.getUsers()
|
|
.then(function (data) {
|
|
$scope.users = data.data;
|
|
});
|
|
};
|
|
|
|
// Get the permissions and features and populate the create dropdown
|
|
$scope.getFeaturesPermissions = function () {
|
|
userManagementService.getFeatures()
|
|
.then(function (data) {
|
|
$scope.features = data.data;
|
|
});
|
|
|
|
userManagementService.getPermissions()
|
|
.then(function (data) {
|
|
$scope.permissions = data.data;
|
|
});
|
|
}
|
|
|
|
// Create a user, do some validation too
|
|
$scope.addUser = function () {
|
|
if (!$scope.user.username || !$scope.user.password) {
|
|
generateNotify("Please provide a username and password", 'warning');
|
|
return;
|
|
}
|
|
if ($scope.selectedPermissions.length === 0) {
|
|
generateNotify("Please select a permission", 'warning');
|
|
return;
|
|
}
|
|
|
|
var hasReadOnly = $scope.selectedPermissions.indexOf(ReadOnlyPermission) !== -1;
|
|
if (hasReadOnly) {
|
|
if ($scope.selectedPermissions.length > 1) {
|
|
generateNotify("Cannot have the " + ReadOnlyPermission + " permission with other permissions.", 'danger');
|
|
return;
|
|
}
|
|
}
|
|
|
|
if(Array.isArray($scope.users)){
|
|
|
|
var existingUsername = $scope.users.some(function (u) {
|
|
return u.username === $scope.user.username;
|
|
});
|
|
|
|
if (existingUsername) {
|
|
return generateNotify("A user with the username " + $scope.user.username + " already exists!", 'danger');
|
|
}
|
|
}
|
|
|
|
userManagementService.addUser($scope.user, $scope.selectedPermissions, $scope.selectedFeatures)
|
|
.then(function (data) {
|
|
if (data.message) {
|
|
generateNotify(data.message, 'warning');
|
|
} else {
|
|
$scope.users.push(data.data); // Push the new user into the array to update the DOM
|
|
$scope.user = {};
|
|
clearCheckboxes();
|
|
};
|
|
});
|
|
|
|
|
|
};
|
|
|
|
// Watch the checkboxes for updates (Creating a user)
|
|
$scope.$watch('features|filter:{selected:true}',
|
|
function (nv) {
|
|
$scope.selectedFeatures = nv.map(function (f) {
|
|
return f.name;
|
|
});
|
|
},
|
|
true);
|
|
|
|
$scope.$watch('permissions|filter:{selected:true}',
|
|
function (nv) {
|
|
$scope.selectedPermissions = nv.map(function (f) {
|
|
return f.name;
|
|
});
|
|
},
|
|
true);
|
|
|
|
|
|
$scope.updateUser = function () {
|
|
var u = $scope.selectedUser;
|
|
userManagementService.updateUser(u.id, u.permissions, u.features, u.alias, u.emailAddress)
|
|
.then(function success(data) {
|
|
if (data.data) {
|
|
$scope.selectedUser = data.data;
|
|
|
|
closeSidebar();
|
|
return successCallback("Updated User", "success");
|
|
}
|
|
}, function errorCallback(response) {
|
|
successCallback(response, "danger");
|
|
});
|
|
}
|
|
|
|
$scope.deleteUser = function () {
|
|
var u = $scope.selectedUser;
|
|
userManagementService.deleteUser(u.id)
|
|
.then(function sucess(data) {
|
|
if (data.data.result) {
|
|
removeUser(u.id, true);
|
|
closeSidebar();
|
|
return successCallback("Deleted User", "success");
|
|
}
|
|
}, function errorCallback(response) {
|
|
successCallback(response, "danger");
|
|
});
|
|
}
|
|
|
|
$scope.formatDate = function (utcDate) {
|
|
return moment.utc(utcDate).local().format('lll');
|
|
}
|
|
|
|
|
|
// On page load
|
|
$scope.init = function () {
|
|
$scope.getUsers();
|
|
$scope.getFeaturesPermissions();
|
|
return;
|
|
}
|
|
|
|
$scope.closeSidebarClick = function () {
|
|
return closeSidebar();
|
|
}
|
|
|
|
$scope.redirectToSettings = function() {
|
|
var url = createBaseUrl(getBaseUrl(), '/admin/usermanagementsettings');
|
|
window.location.href = url;
|
|
}
|
|
|
|
function removeUser(id, current) {
|
|
$scope.users = $scope.users.filter(function (user) {
|
|
return user.id !== id;
|
|
});
|
|
if (current) {
|
|
$scope.selectedUser = null;
|
|
}
|
|
}
|
|
|
|
function closeSidebar() {
|
|
if (open) {
|
|
open = false;
|
|
$("#wrapper").toggleClass("toggled");
|
|
$scope.hideColumns = false;
|
|
}
|
|
}
|
|
|
|
function openSidebar() {
|
|
if (!open) {
|
|
$("#wrapper").toggleClass("toggled");
|
|
open = true;
|
|
$scope.hideColumns = true;
|
|
}
|
|
}
|
|
|
|
function clearCheckboxes() {
|
|
$scope.selectedPermissions = {}; // Clear the checkboxes
|
|
$scope.selectedFeatures = {};
|
|
$scope.features.forEach(function (entry) {
|
|
entry.selected = false;
|
|
});
|
|
$scope.permissions.forEach(function (entry) {
|
|
entry.selected = false;
|
|
});
|
|
}
|
|
|
|
|
|
function getBaseUrl() {
|
|
return $('#baseUrl').text();
|
|
}
|
|
|
|
}
|
|
|
|
function successCallback(message, type) {
|
|
generateNotify(message, type);
|
|
};
|
|
|
|
angular.module('PlexRequests').controller('userManagementController', ["$scope", "userManagementService", "moment", controller]);
|
|
}()); |