This commit is contained in:
Jamie.Rees 2016-11-28 08:26:12 +00:00
parent 30a59c8a8b
commit 21f3131cb4
14 changed files with 58 additions and 167 deletions

View file

@ -44,10 +44,16 @@ namespace PlexRequests.Core.SettingModels
public bool SearchForMovies { get; set; } public bool SearchForMovies { get; set; }
public bool SearchForTvShows { get; set; } public bool SearchForTvShows { get; set; }
public bool SearchForMusic { get; set; } public bool SearchForMusic { get; set; }
[Obsolete("Use the user management settings")]
public bool RequireMovieApproval { get; set; } public bool RequireMovieApproval { get; set; }
[Obsolete("Use the user management settings")]
public bool RequireTvShowApproval { get; set; } public bool RequireTvShowApproval { get; set; }
[Obsolete("Use the user management settings")]
public bool RequireMusicApproval { get; set; } public bool RequireMusicApproval { get; set; }
[Obsolete("Use the user management settings")]
public bool UsersCanViewOnlyOwnRequests { get; set; } public bool UsersCanViewOnlyOwnRequests { get; set; }
[Obsolete("Use the user management settings")]
public bool UsersCanViewOnlyOwnIssues { get; set; } public bool UsersCanViewOnlyOwnIssues { get; set; }
public int MovieWeeklyRequestLimit { get; set; } public int MovieWeeklyRequestLimit { get; set; }
public int TvWeeklyRequestLimit { get; set; } public int TvWeeklyRequestLimit { get; set; }

View file

@ -35,6 +35,8 @@ namespace PlexRequests.Core.SettingModels
public bool AutoApproveTvShows { get; set; } public bool AutoApproveTvShows { get; set; }
public bool AutoApproveMusic { get; set; } public bool AutoApproveMusic { get; set; }
public bool ReportIssues { get; set; } public bool ReportIssues { get; set; }
public bool UsersCanViewOnlyOwnRequests { get; set; }
public bool UsersCanViewOnlyOwnIssues { get; set; }
// Features // Features
public bool RecentlyAddedNotification { get; set; } public bool RecentlyAddedNotification { get; set; }

View file

@ -69,18 +69,27 @@ namespace PlexRequests.Core
private void CreateDefaultSettingsPage(string baseUrl) private void CreateDefaultSettingsPage(string baseUrl)
{ {
var defaultUserSettings = new UserManagementSettings
{
RequestMovies = true,
RequestTvShows = true,
ReportIssues = true,
};
var defaultSettings = new PlexRequestSettings var defaultSettings = new PlexRequestSettings
{ {
RequireTvShowApproval = true,
RequireMovieApproval = true,
SearchForMovies = true, SearchForMovies = true,
SearchForTvShows = true, SearchForTvShows = true,
BaseUrl = baseUrl ?? string.Empty, BaseUrl = baseUrl ?? string.Empty,
CollectAnalyticData = true, CollectAnalyticData = true,
}; };
var s = new SettingsServiceV2<PlexRequestSettings>(new SettingsJsonRepository(new DbConfiguration(new SqliteFactory()), new MemoryCacheProvider())); var ctor = new SettingsJsonRepository(new DbConfiguration(new SqliteFactory()), new MemoryCacheProvider());
var s = new SettingsServiceV2<PlexRequestSettings>(ctor);
s.SaveSettings(defaultSettings); s.SaveSettings(defaultSettings);
var userSettings = new SettingsServiceV2<UserManagementSettings>(ctor);
userSettings.SaveSettings(defaultUserSettings);
var cron = (Quartz.Impl.Triggers.CronTriggerImpl)CronScheduleBuilder.WeeklyOnDayAndHourAndMinute(DayOfWeek.Friday, 7, 0).Build(); var cron = (Quartz.Impl.Triggers.CronTriggerImpl)CronScheduleBuilder.WeeklyOnDayAndHourAndMinute(DayOfWeek.Friday, 7, 0).Build();
var scheduled = new ScheduledJobsSettings var scheduled = new ScheduledJobsSettings

View file

@ -61,6 +61,12 @@ namespace PlexRequests.Helpers.Permissions
AutoApproveAlbum = 256, AutoApproveAlbum = 256,
[Display(Name = "Manage Requests")] [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
} }
} }

View file

