/// <summary> /// Returns the dataType associated with the given ContentBlock definition /// </summary> /// <param name="definition">ContentBlock definition</param> /// <returns></returns> public IDataType GetDataType(IContentBlockDefinition definition) { if (definition == null) { throw new ArgumentNullException(nameof(definition)); } IDataType dataType = null; if (definition.DataTypeId is int dataTypeId) { dataType = _dataTypeService.GetDataType(dataTypeId); } else if (definition.DataTypeKey is Guid dataTypeKey) { dataType = _dataTypeService.GetDataType(dataTypeKey); } if (dataType.EditorAlias != Umbraco.Core.Constants.PropertyEditors.Aliases.NestedContent) { throw new InvalidOperationException($"DataType should be Nested Content, but was '{dataType.EditorAlias}'"); } return(dataType); }
public void Add(IContentBlockDefinition definition) => _definitions[definition.Id] = definition;
public override object ConvertIntermediateToObject(IPublishedElement owner, IPublishedPropertyType propertyType, PropertyCacheLevel referenceCacheLevel, object inter, bool preview) { ContentBlocksModelValue modelValue = _deserializer.Deserialize(inter?.ToString()); if (modelValue == null) { return(Rendering.ContentBlocks.Empty); } var config = propertyType.DataType.ConfigurationAs <ContentBlocksConfiguration>(); var header = config.Structure.HasFlag(Structure.Header) ? createViewModel(modelValue.Header) : null; var blocks = config.Structure.HasFlag(Structure.Blocks) ? modelValue.Blocks.Select(createViewModel).Where(rm => rm != null).ToList() : Enumerable.Empty <IContentBlockViewModel>(); return(new Rendering.ContentBlocks { Header = header, Blocks = blocks }); IContentBlockViewModel createViewModel(ContentBlockModelValue block) { if (block == null || block.IsDisabled) { return(null); } IContentBlockDefinitionRepository definitionRepository = Current.Factory.GetInstance <IContentBlockDefinitionRepository>(); if (definitionRepository == null) { return(null); } IContentBlockDefinition definition = definitionRepository.GetById(block.DefinitionId); if (definition == null || definition.Layouts == null || definition.Layouts.Any() == false) { return(null); } IContentBlockLayout layout = definition.Layouts.FirstOrDefault(l => l.Id == block.LayoutId); if (layout == null) { return(null); } IPublishedElement content = _nestedContentSingleValueConverter.ConvertIntermediateToObject(owner, propertyType, referenceCacheLevel, block?.Content?.ToString(), preview) as IPublishedElement; if (content == null) { return(null); } var contentType = content.GetType(); var genericViewModelFactoryType = typeof(IContentBlockViewModelFactory <>).MakeGenericType(new[] { contentType }); var viewModelFactory = Current.Factory.GetInstance(genericViewModelFactoryType) as IContentBlockViewModelFactory; if (viewModelFactory == null) { return(null); } return(viewModelFactory.Create(content, block.Id, block.DefinitionId, block.LayoutId)); } }