From 4c6d4b9326c094f2e66f627083ccf875a01188a2 Mon Sep 17 00:00:00 2001 From: Nikolaj Brask-Nielsen Date: Sun, 5 Dec 2021 13:27:15 +0100 Subject: [PATCH] Added notifications toggle to user groups (#10450) * Added notifications toggle * Review: Update DatabaseDataCreator.cs Co-authored-by: Ronald Barendse * Added migration * Fix new file was excluded * adapt DB migration Co-authored-by: Ronald Barendse Co-authored-by: Michael --- .../Migrations/Install/DatabaseDataCreator.cs | 6 ++--- .../Migrations/Upgrade/UmbracoPlan.cs | 5 +++- .../AddDefaultForNotificationsToggle.cs | 15 ++++++++++++ src/Umbraco.Core/Umbraco.Core.csproj | 1 + src/Umbraco.Web.UI/Umbraco/config/lang/da.xml | 1 + src/Umbraco.Web.UI/Umbraco/config/lang/en.xml | 1 + .../Umbraco/config/lang/en_us.xml | 1 + src/Umbraco.Web/Actions/ActionNotify.cs | 24 +++++++++++++++++++ .../Trees/ContentTreeController.cs | 7 +----- src/Umbraco.Web/Umbraco.Web.csproj | 1 + 10 files changed, 52 insertions(+), 10 deletions(-) create mode 100644 src/Umbraco.Core/Migrations/Upgrade/V_8_18_0/AddDefaultForNotificationsToggle.cs create mode 100644 src/Umbraco.Web/Actions/ActionNotify.cs diff --git a/src/Umbraco.Core/Migrations/Install/DatabaseDataCreator.cs b/src/Umbraco.Core/Migrations/Install/DatabaseDataCreator.cs index bd7a96f6e7..d9cc22d26d 100644 --- a/src/Umbraco.Core/Migrations/Install/DatabaseDataCreator.cs +++ b/src/Umbraco.Core/Migrations/Install/DatabaseDataCreator.cs @@ -188,9 +188,9 @@ namespace Umbraco.Core.Migrations.Install private void CreateUserGroupData() { - _database.Insert(Constants.DatabaseSchema.Tables.UserGroup, "id", false, new UserGroupDto { Id = 1, StartMediaId = -1, StartContentId = -1, Alias = Constants.Security.AdminGroupAlias, Name = "Administrators", DefaultPermissions = "CADMOSKTPIURZ:5F7ï", CreateDate = DateTime.Now, UpdateDate = DateTime.Now, Icon = "icon-medal" }); - _database.Insert(Constants.DatabaseSchema.Tables.UserGroup, "id", false, new UserGroupDto { Id = 2, StartMediaId = -1, StartContentId = -1, Alias = Constants.Security.WriterGroupAlias, Name = "Writers", DefaultPermissions = "CAH:F", CreateDate = DateTime.Now, UpdateDate = DateTime.Now, Icon = "icon-edit" }); - _database.Insert(Constants.DatabaseSchema.Tables.UserGroup, "id", false, new UserGroupDto { Id = 3, StartMediaId = -1, StartContentId = -1, Alias = Constants.Security.EditorGroupAlias, Name = "Editors", DefaultPermissions = "CADMOSKTPUZ:5Fï", CreateDate = DateTime.Now, UpdateDate = DateTime.Now, Icon = "icon-tools" }); + _database.Insert(Constants.DatabaseSchema.Tables.UserGroup, "id", false, new UserGroupDto { Id = 1, StartMediaId = -1, StartContentId = -1, Alias = Constants.Security.AdminGroupAlias, Name = "Administrators", DefaultPermissions = "CADMOSKTPIURZ:5F7ïN", CreateDate = DateTime.Now, UpdateDate = DateTime.Now, Icon = "icon-medal" }); + _database.Insert(Constants.DatabaseSchema.Tables.UserGroup, "id", false, new UserGroupDto { Id = 2, StartMediaId = -1, StartContentId = -1, Alias = Constants.Security.WriterGroupAlias, Name = "Writers", DefaultPermissions = "CAH:FN", CreateDate = DateTime.Now, UpdateDate = DateTime.Now, Icon = "icon-edit" }); + _database.Insert(Constants.DatabaseSchema.Tables.UserGroup, "id", false, new UserGroupDto { Id = 3, StartMediaId = -1, StartContentId = -1, Alias = Constants.Security.EditorGroupAlias, Name = "Editors", DefaultPermissions = "CADMOSKTPUZ:5FïN", CreateDate = DateTime.Now, UpdateDate = DateTime.Now, Icon = "icon-tools" }); _database.Insert(Constants.DatabaseSchema.Tables.UserGroup, "id", false, new UserGroupDto { Id = 4, StartMediaId = -1, StartContentId = -1, Alias = Constants.Security.TranslatorGroupAlias, Name = "Translators", DefaultPermissions = "AF", CreateDate = DateTime.Now, UpdateDate = DateTime.Now, Icon = "icon-globe" }); _database.Insert(Constants.DatabaseSchema.Tables.UserGroup, "id", false, new UserGroupDto { Id = 5, StartMediaId = -1, StartContentId = -1, Alias = Constants.Security.SensitiveDataGroupAlias, Name = "Sensitive data", DefaultPermissions = "", CreateDate = DateTime.Now, UpdateDate = DateTime.Now, Icon = "icon-lock" }); } diff --git a/src/Umbraco.Core/Migrations/Upgrade/UmbracoPlan.cs b/src/Umbraco.Core/Migrations/Upgrade/UmbracoPlan.cs index a557c7e78a..895fd1946b 100644 --- a/src/Umbraco.Core/Migrations/Upgrade/UmbracoPlan.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/UmbracoPlan.cs @@ -211,8 +211,11 @@ namespace Umbraco.Core.Migrations.Upgrade // to 8.17.0 To("{153865E9-7332-4C2A-9F9D-F20AEE078EC7}"); - //FINAL + // to 8.18.0 To("{8BAF5E6C-DCB7-41AE-824F-4215AE4F1F98}"); + To("{AD3D3B7F-8E74-45A4-85DB-7FFAD57F9243}"); + + //FINAL } } } diff --git a/src/Umbraco.Core/Migrations/Upgrade/V_8_18_0/AddDefaultForNotificationsToggle.cs b/src/Umbraco.Core/Migrations/Upgrade/V_8_18_0/AddDefaultForNotificationsToggle.cs new file mode 100644 index 0000000000..0173600584 --- /dev/null +++ b/src/Umbraco.Core/Migrations/Upgrade/V_8_18_0/AddDefaultForNotificationsToggle.cs @@ -0,0 +1,15 @@ +namespace Umbraco.Core.Migrations.Upgrade.V_8_18_0 +{ + public class AddDefaultForNotificationsToggle : MigrationBase + { + public AddDefaultForNotificationsToggle(IMigrationContext context) : base(context) + { + } + + public override void Migrate() + { + var updateSQL = Sql($"UPDATE {Constants.DatabaseSchema.Tables.UserGroup} SET userGroupDefaultPermissions = userGroupDefaultPermissions + 'N' WHERE userGroupAlias IN ('admin', 'writer', 'editor')"); + Execute.Sql(updateSQL.SQL).Do(); + } + } +} diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index cf5ffc9d0c..a0e0122be0 100755 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -151,6 +151,7 @@ + diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml index 2dfec4523c..07752530fa 100644 --- a/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml +++ b/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml @@ -85,6 +85,7 @@ Tillad adgang til at oversætte en node Tillad adgang til at gemme en node Tillad adgang til at oprette en indholdsskabelon + Tillad adgang til at oprette notificeringer for noder Indhold diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml index 0b3cf3438e..f5f1f8ac4e 100644 --- a/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml +++ b/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml @@ -82,6 +82,7 @@ Allow access to translate a node Allow access to save a node Allow access to create a Content Template + Allow access to setup notifications for content nodes Content diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml index f059207bf6..5cfd176504 100644 --- a/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml +++ b/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml @@ -83,6 +83,7 @@ Allow access to translate a node Allow access to save a node Allow access to create a Content Template + Allow access to setup notifications for content nodes Content diff --git a/src/Umbraco.Web/Actions/ActionNotify.cs b/src/Umbraco.Web/Actions/ActionNotify.cs new file mode 100644 index 0000000000..a8f6a4c2a2 --- /dev/null +++ b/src/Umbraco.Web/Actions/ActionNotify.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Umbraco.Core; + +namespace Umbraco.Web.Actions +{ + public class ActionNotify : IAction + { + public char Letter => 'N'; + + public bool ShowInNotifier => false; + + public bool CanBePermissionAssigned => true; + + public string Icon => "megaphone"; + + public string Alias => "notify"; + + public string Category => Constants.Conventions.PermissionCategories.ContentCategory; + } +} diff --git a/src/Umbraco.Web/Trees/ContentTreeController.cs b/src/Umbraco.Web/Trees/ContentTreeController.cs index c2c938249e..e6b4f45d22 100644 --- a/src/Umbraco.Web/Trees/ContentTreeController.cs +++ b/src/Umbraco.Web/Trees/ContentTreeController.cs @@ -242,12 +242,7 @@ namespace Umbraco.Web.Trees if (EmailSender.CanSendRequiredEmail) { - menu.Items.Add(new MenuItem("notify", Services.TextService) - { - Icon = "megaphone", - SeparatorBefore = true, - OpensDialog = true - }); + AddActionNode(item, menu, true, opensDialog: true); } if((item is DocumentEntitySlim documentEntity && documentEntity.IsContainer) == false) diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj index 73065304f2..c702c99017 100644 --- a/src/Umbraco.Web/Umbraco.Web.csproj +++ b/src/Umbraco.Web/Umbraco.Web.csproj @@ -136,6 +136,7 @@ Properties\SolutionInfo.cs +