diff --git a/Ombi.UI/Content/requests.js b/Ombi.UI/Content/requests.js index 31a5a3761..7928f39aa 100644 --- a/Ombi.UI/Content/requests.js +++ b/Ombi.UI/Content/requests.js @@ -16,32 +16,44 @@ var base = $('#baseUrl').text(); var tvLoaded = false; var albumLoaded = false; -var isAdmin = $('#isAdmin').text(); +var isAdmin = $('#isAdmin').text() === "True"; + +var adminFilter = $('#adminFilter').text(); +var adminFilterText = $('#adminFilterText').text(); +var adminSort = $('#adminSort').text(); +var adminSortText = $('#adminSortText').text(); + +var defaultFilterText = $('#defaultFilterText').text(); +var defaultSortText = $('#defaultSortText').text(); -var defaultFiler = isAdmin == 'True' ? '.approved-fase' : 'all'; +$("#filterText").text(isAdmin ? adminFilterText : defaultFilterText); +$("#sortText").text(isAdmin ? adminSortText : defaultSortText); -var url = createBaseUrl(base, '/requests/UpdateFilters'); -$.ajax({ - type: 'GET', - url: url, - dataType: "json", - success: function (response) { +// Loop through all the filters to set the correct one to checked +selectCheckboxes('.filter', isAdmin ? adminFilterText : defaultFilterText); +selectCheckboxes('.sort', isAdmin ? adminSortText : defaultSortText); - mixItUpDefault.load.filter = response.defaultFilter; - mixItUpDefault.load.sort = response.defaultSort; - }, - error: function (e) { - console.log(e); - generateNotify("Something went wrong saving your filter!", "danger"); - } -}); + +function selectCheckboxes(className, text) { + $(className).each(function (i, obj) { + + var $element = $(obj.children[0]); + if (obj.text === " " + text) { + $element.removeClass('fa-square-o').addClass('fa-check-square'); + } else { + if ($element.hasClass('fa-check-square')) { + $element.removeClass('fa-check-square').addClass('fa-square-o'); + } + } + }); +} var mixItUpDefault = { animation: { enable: true }, load: { - filter: defaultFiler, - sort: 'requestorder:desc' + filter: isAdmin ? adminFilter : 'all', + sort: isAdmin ? adminSort : 'requestorder:desc' }, layout: { display: 'block' @@ -293,6 +305,9 @@ $('.sort', '.dropdown-menu').click(function (e) { var $this = $(this); $('.fa-check-square', $this.parents('.dropdown-menu:first')).removeClass('fa-check-square').addClass('fa-square-o'); $this.children('.fa').first().removeClass('fa-square-o').addClass('fa-check-square'); + $("#sortText").fadeOut(function () { + $(this).text($this.text().trim()); + }).fadeIn(); }); diff --git a/Ombi.UI/Models/Admin/CustomizationViewModel.cs b/Ombi.UI/Models/Admin/CustomizationViewModel.cs index 1c6082af3..568182a10 100644 --- a/Ombi.UI/Models/Admin/CustomizationViewModel.cs +++ b/Ombi.UI/Models/Admin/CustomizationViewModel.cs @@ -37,13 +37,19 @@ namespace Ombi.UI.Models.Admin public class CustomizationViewModel { public CustomizationSettings Settings { get; set; } - public List> LanguageDropdown { get; set; } = new List>(); - public List> FilterOptions { get; set; } = new List>(); + public List> LanguageDropdown { get; } = new List>(); + public List> FilterOptions { get; } = new List>(); public List> SortOptions { get; set; } = new List>(); } public enum FilterOptions { + [Display(Name = "all", Description = "All")] + All, + [Display(Name = ".approved-true", Description = "Approved")] + Approved, + [Display(Name = ".approved-false", Description = "Not Approved")] + NotApproved, [Display(Name = ".available-true", Description = "Available")] Available, [Display(Name = ".available-false", Description = "Not Available")] diff --git a/Ombi.UI/Models/Requests/RequestsIndexViewModel.cs b/Ombi.UI/Models/Requests/RequestsIndexViewModel.cs new file mode 100644 index 000000000..b95b96273 --- /dev/null +++ b/Ombi.UI/Models/Requests/RequestsIndexViewModel.cs @@ -0,0 +1,37 @@ +#region Copyright +// /************************************************************************ +// Copyright (c) 2017 Jamie Rees +// File: RequestsIndexViewModel.cs +// Created By: Jamie Rees +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// ************************************************************************/ +#endregion + +using Ombi.Core.SettingModels; + +namespace Ombi.UI.Models.Requests +{ + public class RequestsIndexViewModel + { + public PlexRequestSettings PlexRequestSettings { get; set; } + public CustomizationSettings CustomizationSettings { get; set; } + } +} \ No newline at end of file diff --git a/Ombi.UI/Modules/RequestsModule.cs b/Ombi.UI/Modules/RequestsModule.cs index 5d9d8596f..f0c0934ac 100644 --- a/Ombi.UI/Modules/RequestsModule.cs +++ b/Ombi.UI/Modules/RequestsModule.cs @@ -44,6 +44,7 @@ using Ombi.Services.Notification; using Ombi.Store; using Ombi.UI.Models; using Ombi.UI.Models.Admin; +using Ombi.UI.Models.Requests; using Action = Ombi.Helpers.Analytics.Action; using ISecurityExtensions = Ombi.Core.ISecurityExtensions; @@ -117,7 +118,9 @@ namespace Ombi.UI.Modules private async Task LoadRequests() { var settings = await PrSettings.GetSettingsAsync(); - return View["Index", settings]; + var custom = await CustomizationSettings.GetSettingsAsync(); + + return View["Index", new RequestsIndexViewModel { CustomizationSettings = custom, PlexRequestSettings = settings }]; } private async Task GetMovies() @@ -227,7 +230,7 @@ namespace Ombi.UI.Modules } catch (Exception e) { - Log.Info(e); + Log.Info(e); } } @@ -316,7 +319,7 @@ namespace Ombi.UI.Modules return Response.AsJson(new JsonResponseModel { Result = true }); } - + Analytics.TrackEventAsync(Category.Requests, Action.Delete, "Delete Request", Username, CookieHelper.GetAnalyticClientId(Cookies)); var currentEntity = await Service.GetAsync(requestid); diff --git a/Ombi.UI/Ombi.UI.csproj b/Ombi.UI/Ombi.UI.csproj index 0a151d769..38a6bdf40 100644 --- a/Ombi.UI/Ombi.UI.csproj +++ b/Ombi.UI/Ombi.UI.csproj @@ -245,6 +245,7 @@ + diff --git a/Ombi.UI/Views/Requests/Index.cshtml b/Ombi.UI/Views/Requests/Index.cshtml index 9134aff07..0447e25fa 100644 --- a/Ombi.UI/Views/Requests/Index.cshtml +++ b/Ombi.UI/Views/Requests/Index.cshtml @@ -1,8 +1,12 @@ @using Nancy.Security @using Nancy.Security +@using Ombi.Helpers @using Ombi.Helpers.Permissions @using Ombi.UI.Helpers +@using Ombi.UI.Models.Admin @using Ombi.UI.Resources + +@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase @{ var baseUrl = Html.GetBaseUrl(); var formAction = string.Empty; @@ -11,29 +15,42 @@ { formAction = "/" + baseUrl.ToHtmlString(); } + + var sortText = EnumHelper.GetDisplayDescription((SortOptions) Model.CustomizationSettings.DefaultSort); + var filterText = EnumHelper.GetDisplayDescription((FilterOptions) Model.CustomizationSettings.DefaultFilter); + var defaultFilter = EnumHelper.GetDisplayValue((FilterOptions) Model.CustomizationSettings.DefaultFilter); + var defaultSort = EnumHelper.GetDisplayValue((SortOptions) Model.CustomizationSettings.DefaultSort); + }
- + + + + + + + +

@UI.Requests_Title

@UI.Requests_Paragraph

-
+
-
+
@@ -43,53 +60,33 @@
@if (isAdmin) { - @if (Model.SearchForMovies) - { - - - } - @if (Model.SearchForTvShows) - { - - - } - @if (Model.SearchForMusic) - { - - - } + @if (Model.PlexRequestSettings.SearchForMovies) + { + + + } + @if (Model.PlexRequestSettings.SearchForTvShows) + { + + + } + @if (Model.PlexRequestSettings.SearchForMusic) + { + + + } }
- @if (Model.SearchForMovies) + @if (Model.PlexRequestSettings.SearchForMovies) {
-
-
+
+
} - @if (Model.SearchForTvShows) + @if (Model.PlexRequestSettings.SearchForTvShows) {
-
-
+
+
} - @if (Model.SearchForMusic) + @if (Model.PlexRequestSettings.SearchForMusic) {
-
-
+
+
@@ -202,12 +199,12 @@ {{status}} {{#if denied}}
- Denied: + Denied: {{#if deniedReason}} {{/if}}
- + {{/if}} {{#if_eq releaseDate "01/01/0001 00:00:00"}}
@UI.Requests_ReleaseDate: {{releaseDate}}
@@ -234,7 +231,7 @@ {{/if_eq}}
- + {{#if_eq type "tv"}} {{#if episodes}} Episodes: @@ -284,7 +281,7 @@
-