mirror of
https://github.com/aljazceru/btcpayserver.git
synced 2025-12-17 14:04:26 +01:00
Allow disabling notifications per user and disabling specific notifications per user (#1991)
* Allow disabling notifications per user and disabling specific notifications per use closes #1974 * Add disable notifs for all users * fix term generator for notifications * sow checkboxes instead of multiselect when js is enabled * remove js dependency * fix notif conditions
This commit is contained in:
68
BTCPayServer/Controllers/ManageController.Notifications.cs
Normal file
68
BTCPayServer/Controllers/ManageController.Notifications.cs
Normal file
@@ -0,0 +1,68 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using BTCPayServer.Contracts;
|
||||
using BTCPayServer.Models;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||
|
||||
namespace BTCPayServer.Controllers
|
||||
{
|
||||
public partial class ManageController
|
||||
{
|
||||
[HttpGet("notifications")]
|
||||
public async Task<IActionResult> NotificationSettings([FromServices] IEnumerable<INotificationHandler> notificationHandlers)
|
||||
{
|
||||
var user = await _userManager.GetUserAsync(User);
|
||||
if (user.DisabledNotifications == "all")
|
||||
{
|
||||
return View(new NotificationSettingsViewModel() {All = true});
|
||||
}
|
||||
var disabledNotifications =
|
||||
user.DisabledNotifications?.Split(';', StringSplitOptions.RemoveEmptyEntries)?.ToList() ??
|
||||
new List<string>();
|
||||
var notifications = notificationHandlers.SelectMany(handler => handler.Meta.Select(tuple =>
|
||||
new SelectListItem(tuple.name, tuple.identifier,
|
||||
disabledNotifications.Contains(tuple.identifier, StringComparer.InvariantCultureIgnoreCase))))
|
||||
.ToList();
|
||||
|
||||
return View(new NotificationSettingsViewModel() {DisabledNotifications = notifications});
|
||||
}
|
||||
|
||||
[HttpPost("notifications")]
|
||||
public async Task<IActionResult> NotificationSettings(NotificationSettingsViewModel vm, string command)
|
||||
{
|
||||
var user = await _userManager.GetUserAsync(User);
|
||||
if (command == "disable-all")
|
||||
{
|
||||
user.DisabledNotifications = "all";
|
||||
}
|
||||
else if (command == "enable-all")
|
||||
{
|
||||
user.DisabledNotifications = "";
|
||||
}
|
||||
else if (command == "update")
|
||||
{
|
||||
var disabled = vm.DisabledNotifications.Where(item => item.Selected).Select(item => item.Value)
|
||||
.ToArray();
|
||||
user.DisabledNotifications = disabled.Any() is true
|
||||
? string.Join(';', disabled) + ";"
|
||||
: string.Empty;
|
||||
}
|
||||
|
||||
await _userManager.UpdateAsync(user);
|
||||
TempData.SetStatusMessageModel(new StatusMessageModel()
|
||||
{
|
||||
Message = "Updated successfully.", Severity = StatusMessageModel.StatusSeverity.Success
|
||||
});
|
||||
return RedirectToAction("NotificationSettings");
|
||||
}
|
||||
|
||||
public class NotificationSettingsViewModel
|
||||
{
|
||||
public bool All { get; set; }
|
||||
public List<SelectListItem> DisabledNotifications { get; set; }
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user