From 4e5549eba1a6b0963b19dfa1f67bcc9abf3da683 Mon Sep 17 00:00:00 2001 From: Cory Colt Date: Sat, 2 May 2020 13:32:21 -0600 Subject: [PATCH 1/2] Added functionality to remove any records in the perplexUmbracoUser table which belong to a folder that is being deleted. --- .../Controllers/PerplexUmbracoFormController.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Perplex.Umbraco.Forms/Controllers/PerplexUmbracoFormController.cs b/Perplex.Umbraco.Forms/Controllers/PerplexUmbracoFormController.cs index 19aa2b9..be56d13 100644 --- a/Perplex.Umbraco.Forms/Controllers/PerplexUmbracoFormController.cs +++ b/Perplex.Umbraco.Forms/Controllers/PerplexUmbracoFormController.cs @@ -265,6 +265,10 @@ public HttpResponseMessage DeleteFolder(string folderId, bool deleteForms) } } + // delete any association between a user and this folder being deleted + try { Sql.ExecuteSql("DELETE FROM [perplexUmbracoUser] WHERE formsStartNode = @formsStartNode", parameters: new { formsStartNode = folderId }); } + catch (Exception) { } + PerplexFolder parentFolder = folder.GetParent(); // Remove this folder From 48a42fcf0ba246ecad237b15cd914590f77fd147 Mon Sep 17 00:00:00 2001 From: Cory Colt Date: Sat, 2 May 2020 15:19:00 -0600 Subject: [PATCH 2/2] Updated UmbracoCms.Core package to v7.15.4 and UmbracoForms.Core to v7.4.0. Added new class and functionality to associate users with a newly created Perplex folders and to remove this association when the folder is deleted. --- .../Code/StartNodeUserPermissions.cs | 83 +++++++++ .../PerplexUmbracoFormController.cs | 13 +- .../Perplex.Umbraco.Forms.csproj | 176 +++++++++--------- Perplex.Umbraco.Forms/app.config | 20 +- Perplex.Umbraco.Forms/packages.config | 51 ++--- 5 files changed, 226 insertions(+), 117 deletions(-) create mode 100644 Perplex.Umbraco.Forms/Code/StartNodeUserPermissions.cs diff --git a/Perplex.Umbraco.Forms/Code/StartNodeUserPermissions.cs b/Perplex.Umbraco.Forms/Code/StartNodeUserPermissions.cs new file mode 100644 index 0000000..4078447 --- /dev/null +++ b/Perplex.Umbraco.Forms/Code/StartNodeUserPermissions.cs @@ -0,0 +1,83 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Umbraco.Core.Models.Membership; +using Umbraco.Web; + +namespace PerplexUmbraco.Forms.Code +{ + public static class StartNodeUserPermissions + { + /// + /// Applies Form Start Node permissions to collection of users + /// + /// Collection of users to iterate over and apply permissions to + /// Perplex folder to use for assigning access + /// + /// In order for this to assign the user permissions to the Perplex Folder Start Node, then the + /// user must have a matching Start Content Node name that matches the Perplex Folder name. + /// Ex. User has been assigned a Start Content Node of "Testing"; a Perplex folder is created + /// with the same name "Testing" so the user will be automatically assigned this folder as a + /// Start Form Node within Perplex + /// + public static void ApplyFolderPermissionsToUsers(IEnumerable users, PerplexFolder folder) + { + // iterate over each user + foreach (var user in users) + { + // get the user's start content nodes + List userStartNodes = GetStartContentNodesByUser(user); + + // iterate over the user's start content nodes + foreach (var node in userStartNodes) + { + // check to see if the name of the perplex folder matches the name of the user's content start node + if (folder.Name.Trim().ToLower() == node.Name.ToString().Trim().ToLower()) + { + // add the folder to the list of user's Form Start Nodes + // delete any association between a user and this folder being deleted + try { Sql.ExecuteSql("INSERT INTO [perplexUmbracoUser] (userId, formsStartNode) VALUES (@userId, @formsStartNode)", parameters: new { userId = user.Id, formsStartNode = folder.Id }); } + catch (Exception) { } + } + } + } + } + + /// + /// Deletes the assocation of the form being deleted with any users in the perplexUmbracoUser table + /// + /// GUID of the folder being deleted + public static void DeleteUserAssociationWithFolder(string folderId) + { + try { Sql.ExecuteSql("DELETE FROM [perplexUmbracoUser] WHERE formsStartNode = @formsStartNode", parameters: new { formsStartNode = folderId }); } + catch (Exception) { } + } + + /// + /// Gets all the content start nodes associated with a specific IUser + /// + /// IUser account to retrieve content start nodes + /// + public static List GetStartContentNodesByUser(IUser user) + { + Umbraco.Web.UmbracoHelper helper = new UmbracoHelper(UmbracoContext.Current); + List contentNodes = new List(); + + foreach (int id in user.StartContentIds) + { + var node = helper.ContentQuery.Content(id); + + // only add this node to the collection if it's of type www_section + if (node.DocumentTypeAlias.ToLower() == "www_section") + { + // add the content node to the collection + contentNodes.Add(node); + } + } + + return contentNodes; + } + } +} diff --git a/Perplex.Umbraco.Forms/Controllers/PerplexUmbracoFormController.cs b/Perplex.Umbraco.Forms/Controllers/PerplexUmbracoFormController.cs index be56d13..b781eae 100644 --- a/Perplex.Umbraco.Forms/Controllers/PerplexUmbracoFormController.cs +++ b/Perplex.Umbraco.Forms/Controllers/PerplexUmbracoFormController.cs @@ -11,11 +11,13 @@ using System.Web.Hosting; using System.Web.Http; using Umbraco.Core.IO; +using Umbraco.Core.Models.Membership; using Umbraco.Forms.Core.Providers; using Umbraco.Forms.Data; using Umbraco.Forms.Data.Storage; using Umbraco.Forms.Mvc.Models.Backoffice; using Umbraco.Forms.Web.Models.Backoffice; +using Umbraco.Web; using Umbraco.Web.Editors; using Umbraco.Web.Mvc; using Umbraco.Web.WebApi; @@ -134,6 +136,12 @@ public HttpResponseMessage CreateFolder(string parentId, string name) PerplexFolder.Add(folder, parentId); + // now find any users who have a content start type that matches the perplex folder's name + IEnumerable users = Services.UserService.GetAll(0, int.MaxValue, out int total); + + // with the new form created, check with users need to be assigned to its Form Start Node + StartNodeUserPermissions.ApplyFolderPermissionsToUsers(users, folder); + return Request.CreateResponse(HttpStatusCode.OK, folder); } @@ -155,6 +163,8 @@ public HttpResponseMessage Update(PerplexFolder folder) folderToUpdate.Update(folder); + // TODO: Update() - add code to update the users' associated with this folder + // Return the updated folder return Request.CreateResponse(HttpStatusCode.OK, folderToUpdate); } @@ -266,8 +276,7 @@ public HttpResponseMessage DeleteFolder(string folderId, bool deleteForms) } // delete any association between a user and this folder being deleted - try { Sql.ExecuteSql("DELETE FROM [perplexUmbracoUser] WHERE formsStartNode = @formsStartNode", parameters: new { formsStartNode = folderId }); } - catch (Exception) { } + StartNodeUserPermissions.DeleteUserAssociationWithFolder(folderId); PerplexFolder parentFolder = folder.GetParent(); diff --git a/Perplex.Umbraco.Forms/Perplex.Umbraco.Forms.csproj b/Perplex.Umbraco.Forms/Perplex.Umbraco.Forms.csproj index 23d0741..b052441 100644 --- a/Perplex.Umbraco.Forms/Perplex.Umbraco.Forms.csproj +++ b/Perplex.Umbraco.Forms/Perplex.Umbraco.Forms.csproj @@ -36,49 +36,46 @@ ..\packages\AutoMapper.3.3.1\lib\net40\AutoMapper.Net4.dll - - ..\packages\UmbracoCms.Core.7.6.0\lib\net45\businesslogic.dll + + ..\packages\UmbracoCms.Core.7.15.4\lib\net452\businesslogic.dll - - ..\packages\ClientDependency.1.9.2\lib\net45\ClientDependency.Core.dll + + ..\packages\ClientDependency.1.9.9\lib\net45\ClientDependency.Core.dll ..\packages\ClientDependency-Mvc5.1.8.0.0\lib\net45\ClientDependency.Core.Mvc.dll - - ..\packages\UmbracoCms.Core.7.6.0\lib\net45\cms.dll + + ..\packages\UmbracoCms.Core.7.15.4\lib\net452\cms.dll - - ..\packages\UmbracoCms.Core.7.6.0\lib\net45\controls.dll + + ..\packages\UmbracoCms.Core.7.15.4\lib\net452\controls.dll ..\packages\xmlrpcnet.2.5.0\lib\net20\CookComputing.XmlRpcV2.dll True - - ..\packages\UmbracoForms.Core.6.0.1\lib\EPPlus.dll + + ..\packages\Examine.0.1.90\lib\net45\Examine.dll - - ..\packages\Examine.0.1.82\lib\net45\Examine.dll - - - ..\packages\HtmlAgilityPack.1.4.9.5\lib\Net45\HtmlAgilityPack.dll + + ..\packages\HtmlAgilityPack.1.8.8\lib\Net45\HtmlAgilityPack.dll ..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll True - - ..\packages\ImageProcessor.2.5.3\lib\net45\ImageProcessor.dll + + ..\packages\ImageProcessor.2.7.0.100\lib\net452\ImageProcessor.dll - - ..\packages\ImageProcessor.Web.4.8.3\lib\net45\ImageProcessor.Web.dll + + ..\packages\ImageProcessor.Web.4.10.0.100\lib\net452\ImageProcessor.Web.dll - - ..\packages\UmbracoCms.Core.7.6.0\lib\net45\interfaces.dll + + ..\packages\UmbracoCms.Core.7.15.4\lib\net452\interfaces.dll - ..\packages\UmbracoCms.Core.7.6.0\lib\net45\log4net.dll + ..\packages\UmbracoCms.Core.7.15.4\lib\net452\log4net.dll ..\packages\Log4Net.Async.2.0.4\lib\net40\Log4Net.Async.dll @@ -91,34 +88,34 @@ ..\packages\Markdown.1.14.7\lib\net45\MarkdownSharp.dll - ..\packages\UmbracoCms.Core.7.6.0\lib\net45\Microsoft.ApplicationBlocks.Data.dll + ..\packages\UmbracoCms.Core.7.15.4\lib\net452\Microsoft.ApplicationBlocks.Data.dll - ..\packages\Microsoft.AspNet.Identity.Core.2.2.1\lib\net45\Microsoft.AspNet.Identity.Core.dll + ..\packages\Microsoft.AspNet.Identity.Core.2.2.2\lib\net45\Microsoft.AspNet.Identity.Core.dll - ..\packages\Microsoft.AspNet.Identity.Owin.2.2.1\lib\net45\Microsoft.AspNet.Identity.Owin.dll + ..\packages\Microsoft.AspNet.Identity.Owin.2.2.2\lib\net45\Microsoft.AspNet.Identity.Owin.dll - - ..\packages\Microsoft.AspNet.SignalR.Core.2.2.1\lib\net45\Microsoft.AspNet.SignalR.Core.dll + + ..\packages\Microsoft.AspNet.SignalR.Core.2.4.1\lib\net45\Microsoft.AspNet.SignalR.Core.dll - - ..\packages\Microsoft.IO.RecyclableMemoryStream.1.2.1\lib\net45\Microsoft.IO.RecyclableMemoryStream.dll + + ..\packages\Microsoft.IO.RecyclableMemoryStream.1.2.2\lib\net45\Microsoft.IO.RecyclableMemoryStream.dll - - ..\packages\Microsoft.Owin.3.0.1\lib\net45\Microsoft.Owin.dll + + ..\packages\Microsoft.Owin.4.0.1\lib\net45\Microsoft.Owin.dll - - ..\packages\Microsoft.Owin.Host.SystemWeb.3.0.1\lib\net45\Microsoft.Owin.Host.SystemWeb.dll + + ..\packages\Microsoft.Owin.Host.SystemWeb.4.0.1\lib\net45\Microsoft.Owin.Host.SystemWeb.dll - - ..\packages\Microsoft.Owin.Security.3.0.1\lib\net45\Microsoft.Owin.Security.dll + + ..\packages\Microsoft.Owin.Security.4.0.1\lib\net45\Microsoft.Owin.Security.dll - - ..\packages\Microsoft.Owin.Security.Cookies.3.0.1\lib\net45\Microsoft.Owin.Security.Cookies.dll + + ..\packages\Microsoft.Owin.Security.Cookies.4.0.1\lib\net45\Microsoft.Owin.Security.Cookies.dll - - ..\packages\Microsoft.Owin.Security.OAuth.3.0.1\lib\net45\Microsoft.Owin.Security.OAuth.dll + + ..\packages\Microsoft.Owin.Security.OAuth.4.0.1\lib\net45\Microsoft.Owin.Security.OAuth.dll ..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll @@ -131,8 +128,8 @@ ..\packages\MySql.Data.6.9.9\lib\net45\MySql.Data.dll - - ..\packages\Newtonsoft.Json.10.0.2\lib\net45\Newtonsoft.Json.dll + + ..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll ..\packages\Owin.1.0\lib\net40\Owin.dll @@ -140,48 +137,55 @@ ..\packages\semver.1.1.2\lib\net451\Semver.dll - - ..\packages\UmbracoCms.Core.7.6.0\lib\net45\SQLCE4Umbraco.dll + + ..\packages\UmbracoCms.Core.7.15.4\lib\net452\SQLCE4Umbraco.dll + - ..\packages\UmbracoCms.Core.7.6.0\lib\net45\System.Data.SqlServerCe.dll + ..\packages\UmbracoCms.Core.7.15.4\lib\net452\System.Data.SqlServerCe.dll - ..\packages\UmbracoCms.Core.7.6.0\lib\net45\System.Data.SqlServerCe.Entity.dll + ..\packages\UmbracoCms.Core.7.15.4\lib\net452\System.Data.SqlServerCe.Entity.dll - - ..\packages\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45\System.Net.Http.Formatting.dll + + + + ..\packages\Microsoft.AspNet.WebApi.Client.5.2.7\lib\net45\System.Net.Http.Formatting.dll - - ..\packages\System.Threading.Tasks.Dataflow.4.7.0\lib\portable-net45+win8+wpa81\System.Threading.Tasks.Dataflow.dll + + + ..\packages\System.Threading.Tasks.Dataflow.4.9.0\lib\portable-net45+win8+wpa81\System.Threading.Tasks.Dataflow.dll + + + ..\packages\System.ValueTuple.4.5.0\lib\netstandard1.0\System.ValueTuple.dll - ..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.Helpers.dll + ..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.Helpers.dll - - ..\packages\Microsoft.AspNet.WebApi.Core.5.2.3\lib\net45\System.Web.Http.dll + + ..\packages\Microsoft.AspNet.WebApi.Core.5.2.7\lib\net45\System.Web.Http.dll - - ..\packages\Microsoft.AspNet.WebApi.WebHost.5.2.3\lib\net45\System.Web.Http.WebHost.dll + + ..\packages\Microsoft.AspNet.WebApi.WebHost.5.2.7\lib\net45\System.Web.Http.WebHost.dll - - ..\packages\Microsoft.AspNet.Mvc.5.2.3\lib\net45\System.Web.Mvc.dll + + ..\packages\Microsoft.AspNet.Mvc.5.2.7\lib\net45\System.Web.Mvc.dll - ..\packages\Microsoft.AspNet.Razor.3.2.3\lib\net45\System.Web.Razor.dll + ..\packages\Microsoft.AspNet.Razor.3.2.7\lib\net45\System.Web.Razor.dll - ..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.WebPages.dll + ..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.dll - ..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.WebPages.Deployment.dll + ..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.Deployment.dll - ..\packages\Microsoft.AspNet.WebPages.3.2.3\lib\net45\System.Web.WebPages.Razor.dll + ..\packages\Microsoft.AspNet.WebPages.3.2.7\lib\net45\System.Web.WebPages.Razor.dll @@ -190,43 +194,46 @@ - ..\packages\UmbracoCms.Core.7.6.0\lib\net45\TidyNet.dll + ..\packages\UmbracoCms.Core.7.15.4\lib\net452\TidyNet.dll + + + ..\packages\UmbracoCms.Core.7.15.4\lib\net452\umbraco.dll - - ..\packages\UmbracoCms.Core.7.6.0\lib\net45\umbraco.dll + + ..\packages\UmbracoCms.Core.7.15.4\lib\net452\Umbraco.Core.dll - - ..\packages\UmbracoCms.Core.7.6.0\lib\net45\Umbraco.Core.dll + + ..\packages\UmbracoCms.Core.7.15.4\lib\net452\umbraco.DataLayer.dll - - ..\packages\UmbracoCms.Core.7.6.0\lib\net45\umbraco.DataLayer.dll + + ..\packages\UmbracoCms.Core.7.15.4\lib\net452\umbraco.editorControls.dll - - ..\packages\UmbracoCms.Core.7.6.0\lib\net45\umbraco.editorControls.dll + + ..\packages\UmbracoForms.Core.7.4.0\lib\Umbraco.Forms.Core.dll - - ..\packages\UmbracoForms.Core.6.0.1\lib\Umbraco.Forms.Core.dll + + ..\packages\UmbracoForms.Core.7.4.0\lib\Umbraco.Forms.Core.Providers.dll - - ..\packages\UmbracoForms.Core.6.0.1\lib\Umbraco.Forms.Core.Providers.dll + + ..\packages\UmbracoForms.Core.7.4.0\lib\Umbraco.Forms.Web.dll - - ..\packages\UmbracoForms.Core.6.0.1\lib\Umbraco.Forms.Web.dll + + ..\packages\UmbracoForms.Core.7.4.0\lib\Umbraco.Forms.Web.XmlSerializers.dll - ..\packages\UmbracoForms.Core.6.0.1\lib\Umbraco.Licensing.dll + ..\packages\UmbracoForms.Core.7.4.0\lib\Umbraco.Licensing.dll - - ..\packages\UmbracoCms.Core.7.6.0\lib\net45\umbraco.MacroEngines.dll + + ..\packages\UmbracoCms.Core.7.15.4\lib\net452\umbraco.MacroEngines.dll - - ..\packages\UmbracoCms.Core.7.6.0\lib\net45\umbraco.providers.dll + + ..\packages\UmbracoCms.Core.7.15.4\lib\net452\umbraco.providers.dll - - ..\packages\UmbracoCms.Core.7.6.0\lib\net45\Umbraco.Web.UI.dll + + ..\packages\UmbracoCms.Core.7.15.4\lib\net452\Umbraco.Web.UI.dll - - ..\packages\UmbracoCms.Core.7.6.0\lib\net45\UmbracoExamine.dll + + ..\packages\UmbracoCms.Core.7.15.4\lib\net452\UmbracoExamine.dll @@ -242,6 +249,7 @@ + diff --git a/Perplex.Umbraco.Forms/app.config b/Perplex.Umbraco.Forms/app.config index d4774eb..eca3181 100644 --- a/Perplex.Umbraco.Forms/app.config +++ b/Perplex.Umbraco.Forms/app.config @@ -4,7 +4,7 @@ - + @@ -12,7 +12,7 @@ - + @@ -28,19 +28,27 @@ - + - + - + - + + + + + + + + + diff --git a/Perplex.Umbraco.Forms/packages.config b/Perplex.Umbraco.Forms/packages.config index 46aa4a3..0b3d724 100644 --- a/Perplex.Umbraco.Forms/packages.config +++ b/Perplex.Umbraco.Forms/packages.config @@ -1,45 +1,46 @@  - + - - - - + + + + - - - + + + - - - - - - - - + + + + + + + + - - - - - + + + + + - + - - - + + + + \ No newline at end of file