From 21f3131cb430c1fffe8aec51ebb0fcb600ca0034 Mon Sep 17 00:00:00 2001 From: "Jamie.Rees" Date: Mon, 28 Nov 2016 08:26:12 +0000 Subject: [PATCH] Finished #707 --- .../SettingModels/PlexRequestSettings.cs | 6 ++ .../SettingModels/UserManagementSettings.cs | 2 + PlexRequests.Core/Setup.cs | 21 ++++-- .../Permissions/Permissions.cs | 8 +- .../Jobs/FaultQueueHandler.cs | 9 +-- PlexRequests.UI/Content/wizard.js | 25 ------- PlexRequests.UI/Modules/IssuesModule.cs | 2 +- PlexRequests.UI/Modules/RequestsModule.cs | 6 +- PlexRequests.UI/Modules/SearchModule.cs | 17 ++--- PlexRequests.UI/Modules/UserWizardModule.cs | 5 +- .../Views/Admin/Authentication.cshtml | 14 +--- PlexRequests.UI/Views/Admin/Settings.cshtml | 75 ------------------- .../Views/Admin/UserManagementSettings.cshtml | 18 ++--- PlexRequests.UI/Views/UserWizard/Index.cshtml | 17 +---- 14 files changed, 58 insertions(+), 167 deletions(-) diff --git a/PlexRequests.Core/SettingModels/PlexRequestSettings.cs b/PlexRequests.Core/SettingModels/PlexRequestSettings.cs index 5c7e6ddf5..2a0713375 100644 --- a/PlexRequests.Core/SettingModels/PlexRequestSettings.cs +++ b/PlexRequests.Core/SettingModels/PlexRequestSettings.cs @@ -44,10 +44,16 @@ namespace PlexRequests.Core.SettingModels public bool SearchForMovies { get; set; } public bool SearchForTvShows { get; set; } public bool SearchForMusic { get; set; } + [Obsolete("Use the user management settings")] public bool RequireMovieApproval { get; set; } + [Obsolete("Use the user management settings")] public bool RequireTvShowApproval { get; set; } + [Obsolete("Use the user management settings")] public bool RequireMusicApproval { get; set; } + + [Obsolete("Use the user management settings")] public bool UsersCanViewOnlyOwnRequests { get; set; } + [Obsolete("Use the user management settings")] public bool UsersCanViewOnlyOwnIssues { get; set; } public int MovieWeeklyRequestLimit { get; set; } public int TvWeeklyRequestLimit { get; set; } diff --git a/PlexRequests.Core/SettingModels/UserManagementSettings.cs b/PlexRequests.Core/SettingModels/UserManagementSettings.cs index 308f2e4a5..768a2167c 100644 --- a/PlexRequests.Core/SettingModels/UserManagementSettings.cs +++ b/PlexRequests.Core/SettingModels/UserManagementSettings.cs @@ -35,6 +35,8 @@ namespace PlexRequests.Core.SettingModels public bool AutoApproveTvShows { get; set; } public bool AutoApproveMusic { get; set; } public bool ReportIssues { get; set; } + public bool UsersCanViewOnlyOwnRequests { get; set; } + public bool UsersCanViewOnlyOwnIssues { get; set; } // Features public bool RecentlyAddedNotification { get; set; } diff --git a/PlexRequests.Core/Setup.cs b/PlexRequests.Core/Setup.cs index b9f2b7518..e43809a16 100644 --- a/PlexRequests.Core/Setup.cs +++ b/PlexRequests.Core/Setup.cs @@ -50,7 +50,7 @@ namespace PlexRequests.Core Db = new DbConfiguration(new SqliteFactory()); var created = Db.CheckDb(); TableCreation.CreateTables(Db.DbConnection()); - + if (created) { CreateDefaultSettingsPage(urlBase); @@ -60,27 +60,36 @@ namespace PlexRequests.Core // Shrink DB TableCreation.Vacuum(Db.DbConnection()); } - + // Add the new 'running' item into the scheduled jobs so we can check if the cachers are running Db.DbConnection().AlterTable("ScheduledJobs", "ADD", "Running", true, "INTEGER"); - + return Db.DbConnection().ConnectionString; } private void CreateDefaultSettingsPage(string baseUrl) { + var defaultUserSettings = new UserManagementSettings + { + RequestMovies = true, + RequestTvShows = true, + ReportIssues = true, + + }; var defaultSettings = new PlexRequestSettings { - RequireTvShowApproval = true, - RequireMovieApproval = true, SearchForMovies = true, SearchForTvShows = true, BaseUrl = baseUrl ?? string.Empty, CollectAnalyticData = true, }; - var s = new SettingsServiceV2(new SettingsJsonRepository(new DbConfiguration(new SqliteFactory()), new MemoryCacheProvider())); + var ctor = new SettingsJsonRepository(new DbConfiguration(new SqliteFactory()), new MemoryCacheProvider()); + var s = new SettingsServiceV2(ctor); s.SaveSettings(defaultSettings); + var userSettings = new SettingsServiceV2(ctor); + userSettings.SaveSettings(defaultUserSettings); + var cron = (Quartz.Impl.Triggers.CronTriggerImpl)CronScheduleBuilder.WeeklyOnDayAndHourAndMinute(DayOfWeek.Friday, 7, 0).Build(); var scheduled = new ScheduledJobsSettings diff --git a/PlexRequests.Helpers/Permissions/Permissions.cs b/PlexRequests.Helpers/Permissions/Permissions.cs index f36f4fcb2..6f6932ea6 100644 --- a/PlexRequests.Helpers/Permissions/Permissions.cs +++ b/PlexRequests.Helpers/Permissions/Permissions.cs @@ -61,6 +61,12 @@ namespace PlexRequests.Helpers.Permissions AutoApproveAlbum = 256, [Display(Name = "Manage Requests")] - ManageRequests = 512 + ManageRequests = 512, + + [Display(Name = "Users can only view their own requests")] + UsersCanViewOnlyOwnRequests = 1024, + + [Display(Name = "Users can only view their own issues")] + UsersCanViewOnlyOwnIssues = 2048 } } \ No newline at end of file diff --git a/PlexRequests.Services/Jobs/FaultQueueHandler.cs b/PlexRequests.Services/Jobs/FaultQueueHandler.cs index e4de54b29..e269231ee 100644 --- a/PlexRequests.Services/Jobs/FaultQueueHandler.cs +++ b/PlexRequests.Services/Jobs/FaultQueueHandler.cs @@ -317,14 +317,11 @@ namespace PlexRequests.Services.Jobs switch (requestType) { case RequestType.Movie: - return Security.HasPermissions(user, Permissions.AutoApproveMovie) || - !prSettings.RequireMovieApproval; + return Security.HasPermissions(user, Permissions.AutoApproveMovie); case RequestType.TvShow: - return Security.HasPermissions(user, Permissions.AutoApproveTv) || - !prSettings.RequireTvShowApproval; + return Security.HasPermissions(user, Permissions.AutoApproveTv); case RequestType.Album: - return Security.HasPermissions(user, Permissions.AutoApproveAlbum) || - !prSettings.RequireMusicApproval; + return Security.HasPermissions(user, Permissions.AutoApproveAlbum); default: return false; } diff --git a/PlexRequests.UI/Content/wizard.js b/PlexRequests.UI/Content/wizard.js index 877a26ee8..606a44c5e 100644 --- a/PlexRequests.UI/Content/wizard.js +++ b/PlexRequests.UI/Content/wizard.js @@ -106,31 +106,6 @@ }); - $('#contentBody').on('click', '#SearchForMovies', function () { - var checked = this.checked; - changeDisabledStatus($('#RequireMovieApproval'), checked, $('#RequireMovieApprovalLabel')); - }); - - $('#contentBody').on('click', '#SearchForTvShows', function () { - var checked = this.checked; - changeDisabledStatus($('#RequireTvShowApproval'), checked, $('#RequireTvShowApprovalLabel')); - }); - - $('#contentBody').on('click', '#SearchForMusic', function () { - var checked = this.checked; - changeDisabledStatus($('#RequireMusicApproval'), checked, $('#RequireMusicApprovalLabel')); - }); - - function changeDisabledStatus($element, checked, $label) { - if (checked) { - $element.removeAttr("disabled"); - $label.css("color",""); - } else { - $element.attr("disabled","disabled"); - $label.css("color", "grey"); - } - } - function loadArea(templateId) { var $body = $('#contentBody'); diff --git a/PlexRequests.UI/Modules/IssuesModule.cs b/PlexRequests.UI/Modules/IssuesModule.cs index 4dd7574e2..3a09cc2f6 100644 --- a/PlexRequests.UI/Modules/IssuesModule.cs +++ b/PlexRequests.UI/Modules/IssuesModule.cs @@ -335,7 +335,7 @@ namespace PlexRequests.UI.Modules myIssues = issuesModels.Where(x => x.IssueStatus != IssueStatus.ResolvedIssue); } } - else if (settings.UsersCanViewOnlyOwnIssues) // The user is not an Admin, do we have the settings to hide them? + else if (Security.HasPermissions(User, Permissions.UsersCanViewOnlyOwnIssues)) // The user is not an Admin, do we have the settings to hide them? { if (!showResolved) { diff --git a/PlexRequests.UI/Modules/RequestsModule.cs b/PlexRequests.UI/Modules/RequestsModule.cs index c9442d26a..d65ebe9e7 100644 --- a/PlexRequests.UI/Modules/RequestsModule.cs +++ b/PlexRequests.UI/Modules/RequestsModule.cs @@ -129,7 +129,7 @@ namespace PlexRequests.UI.Modules var dbMovies = allRequests.ToList(); - if (settings.UsersCanViewOnlyOwnRequests && !IsAdmin) + if (Security.HasPermissions(User, Permissions.UsersCanViewOnlyOwnRequests) && !IsAdmin) { dbMovies = dbMovies.Where(x => x.UserHasRequested(Username)).ToList(); } @@ -199,7 +199,7 @@ namespace PlexRequests.UI.Modules var dbTv = requests; var settings = await settingsTask; - if (settings.UsersCanViewOnlyOwnRequests && !IsAdmin) + if (Security.HasPermissions(User, Permissions.UsersCanViewOnlyOwnRequests) && !IsAdmin) { dbTv = dbTv.Where(x => x.UserHasRequested(Username)).ToList(); } @@ -271,7 +271,7 @@ namespace PlexRequests.UI.Modules var settings = PrSettings.GetSettings(); var dbAlbum = await Service.GetAllAsync(); dbAlbum = dbAlbum.Where(x => x.Type == RequestType.Album); - if (settings.UsersCanViewOnlyOwnRequests && !IsAdmin) + if (Security.HasPermissions(User, Permissions.UsersCanViewOnlyOwnRequests) && !IsAdmin) { dbAlbum = dbAlbum.Where(x => x.UserHasRequested(Username)); } diff --git a/PlexRequests.UI/Modules/SearchModule.cs b/PlexRequests.UI/Modules/SearchModule.cs index 7ce69e003..31003421d 100644 --- a/PlexRequests.UI/Modules/SearchModule.cs +++ b/PlexRequests.UI/Modules/SearchModule.cs @@ -278,7 +278,7 @@ namespace PlexRequests.UI.Modules VoteAverage = movie.VoteAverage, VoteCount = movie.VoteCount }; - var canSee = CanUserSeeThisRequest(viewMovie.Id, settings.UsersCanViewOnlyOwnRequests, dbMovies); + var canSee = CanUserSeeThisRequest(viewMovie.Id, Security.HasPermissions(User, Permissions.UsersCanViewOnlyOwnRequests), dbMovies); var plexMovie = Checker.GetMovie(plexMovies.ToArray(), movie.Title, movie.ReleaseDate?.Year.ToString(), imdbId); if (plexMovie != null) @@ -510,7 +510,7 @@ namespace PlexRequests.UI.Modules { Result = true, Message = - settings.UsersCanViewOnlyOwnRequests + Security.HasPermissions(User, Permissions.UsersCanViewOnlyOwnRequests) ? $"{fullMovieName} {Resources.UI.Search_SuccessfullyAdded}" : $"{fullMovieName} {Resources.UI.Search_AlreadyRequested}" }); @@ -968,7 +968,7 @@ namespace PlexRequests.UI.Modules { existingRequest.RequestedUsers.Add(Username); } - if (settings.UsersCanViewOnlyOwnRequests || episodeReq) + if (Security.HasPermissions(User, Permissions.UsersCanViewOnlyOwnRequests) || episodeReq) { return await @@ -1033,7 +1033,7 @@ namespace PlexRequests.UI.Modules { Result = true, Message = - settings.UsersCanViewOnlyOwnRequests + Security.HasPermissions(User, Permissions.UsersCanViewOnlyOwnRequests) ? $"{existingRequest.Title} {Resources.UI.Search_SuccessfullyAdded}" : $"{existingRequest.Title} {Resources.UI.Search_AlreadyRequested}" }); @@ -1374,14 +1374,11 @@ namespace PlexRequests.UI.Modules switch (requestType) { case RequestType.Movie: - return Security.HasPermissions(User, Permissions.AutoApproveMovie) || - !prSettings.RequireMovieApproval; + return Security.HasPermissions(User, Permissions.AutoApproveMovie); case RequestType.TvShow: - return Security.HasPermissions(User, Permissions.AutoApproveTv) || - !prSettings.RequireTvShowApproval; + return Security.HasPermissions(User, Permissions.AutoApproveTv); case RequestType.Album: - return Security.HasPermissions(User, Permissions.AutoApproveAlbum) || - !prSettings.RequireMusicApproval; + return Security.HasPermissions(User, Permissions.AutoApproveAlbum); default: return false; } diff --git a/PlexRequests.UI/Modules/UserWizardModule.cs b/PlexRequests.UI/Modules/UserWizardModule.cs index 0abee15d4..b475294b9 100644 --- a/PlexRequests.UI/Modules/UserWizardModule.cs +++ b/PlexRequests.UI/Modules/UserWizardModule.cs @@ -158,10 +158,7 @@ namespace PlexRequests.UI.Modules currentSettings.SearchForMovies = form.SearchForMovies; currentSettings.SearchForTvShows = form.SearchForTvShows; currentSettings.SearchForMusic = form.SearchForMusic; - currentSettings.RequireMovieApproval = form.RequireMovieApproval; - currentSettings.RequireTvShowApproval = form.RequireTvShowApproval; - currentSettings.RequireMusicApproval = form.RequireMusicApproval; - + var result = await PlexRequestSettings.SaveSettingsAsync(currentSettings); if (result) { diff --git a/PlexRequests.UI/Views/Admin/Authentication.cshtml b/PlexRequests.UI/Views/Admin/Authentication.cshtml index 74c5070f2..b62044010 100644 --- a/PlexRequests.UI/Views/Admin/Authentication.cshtml +++ b/PlexRequests.UI/Views/Admin/Authentication.cshtml @@ -50,18 +50,10 @@
+ User Management
-

