some small tweaks around #218

Just added the link to the settings and some angular improvements
This commit is contained in:
Jamie.Rees 2016-11-29 08:51:13 +00:00
commit b03d9ef16e
5 changed files with 149 additions and 103 deletions

View file

@ -38,6 +38,14 @@ namespace PlexRequests.Core.Users
{ {
permission += (int)Permissions.ReportIssue; permission += (int)Permissions.ReportIssue;
} }
if (settings.UsersCanViewOnlyOwnRequests)
{
permission += (int)Permissions.UsersCanViewOnlyOwnRequests;
}
if (settings.UsersCanViewOnlyOwnIssues)
{
permission += (int)Permissions.UsersCanViewOnlyOwnIssues;
}
return permission; return permission;

View file

@ -31,6 +31,9 @@ using System.ComponentModel.DataAnnotations;
namespace PlexRequests.Helpers.Permissions namespace PlexRequests.Helpers.Permissions
{ {
[Flags] [Flags]
////
//// NOTE if any are added, make sure we change the UserManagementHelper
////
public enum Permissions public enum Permissions
{ {
[Display(Name = "Access Administration Settings")] [Display(Name = "Access Administration Settings")]

View file

@ -19,6 +19,8 @@
$scope.sortReverse = false; $scope.sortReverse = false;
$scope.searchTerm = ""; $scope.searchTerm = "";
$scope.hideColumns = false;
$scope.error = { $scope.error = {
error: false, error: false,
@ -35,10 +37,7 @@
}); });
$scope.selectedUser = user[0]; $scope.selectedUser = user[0];
if (!open) { openSidebar();
$("#wrapper").toggleClass("toggled");
open = true;
}
} }
// Get all users in the system // Get all users in the system
@ -163,6 +162,11 @@
return closeSidebar(); return closeSidebar();
} }
$scope.redirectToSettings = function() {
var url = createBaseUrl(getBaseUrl(), '/admin/usermanagementsettings');
window.location.href = url;
}
function removeUser(id, current) { function removeUser(id, current) {
$scope.users = $scope.users.filter(function (user) { $scope.users = $scope.users.filter(function (user) {
return user.id !== id; return user.id !== id;
@ -176,6 +180,15 @@
if (open) { if (open) {
open = false; open = false;
$("#wrapper").toggleClass("toggled"); $("#wrapper").toggleClass("toggled");
$scope.hideColumns = false;
}
}
function openSidebar() {
if (!open) {
$("#wrapper").toggleClass("toggled");
open = true;
$scope.hideColumns = true;
} }
} }
@ -189,12 +202,17 @@
entry.selected = false; entry.selected = false;
}); });
} }
function getBaseUrl() {
return $('#baseUrl').text();
}
} }
function successCallback(message, type) { function successCallback(message, type) {
generateNotify(message, type); generateNotify(message, type);
}; };
angular.module('PlexRequests').controller('userManagementController', ["$scope", "userManagementService", "moment", controller]); angular.module('PlexRequests').controller('userManagementController', ["$scope", "userManagementService", "moment", controller]);
} ()); }());

View file

@ -18,6 +18,8 @@
@Html.Checkbox(Model.AutoApproveTvShows, "AutoApproveTvShows", "Auto Approve TV Show Requests") @Html.Checkbox(Model.AutoApproveTvShows, "AutoApproveTvShows", "Auto Approve TV Show Requests")
@Html.Checkbox(Model.AutoApproveMusic, "AutoApproveMusic", "Auto Approve Music Requests") @Html.Checkbox(Model.AutoApproveMusic, "AutoApproveMusic", "Auto Approve Music Requests")
@Html.Checkbox(Model.ReportIssues, "ReportIssues", "Report Issues") @Html.Checkbox(Model.ReportIssues, "ReportIssues", "Report Issues")
@Html.Checkbox(Model.UsersCanViewOnlyOwnIssues, "UsersCanViewOnlyOwnIssues", "Users can only view their own issues")
@Html.Checkbox(Model.UsersCanViewOnlyOwnRequests, "UsersCanViewOnlyOwnRequests", "Users can only view their own requests")

View file

