Small tweaks to the Request Page

This commit is contained in:
Jamie.Rees 2016-12-01 08:49:46 +00:00
commit a2639375fb
7 changed files with 107 additions and 53 deletions

View file

@ -20,8 +20,8 @@ namespace PlexRequests.Core
Response HasPermissionsRedirect(Permissions perm, NancyContext context, string routeName, HttpStatusCode code); Response HasPermissionsRedirect(Permissions perm, NancyContext context, string routeName, HttpStatusCode code);
Func<NancyContext, Response> HttpStatusCodeIfNot(HttpStatusCode statusCode, Func<NancyContext, bool> test); Func<NancyContext, Response> HttpStatusCodeIfNot(HttpStatusCode statusCode, Func<NancyContext, bool> test);
bool IsLoggedIn(NancyContext context); bool IsLoggedIn(NancyContext context);
bool IsNormalUser(NancyContext context); bool IsNormalUser(IUserIdentity user);
bool IsPlexUser(NancyContext context); bool IsPlexUser(IUserIdentity user);
bool HasPermissions(string userName, Permissions perm); bool HasPermissions(string userName, Permissions perm);
/// <summary> /// <summary>

View file

@ -65,15 +65,15 @@ namespace PlexRequests.Core
return realUser || plexUser; return realUser || plexUser;
} }
public bool IsPlexUser(NancyContext context) public bool IsPlexUser(IUserIdentity user)
{ {
var plexUser = PlexUsers.GetUserByUsername(context.CurrentUser.UserName); var plexUser = PlexUsers.GetUserByUsername(user.UserName);
return plexUser != null; return plexUser != null;
} }
public bool IsNormalUser(NancyContext context) public bool IsNormalUser(IUserIdentity user)
{ {
var dbUser = UserRepository.GetUserByUsername(context.CurrentUser.UserName); var dbUser = UserRepository.GetUserByUsername(user.UserName);
return dbUser != null; return dbUser != null;
} }

View file

@ -16,10 +16,13 @@ var base = $('#baseUrl').text();
var tvLoaded = false; var tvLoaded = false;
var albumLoaded = false; var albumLoaded = false;
var isAdmin = $('#isAdmin').val();
var defaultFiler = isAdmin == 'True' ? '.approved-fase' : 'all';
var mixItUpDefault = { var mixItUpDefault = {
animation: { enable: true }, animation: { enable: true },
load: { load: {
filter: '.approved-false', filter: defaultFiler,
sort: 'requestorder:desc' sort: 'requestorder:desc'
}, },
layout: { layout: {
@ -259,7 +262,7 @@ $('#deleteMusic').click(function (e) {
}); });
// filtering/sorting // filtering/sorting
$('.filter,.sort', '.dropdown-menu').click(function (e) { $('.filter', '.dropdown-menu').click(function (e) {
var $this = $(this); var $this = $(this);
$('.fa-check-square', $this.parents('.dropdown-menu:first')).removeClass('fa-check-square').addClass('fa-square-o'); $('.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'); $this.children('.fa').first().removeClass('fa-square-o').addClass('fa-check-square');
@ -268,6 +271,12 @@ $('.filter,.sort', '.dropdown-menu').click(function (e) {
}).fadeIn(); }).fadeIn();
}); });
$('.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');
});
// Report Issue // Report Issue
$(document).on("click", ".dropdownIssue", function (e) { $(document).on("click", ".dropdownIssue", function (e) {

View file

@ -26,12 +26,9 @@
#endregion #endregion
using Nancy; using Nancy;
using Nancy.Linker;
using Nancy.Security; using Nancy.Security;
using Nancy.ViewEngines.Razor; using Nancy.ViewEngines.Razor;
using Ninject;
using PlexRequests.Helpers.Permissions; using PlexRequests.Helpers.Permissions;
using PlexRequests.Store.Repository;
using ISecurityExtensions = PlexRequests.Core.ISecurityExtensions; using ISecurityExtensions = PlexRequests.Core.ISecurityExtensions;
namespace PlexRequests.UI.Helpers namespace PlexRequests.UI.Helpers
@ -50,14 +47,14 @@ namespace PlexRequests.UI.Helpers
private static ISecurityExtensions _security; private static ISecurityExtensions _security;
public static bool HasAnyPermission(this HtmlHelpers helper, int permission, bool authenticated = true) public static bool HasAnyPermission(this HtmlHelpers helper, bool authenticated = true, params Permissions[] permission)
{ {
if (authenticated) if (authenticated)
{ {
return helper.CurrentUser.IsAuthenticated() return helper.CurrentUser.IsAuthenticated()
&& Security.HasPermissions(helper.CurrentUser, (Permissions) permission); && Security.HasAnyPermissions(helper.CurrentUser, permission);
} }
return Security.HasPermissions(helper.CurrentUser, (Permissions)permission); return Security.HasAnyPermissions(helper.CurrentUser, permission);
} }
public static bool DoesNotHavePermission(this HtmlHelpers helper, int permission) public static bool DoesNotHavePermission(this HtmlHelpers helper, int permission)
@ -67,12 +64,21 @@ namespace PlexRequests.UI.Helpers
public static bool IsAdmin(this HtmlHelpers helper, bool isAuthenticated = true) public static bool IsAdmin(this HtmlHelpers helper, bool isAuthenticated = true)
{ {
return HasAnyPermission(helper, (int) Permissions.Administrator, isAuthenticated); return HasAnyPermission(helper, isAuthenticated, Permissions.Administrator);
} }
public static bool IsLoggedIn(this HtmlHelpers helper, NancyContext context) public static bool IsLoggedIn(this HtmlHelpers helper, NancyContext context)
{ {
return Security.IsLoggedIn(context); return Security.IsLoggedIn(context);
} }
public static bool IsPlexUser(this HtmlHelpers helper)
{
return Security.IsPlexUser(helper.CurrentUser);
}
public static bool IsNormalUser(this HtmlHelpers helper)
{
return Security.IsNormalUser(helper.CurrentUser);
}
} }
} }

