private void SendNotification(PortalSettings settings, ContentWorkflow workflow, ContentItem item, ContentWorkflowState state, string subject, string body, string comment, int destinationStateID, int actionUserID, string source, string[] parameters)
        {
            var permissions     = GetWorkflowStatePermissionByState(destinationStateID);
            var users           = GetUsersFromPermissions(settings, permissions);
            var roles           = GetRolesFromPermissions(settings, permissions);
            var replacedSubject = ReplaceNotificationTokens(subject, workflow, item, GetWorkflowStateByID(destinationStateID), settings.PortalId, actionUserID);
            var replacedBody    = ReplaceNotificationTokens(body, workflow, item, GetWorkflowStateByID(destinationStateID), settings.PortalId, actionUserID);

            SendNotification(state.SendEmail, state.SendMessage, settings, roles, users, replacedSubject, replacedBody, comment, actionUserID, source, parameters);
        }
        private int GetLastWorkflowStateID(ContentWorkflow workflow)
        {
            int intStateID = -1;
            var states     = workflow.States;

            if (states.Any())
            {
                intStateID = states.OrderBy(s => s.Order).LastOrDefault().StateID;
            }
            return(intStateID);
        }
        public string ReplaceNotificationTokens(string text, ContentWorkflow workflow, ContentItem item, ContentWorkflowState state, int portalID, int userID, string comment = "")
        {
            var user     = UserController.GetUserById(portalID, userID);
            var datetime = DateTime.Now;
            var result   = text.Replace("[USER]", user != null ? user.DisplayName : "");

            result = result.Replace("[DATE]", datetime.ToString("d-MMM-yyyy hh:mm") + datetime.ToString("tt").ToLowerInvariant());
            result = result.Replace("[STATE]", state != null ? state.StateName : "");
            result = result.Replace("[WORKFLOW]", workflow != null ? workflow.WorkflowName : "");
            result = result.Replace("[CONTENT]", item != null ? item.ContentTitle : "");
            result = result.Replace("[COMMENT]", !String.IsNullOrEmpty(comment) ? comment : "");

            return(result);
        }
        private int GetPreviousWorkflowStateID(ContentWorkflow workflow, int stateID)
        {
            int intPreviousStateID = -1;

            var states  = workflow.States.OrderBy(s => s.Order);
            int intItem = 0;

            // locate the current state
            var initState = states.SingleOrDefault(s => s.StateID == stateID);

            if (initState != null)
            {
                intPreviousStateID = initState.StateID;
            }

            for (int i = 0; i < states.Count(); i++)
            {
                if (states.ElementAt(i).StateID == stateID)
                {
                    intPreviousStateID = stateID;
                    intItem            = i;
                }
            }

            // get previous active state
            if (intPreviousStateID == stateID)
            {
                intItem = intItem - 1;
                while (intItem >= 0)
                {
                    if (states.ElementAt(intItem).IsActive)
                    {
                        intPreviousStateID = states.ElementAt(intItem).StateID;
                        break;
                    }

                    intItem = intItem - 1;
                }
            }

            // if none found then reset to first state
            if (intPreviousStateID == -1)
            {
                intPreviousStateID = this.GetFirstWorkflowStateID(workflow);
            }

            return(intPreviousStateID);
        }
        private int GetNextWorkflowStateID(ContentWorkflow workflow, int stateID)
        {
            int intNextStateID = -1;
            var states         = workflow.States.OrderBy(s => s.Order);
            int intItem        = 0;

            // locate the current state
            for (intItem = 0; intItem < states.Count(); intItem++)
            {
                if (states.ElementAt(intItem).StateID == stateID)
                {
                    intNextStateID = stateID;
                    break;
                }
            }

            // get next active state
            if (intNextStateID == stateID)
            {
                intItem = intItem + 1;
                while (intItem < states.Count())
                {
                    if (states.ElementAt(intItem).IsActive)
                    {
                        intNextStateID = states.ElementAt(intItem).StateID;
                        break;
                    }

                    intItem = intItem + 1;
                }
            }

            // if none found then reset to first state
            if (intNextStateID == -1)
            {
                intNextStateID = this.GetFirstWorkflowStateID(workflow);
            }

            return(intNextStateID);
        }
        private bool IsWorkflowCompleted(ContentWorkflow workflow, ContentItem item)
        {
            var endStateID = GetLastWorkflowStateID(workflow);

            return(item.StateID == Null.NullInteger || endStateID == item.StateID);
        }
        public void CreateDefaultWorkflows(int portalId)
        {
            if (GetWorkflows(portalId).Any(w => w.WorkflowName == Localization.GetString("DefaultWorkflowName")))
            {
                return;
            }

            var worflow = new ContentWorkflow
            {
                PortalID           = portalId,
                WorkflowName       = Localization.GetString("DefaultWorkflowName"),
                Description        = Localization.GetString("DefaultWorkflowDescription"),
                IsDeleted          = false,
                StartAfterCreating = false,
                StartAfterEditing  = true,
                DispositionEnabled = false,
                States             = new List <ContentWorkflowState>
                {
                    new ContentWorkflowState
                    {
                        StateName =
                            Localization.GetString("DefaultWorkflowState1.StateName"),
                        Order                    = 1,
                        IsActive                 = true,
                        SendEmail                = false,
                        SendMessage              = true,
                        IsDisposalState          = false,
                        OnCompleteMessageSubject =
                            Localization.GetString(
                                "DefaultWorkflowState1.OnCompleteMessageSubject"),
                        OnCompleteMessageBody =
                            Localization.GetString(
                                "DefaultWorkflowState1.OnCompleteMessageBody"),
                        OnDiscardMessageSubject =
                            Localization.GetString(
                                "DefaultWorkflowState1.OnDiscardMessageSubject"),
                        OnDiscardMessageBody =
                            Localization.GetString(
                                "DefaultWorkflowState1.OnDiscardMessageBody")
                    },
                    new ContentWorkflowState
                    {
                        StateName =
                            Localization.GetString("DefaultWorkflowState2.StateName"),
                        Order                    = 2,
                        IsActive                 = true,
                        SendEmail                = false,
                        SendMessage              = true,
                        IsDisposalState          = false,
                        OnCompleteMessageSubject =
                            Localization.GetString(
                                "DefaultWorkflowState2.OnCompleteMessageSubject"),
                        OnCompleteMessageBody =
                            Localization.GetString(
                                "DefaultWorkflowState2.OnCompleteMessageBody"),
                        OnDiscardMessageSubject =
                            Localization.GetString(
                                "DefaultWorkflowState2.OnDiscardMessageSubject"),
                        OnDiscardMessageBody =
                            Localization.GetString(
                                "DefaultWorkflowState2.OnDiscardMessageBody")
                    },
                    new ContentWorkflowState
                    {
                        StateName =
                            Localization.GetString("DefaultWorkflowState3.StateName"),
                        Order                    = 3,
                        IsActive                 = true,
                        SendEmail                = false,
                        SendMessage              = true,
                        IsDisposalState          = false,
                        OnCompleteMessageSubject =
                            Localization.GetString(
                                "DefaultWorkflowState3.OnCompleteMessageSubject"),
                        OnCompleteMessageBody =
                            Localization.GetString(
                                "DefaultWorkflowState3.OnCompleteMessageBody"),
                        OnDiscardMessageSubject =
                            Localization.GetString(
                                "DefaultWorkflowState3.OnDiscardMessageSubject"),
                        OnDiscardMessageBody =
                            Localization.GetString(
                                "DefaultWorkflowState3.OnDiscardMessageBody")
                    }
                }
            };

            AddWorkflow(worflow);
            foreach (var state in worflow.States)
            {
                state.WorkflowID = worflow.WorkflowID;
                AddWorkflowState(state);
            }
        }
 public void UpdateWorkflow(ContentWorkflow workflow)
 {
     DataProvider.Instance().UpdateContentWorkflow(workflow.WorkflowID, workflow.WorkflowName, workflow.Description, workflow.IsDeleted, workflow.StartAfterCreating, workflow.StartAfterEditing, workflow.DispositionEnabled);
 }
        public void AddWorkflow(ContentWorkflow workflow)
        {
            var id = DataProvider.Instance().AddContentWorkflow(workflow.PortalID, workflow.WorkflowName, workflow.Description, workflow.IsDeleted, workflow.StartAfterCreating, workflow.StartAfterEditing, workflow.DispositionEnabled);

            workflow.WorkflowID = id;
        }
