Beispiel #1
0
        private IDictionary <int, IEntity> GetStream(ContentGroupItemType itemType, ContentGroupItemType?presentationItemType)
        {
            var entitiesToDeliver = new Dictionary <int, IEntity>();

            if (!ContentGroupItems.Any(c => c.TemplateID.HasValue) && !OverrideTemplateId.HasValue)
            {
                return(entitiesToDeliver);
            }

            var items            = ContentGroupItems.ToList(); // Create copy of list (not in cache) because it will get modified
            var templateId       = OverrideTemplateId.HasValue ? OverrideTemplateId.Value : items.First().TemplateID.Value;
            var templateDefaults = Sexy.GetTemplateDefaults(templateId);
            var templateDefault  = templateDefaults.FirstOrDefault(t => t.ItemType == itemType);

            // If no Content Elements exist and type is List, add a ContentGroupItem to List (not to DB)
            if ((itemType == ContentGroupItemType.Content || itemType == ContentGroupItemType.ListContent) && !items.Any(p => p.ItemType == itemType))
            {
                if (!ListId.HasValue)
                {
                    throw new Exception("GetStream() failed because ListId is null. ModuleId is " + (ModuleId.HasValue ? ModuleId.ToString() : "null"));
                }

                items.Add(new ContentGroupItem
                {
                    ContentGroupID     = ListId.Value,
                    ContentGroupItemID = -1,
                    EntityID           = new int?(),
                    SortOrder          = (itemType == ContentGroupItemType.ListContent ? -1 : 0),
                    SysCreated         = DateTime.Now,
                    SysCreatedBy       = -1,
                    TemplateID         = templateId,
                    Type = itemType.ToString("F")
                });
            }

            var originals = In["Default"].List;

            foreach (var i in items.Where(p => p.ItemType == itemType))
            {
                // use demo-entites where available
                var entityId = i.EntityID.HasValue
                    ? i.EntityID.Value
                    : (templateDefault != null && templateDefault.DemoEntityID.HasValue
                        ? templateDefault.DemoEntityID.Value
                        : new int?());

                // We can't deliver entities that are not delivered by base (original stream), so continue
                if (!entityId.HasValue || !originals.ContainsKey(entityId.Value))
                {
                    continue;
                }

                IEntity presentation = null;


                if (presentationItemType.HasValue)
                {
                    // Try to find presentation entity
                    var presentationEntityId = items.Where(p =>
                                                           p.SortOrder == i.SortOrder && p.ItemType == presentationItemType && p.EntityID.HasValue &&
                                                           originals.ContainsKey(p.EntityID.Value)).Select(p => p.EntityID).FirstOrDefault();

                    // If there is no presentation entity, take default entity
                    if (!presentationEntityId.HasValue)
                    {
                        presentationEntityId =
                            templateDefaults.Where(
                                d =>
                                d.ItemType == presentationItemType && d.DemoEntityID.HasValue &&
                                originals.ContainsKey(d.DemoEntityID.Value))
                            .Select(p => p.DemoEntityID).FirstOrDefault();
                    }

                    presentation = presentationEntityId.HasValue ? originals[presentationEntityId.Value] : null;
                }


                var key = entityId.Value;

                // This ensures that if an entity is added more than once, the dictionary doesn't complain because of duplicate keys
                while (entitiesToDeliver.ContainsKey(key))
                {
                    key += 1000000000;
                }

                entitiesToDeliver.Add(key, new EAVExtensions.EntityInContentGroup(originals[entityId.Value])
                {
                    SortOrder = i.SortOrder, ContentGroupItemModified = i.SysModified, Presentation = presentation, GroupId = ListId.Value
                });
            }

            return(entitiesToDeliver);
        }
 public IEnumerable <ContentGroupItem> GetContentGroupItems(int ContentGroupID, ContentGroupItemType Type)
 {
     return(GetContentGroupItems(ContentGroupID).Where(p => p.ItemType == Type));
 }