Пример #1
0
        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)));
        }
Пример #2
0
        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)));
        }