@ -317,14 +317,11 @@ namespace PlexRequests.Services.Jobs
switch (requestType) switch (requestType)
{ {
case RequestType.Movie: case RequestType.Movie:
return Security.HasPermissions(user, Permissions.AutoApproveMovie) || return Security.HasPermissions(user, Permissions.AutoApproveMovie);
!prSettings.RequireMovieApproval;
case RequestType.TvShow: case RequestType.TvShow:
return Security.HasPermissions(user, Permissions.AutoApproveTv) || return Security.HasPermissions(user, Permissions.AutoApproveTv);
!prSettings.RequireTvShowApproval;
case RequestType.Album: case RequestType.Album:
return Security.HasPermissions(user, Permissions.AutoApproveAlbum) || return Security.HasPermissions(user, Permissions.AutoApproveAlbum);
!prSettings.RequireMusicApproval;
default: default:
return false; return false;
} }

View file

@ -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) { function loadArea(templateId) {
var $body = $('#contentBody'); var $body = $('#contentBody');

View file

@ -335,7 +335,7 @@ namespace PlexRequests.UI.Modules
myIssues = issuesModels.Where(x => x.IssueStatus != IssueStatus.ResolvedIssue); 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) if (!showResolved)
{ {

View file

@ -129,7 +129,7 @@ namespace PlexRequests.UI.Modules
var dbMovies = allRequests.ToList(); var dbMovies = allRequests.ToList();
if (settings.UsersCanViewOnlyOwnRequests && !IsAdmin) if (Security.HasPermissions(User, Permissions.UsersCanViewOnlyOwnRequests) && !IsAdmin)
{ {
dbMovies = dbMovies.Where(x => x.UserHasRequested(Username)).ToList(); dbMovies = dbMovies.Where(x => x.UserHasRequested(Username)).ToList();
} }
@ -199,7 +199,7 @@ namespace PlexRequests.UI.Modules
var dbTv = requests; var dbTv = requests;
var settings = await settingsTask; var settings = await settingsTask;
if (settings.UsersCanViewOnlyOwnRequests && !IsAdmin) if (Security.HasPermissions(User, Permissions.UsersCanViewOnlyOwnRequests) && !IsAdmin)
{ {
dbTv = dbTv.Where(x => x.UserHasRequested(Username)).ToList(); dbTv = dbTv.Where(x => x.UserHasRequested(Username)).ToList();
} }
@ -271,7 +271,7 @@ namespace PlexRequests.UI.Modules
var settings = PrSettings.GetSettings(); var settings = PrSettings.GetSettings();
var dbAlbum = await Service.GetAllAsync(); var dbAlbum = await Service.GetAllAsync();
dbAlbum = dbAlbum.Where(x => x.Type == RequestType.Album); 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)); dbAlbum = dbAlbum.Where(x => x.UserHasRequested(Username));
} }

View file

@ -278,7 +278,7 @@ namespace PlexRequests.UI.Modules
VoteAverage = movie.VoteAverage, VoteAverage = movie.VoteAverage,
VoteCount = movie.VoteCount 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(), var plexMovie = Checker.GetMovie(plexMovies.ToArray(), movie.Title, movie.ReleaseDate?.Year.ToString(),
imdbId); imdbId);
if (plexMovie != null) if (plexMovie != null)
@ -510,7 +510,7 @@ namespace PlexRequests.UI.Modules
{ {
Result = true, Result = true,
Message = Message =
settings.UsersCanViewOnlyOwnRequests Security.HasPermissions(User, Permissions.UsersCanViewOnlyOwnRequests)
? $"{fullMovieName} {Resources.UI.Search_SuccessfullyAdded}" ? $"{fullMovieName} {Resources.UI.Search_SuccessfullyAdded}"
: $"{fullMovieName} {Resources.UI.Search_AlreadyRequested}" : $"{fullMovieName} {Resources.UI.Search_AlreadyRequested}"
}); });
@ -968,7 +968,7 @@ namespace PlexRequests.UI.Modules
{ {
existingRequest.RequestedUsers.Add(Username); existingRequest.RequestedUsers.Add(Username);
} }
if (settings.UsersCanViewOnlyOwnRequests || episodeReq) if (Security.HasPermissions(User, Permissions.UsersCanViewOnlyOwnRequests) || episodeReq)
{ {
return return
await await
@ -1033,7 +1033,7 @@ namespace PlexRequests.UI.Modules
{ {
Result = true, Result = true,
Message = Message =
settings.UsersCanViewOnlyOwnRequests Security.HasPermissions(User, Permissions.UsersCanViewOnlyOwnRequests)
? $"{existingRequest.Title} {Resources.UI.Search_SuccessfullyAdded}" ? $"{existingRequest.Title} {Resources.UI.Search_SuccessfullyAdded}"
: $"{existingRequest.Title} {Resources.UI.Search_AlreadyRequested}" : $"{existingRequest.Title} {Resources.UI.Search_AlreadyRequested}"
}); });
@ -1374,14 +1374,11 @@ namespace PlexRequests.UI.Modules
switch (requestType) switch (requestType)
{ {
case RequestType.Movie: case RequestType.Movie:
return Security.HasPermissions(User, Permissions.AutoApproveMovie) || return Security.HasPermissions(User, Permissions.AutoApproveMovie);
!prSettings.RequireMovieApproval;
case RequestType.TvShow: case RequestType.TvShow:
return Security.HasPermissions(User, Permissions.AutoApproveTv) || return Security.HasPermissions(User, Permissions.AutoApproveTv);
!prSettings.RequireTvShowApproval;
case RequestType.Album: case RequestType.Album:
return Security.HasPermissions(User, Permissions.AutoApproveAlbum) || return Security.HasPermissions(User, Permissions.AutoApproveAlbum);
!prSettings.RequireMusicApproval;
default: default:
return false; return false;
} }

