Beispiel #1
0
        private string GetViewPath(Guid definitionId, Guid layoutId)
        {
            var definition = _definitionRepository.GetById(definitionId);

            return(definition
                   ?.Layouts?.FirstOrDefault(l => l.Id == layoutId)
                   ?.ViewPath);
        }
Beispiel #2
0
        private IEnumerable <uSyncDependency> GetBlocksDependencies(JToken blocks, DependencyFlags flags)
        {
            List <uSyncDependency> dependencies = new List <uSyncDependency>();

            if (blocks is JObject jBlocks)
            {
                if (jBlocks.ContainsKey("definitionId"))
                {
                    var id = jBlocks.Value <string>("definitionId");

                    if (Guid.TryParse(id, out Guid key))
                    {
                        var definition = definitionRepository.GetById(key);
                        if (definition != null)
                        {
                            var dataType = dataTypeService.GetDataType(definition.DataTypeKey.Value);
                            if (dataType != null)
                            {
                                dependencies.Add(this.CreateDependency(dataType.GetUdi(), flags));
                            }
                        }
                    }
                }

                if (jBlocks.ContainsKey("content"))
                {
                    var content = jBlocks.Value <JArray>("content");
                    var mapper  = SyncValueMapperFactory.GetMapper(Constants.PropertyEditors.Aliases.NestedContent);

                    dependencies.AddRange(mapper.GetDependencies(content,
                                                                 Constants.PropertyEditors.Aliases.NestedContent,
                                                                 flags));
                }
            }

            return(dependencies);
        }
        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));
            }
        }