add set client tag to webfront profile as button

This commit is contained in:
RaidMax 2022-07-19 20:37:48 -05:00
parent f97e266c24
commit fa1567d3f5
3 changed files with 82 additions and 6 deletions

View File

@ -2,7 +2,9 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using System.Linq; using System.Linq;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Data.Models;
using Data.Models.Client; using Data.Models.Client;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
@ -12,7 +14,6 @@ using SharedLibraryCore.Configuration;
using SharedLibraryCore.Dtos; using SharedLibraryCore.Dtos;
using SharedLibraryCore.Helpers; using SharedLibraryCore.Helpers;
using SharedLibraryCore.Interfaces; using SharedLibraryCore.Interfaces;
using WebfrontCore.Permissions;
using WebfrontCore.ViewModels; using WebfrontCore.ViewModels;
namespace WebfrontCore.Controllers namespace WebfrontCore.Controllers
@ -20,6 +21,7 @@ namespace WebfrontCore.Controllers
public class ActionController : BaseController public class ActionController : BaseController
{ {
private readonly ApplicationConfiguration _appConfig; private readonly ApplicationConfiguration _appConfig;
private readonly IMetaServiceV2 _metaService;
private readonly string _banCommandName; private readonly string _banCommandName;
private readonly string _tempbanCommandName; private readonly string _tempbanCommandName;
private readonly string _unbanCommandName; private readonly string _unbanCommandName;
@ -29,11 +31,13 @@ namespace WebfrontCore.Controllers
private readonly string _flagCommandName; private readonly string _flagCommandName;
private readonly string _unflagCommandName; private readonly string _unflagCommandName;
private readonly string _setLevelCommandName; private readonly string _setLevelCommandName;
private readonly string _setClientTagCommandName;
public ActionController(IManager manager, IEnumerable<IManagerCommand> registeredCommands, public ActionController(IManager manager, IEnumerable<IManagerCommand> registeredCommands,
ApplicationConfiguration appConfig) : base(manager) ApplicationConfiguration appConfig, IMetaServiceV2 metaService) : base(manager)
{ {
_appConfig = appConfig; _appConfig = appConfig;
_metaService = metaService;
foreach (var cmd in registeredCommands) foreach (var cmd in registeredCommands)
{ {
@ -69,6 +73,9 @@ namespace WebfrontCore.Controllers
case "OfflineMessageCommand": case "OfflineMessageCommand":
_offlineMessageCommandName = cmd.Name; _offlineMessageCommandName = cmd.Name;
break; break;
case "SetClientTagCommand":
_setClientTagCommandName = cmd.Name;
break;
} }
} }
} }
@ -582,6 +589,57 @@ namespace WebfrontCore.Controllers
})); }));
} }
public async Task<IActionResult> SetClientTagForm(int id, CancellationToken token)
{
var tags = await _metaService.GetPersistentMetaValue<List<LookupValue<string>>>(EFMeta.ClientTagNameV2,
token);
var existingTag = await _metaService.GetPersistentMetaByLookup(EFMeta.ClientTagV2,
EFMeta.ClientTagNameV2, id, Manager.CancellationToken);
var info = new ActionInfo
{
ActionButtonLabel = Localization["WEBFRONT_ACTION_SET_CLIENT_TAG_SUBMIT"],
Name = Localization["WEBFRONT_ACTION_SET_CLIENT_TAG_TITLE"],
Inputs = new List<InputInfo>
{
new()
{
Name = "clientTag",
Type = "select",
Label = Localization["WEBFRONT_ACTION_SET_CLIENT_TAG_TITLE"],
Values = tags.ToDictionary(
item => item.Value == existingTag?.Value ? $"!selected!{item.Value}" : item.Value,
item => item.Value)
}
},
Action = nameof(SetClientTag),
ShouldRefresh = true
};
return View("_ActionForm", info);
}
public async Task<IActionResult> SetClientTag(int targetId, string clientTag)
{
if (targetId <= 0 || string.IsNullOrWhiteSpace(clientTag))
{
return Json(new[]
{
new CommandResponseInfo
{
Response = Localization["WEBFRONT_ACTION_SET_CLIENT_TAG_NONE"]
}
});
}
var server = Manager.GetServers().First();
return await Task.FromResult(RedirectToAction("Execute", "Console", new
{
serverId = server.EndPoint,
command =
$"{_appConfig.CommandPrefix}{_setClientTagCommandName} @{targetId} {clientTag}"
}));
}
private Dictionary<string, string> GetPresetPenaltyReasons() => _appConfig.PresetPenaltyReasons.Values private Dictionary<string, string> GetPresetPenaltyReasons() => _appConfig.PresetPenaltyReasons.Values
.Concat(_appConfig.GlobalRules) .Concat(_appConfig.GlobalRules)
.Concat(_appConfig.Servers.SelectMany(server => server.Rules ?? Array.Empty<string>())) .Concat(_appConfig.Servers.SelectMany(server => server.Rules ?? Array.Empty<string>()))

View File

@ -25,11 +25,20 @@
@if (inputType == "select") @if (inputType == "select")
{ {
<select name="@input.Name" class="form-control" aria-label="@input.Name" aria-describedby="basic-addon-@input.Name"> <select name="@input.Name" class="form-control" aria-label="@input.Name" aria-describedby="basic-addon-@input.Name">
@foreach (var item in input.Values) @foreach (var (key, item) in input.Values)
{ {
<option value="@item.Key"> if (key.StartsWith("!selected!"))
<color-code value="@item.Value"></color-code> {
</option> <option value="@key.Replace("!selected!", "")" selected>
<color-code value="@item"></color-code>
</option>
}
else
{
<option value="@key">
<color-code value="@item"></color-code>
</option>
}
} }
</select> </select>
} }

View File

@ -282,6 +282,15 @@
if (ViewBag.Authorized) if (ViewBag.Authorized)
{ {
menuItems.Items.Add(new SideContextMenuItem
{
Title = ViewBag.Localization["WEBFRONT_ACTION_SET_CLIENT_TAG_TITLE"],
IsButton = true,
Reference = "SetClientTag",
Icon = "oi-tag",
EntityId = Model.ClientId
});
menuItems.Items.Add(new SideContextMenuItem menuItems.Items.Add(new SideContextMenuItem
{ {
Title = ViewBag.Localization["WEBFRONT_PROFILE_CONTEXT_MENU_ACTION_MESSAGE"], Title = ViewBag.Localization["WEBFRONT_PROFILE_CONTEXT_MENU_ACTION_MESSAGE"],