@ -8,9 +8,9 @@
{{spinnerActive}} {{spinnerActive}}
<!--Sidebar--> <!--Sidebar-->
<div id="sidebar-wrapper" class="shadow"> <div id="sidebar-wrapper" class="shadow">
<br/> <br />
<br/> <br />
<img ng-show="selectedUser.plexInfo.thumb" class="col-md-pull-1 img-circle" style="position: absolute" ng-src="{{selectedUser.plexInfo.thumb}}"/> <img ng-show="selectedUser.plexInfo.thumb" class="col-md-pull-1 img-circle" style="position: absolute" ng-src="{{selectedUser.plexInfo.thumb}}" />
<div hidden="hidden" ng-bind="selectedUser.id"></div> <div hidden="hidden" ng-bind="selectedUser.id"></div>
<div> <div>
<strong>Username: </strong><span ng-bind="selectedUser.username"></span> <strong>Username: </strong><span ng-bind="selectedUser.username"></span>
@ -21,33 +21,34 @@
<div> <div>
<strong>User Type: </strong><span ng-bind="selectedUser.type === 1 ? 'Local User' : 'Plex User'"></span> <strong>User Type: </strong><span ng-bind="selectedUser.type === 1 ? 'Local User' : 'Plex User'"></span>
</div> </div>
<br/> <br />
<br/> <br />
<div ng-show="selectedUser"> <div ng-show="selectedUser">
<!--Edit--> <!--Edit-->
<strong>Modify Permissions:</strong> <strong>Modify Permissions:</strong>
<!--Load all permissions--> <!--Load all permissions-->
<div class="checkbox" ng-repeat="p in selectedUser.permissions"> <div class="checkbox" ng-repeat="p in selectedUser.permissions">
<input id="permissionsCheckbox_{{$id}}" class="checkbox-custom" name="permissions[]" ng-checked="p.selected" ng-model="p.selected" type="checkbox" value="{{p.value}}"/> <input id="permissionsCheckbox_{{$id}}" class="checkbox-custom" name="permissions[]" ng-checked="p.selected" ng-model="p.selected" type="checkbox" value="{{p.value}}" />
<label for="permissionsCheckbox_{{$id}}">{{p.name}}</label> <label for="permissionsCheckbox_{{$id}}">{{p.name}}</label>
</div> </div>
<strong>Modify Features:</strong> <strong>Modify Features:</strong>
<!--Load all features--> <!--Load all features-->
<div class="checkbox" ng-repeat="p in selectedUser.features"> <div class="checkbox" ng-repeat="p in selectedUser.features">
<input id="featuresCheckbox_{{$id}}" class="checkbox-custom" name="features[]" ng-checked="p.selected" ng-model="p.selected" type="checkbox" value="{{p.value}}"/> <input id="featuresCheckbox_{{$id}}" class="checkbox-custom" name="features[]" ng-checked="p.selected" ng-model="p.selected" type="checkbox" value="{{p.value}}" />
<label for="featuresCheckbox_{{$id}}">{{p.name}}</label> <label for="featuresCheckbox_{{$id}}">{{p.name}}</label>
</div> </div>
<strong>Email Address</strong> <strong>Email Address</strong>
<div class="form-group"> <div class="form-group">
<input id="emailAddress" type="email" ng-model="selectedUser.emailAddress" ng-disabled="selectedUser.type === 0" class="form-control form-control-custom"/> <input id="emailAddress" type="email" ng-model="selectedUser.emailAddress" ng-disabled="selectedUser.type === 0" class="form-control form-control-custom" />
</div> </div>
<strong>Alias</strong> <strong>Alias</strong>
<div class="form-group"> <div class="form-group">
<input id="alias" type="text" ng-model="selectedUser.alias" class="form-control form-control-custom"/> <input id="alias" type="text" ng-model="selectedUser.alias" class="form-control form-control-custom" />
</div> </div>
@ -62,122 +63,136 @@
<div> <div>
<div class="container-fluid"> <div class="container-fluid">
<div> <div>
<br/> <br />
<br/> <br />
<br/> <br />
<div class="col-md-12"> <div class="col-md-12">
<br> <br>
<br> <br>
<div ng-show="error.error" ng-bind="error.errorMessage"></div> <div ng-show="error.error" ng-bind="error.errorMessage"></div>
<br/>
<br/>
<br/>
<form name="userform" ng-submit="addUser()" novalidate> <form name="userform" ng-submit="addUser()" novalidate>
<div class="form-group"> <div class="form-group">
<input id="username" type="text" placeholder="user" ng-model="user.username" class="form-control form-control-custom"/> <input id="username" type="text" placeholder="user" ng-model="user.username" class="form-control form-control-custom" />
</div> </div>
<div class="form-group"> <div class="form-group">
<input id="password" type="password" placeholder="password" ng-model="user.password" class="form-control form-control-custom"/> <input id="password" type="password" placeholder="password" ng-model="user.password" class="form-control form-control-custom" />
</div> </div>
<div class="form-group"> <div class="form-group">
<input id="email" type="email" placeholder="email address" ng-model="user.email" class="form-control form-control-custom"/> <input id="email" type="email" placeholder="email address" ng-model="user.email" class="form-control form-control-custom" />
</div> </div>
<h3>Permissions: </h3> <div class="row">
<div class="checkbox" ng-repeat="permission in permissions"> <h3>Permissions: </h3>
<input id="permission_{{$id}}" class="checkbox-custom" name="permission[]" <div class="col-md-5">
ng-checked="permission.selected" ng-model="permission.selected" type="checkbox" value="{{permission.value}}"/> <div class="checkbox" ng-repeat="permission in permissions">
<label for="permission_{{$id}}">{{permission.name}}</label> <input id="permission_{{$id}}" class="checkbox-custom" name="permission[]"
ng-checked="permission.selected" ng-model="permission.selected" type="checkbox" value="{{permission.value}}" />
<label for="permission_{{$id}}">{{permission.name}}</label>
</div>
</div>
<h3>Features: </h3>
<div class="col-md-5">
<div class="checkbox" ng-repeat="f in features">
<input id="features_{{$id}}" class="checkbox-custom" name="f[]"
ng-checked="f.selected" ng-model="f.selected" type="checkbox" value="{{f.value}}" />
<label for="features_{{$id}}">{{f.name}}</label>
</div>
</div>
</div> </div>
<h3>Features: </h3> <div class="row">
<div class="checkbox" ng-repeat="f in features"> <input type="submit" class="btn btn-success-outline" value="Add" />
<input id="features_{{$id}}" class="checkbox-custom" name="f[]"
ng-checked="f.selected" ng-model="f.selected" type="checkbox" value="{{f.value}}"/> <button type="button" ng-click="redirectToSettings()" class="btn btn-primary-outline" style="float: right; margin-right: 10px;">Settings</button>
<label for="features_{{$id}}">{{f.name}}</label>
</div> </div>
<input type="submit" class="btn btn-success-outline" value="Add"/>
</form> </form>
<form> <form>
<div class="form-group"> <div class="row">
<div class="input-group"> <div class="form-group">
<div class="input-group-addon"> <div class="input-group">
<i class="fa fa-search"></i> <div class="input-group-addon">
<i class="fa fa-search"></i>
</div>
<input type="text" class="form-control" placeholder="Search" ng-model="searchTerm">
</div> </div>
<input type="text" class="form-control" placeholder="Search" ng-model="searchTerm">
</div> </div>
</div> </div>
</form> </form>
<table class="table table-striped table-hover table-responsive table-condensed"> <table class="table table-striped table-hover table-responsive table-condensed">
<thead> <thead>
<tr> <tr>
<th> <th>
<a href="#" ng-click="sortType = 'username'; sortReverse = !sortReverse"> <a href="#" ng-click="sortType = 'username'; sortReverse = !sortReverse">
Username Username
<span ng-show="sortType == 'username' && !sortReverse" class="fa fa-caret-down"></span> <span ng-show="sortType == 'username' && !sortReverse" class="fa fa-caret-down"></span>
<span ng-show="sortType == 'username' && sortReverse" class="fa fa-caret-up"></span> <span ng-show="sortType == 'username' && sortReverse" class="fa fa-caret-up"></span>
</a> </a>
</th> </th>
<th> <th>
<a href="#" ng-click="sortType = 'alias'; sortReverse = !sortReverse"> <a href="#" ng-click="sortType = 'alias'; sortReverse = !sortReverse">
Alias Alias
<span ng-show="sortType == 'alias' && !sortReverse" class="fa fa-caret-down"></span> <span ng-show="sortType == 'alias' && !sortReverse" class="fa fa-caret-down"></span>
<span ng-show="sortType == 'alias' && sortReverse" class="fa fa-caret-up"></span> <span ng-show="sortType == 'alias' && sortReverse" class="fa fa-caret-up"></span>
</a> </a>
</th> </th>
<th> <th>
<a href="#" ng-click="sortType = 'emailAddress'; sortReverse = !sortReverse"> <a href="#" ng-click="sortType = 'emailAddress'; sortReverse = !sortReverse">
Email Email
<span ng-show="sortType == 'emailAddress' && !sortReverse" class="fa fa-caret-down"></span> <span ng-show="sortType == 'emailAddress' && !sortReverse" class="fa fa-caret-down"></span>
<span ng-show="sortType == 'emailAddress' && sortReverse" class="fa fa-caret-up"></span> <span ng-show="sortType == 'emailAddress' && sortReverse" class="fa fa-caret-up"></span>
</a> </a>
</th> </th>
<th> <th>
Permissions Permissions
</th> </th>
<th> <th ng-hide="hideColumns">
<a href="#" ng-click="sortType = 'type'; sortReverse = !sortReverse"> <a href="#" ng-click="sortType = 'type'; sortReverse = !sortReverse">
User Type User Type
<span ng-show="sortType == 'type' && !sortReverse" class="fa fa-caret-down"></span> <span ng-show="sortType == 'type' && !sortReverse" class="fa fa-caret-down"></span>
<span ng-show="sortType == 'type' && sortReverse" class="fa fa-caret-up"></span> <span ng-show="sortType == 'type' && sortReverse" class="fa fa-caret-up"></span>
</a> </a>
</th> </th>
<th> <th ng-hide="hideColumns">
<a href="#" ng-click="sortType = 'lastLoggedIn'; sortReverse = !sortReverse"> <a href="#" ng-click="sortType = 'lastLoggedIn'; sortReverse = !sortReverse">
Last Logged In Last Logged In
<span ng-show="sortType == 'lastLoggedIn' && !sortReverse" class="fa fa-caret-down"></span> <span ng-show="sortType == 'lastLoggedIn' && !sortReverse" class="fa fa-caret-down"></span>
<span ng-show="sortType == 'lastLoggedIn' && sortReverse" class="fa fa-caret-up"></span> <span ng-show="sortType == 'lastLoggedIn' && sortReverse" class="fa fa-caret-up"></span>
</a> </a>
</th> </th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr ng-repeat="u in users | orderBy:sortType:sortReverse | filter:searchTerm"> <tr ng-repeat="u in users | orderBy:sortType:sortReverse | filter:searchTerm">
<td> <td>
{{u.username}} {{u.username}}
</td> </td>
<td> <td>
{{u.alias}} {{u.alias}}
</td> </td>
<td> <td>
{{u.emailAddress}} {{u.emailAddress}}
</td> </td>
<td> <td>
{{u.permissionsFormattedString}} {{u.permissionsFormattedString}}
</td> </td>
<td> <td ng-hide="hideColumns">
{{u.type === 1 ? 'Local User' : 'Plex User'}} {{u.type === 1 ? 'Local User' : 'Plex User'}}
</td> </td>
<td ng-bind="u.lastLoggedIn === minDate ? 'Never' : formatDate(u.lastLoggedIn)"></td> <td ng-hide="hideColumns" ng-bind="u.lastLoggedIn === minDate ? 'Never' : formatDate(u.lastLoggedIn)"></td>
<td> <td>
<a href="#" ng-click="selectUser(u.id)" class="btn btn-sm btn-info-outline detailsBtn">Details/Edit</a> <a href="#IDontExist" ng-click="selectUser(u.id)" class="btn btn-sm btn-info-outline">Details/Edit</a>
</td> </td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>