namespace MyProject.Cms.Workflow { using System.Collections; using System.Collections.Specialized; using System.Text.RegularExpressions; using Sitecore; using Sitecore.Configuration; using Sitecore.Data; using Sitecore.Data.Items; using Sitecore.Diagnostics; using Sitecore.Globalization; using Sitecore.Shell.Applications.Workbox; using Sitecore.Shell.Feeds; using Sitecore.Web; using Sitecore.Web.UI.HtmlControls; using Sitecore.Web.UI.Sheer; using Sitecore.Web.UI.XmlControls; using Sitecore.Workflows; public class MyWorkboxForm : WorkboxForm { private NameValueCollection stateNames; protected override void DisplayStates(IWorkflow workflow, XmlControl placeholder) { Assert.ArgumentNotNull(workflow, "workflow"); Assert.ArgumentNotNull(placeholder, "placeholder"); this.stateNames = null; WorkflowState[] states = workflow.GetStates(); for (int i = 0; i < states.Length; i++) { WorkflowState workflowState = states[i]; WorkflowCommand[] array = WorkflowFilterer.FilterVisibleCommands(workflow.GetCommands(workflowState.StateID)); if (array.Length > 0) { DataUri[] items = this.GetItems(workflowState, workflow); Assert.IsNotNull(items, "items is null"); string str = ShortID.Encode(workflow.WorkflowID) + "_" + ShortID.Encode(workflowState.StateID); Section section = new Section { ID = str + "_section" }; placeholder.AddControl(section); int num = items.Length; string text; if (num <= 0) { text = "none"; } else { if (num == 1) { text = string.Format("1 {0}", Translate.Text("item")); } else { text = string.Format("{0} {1}", num, Translate.Text("items")); } } text = string.Format(" - ({0})", text); section.Header = workflowState.DisplayName + text; section.Icon = workflowState.Icon; if (Settings.ClientFeeds.Enabled) { FeedUrlOptions feedUrlOptions = new FeedUrlOptions("/sitecore/shell/~/feed/workflowstate.aspx") { UseUrlAuthentication = false }; feedUrlOptions.Parameters["wf"] = workflow.WorkflowID; feedUrlOptions.Parameters["st"] = workflowState.StateID; section.FeedLink = feedUrlOptions.ToString(); } section.Collapsed = (num <= 0); Border border = new Border(); section.Controls.Add(border); border.ID = str + "_content"; this.DisplayState(workflow, workflowState, items, border, 0, this.PageSize); this.CreateNavigator(section, str + "_navigator", num); } } } protected override void DisplayWorkflow(IWorkflow workflow) { Assert.ArgumentNotNull(workflow, "workflow"); Context.ClientPage.ServerProperties["WorkflowID"] = workflow.WorkflowID; XmlControl xmlControl = Sitecore.Resources.Resource.GetWebControl("Pane") as XmlControl; Error.AssertXmlControl(xmlControl, "Pane"); this.States.Controls.Add(xmlControl); Assert.IsNotNull(xmlControl, "pane"); xmlControl["PaneID"] = this.GetPaneID(workflow); xmlControl["Header"] = workflow.Appearance.DisplayName; xmlControl["Icon"] = workflow.Appearance.Icon; FeedUrlOptions feedUrlOptions = new FeedUrlOptions("/sitecore/shell/~/feed/workflow.aspx") { UseUrlAuthentication = false }; feedUrlOptions.Parameters["wf"] = workflow.WorkflowID; xmlControl["FeedLink"] = feedUrlOptions.ToString(); this.DisplayStates(workflow, xmlControl); if (Context.ClientPage.IsEvent) { SheerResponse.Insert(this.States.ClientID, "append", HtmlUtil.RenderControl(xmlControl)); } } private string GetPaneID(IWorkflow workflow) { Assert.ArgumentNotNull(workflow, "workflow"); return "P" + Regex.Replace(workflow.WorkflowID, "\\W", string.Empty); } private DataUri[] GetItems(WorkflowState state, IWorkflow workflow) { Assert.ArgumentNotNull(state, "state"); Assert.ArgumentNotNull(workflow, "workflow"); ArrayList arrayList = new ArrayList(); DataUri[] items = workflow.GetItems(state.StateID); if (items != null) { DataUri[] array = items; for (int i = 0; i < array.Length; i++) { DataUri dataUri = array[i]; Item item = Context.ContentDatabase.Items[dataUri]; if (item != null && item.Access.CanRead() && item.Access.CanReadLanguage() && item.Access.CanWriteLanguage() && (Context.IsAdministrator || item.Locking.CanLock() || item.Locking.HasLock())) { arrayList.Add(dataUri); } } } return arrayList.ToArray(typeof(DataUri)) as DataUri[]; } private void CreateNavigator(Section section, string id, int count) { Assert.ArgumentNotNull(section, "section"); Assert.ArgumentNotNull(id, "id"); Navigator navigator = new Navigator(); section.Controls.Add(navigator); navigator.ID = id; navigator.Offset = 0; navigator.Count = count; navigator.PageSize = this.PageSize; } } }