Add lock menu icon for tempbanned players

issue #62
This commit is contained in:
RaidMax 2019-02-24 19:07:56 -06:00
parent 1457b843e2
commit 0c527a5f65
3 changed files with 45 additions and 7 deletions

View File

@ -2,7 +2,6 @@
using SharedLibraryCore.Database; using SharedLibraryCore.Database;
using SharedLibraryCore.Database.Models; using SharedLibraryCore.Database.Models;
using SharedLibraryCore.Dtos; using SharedLibraryCore.Dtos;
using SharedLibraryCore.Interfaces;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -14,11 +13,21 @@ namespace SharedLibraryCore.Services
{ {
private static List<Func<int, Task<List<ProfileMeta>>>> _metaActions = new List<Func<int, Task<List<ProfileMeta>>>>(); private static List<Func<int, Task<List<ProfileMeta>>>> _metaActions = new List<Func<int, Task<List<ProfileMeta>>>>();
/// <summary>
/// adds or updates meta key and value to the database
/// </summary>
/// <param name="metaKey">key of meta data</param>
/// <param name="metaValue">value of the meta data</param>
/// <param name="client">client to save the meta for</param>
/// <returns></returns>
public async Task AddPersistentMeta(string metaKey, string metaValue, EFClient client) public async Task AddPersistentMeta(string metaKey, string metaValue, EFClient client)
{ {
using (var ctx = new DatabaseContext()) using (var ctx = new DatabaseContext())
{ {
var existingMeta = await ctx.EFMeta.FirstOrDefaultAsync(_meta => _meta.ClientId == client.ClientId && _meta.Key == metaKey); var existingMeta = await ctx.EFMeta
.Where(_meta => _meta.Key == metaKey)
.Where(_meta => _meta.ClientId == client.ClientId)
.FirstOrDefaultAsync();
if (existingMeta != null) if (existingMeta != null)
{ {
@ -41,6 +50,12 @@ namespace SharedLibraryCore.Services
} }
} }
/// <summary>
/// retrieves meta data for given client and key
/// </summary>
/// <param name="metaKey">key to retrieve value for</param>
/// <param name="client">client to retrieve meta for</param>
/// <returns></returns>
public async Task<EFMeta> GetPersistentMeta(string metaKey, EFClient client) public async Task<EFMeta> GetPersistentMeta(string metaKey, EFClient client)
{ {
using (var ctx = new DatabaseContext(disableTracking:true)) using (var ctx = new DatabaseContext(disableTracking:true))
@ -52,11 +67,20 @@ namespace SharedLibraryCore.Services
} }
} }
/// <summary>
/// aads a meta task to the runtime meta list
/// </summary>
/// <param name="metaAction"></param>
public static void AddRuntimeMeta(Func<int, Task<List<ProfileMeta>>> metaAction) public static void AddRuntimeMeta(Func<int, Task<List<ProfileMeta>>> metaAction)
{ {
_metaActions.Add(metaAction); _metaActions.Add(metaAction);
} }
/// <summary>
/// retrieves all the runtime meta information for given client idea
/// </summary>
/// <param name="clientId">id of the client</param>
/// <returns></returns>
public static async Task<List<ProfileMeta>> GetRuntimeMeta(int clientId) public static async Task<List<ProfileMeta>> GetRuntimeMeta(int clientId)
{ {
var meta = new List<ProfileMeta>(); var meta = new List<ProfileMeta>();

View File

@ -4,10 +4,11 @@
string shortCode = match == string.Empty ? "?" : match; string shortCode = match == string.Empty ? "?" : match;
var loc = SharedLibraryCore.Utilities.CurrentLocalization.LocalizationIndex; var loc = SharedLibraryCore.Utilities.CurrentLocalization.LocalizationIndex;
string gravatarUrl = Model.Meta.FirstOrDefault(m => m.Key == "GravatarEmail")?.Value; string gravatarUrl = Model.Meta.FirstOrDefault(m => m.Key == "GravatarEmail")?.Value;
bool isTempBanned = Model.ActivePenaltyType == "TempBan";
} }
<div id="profile_wrapper" class="row d-flex d-sm-inline-flex justify-content-center justify-content-left pb-3"> <div id="profile_wrapper" class="row d-flex d-sm-inline-flex justify-content-center justify-content-left pb-3">
<div class="mr-auto ml-auto ml-sm-0 mr-sm-0"> <div class="mr-auto ml-auto ml-sm-0 mr-sm-0">
<div id="profile_avatar" class="mb-4 mb-md-0 text-center level-bgcolor-@Model.LevelInt" style="background-image:url('@string.Format("https://gravatar.com/avatar/{0}?size=168&default=blank&rating=pg", gravatarUrl)')"> <div id="profile_avatar" class="mb-4 mb-md-0 text-center level-bgcolor-@Model.LevelInt @(isTempBanned ? "penalties-bgcolor-tempban" : "")" style="background-image:url('@string.Format("https://gravatar.com/avatar/{0}?size=168&default=blank&rating=pg", gravatarUrl)')">
@if (string.IsNullOrEmpty(gravatarUrl)) @if (string.IsNullOrEmpty(gravatarUrl))
{ {
<span class="profile-shortcode">@shortCode</span> <span class="profile-shortcode">@shortCode</span>
@ -43,9 +44,17 @@
} }
@if (Model.LevelInt < (int)ViewBag.User.Level && Model.HasActivePenalty) @if (Model.LevelInt < (int)ViewBag.User.Level && Model.HasActivePenalty)
{
@if (isTempBanned)
{
<div id="profile_action_ban_btn" class="profile-action oi oi-lock-unlocked text-success h3 ml-2" title="Ban Client" data-action="ban" aria-hidden="true"></div>
<div id="profile_action_unban_btn" class="profile-action oi oi-lock-locked penalties-color-tempban h3 ml-2" title="Unban Client" data-action="unban" aria-hidden="true"></div>
}
else
{ {
<div id="profile_action_unban_btn" class="profile-action oi oi-lock-locked text-danger h3 ml-2" title="Unban Client" data-action="unban" aria-hidden="true"></div> <div id="profile_action_unban_btn" class="profile-action oi oi-lock-locked text-danger h3 ml-2" title="Unban Client" data-action="unban" aria-hidden="true"></div>
} }
}
</div> </div>
@ -73,7 +82,7 @@
} }
</div> </div>
<div id="profile_level" class="text-muted mb-2"> <div id="profile_level" class="text-muted mb-2">
<h5><span class="level-color-@Model.LevelInt"><strong>@Model.Level</strong></span></h5> <h5><span class="level-color-@Model.LevelInt @(isTempBanned ? "penalties-color-tempban" : "")"><strong>@Model.Level @(isTempBanned ? $"&emdash; {loc["WEBFRONT_PROFILE_TEMPBAN"]}" : "")</strong></span></h5>
</div> </div>
<div id="profile_time_played" class="text-muted"> <div id="profile_time_played" class="text-muted">
@loc["WEBFRONT_PROFILE_PLAYER"] <span class="text-primary">@Model.TimePlayed</span> @loc["GLOBAL_TIME_HOURS"] @loc["WEBFRONT_PROFILE_PLAYER"] <span class="text-primary">@Model.TimePlayed</span> @loc["GLOBAL_TIME_HOURS"]

View File

@ -111,8 +111,13 @@
} }
.penalties-color-tempban { .penalties-color-tempban {
color: #fd9c38; color: #fe7e4c;
color: rgba(253, 139, 22, 0.85); color: rgba(254, 126, 76, 0.85);
}
.penalties-bgcolor-tempban {
background-color: #fe7e4c;
background-color: rgba(254, 126, 76, 0.85);
} }
.penalties-color-flag { .penalties-color-flag {