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