add set client tag to webfront profile as button
This commit is contained in:
parent
f97e266c24
commit
fa1567d3f5
@ -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>()))
|
||||||
|
@ -25,12 +25,21 @@
|
|||||||
@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 value="@key.Replace("!selected!", "")" selected>
|
||||||
|
<color-code value="@item"></color-code>
|
||||||
</option>
|
</option>
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<option value="@key">
|
||||||
|
<color-code value="@item"></color-code>
|
||||||
|
</option>
|
||||||
|
}
|
||||||
|
}
|
||||||
</select>
|
</select>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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"],
|
||||||
|
Loading…
Reference in New Issue
Block a user