public override void Process(GetPageEditorNotificationsArgs arguments) { Assert.ArgumentNotNull((object)arguments, "arguments"); var contextItem = arguments.ContextItem; var database = contextItem.Database; var workflowProvider = database.WorkflowProvider; if (workflowProvider == null) { return; } var workflow = workflowProvider.GetWorkflow(contextItem); if (workflow == null) { return; } WorkflowState state = workflow.GetState(contextItem); if (state == null) { return; } var repository = new WorxboxItemsRepository(workflow); var worxBoxIcon = "/~/icon/worxbox/32x32/worxbox.png"; var displayIcon = $"<span><img src='{worxBoxIcon}' style='vertical-align:middle; padding-right: 1px;'/></span>"; using (new LanguageSwitcher(WebUtility.ClientLanguage)) { string description = GetDescription(workflow, state, database); string icon = state.Icon; var editorNotification = new PageEditorNotification(description, PageEditorNotificationType.Information) { Icon = icon }; var commands = WorkflowFilterer.FilterVisibleCommands(workflow.GetCommands(contextItem), contextItem); if (CanShowCommands(contextItem, commands)) { foreach (WorkflowCommand command in commands) { var notificationOption = new PageEditorNotificationOption(command.DisplayName, new WorkflowCommandBuilder(contextItem, workflow, command).ToString()); editorNotification.Options.Add(notificationOption); } editorNotification.Options.Add(new PageEditorNotificationOption("|", "")); foreach (WorkflowCommand command in commands) { if (repository.IsWorxboxItem(state, new DataUri(contextItem.Uri)) && repository.GetWorkflowCommandIDs().Contains(ID.Parse(command.CommandID))) { var notificationOption = new PageEditorNotificationOption(displayIcon + command.DisplayName, new WorxBoxWorkflowCommandBuilder(contextItem, workflow, command).ToString()); editorNotification.Options.Add(notificationOption); } } } arguments.Notifications.Add(editorNotification); } }
/// <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); }
/// <summary>Renders the panel.</summary> /// <param name="output">The output.</param> /// <param name="ribbon">The ribbon.</param> /// <param name="button">The button.</param> /// <param name="context">The context.</param> public override void Render(HtmlTextWriter output, Ribbon ribbon, Item button, CommandContext context) { Assert.ArgumentNotNull((object)output, "output"); Assert.ArgumentNotNull((object)ribbon, "ribbon"); Assert.ArgumentNotNull((object)button, "button"); Assert.ArgumentNotNull((object)context, "context"); if (context.Items.Length < 1) { return; } Item obj = context.Items[0]; if (!this.HasField(obj, FieldIDs.Workflow) || !Settings.Workflows.Enabled) { return; } IWorkflow workflow; WorkflowCommand[] commands; GetCommands(context.Items, out workflow, out commands); bool flag1 = this.IsCommandEnabled("item:checkout", obj); bool flag2 = CanShowCommands(obj, commands); bool flag3 = this.IsCommandEnabled("item:checkin", obj); this.RenderText(output, GetText(context.Items)); if (workflow == null && !flag1 && (!flag2 && !flag3)) { return; } Context.ClientPage.ClientResponse.DisableOutput(); ribbon.BeginSmallButtons(output); if (flag1) { this.RenderSmallButton(output, ribbon, string.Empty, Translate.Text("Edit"), "Office/24x24/edit_in_workflow.png", Translate.Text("Start editing this item."), "item:checkout", this.Enabled, false); } if (flag3) { Item checkInItem = this.GetCheckInItem(); if (checkInItem != null) { this.RenderSmallButton(output, ribbon, string.Empty, checkInItem["Phrase"], checkInItem.Appearance.Icon, Translate.Text("Check this item in."), "item:checkin(id=" + (object)obj.ID + ",language=" + obj.Language.Name + ",version=" + (object)obj.Version + ")", (this.Enabled ? 1 : 0) != 0, 0 != 0); } } if (workflow != null) { this.RenderSmallButton(output, ribbon, Sitecore.Web.UI.HtmlControls.Control.GetUniqueID("B"), Translate.Text("History"), "Office/16x16/history.png", Translate.Text("Show the workflow history."), "item:workflowhistory", this.Enabled, false); } if (flag2) { var repository = new WorxboxItemsRepository(workflow); foreach (WorkflowCommand command in commands) { this.RenderSmallButton(output, ribbon, string.Empty, command.DisplayName, command.Icon, command.DisplayName, new WorkflowCommandBuilder(obj, workflow, command).ToString(), this.Enabled, false); if (repository.IsWorxboxItem(obj.State.GetWorkflowState(), new DataUri(obj.Uri)) && repository.GetWorkflowCommandIDs().Contains(ID.Parse(command.CommandID))) { this.RenderSmallButton(output, ribbon, string.Empty, "WorxBox " + command.DisplayName, command.Icon, command.DisplayName, new WorxBoxWorkflowCommandBuilder(obj, workflow, command).ToString(), this.Enabled, false); } } } ribbon.EndSmallButtons(output); Context.ClientPage.ClientResponse.EnableOutput(); }
/// <summary>Runs the specified args.</summary> /// <param name="args">The arguments.</param> protected void Run(ClientPipelineArgs args) { Assert.ArgumentNotNull((object)args, "args"); bool flag1 = args.IsPostBack; bool flag2 = args.Parameters["checkmodified"] == "1"; if (!this.CheckCommandValidity(Sitecore.Client.ContentDatabase.Items[args.Parameters["id"], Language.Parse(args.Parameters["language"]), Sitecore.Data.Version.Parse(args.Parameters["version"])], args.Parameters["commandid"])) { return; } if (flag2) { if (!flag1) { if (Context.ClientPage.Modified) { SheerResponse.CheckModified(true); args.WaitForPostBack(); return; } } else if (args.Result == "cancel") { return; } args.Parameters["checkmodified"] = (string)null; flag1 = false; } if (flag1 && args.Result == "cancel") { return; } Sitecore.Collections.StringDictionary commentFields = new Sitecore.Collections.StringDictionary(); bool flag3 = StringUtil.GetString(new string[1] { args.Parameters["ui"] }) != "1"; bool flag4 = StringUtil.GetString(new string[1] { args.Parameters["suppresscomment"] }) == "1"; string commandId = args.Parameters["commandid"]; string workflowId = args.Parameters["workflowid"]; ItemUri itemUri = new ItemUri(args.Parameters["id"], Language.Parse(args.Parameters["language"]), Sitecore.Data.Version.Parse(args.Parameters["version"]), Sitecore.Client.ContentDatabase); if (!flag1 && flag3 && !flag4) { ID result = ID.Null; ID.TryParse(commandId, out result); WorkflowUIHelper.DisplayCommentDialog(itemUri, result); args.WaitForPostBack(); } else { if (flag1) { if (args.Result == "null" || args.Result == "undefined") { return; } commentFields = WorkflowUIHelper.ExtractFieldsFromFieldEditor(args.Result); } var workflow = Context.ContentDatabase.WorkflowProvider.GetWorkflow(workflowId); var repository = new WorxboxItemsRepository(workflow); var item = Context.ContentDatabase.GetItem(itemUri.ItemID, itemUri.Language, itemUri.Version); var workflowState = workflow.GetState(item); var completionCallback = new Processor("Workflow completed callback", (object)this, "WorkflowCompleteCallback"); if (repository.IsWorxboxItem(workflowState, new DataUri(itemUri)) && repository.GetWorkflowCommandIDs().Any(x => x == ID.Parse(commandId))) { var items = repository.GetWorxboxItems( repository.GetWorxboxWorkflowStates(workflow) .First(x => x.WorkflowCommands.Any(y => y.CommandID == commandId)), item); foreach (var compositeItem in items) { WorkflowUIHelper.ExecuteCommand(compositeItem.Uri, workflowId, commandId, commentFields, () => { // NOP }); } } WorkflowUIHelper.ExecuteCommand(itemUri, workflowId, commandId, commentFields, () => { WorkflowCompleteCallback(null); }); } }
protected void Run(ClientPipelineArgs args) { Assert.ArgumentNotNull((object)args, "args"); bool flag1 = args.IsPostBack; if (args.Parameters["checkmodified"] == "1") { if (!flag1) { if (Context.ClientPage.Modified) { SheerResponse.CheckModified(true); args.WaitForPostBack(); return; } } else if (args.Result == "cancel") { return; } args.Parameters["checkmodified"] = (string)null; flag1 = false; } string comments = string.Empty; bool flag2 = StringUtil.GetString(new string[1] { args.Parameters["ui"] }) != "1"; bool flag3 = StringUtil.GetString(new string[1] { args.Parameters["suppresscomment"] }) == "1"; if (!flag1 && flag2 && !flag3) { SheerResponse.Input("Enter a comment:", ""); args.WaitForPostBack(); } else { if (flag1) { if (args.Result == "null") { return; } comments = args.Result; } IWorkflowProvider workflowProvider = Sitecore.Client.ContentDatabase.WorkflowProvider; if (workflowProvider != null) { IWorkflow workflow = workflowProvider.GetWorkflow(args.Parameters["workflowid"]); if (workflow != null) { Item obj = Sitecore.Client.ContentDatabase.Items[args.Parameters["id"], Language.Parse(args.Parameters["language"]), Sitecore.Data.Version.Parse(args.Parameters["version"])]; if (obj != null) { var workflowState = workflow.GetState(obj); var repository = new WorxboxItemsRepository(workflow); try { if (repository.IsWorxboxItem(workflowState, new DataUri(obj.Uri)) && repository.GetWorkflowCommandIDs().Any(x => x == ID.Parse(args.Parameters["commandid"]))) { var items = repository.GetWorxboxItems( repository.GetWorxboxWorkflowStates(workflow) .First(x => x.WorkflowCommands.Any(y => y.CommandID == args.Parameters["commandid"])), obj); foreach (var compositeItem in items) { var compositeWorkflowResult = workflow.Execute(args.Parameters["commandid"], compositeItem, comments, true); if (!compositeWorkflowResult.Succeeded) { if (!string.IsNullOrEmpty(compositeWorkflowResult.Message)) { SheerResponse.Alert(compositeWorkflowResult.Message); } } } } WorkflowResult workflowResult = workflow.Execute(args.Parameters["commandid"], obj, comments, true); if (!workflowResult.Succeeded) { if (!string.IsNullOrEmpty(workflowResult.Message)) { SheerResponse.Alert(workflowResult.Message); } } } catch (WorkflowStateMissingException ex) { SheerResponse.Alert("One or more items could not be processed because their workflow state does not specify the next step."); } } } } Context.ClientPage.SendMessage((object)this, "item:refresh"); SheerResponse.Eval("window.top.location.reload();"); } }