View file

@ -158,9 +158,6 @@ namespace PlexRequests.UI.Modules
currentSettings.SearchForMovies = form.SearchForMovies; currentSettings.SearchForMovies = form.SearchForMovies;
currentSettings.SearchForTvShows = form.SearchForTvShows; currentSettings.SearchForTvShows = form.SearchForTvShows;
currentSettings.SearchForMusic = form.SearchForMusic; currentSettings.SearchForMusic = form.SearchForMusic;
currentSettings.RequireMovieApproval = form.RequireMovieApproval;
currentSettings.RequireTvShowApproval = form.RequireTvShowApproval;
currentSettings.RequireMusicApproval = form.RequireMusicApproval;
var result = await PlexRequestSettings.SaveSettingsAsync(currentSettings); var result = await PlexRequestSettings.SaveSettingsAsync(currentSettings);
if (result) if (result)

View file

@ -49,19 +49,11 @@
</div> </div>
<br />
<a href="~/usermanagement/" class="btn btn-info-outline">User Management</a>
<br /> <br />
<br /> <br />
<p class="form-group">Current users that are allowed to authenticate: </p>
<div class="form-group">
<select id="users" multiple="" class="form-control-custom" style="height: 180px;"></select>
</div>
<div class="form-group">
<div>
<button id="refreshUsers" class="btn btn-primary-outline">Refresh Users</button>
</div>
</div>
<p class="form-group">A comma separated list of users that you do not want to login.</p> <p class="form-group">A comma separated list of users that you do not want to login.</p>
<div class="form-group"> <div class="form-group">

View file

@ -112,81 +112,6 @@
</div> </div>
</div> </div>
<div class="form-group">
<div class="checkbox">
@if (Model.RequireMovieApproval)
{
<input type="checkbox" id="RequireMovieApproval" name="RequireMovieApproval" checked="checked"><label for="RequireMovieApproval">Require approval of Movie requests</label>
}
else
{
<input type="checkbox" id="RequireMovieApproval" name="RequireMovieApproval"><label for="RequireMovieApproval">Require approval of Movie requests</label>
}
</div>
</div>
<div class="form-group">
<div class="checkbox">
@if (Model.RequireTvShowApproval)
{
<input type="checkbox" id="RequireTvShowApproval" name="RequireTvShowApproval" checked="checked"><label for="RequireTvShowApproval">Require approval of TV show requests</label>
}
else
{
<input type="checkbox" id="RequireTvShowApproval" name="RequireTvShowApproval"><label for="RequireTvShowApproval">Require approval of TV show requests</label>
}
</div>
</div>
<div class="form-group">
<div class="checkbox">
@if (Model.RequireMusicApproval)
{
<input type="checkbox" id="RequireMusicApproval" name="RequireMusicApproval" checked="checked"><label for="RequireMusicApproval">Require approval of Music requests</label>
}
else
{
<input type="checkbox" id="RequireMusicApproval" name="RequireMusicApproval"><label for="RequireMusicApproval">Require approval of Music requests</label>
}
</div>
</div>
<div class="form-group">
<div class="checkbox">
@if (Model.UsersCanViewOnlyOwnRequests)
{
<input type="checkbox" id="UsersCanViewOnlyOwnRequests" name="UsersCanViewOnlyOwnRequests" checked="checked">
<label for="UsersCanViewOnlyOwnRequests">Users can view their own requests only</label>
}
else
{
<input type="checkbox" id="UsersCanViewOnlyOwnRequests" name="UsersCanViewOnlyOwnRequests"><label for="UsersCanViewOnlyOwnRequests">Users can view their own requests only</label>
}
</div>
</div>
<div class="form-group">
<div class="checkbox">
@if (Model.UsersCanViewOnlyOwnIssues)
{
<input type="checkbox" id="UsersCanViewOnlyOwnIssues" name="UsersCanViewOnlyOwnIssues" checked="checked">
<label for="UsersCanViewOnlyOwnIssues">Users can view their own issues only</label>
}
else
{
<input type="checkbox" id="UsersCanViewOnlyOwnIssues" name="UsersCanViewOnlyOwnIssues"><label for="UsersCanViewOnlyOwnIssues">Users can view their own issues only</label>
}
</div>
</div>
<div class="form-group"> <div class="form-group">
<div class="checkbox"> <div class="checkbox">

