protected override DriverResult Editor(ShapePart part, IUpdateModel updater, dynamic shapeHelper) { var viewModel = new ShapePartViewModel { Template = part.Template, RenderingMode = part.RenderingMode }; if (updater != null && updater.TryUpdateModel(viewModel, Prefix, null, new[] { "AvailableLanguages" }) && ValidateShapeName(part, updater)) { part.Template = viewModel.Template; part.RenderingMode = viewModel.RenderingMode; try { var processor = _processors.FirstOrDefault(x => String.Equals(x.Type, part.ProcessorName, StringComparison.OrdinalIgnoreCase)) ?? _processors.First(); processor.Verify(part.Template); } catch (Exception ex) { updater.AddModelError("", T("Template processing error: {0}", ex.Message)); _transactions.Cancel(); } // 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); // If ShapePart is only dynamically added to this content type or even this content item then we won't find // a corresponding content type definition, so using the current content type too. contentTypesWithShapePart = contentTypesWithShapePart.Union(new[] { part.ContentItem.ContentType }); var existingShapes = _contentManager .Query(VersionOptions.Latest, contentTypesWithShapePart.ToArray()) .Where <TitlePartRecord>(record => record.Title == part.As <TitlePart>().Title&& record.ContentItemRecord.Id != part.ContentItem.Id); if (existingShapes.List().Any(x => x.As <ShapePart>().RenderingMode == part.RenderingMode)) { updater.AddModelError("ShapeNameAlreadyExists", T("A template with the given name and rendering mode already exists.")); } } return(ContentShape("Parts_Shape_Edit", () => shapeHelper.EditorTemplate(TemplateName: "Parts.Shape", Model: viewModel, Prefix: Prefix))); }
protected override DriverResult Editor(ShapePart part, IUpdateModel updater, dynamic shapeHelper) { var viewModel = new ShapePartViewModel { Template = part.Template }; if (updater != null && updater.TryUpdateModel(viewModel, Prefix, null, new[] { "AvailableLanguages" }) && ValidateShapeName(part, updater)) { part.Template = viewModel.Template; try { var processor = _processors.FirstOrDefault(x => String.Equals(x.Type, part.ProcessorName, StringComparison.OrdinalIgnoreCase)) ?? _processors.First(); processor.Verify(part.Template); } catch (Exception ex) { updater.AddModelError("", T("Template processing error: {0}", ex.Message)); _transactions.Cancel(); } } return(ContentShape("Parts_Shape_Edit", () => shapeHelper.EditorTemplate(TemplateName: "Parts.Shape", Model: viewModel, Prefix: Prefix))); }