View file

@ -11,7 +11,7 @@
formAction = "/" + baseUrl.ToHtmlString(); formAction = "/" + baseUrl.ToHtmlString();
} }
var isAdmin = Html.HasAnyPermission((int)Permissions.Administrator) || Html.HasAnyPermission((int)Permissions.ManageRequests); var isAdmin = Html.HasAnyPermission(true, Permissions.Administrator) || Html.HasAnyPermission(Permissions.ManageRequests);
} }
<h1>Details</h1> <h1>Details</h1>

View file

@ -1,19 +1,22 @@
@using Nancy.Security @using Nancy.Security
@using Nancy.Security @using Nancy.Security
@using PlexRequests.Helpers.Permissions
@using PlexRequests.UI.Helpers @using PlexRequests.UI.Helpers
@using PlexRequests.UI.Resources @using PlexRequests.UI.Resources
@{ @{
var baseUrl = Html.GetBaseUrl(); var baseUrl = Html.GetBaseUrl();
var formAction = string.Empty; var formAction = string.Empty;
var isAdmin = Html.HasAnyPermission(true, Permissions.Administrator, Permissions.ManageRequests);
if (!string.IsNullOrEmpty(baseUrl.ToHtmlString())) if (!string.IsNullOrEmpty(baseUrl.ToHtmlString()))
{ {
formAction = "/" + baseUrl.ToHtmlString(); formAction = "/" + baseUrl.ToHtmlString();
} }
} }
<div> <div>
<div hidden="hidden" id="isAdmin" value="@isAdmin"></div>
<h1>@UI.Requests_Title</h1> <h1>@UI.Requests_Title</h1>
<h4>@UI.Requests_Paragraph</h4> <h4>@UI.Requests_Paragraph</h4>
<br /> <br/>
<!-- Nav tabs --> <!-- Nav tabs -->
<ul id="nav-tabs" class="nav nav-tabs" role="tablist"> <ul id="nav-tabs" class="nav nav-tabs" role="tablist">
@ -30,7 +33,7 @@
<li role="presentation"><a href="#MusicTab" aria-controls="profile" role="tab" data-toggle="tab"><i class="fa fa-music"></i> @UI.Requests_AlbumsTabTitle</a></li> <li role="presentation"><a href="#MusicTab" aria-controls="profile" role="tab" data-toggle="tab"><i class="fa fa-music"></i> @UI.Requests_AlbumsTabTitle</a></li>
} }
</ul> </ul>
<br /> <br/>
<!-- Tab panes --> <!-- Tab panes -->
<div class="tab-content contentList"> <div class="tab-content contentList">
@ -38,7 +41,7 @@
<div class="col-sm-12"> <div class="col-sm-12">
<div class="pull-right"> <div class="pull-right">
<div class="btn-group btn-group-separated"> <div class="btn-group btn-group-separated">
@if (Context.CurrentUser.IsAuthenticated()) //TODO replace with IsAdmin @if (isAdmin)
{ {
@if (Model.SearchForMovies) @if (Model.SearchForMovies)
{ {
@ -59,13 +62,34 @@
</div> </div>
<div class="btn-group"> <div class="btn-group">
<a href="#" class="btn btn-primary-outline dropdown-toggle" data-toggle="dropdown" aria-expanded="false"> <a href="#" class="btn btn-primary-outline dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
@if (isAdmin)
{
<span id="filterText">@UI.Requests_Filter_NotApproved</span> <span id="filterText">@UI.Requests_Filter_NotApproved</span>
}
else
{
<span id="filterText">@UI.Requests_Filter_All</span>
}
<i class="fa fa-filter"></i> <i class="fa fa-filter"></i>
</a> </a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
@if (!isAdmin)
{
<li><a href="#" class="filter" data-filter="all"><i class="fa fa-check-square"></i> @UI.Requests_Filter_All</a></li>
}
else
{
<li><a href="#" class="filter" data-filter="all"><i class="fa fa-square-o"></i> @UI.Requests_Filter_All</a></li> <li><a href="#" class="filter" data-filter="all"><i class="fa fa-square-o"></i> @UI.Requests_Filter_All</a></li>
}
<li><a href="#" class="filter" data-filter=".approved-true"><i class="fa fa-square-o"></i> @UI.Requests_Filter_Approved</a></li> <li><a href="#" class="filter" data-filter=".approved-true"><i class="fa fa-square-o"></i> @UI.Requests_Filter_Approved</a></li>
@if (isAdmin)
{
<li><a href="#" class="filter" data-filter=".approved-false"><i class="fa fa-check-square"></i> @UI.Requests_Filter_NotApproved</a></li> <li><a href="#" class="filter" data-filter=".approved-false"><i class="fa fa-check-square"></i> @UI.Requests_Filter_NotApproved</a></li>
}
else
{
<li><a href="#" class="filter" data-filter=".approved-false"><i class="fa fa-square-o"></i> @UI.Requests_Filter_NotApproved</a></li>
}
<li><a href="#" class="filter" data-filter=".available-true"><i class="fa fa-square-o"></i> @UI.Requests_Filter_Available</a></li> <li><a href="#" class="filter" data-filter=".available-true"><i class="fa fa-square-o"></i> @UI.Requests_Filter_Available</a></li>
<li><a href="#" class="filter" data-filter=".available-false"><i class="fa fa-square-o"></i> @UI.Requests_Filter_NotAvailable</a></li> <li><a href="#" class="filter" data-filter=".available-false"><i class="fa fa-square-o"></i> @UI.Requests_Filter_NotAvailable</a></li>
<li><a href="#" class="filter" data-filter=".released-true"><i class="fa fa-square-o"></i> @UI.Requests_Filter_Released</a></li> <li><a href="#" class="filter" data-filter=".released-true"><i class="fa fa-square-o"></i> @UI.Requests_Filter_Released</a></li>
@ -93,8 +117,8 @@
<!-- Movie tab --> <!-- Movie tab -->
<div role="tabpanel" class="tab-pane active" id="MoviesTab"> <div role="tabpanel" class="tab-pane active" id="MoviesTab">
<br /> <br/>
<br /> <br/>
<!-- Movie content --> <!-- Movie content -->
<div id="movieList"> <div id="movieList">
</div> </div>
@ -106,8 +130,8 @@
<!-- TV tab --> <!-- TV tab -->
<div role="tabpanel" class="tab-pane" id="TvShowTab"> <div role="tabpanel" class="tab-pane" id="TvShowTab">
<br /> <br/>
<br /> <br/>
<!-- TV content --> <!-- TV content -->
<div id="tvList"> <div id="tvList">
</div> </div>
@ -119,8 +143,8 @@
<!-- Music tab --> <!-- Music tab -->
<div role="tabpanel" class="tab-pane" id="MusicTab"> <div role="tabpanel" class="tab-pane" id="MusicTab">
<br /> <br/>
<br /> <br/>
<!-- TV content --> <!-- TV content -->
<div id="musicList"> <div id="musicList">
</div> </div>
@ -168,9 +192,14 @@
<a href="http://www.imdb.com/title/{{imdb}}/" target="_blank"> <a href="http://www.imdb.com/title/{{imdb}}/" target="_blank">
<h4 class="request-title">{{title}} ({{year}})</h4> <h4 class="request-title">{{title}} ({{year}})</h4>
</a> </a>
<span class="label label-success">{{status}}</span>
</div> </div>
<br /> <br />
{{#if_eq type "tv"}}
<span>@UI.Search_TV_Show_Status: </span>
{{else}}
<span>@UI.Search_Movie_Status: </span>
{{/if_eq}}
<span class="label label-success">{{status}}</span>
{{#if denied}} {{#if denied}}
<div> <div>
Denied: <i style="color:red;" class="fa fa-check"></i> Denied: <i style="color:red;" class="fa fa-check"></i>

View file

@ -69,7 +69,7 @@
</li> </li>
} }
@*@if (Context.Request.Session[SessionKeys.UsernameKey] != null && !Context.CurrentUser.IsAuthenticated())*@ @*@if (Context.Request.Session[SessionKeys.UsernameKey] != null && !Context.CurrentUser.IsAuthenticated())*@
else if (Context.CurrentUser != null && Context.CurrentUser.IsAuthenticated()) // Logged in but not admin else if (Html.IsNormalUser()) // Logged in but not admin
{ {
<li class="dropdown"> <li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><i class="fa fa-user"></i> @UI.Layout_Welcome @Context.CurrentUser.UserName <span class="caret"></span></a> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><i class="fa fa-user"></i> @UI.Layout_Welcome @Context.CurrentUser.UserName <span class="caret"></span></a>
@ -79,6 +79,16 @@
</ul> </ul>
</li> </li>
}
else if (Html.IsPlexUser()) // Logged in but not admin
{
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"><i class="fa fa-user"></i> @UI.Layout_Welcome @Context.CurrentUser.UserName <span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li><a href="@url/logout"><i class="fa fa-sign-out"></i> @UI.Layout_Logout</a></li>
</ul>
</li>
} }
<li class="dropdown"> <li class="dropdown">