// Checks whether we are under a top-level page with a certain title. private bool IsPageUnder(IWorkflowResolutionContext context, string topLevelTitle) { if (typeof(PageNode).IsAssignableFrom(context.ContentType) && context.ContentId != Guid.Empty) { var siteMap = SitefinitySiteMap.GetCurrentProvider() as SiteMapBase; PageSiteNode pageSiteNode = (PageSiteNode)siteMap.FindSiteMapNodeFromKey(context.ContentId.ToString()); while (pageSiteNode != null) { if (pageSiteNode.Title == topLevelTitle && pageSiteNode.ParentNode == pageSiteNode.RootNode) { return(true); } pageSiteNode = pageSiteNode.ParentNode as PageSiteNode; } } return(false); }
public override IWorkflowExecutionDefinition ResolveWorkflowExecutionDefinition(IWorkflowResolutionContext context) { // Return pre-created workflows for "Products", "Resources" and "Documents". if (this.IsPageUnder(context, "Products")) { return(this.workflowForProducts); } if (this.IsPageUnder(context, "Resources")) { return(this.workflowForResources); } if (this.IsPageUnder(context, "Documents") && this.workflowForDocuments != null) { return(this.workflowForDocuments); } // The default constructor of WorkflowExecutionDefinitionProxy will instantiate // a simple no-approval-needed workflow. else if (this.IsPageUnder(context, "Forum")) { return(WorkflowDefinitionProxy.DefaultWorkflow); } return(base.ResolveWorkflowExecutionDefinition(context)); }