From 4cc48a380d4aab71c750ffbe950bf8ab85dcc0c6 Mon Sep 17 00:00:00 2001 From: Lombiq Date: Wed, 17 Feb 2016 21:05:14 +0100 Subject: [PATCH] You can't create two Template content items with the same name (title) any more, fixes #6360 --- .../Drivers/TitlePartDriver.cs | 46 +++++++++++++++++++ .../Orchard.Templates.csproj | 1 + 2 files changed, 47 insertions(+) create mode 100644 src/Orchard.Web/Modules/Orchard.Templates/Drivers/TitlePartDriver.cs diff --git a/src/Orchard.Web/Modules/Orchard.Templates/Drivers/TitlePartDriver.cs b/src/Orchard.Web/Modules/Orchard.Templates/Drivers/TitlePartDriver.cs new file mode 100644 index 000000000..7ee00ab15 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Templates/Drivers/TitlePartDriver.cs @@ -0,0 +1,46 @@ +using Orchard.ContentManagement; +using Orchard.ContentManagement.Drivers; +using Orchard.Core.Title.Models; +using Orchard.Localization; +using Orchard.Templates.Models; +using System.Linq; + +namespace Orchard.Templates.Drivers { + public class TitlePartDriver : ContentPartDriver { + private readonly IContentManager _contentManager; + + public Localizer T { get; set; } + + public TitlePartDriver(IContentManager contentManager) { + _contentManager = contentManager; + + T = NullLocalizer.Instance; + } + + protected override DriverResult Editor(TitlePart part, IUpdateModel updater, dynamic shapeHelper) { + if (!part.ContentItem.Has()) { + return null; + } + + updater.TryUpdateModel(part, Prefix, null, null); + + // We need to query for the content type names because querying for content parts has no effect on the database side. + var contentTypesWithShapePart = _contentManager + .GetContentTypeDefinitions() + .Where(typeDefinition => typeDefinition.Parts.Any(partDefinition => partDefinition.PartDefinition.Name == "ShapePart")) + .Select(typeDefinition => typeDefinition.Name) + .ToArray(); + + var existingShapeCount = _contentManager + .Query(VersionOptions.Latest, contentTypesWithShapePart) + .Where(record => record.Title == part.Title && record.ContentItemRecord.Id != part.ContentItem.Id) + .Count(); + + if (existingShapeCount > 0) { + updater.AddModelError("ShapeNameAlreadyExists", T("A template with the given name already exists.")); + } + + return null; + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Templates/Orchard.Templates.csproj b/src/Orchard.Web/Modules/Orchard.Templates/Orchard.Templates.csproj index 6dd9096c1..0464a2214 100644 --- a/src/Orchard.Web/Modules/Orchard.Templates/Orchard.Templates.csproj +++ b/src/Orchard.Web/Modules/Orchard.Templates/Orchard.Templates.csproj @@ -162,6 +162,7 @@ +