Current users that are allowed to authenticate:

- -
- -
-
- -
- -
-
+
+

A comma separated list of users that you do not want to login.

diff --git a/PlexRequests.UI/Views/Admin/Settings.cshtml b/PlexRequests.UI/Views/Admin/Settings.cshtml index e1473d0f0..b3ded7f9d 100644 --- a/PlexRequests.UI/Views/Admin/Settings.cshtml +++ b/PlexRequests.UI/Views/Admin/Settings.cshtml @@ -112,81 +112,6 @@
-
-
- - @if (Model.RequireMovieApproval) - { - - } - else - { - - } -
-
-
-
- - @if (Model.RequireTvShowApproval) - { - - } - else - { - - } - - -
-
-
-
- - @if (Model.RequireMusicApproval) - { - - } - else - { - - } - - -
-
- -
-
- - @if (Model.UsersCanViewOnlyOwnRequests) - { - - - } - else - { - - } - - -
-
- -
-
- - @if (Model.UsersCanViewOnlyOwnIssues) - { - - - } - else - { - - } -
-
diff --git a/PlexRequests.UI/Views/Admin/UserManagementSettings.cshtml b/PlexRequests.UI/Views/Admin/UserManagementSettings.cshtml index 641de53ad..2ad015e72 100644 --- a/PlexRequests.UI/Views/Admin/UserManagementSettings.cshtml +++ b/PlexRequests.UI/Views/Admin/UserManagementSettings.cshtml @@ -11,19 +11,19 @@

