private IEnumerable <Item> GetParentItems(WorxboxWorkflowState state, Item item, List <ID> visitedItems)
        {
            var results = new List <Item>();
            var parent  = item.Parent;

            while (parent != null && parent.ID != ItemIDs.RootID)
            {
                if (IsCompositable(state, parent) &&
                    visitedItems.All(x => x != parent.ID))
                {
                    results.Add(parent);
                    visitedItems.Add(parent.ID);
                }
                parent = parent.Parent;
            }
            return(results);
        }
示例#2
0
        private IEnumerable <Item> GetWorxboxItems(WorxboxWorkflowState state, Item item, List <ID> visitedItems)
        {
            var referencedItems = (from x in Globals.LinkDatabase.GetReferences(item)
                                   select x.TargetItemID)
                                  .Distinct()
                                  .ToList();

            var results = new ItemList();

            foreach (var itemId in referencedItems)
            {
                var refItem = Context.ContentDatabase.GetItem(itemId);
                if (refItem != null && IsCompositable(state, refItem) && visitedItems.All(x => x != refItem.ID))
                {
                    if (!results.Contains(refItem))
                    {
                        results.Add(refItem);
                        visitedItems.Add(refItem.ID);
                        results.AddRange(GetParentItems(state, refItem, visitedItems));
                        results.AddRange(GetChildItems(state, refItem, visitedItems));
                        results.AddRange(GetWorxboxItems(state, refItem, visitedItems));
                    }
                }
            }

            foreach (var childItem in item.Axes.GetDescendants())
            {
                if (childItem != null && IsCompositable(state, childItem) && visitedItems.All(x => x != childItem.ID))
                {
                    if (!results.Contains(childItem))
                    {
                        results.Add(childItem);
                        visitedItems.Add(childItem.ID);
                        results.AddRange(GetWorxboxItems(state, childItem, visitedItems));
                    }
                }
            }
            return(results.ToList());
        }
        private IEnumerable <Item> GetWorxboxItems(WorxboxWorkflowState state, Item item, List <ID> visitedItems)
        {
            var referencedItems = Globals.LinkDatabase.GetReferences(item);
            var results         = new List <Item>();

            foreach (var reference in referencedItems)
            {
                var refItem = Context.ContentDatabase.GetItem(reference.TargetItemID);
                if (refItem != null && IsCompositable(state, refItem) && visitedItems.All(x => x != refItem.ID))
                {
                    if (!results.Any(
                            x => x.ID == refItem.ID && x.Language == refItem.Language && x.Version == refItem.Version))
                    {
                        results.Add(refItem);
                        visitedItems.Add(refItem.ID);
                        results.AddRange(GetParentItems(state, refItem, visitedItems));
                        results.AddRange(GetChildItems(state, refItem, visitedItems));
                        results.AddRange(GetWorxboxItems(state, refItem, visitedItems));
                    }
                }
            }

            foreach (var childItem in item.Axes.GetDescendants())
            {
                if (childItem != null && IsCompositable(state, childItem) && visitedItems.All(x => x != childItem.ID))
                {
                    if (!results.Any(
                            x => x.ID == childItem.ID && x.Language == childItem.Language && x.Version == childItem.Version))
                    {
                        results.Add(childItem);
                        visitedItems.Add(childItem.ID);
                        results.AddRange(GetWorxboxItems(state, childItem, visitedItems));
                    }
                }
            }
            return(results);
        }
 private bool IsCompositable(WorxboxWorkflowState state, Item item)
 {
     return(!this.IsWorxboxItem(state.WorkflowState, new DataUri(item.Uri)) &&
            item["__Workflow state"].Equals(state.WorkflowState.StateID));
 }
        private IEnumerable <Item> GetChildItems(WorxboxWorkflowState state, Item item, List <ID> visitedItems)
        {
            var items = item.Axes.GetDescendants();

            return(items.Where(child => IsCompositable(state, child) && visitedItems.All(x => x != child.ID)));
        }
 public IEnumerable <Item> GetWorxboxItems(WorxboxWorkflowState state, Item item)
 {
     return(GetWorxboxItems(state, item, new List <ID>()));
 }