/// <summary> /// Displays the states. /// </summary> /// <param name="workflow"> /// The workflow. /// </param> /// <param name="placeholder"> /// The placeholder. /// </param> protected virtual void DisplayStates(IWorkflow workflow, XmlControl placeholder) { string str; Assert.ArgumentNotNull(workflow, "workflow"); Assert.ArgumentNotNull(placeholder, "placeholder"); this.stateNames = null; WorkflowState[] states = workflow.GetStates(); for (int i = 0; i < (int)states.Length; i++) { WorkflowState workflowState = states[i]; WorkflowCommand[] workflowCommandArray = WorkflowFilterer.FilterVisibleCommands(workflow.GetCommands(workflowState.StateID)); if ((int)workflowCommandArray.Length > 0) { DataUri[] items = this.GetItems(workflowState, workflow); Assert.IsNotNull(items, "items is null"); string str1 = string.Concat(ShortID.Encode(workflow.WorkflowID), "_", ShortID.Encode(workflowState.StateID)); Section section = new Section(); section.ID = string.Concat(str1, "_section"); Section icon = section; placeholder.AddControl(icon); int length = (int)items.Length; if (length > 0) { str = (length != 1 ? string.Format("{0} {1}", length, Translate.Text("items")) : string.Format("1 {0}", Translate.Text("item"))); } else { str = "none"; } str = string.Format("<span style=\"font-weight:normal\"> - ({0})</span>", str); icon.Header = string.Concat(workflowState.DisplayName, str); icon.Icon = workflowState.Icon; if (Settings.ClientFeeds.Enabled) { FeedUrlOptions feedUrlOption = new FeedUrlOptions("/sitecore/shell/~/feed/workflowstate.aspx"); feedUrlOption.UseUrlAuthentication = true; FeedUrlOptions workflowID = feedUrlOption; workflowID.Parameters["wf"] = workflow.WorkflowID; workflowID.Parameters["st"] = workflowState.StateID; icon.FeedLink = workflowID.ToString(); } icon.Collapsed = length <= 0; Border border = new Border(); icon.Controls.Add(border); border.ID = string.Concat(str1, "_content"); this.DisplayState(workflow, workflowState, items, border, 0, this.PageSize); this.CreateNavigator(icon, string.Concat(str1, "_navigator"), length); } } }
/// <summary> /// Creates the item. /// </summary> /// <param name="workflow"> /// The workflow. /// </param> /// <param name="item"> /// The item. /// </param> /// <param name="control"> /// The control. /// </param> private void CreateItem(IWorkflow workflow, Item item, System.Web.UI.Control control) { Assert.ArgumentNotNull(workflow, "workflow"); Assert.ArgumentNotNull(item, "item"); Assert.ArgumentNotNull(control, "control"); XmlControl webControl = Resource.GetWebControl("WorkboxItem") as XmlControl; Assert.IsNotNull(webControl, "workboxItem is null"); control.Controls.Add(webControl); StringBuilder stringBuilder = new StringBuilder(" - ("); Language language = item.Language; stringBuilder.Append(language.CultureInfo.DisplayName); stringBuilder.Append(", "); stringBuilder.Append(Translate.Text("version")); stringBuilder.Append(' '); stringBuilder.Append(item.Version.ToString()); stringBuilder.Append(")"); Assert.IsNotNull(webControl, "workboxItem"); webControl["Header"] = item.DisplayName; webControl["Details"] = stringBuilder.ToString(); webControl["Icon"] = item.Appearance.Icon; webControl["ShortDescription"] = item.Help.ToolTip; webControl["History"] = this.GetHistory(workflow, item); webControl["HistoryMoreID"] = Sitecore.Web.UI.HtmlControls.Control.GetUniqueID("ctl"); object[] d = new object[] { "workflow:showhistory(id=", item.ID, ",la=", item.Language.Name, ",vs=", item.Version, ",wf=", workflow.WorkflowID, ")" }; webControl["HistoryClick"] = string.Concat(d); object[] objArray = new object[] { "Preview(\"", item.ID, "\", \"", item.Language, "\", \"", item.Version, "\")" }; webControl["PreviewClick"] = string.Concat(objArray); object[] d1 = new object[] { "Open(\"", item.ID, "\", \"", item.Language, "\", \"", item.Version, "\")" }; webControl["Click"] = string.Concat(d1); object[] objArray1 = new object[] { "Diff(\"", item.ID, "\", \"", item.Language, "\", \"", item.Version, "\")" }; webControl["DiffClick"] = string.Concat(objArray1); webControl["Display"] = "none"; string uniqueID = Sitecore.Web.UI.HtmlControls.Control.GetUniqueID(string.Empty); webControl["CheckID"] = string.Concat("check_", uniqueID); webControl["HiddenID"] = string.Concat("hidden_", uniqueID); object[] d2 = new object[] { item.ID, ",", item.Language, ",", item.Version }; webControl["CheckValue"] = string.Concat(d2); WorkflowCommand[] workflowCommandArray = WorkflowFilterer.FilterVisibleCommands(workflow.GetCommands(item)); for (int i = 0; i < (int)workflowCommandArray.Length; i++) { WorkflowCommand workflowCommand = workflowCommandArray[i]; this.CreateCommand(workflow, workflowCommand, item, webControl); } }
protected virtual void DisplayState(IWorkflow workflow, WorkflowState state, DataUri[] items, Control control, int offset, int pageSize) { if (items.Length > 0) { int length = offset + pageSize; if (length > items.Length) { length = items.Length; } for (int i = offset; i < length; i++) { DataUri uri = items[i]; Item item = Context.ContentDatabase.Items[uri]; if (item != null) { this.CreateItem(workflow, item, control); } } Border child = new Border { Background = "#e9e9e9" }; control.Controls.Add(child); child.Margin = "0px 4px 0px 16px"; child.Padding = "2px 8px 2px 8px"; child.Border = "1px solid #999999"; foreach (WorkflowCommand command in WorkflowFilterer.FilterVisibleCommands(workflow.GetCommands(state.StateID))) { XmlControl webControl = Resource.GetWebControl("WorkboxCommand") as XmlControl; webControl["Header"] = command.DisplayName + " " + Translate.Text("(selected)"); webControl["Icon"] = command.Icon; webControl["Command"] = "workflow:sendselected(command=" + command.CommandID + ",ws=" + state.StateID + ",wf=" + workflow.WorkflowID + ")"; child.Controls.Add(webControl); webControl = Resource.GetWebControl("WorkboxCommand") as XmlControl; webControl["Header"] = command.DisplayName + " " + Translate.Text("(all)"); webControl["Icon"] = command.Icon; webControl["Command"] = "workflow:sendall(command=" + command.CommandID + ",ws=" + state.StateID + ",wf=" + workflow.WorkflowID + ")"; child.Controls.Add(webControl); } } }
/// <summary> /// Displays the state. /// </summary> /// <param name="workflow"> /// The workflow. /// </param> /// <param name="state"> /// The state. /// </param> /// <param name="items"> /// The items. /// </param> /// <param name="control"> /// The control. /// </param> /// <param name="offset"> /// The offset. /// </param> /// <param name="pageSize"> /// Size of the page. /// </param> protected virtual void DisplayState(IWorkflow workflow, WorkflowState state, DataUri[] items, System.Web.UI.Control control, int offset, int pageSize) { Assert.ArgumentNotNull(workflow, "workflow"); Assert.ArgumentNotNull(state, "state"); Assert.ArgumentNotNull(items, "items"); Assert.ArgumentNotNull(control, "control"); if ((int)items.Length > 0) { int length = offset + pageSize; if (length > (int)items.Length) { length = (int)items.Length; } for (int i = offset; i < length; i++) { DataUri dataUri = items[i]; Item item = Context.ContentDatabase.Items[dataUri]; if (item != null) { this.CreateItem(workflow, item, control); } } Border border = new Border(); border.Background = "#e9e9e9"; Border border1 = border; control.Controls.Add(border1); border1.Margin = "0px 4px 0px 16px"; border1.Padding = "2px 8px 2px 8px"; border1.Border = "1px solid #999999"; WorkflowCommand[] workflowCommandArray = WorkflowFilterer.FilterVisibleCommands(workflow.GetCommands(state.StateID)); for (int j = 0; j < (int)workflowCommandArray.Length; j++) { WorkflowCommand workflowCommand = workflowCommandArray[j]; XmlControl webControl = Resource.GetWebControl("WorkboxCommand") as XmlControl; Assert.IsNotNull(webControl, "workboxCommand is null"); webControl["Header"] = string.Concat(workflowCommand.DisplayName, " ", Translate.Text("(selected)")); webControl["Icon"] = workflowCommand.Icon; string[] commandID = new string[] { "workflow:sendselected(command=", workflowCommand.CommandID, ",ws=", state.StateID, ",wf=", workflow.WorkflowID, ")" }; webControl["Command"] = string.Concat(commandID); border1.Controls.Add(webControl); webControl = Resource.GetWebControl("WorkboxCommand") as XmlControl; Assert.IsNotNull(webControl, "workboxCommand is null"); webControl["Header"] = string.Concat(workflowCommand.DisplayName, " ", Translate.Text("(all)")); webControl["Icon"] = workflowCommand.Icon; string[] strArrays = new string[] { "workflow:sendall(command=", workflowCommand.CommandID, ",ws=", state.StateID, ",wf=", workflow.WorkflowID, ")" }; webControl["Command"] = string.Concat(strArrays); border1.Controls.Add(webControl); } } }
/// <summary>Executes the command in the specified context.</summary> /// <param name="context">The context.</param> public override void Execute(CommandContext context) { Assert.ArgumentNotNull((object)context, nameof(context)); string parameter1 = context.Parameters["database"]; string parameter2 = context.Parameters["id"]; string parameter3 = context.Parameters["language"]; string parameter4 = context.Parameters["version"]; Database database = Factory.GetDatabase(parameter1); if (database == null) { return; } Item obj = database.GetItem(parameter2, Language.Parse(parameter3), Sitecore.Data.Version.Parse(parameter4)); if (obj == null) { return; } IWorkflow workflow = obj.Database.WorkflowProvider.GetWorkflow(obj); if (workflow == null) { return; } WorkflowCommand[] workflowCommandArray = WorkflowFilterer.FilterVisibleCommands(workflow.GetCommands(obj), obj); if (workflowCommandArray == null || workflowCommandArray.Length == 0) { return; } Menu menu = new Menu(); SheerResponse.DisableOutput(); foreach (WorkflowCommand command in workflowCommandArray) { string click = new WorkflowCommandBuilder(obj, workflow, command).ToString(); //Add new logical condition to call canUserRunCommandsWithoutEdit() in Utilities class to check if user has permissions to execute //workflow commands without locking. The rest of the conditions are same as in default class menu.Add("C" + command.CommandID, command.DisplayName, command.Icon, string.Empty, click, false, string.Empty, MenuItemType.Normal).Disabled = !Utilities.canUserRunCommandsWithoutLocking() && !Context.User.IsAdministrator && !obj.Locking.HasLock() && Settings.RequireLockBeforeEditing; } SheerResponse.EnableOutput(); SheerResponse.ShowContextMenu(Context.ClientPage.ClientRequest.Control, "right", (Control)menu); }
private void CreateItem(IWorkflow workflow, Item item, Control control) { XmlControl webControl = Resource.GetWebControl("WorkboxItem") as XmlControl; control.Controls.Add(webControl); StringBuilder builder = new StringBuilder(" - ("); Language language = item.Language; builder.Append(language.CultureInfo.DisplayName); builder.Append(", "); builder.Append(Translate.Text("version")); builder.Append(' '); builder.Append(item.Version.ToString()); builder.Append(")"); Assert.IsNotNull(webControl, "workboxItem"); webControl["Header"] = item.DisplayName; webControl["Details"] = builder.ToString(); webControl["Icon"] = item.Appearance.Icon; webControl["ShortDescription"] = item.Help.ToolTip; webControl["History"] = this.GetHistory(workflow, item); webControl["HistoryMoreID"] = Control.GetUniqueID("ctl"); webControl["HistoryClick"] = "workflow:showhistory(id=" + item.ID.ToString() + ",la=" + item.Language.Name + ",vs=" + item.Version.ToString() + ",wf=" + workflow.WorkflowID + ")"; webControl["PreviewClick"] = "Preview(\"" + item.ID.ToString() + "\", \"" + item.Language.ToString() + "\", \"" + item.Version.ToString() + "\")"; webControl["Click"] = "Open(\"" + item.ID.ToString() + "\", \"" + item.Language.ToString() + "\", \"" + item.Version.ToString() + "\")"; webControl["DiffClick"] = "Diff(\"" + item.ID.ToString() + "\", \"" + item.Language.ToString() + "\", \"" + item.Version.ToString() + "\")"; webControl["Display"] = "none"; string uniqueID = Control.GetUniqueID(string.Empty); webControl["CheckID"] = "check_" + uniqueID; webControl["HiddenID"] = "hidden_" + uniqueID; webControl["CheckValue"] = string.Concat(new object[] { item.ID, ",", item.Language, ",", item.Version }); foreach (WorkflowCommand command in WorkflowFilterer.FilterVisibleCommands(workflow.GetCommands(item))) { this.CreateCommand(workflow, command, item, webControl); } }
protected virtual void DisplayStates(IWorkflow workflow, XmlControl placeholder) { this._stateNames = null; foreach (WorkflowState state in workflow.GetStates()) { if (WorkflowFilterer.FilterVisibleCommands(workflow.GetCommands(state.StateID)).Length > 0) { string str2; DataUri[] items = this.GetItems(state, workflow); string str = ShortID.Encode(workflow.WorkflowID) + "_" + ShortID.Encode(state.StateID); Section section2 = new Section { ID = str + "_section" }; Section control = section2; control.Attributes["Width"] = "100%"; placeholder.AddControl(control); int length = items.Length; if (length <= 0) { str2 = Translate.Text("None"); } else if (length == 1) { str2 = string.Format("1 {0}", Translate.Text("item")); } else { str2 = string.Format("{0} {1}", length, Translate.Text("items")); } str2 = string.Format("<span style=\"font-weight:normal\"> - ({0})</span>", str2); control.Header = state.DisplayName + str2; control.Icon = state.Icon; if (Settings.ClientFeeds.Enabled) { FeedUrlOptions options2 = new FeedUrlOptions("/sitecore/shell/~/feed/workflowstate.aspx") { UseUrlAuthentication = true }; FeedUrlOptions options = options2; options.Parameters["wf"] = workflow.WorkflowID; options.Parameters["st"] = state.StateID; control.FeedLink = options.ToString(); } control.Collapsed = length <= 0; Border child = new Border(); control.Controls.Add(child); child.ID = str + "_content"; this.DisplayState(workflow, state, items, child, 0, this.PageSize); this.CreateNavigator(control, str + "_navigator", length); } } }
/// <summary>Executes the command in the specified context.</summary> /// <param name="context">The context.</param> public override void Execute(CommandContext context) { Assert.ArgumentNotNull((object)context, "context"); string name1 = context.Parameters["database"]; string path = context.Parameters["id"]; string name2 = context.Parameters["language"]; string str = context.Parameters["version"]; Database database = Factory.GetDatabase(name1); if (database == null) { return; } Item obj = database.GetItem(path, Language.Parse(name2), Sitecore.Data.Version.Parse(str)); if (obj == null) { return; } IWorkflow workflow = obj.Database.WorkflowProvider.GetWorkflow(obj); if (workflow == null) { return; } WorkflowCommand[] workflowCommandArray = WorkflowFilterer.FilterVisibleCommands(workflow.GetCommands(obj), obj); var repository = new WorxboxItemsRepository(workflow); if (workflowCommandArray == null || workflowCommandArray.Length == 0) { return; } Menu menu = new Menu(); SheerResponse.DisableOutput(); foreach (WorkflowCommand command in workflowCommandArray) { string @string = new WorkflowCommandBuilder(obj, workflow, command).ToString(); menu.Add("C" + command.CommandID, command.DisplayName, command.Icon, string.Empty, @string, false, string.Empty, MenuItemType.Normal).Disabled = !Context.User.IsAdministrator && !obj.Locking.HasLock(); if (repository.IsWorxboxItem(obj.State.GetWorkflowState(), new DataUri(obj.Uri)) && repository.GetWorkflowCommandIDs().Contains(ID.Parse(command.CommandID))) { @string = new WorxBoxWorkflowCommandBuilder(obj, workflow, command).ToString(); menu.Add("C" + command.CommandID, "WorxBox " + command.DisplayName, command.Icon, string.Empty, @string, false, string.Empty, MenuItemType.Normal).Disabled = !Context.User.IsAdministrator && !obj.Locking.HasLock(); } } SheerResponse.EnableOutput(); SheerResponse.ShowContextMenu(Context.ClientPage.ClientRequest.Control, "right", (Control)menu); }