Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
        /// <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();
        }
Esempio n. 4
0
        /// <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);
                });
            }
        }
Esempio n. 5
0
        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();");
            }
        }