Permissions

- @Html.Checkbox(Model.RequestMovies, "RequestMovies", "Request Movies"); - @Html.Checkbox(Model.RequestTvShows, "RequestTvShows", "Request TV Shows"); - @Html.Checkbox(Model.RequestMusic, "RequestMusic", "Request Music"); - @Html.Checkbox(Model.AutoApproveMovies, "AutoApproveMovies", "Auto Approve Movie Requests"); - @Html.Checkbox(Model.AutoApproveTvShows, "AutoApproveTvShows", "Auto Approve TV Show Requests"); - @Html.Checkbox(Model.AutoApproveMusic, "AutoApproveMusic", "Auto Approve Music Requests"); - @Html.Checkbox(Model.ReportIssues, "ReportIssues", "Report Issues"); + @Html.Checkbox(Model.RequestMovies, "RequestMovies", "Request Movies") + @Html.Checkbox(Model.RequestTvShows, "RequestTvShows", "Request TV Shows") + @Html.Checkbox(Model.RequestMusic, "RequestMusic", "Request Music") + @Html.Checkbox(Model.AutoApproveMovies, "AutoApproveMovies", "Auto Approve Movie Requests") + @Html.Checkbox(Model.AutoApproveTvShows, "AutoApproveTvShows", "Auto Approve TV Show Requests") + @Html.Checkbox(Model.AutoApproveMusic, "AutoApproveMusic", "Auto Approve Music Requests") + @Html.Checkbox(Model.ReportIssues, "ReportIssues", "Report Issues")

Features

- @Html.Checkbox(Model.RecentlyAddedNewsletter, "RecentlyAddedNewsletter", "Recently Added Newsletter"); - @Html.Checkbox(Model.RecentlyAddedNotification, "RecentlyAddedNotification", "Recently Added Notifications"); + @Html.Checkbox(Model.RecentlyAddedNewsletter, "RecentlyAddedNewsletter", "Recently Added Newsletter") + @Html.Checkbox(Model.RecentlyAddedNotification, "RecentlyAddedNotification", "Recently Added Notifications")
diff --git a/PlexRequests.UI/Views/UserWizard/Index.cshtml b/PlexRequests.UI/Views/UserWizard/Index.cshtml index 60f1f095e..f8136ba53 100644 --- a/PlexRequests.UI/Views/UserWizard/Index.cshtml +++ b/PlexRequests.UI/Views/UserWizard/Index.cshtml @@ -104,22 +104,7 @@
-
-
- -
-
-
-
- -
-
-
-
- -
-
- +