Exemplo n.º 10
0
        public void CreateDefaultWorkflows(int portalId)
        {
            var wf = new ContentWorkflow
            {
                PortalID           = portalId,
                WorkflowName       = Localization.GetString("DefaultWorkflowName"),
                Description        = Localization.GetString("DefaultWorkflowDescription"),
                IsDeleted          = false,
                StartAfterCreating = false,
                StartAfterEditing  = true,
                DispositionEnabled = false,
                States             = new List <ContentWorkflowState>
                {
                    new ContentWorkflowState
                    {
                        StateName                = Localization.GetString("DefaultWorkflowState1.StateName"),
                        Order                    = 1,
                        IsActive                 = true,
                        SendEmail                = false,
                        SendMessage              = true,
                        IsDisposalState          = false,
                        OnCompleteMessageSubject = Localization.GetString("DefaultWorkflowState1.OnCompleteMessageSubject"),
                        OnCompleteMessageBody    = Localization.GetString("DefaultWorkflowState1.OnCompleteMessageBody"),
                        OnDiscardMessageSubject  = Localization.GetString("DefaultWorkflowState1.OnDiscardMessageSubject"),
                        OnDiscardMessageBody     = Localization.GetString("DefaultWorkflowState1.OnDiscardMessageBody")
                    },
                    new ContentWorkflowState
                    {
                        StateName                = Localization.GetString("DefaultWorkflowState2.StateName"),
                        Order                    = 2,
                        IsActive                 = true,
                        SendEmail                = false,
                        SendMessage              = true,
                        IsDisposalState          = false,
                        OnCompleteMessageSubject = Localization.GetString("DefaultWorkflowState2.OnCompleteMessageSubject"),
                        OnCompleteMessageBody    = Localization.GetString("DefaultWorkflowState2.OnCompleteMessageBody"),
                        OnDiscardMessageSubject  = Localization.GetString("DefaultWorkflowState2.OnDiscardMessageSubject"),
                        OnDiscardMessageBody     = Localization.GetString("DefaultWorkflowState2.OnDiscardMessageBody")
                    },
                    new ContentWorkflowState
                    {
                        StateName                = Localization.GetString("DefaultWorkflowState3.StateName"),
                        Order                    = 3,
                        IsActive                 = true,
                        SendEmail                = false,
                        SendMessage              = true,
                        IsDisposalState          = false,
                        OnCompleteMessageSubject = Localization.GetString("DefaultWorkflowState3.OnCompleteMessageSubject"),
                        OnCompleteMessageBody    = Localization.GetString("DefaultWorkflowState3.OnCompleteMessageBody"),
                        OnDiscardMessageSubject  = Localization.GetString("DefaultWorkflowState3.OnDiscardMessageSubject"),
                        OnDiscardMessageBody     = Localization.GetString("DefaultWorkflowState3.OnDiscardMessageBody")
                    }
                }
            };

            AddWorkflow(wf);
            foreach (var wfs in wf.States)
            {
                wfs.WorkflowID = wf.WorkflowID;
                AddWorkflowState(wfs);
            }
        }