View file

@ -11,19 +11,19 @@
<h3>Permissions</h3> <h3>Permissions</h3>
@Html.Checkbox(Model.RequestMovies, "RequestMovies", "Request Movies"); @Html.Checkbox(Model.RequestMovies, "RequestMovies", "Request Movies")
@Html.Checkbox(Model.RequestTvShows, "RequestTvShows", "Request TV Shows"); @Html.Checkbox(Model.RequestTvShows, "RequestTvShows", "Request TV Shows")
@Html.Checkbox(Model.RequestMusic, "RequestMusic", "Request Music"); @Html.Checkbox(Model.RequestMusic, "RequestMusic", "Request Music")
@Html.Checkbox(Model.AutoApproveMovies, "AutoApproveMovies", "Auto Approve Movie Requests"); @Html.Checkbox(Model.AutoApproveMovies, "AutoApproveMovies", "Auto Approve Movie Requests")
@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")
<h3>Features</h3> <h3>Features</h3>
@Html.Checkbox(Model.RecentlyAddedNewsletter, "RecentlyAddedNewsletter", "Recently Added Newsletter"); @Html.Checkbox(Model.RecentlyAddedNewsletter, "RecentlyAddedNewsletter", "Recently Added Newsletter")
@Html.Checkbox(Model.RecentlyAddedNotification, "RecentlyAddedNotification", "Recently Added Notifications"); @Html.Checkbox(Model.RecentlyAddedNotification, "RecentlyAddedNotification", "Recently Added Notifications")
<div> <div>
</div> </div>

View file

@ -104,21 +104,6 @@
<input type="checkbox" id="SearchForMusic" name="SearchForMusic"><label id="SearchForMusicLabel" for="SearchForMusic">Allow searching for Music</label> <input type="checkbox" id="SearchForMusic" name="SearchForMusic"><label id="SearchForMusicLabel" for="SearchForMusic">Allow searching for Music</label>
</div> </div>
</div> </div>
<div class="form-group">
<div class="checkbox">
<input type="checkbox" disabled="disabled" id="RequireMovieApproval" name="RequireMovieApproval"><label style="color:grey" id="RequireMovieApprovalLabel" for="RequireMovieApproval">Require approval of all Movie requests</label>
</div>
</div>
<div class="form-group">
<div class="checkbox">
<input type="checkbox" disabled="disabled" id="RequireTvShowApproval" name="RequireTvShowApproval"><label style="color:grey" id="RequireTvShowApprovalLabel" for="RequireTvShowApproval">Require approval of all TV show requests</label>
</div>
</div>
<div class="form-group">
<div class="checkbox">
<input type="checkbox" disabled="disabled" id="RequireMusicApproval" name="RequireMusicApproval"><label style="color:grey" id="RequireMusicApprovalLabel" for="RequireMusicApproval">Require approval of all Music requests</label>
</div>
</div>
<div class="form-group"> <div class="form-group">
<div style="text-align: center; margin-top: 20px"> <div style="text-align: center; margin-top: 20px">