Exemple #1
0
        private static int LoadByGuid2(Guid guid, RockContext rockContext)
        {
            var workflowActionTypeService = new WorkflowActionTypeService(rockContext);

            return(workflowActionTypeService
                   .Queryable().AsNoTracking()
                   .Where(c => c.Guid.Equals(guid))
                   .Select(c => c.Id)
                   .FirstOrDefault());
        }
Exemple #2
0
        private static WorkflowActionTypeCache LoadById2(int id, RockContext rockContext)
        {
            var workflowActionTypeService = new WorkflowActionTypeService(rockContext);
            var workflowActionTypeModel   = workflowActionTypeService
                                            .Queryable()
                                            .Where(t => t.Id == id)
                                            .FirstOrDefault();

            if (workflowActionTypeModel != null)
            {
                return(new WorkflowActionTypeCache(workflowActionTypeModel));
            }

            return(null);
        }
        /// <summary>
        /// Restores the view-state information from a previous user control request that was saved by the <see cref="M:System.Web.UI.UserControl.SaveViewState" /> method.
        /// </summary>
        /// <param name="savedState">An <see cref="T:System.Object" /> that represents the user control state to be restored.</param>
        protected override void LoadViewState(object savedState)
        {
            base.LoadViewState(savedState);

            string json = ViewState["Workflow"] as string;

            if (string.IsNullOrWhiteSpace(json))
            {
                Workflow = new Workflow();
            }
            else
            {
                Workflow = JsonConvert.DeserializeObject <Workflow>(json);
            }

            // Wire up type objects since they are not serialized
            var rockContext         = new RockContext();
            var workflowTypeService = new WorkflowTypeService(rockContext);
            var activityTypeService = new WorkflowActivityTypeService(rockContext);
            var actionTypeService   = new WorkflowActionTypeService(rockContext);

            Workflow.WorkflowType = workflowTypeService.Get(Workflow.WorkflowTypeId);
            foreach (var activity in Workflow.Activities)
            {
                activity.ActivityType = activityTypeService.Get(activity.ActivityTypeId);
                foreach (var action in activity.Actions)
                {
                    action.ActionType = actionTypeService.Get(action.ActionTypeId);
                }
            }

            // Add new log entries since they are not serialized
            LogEntries = ViewState["LogEntries"] as List <string>;
            if (LogEntries == null)
            {
                LogEntries = new List <string>();
            }
            LogEntries.ForEach(l => Workflow.AddLogEntry(l));

            ExpandedActivities = ViewState["ExpandedActivities"] as List <Guid>;
            if (ExpandedActivities == null)
            {
                ExpandedActivities = new List <Guid>();
            }

            _canEdit = UserCanEdit || Workflow.IsAuthorized(Rock.Security.Authorization.EDIT, CurrentPerson);
            _canView = _canEdit || (Workflow.IsAuthorized(Authorization.VIEW, CurrentPerson) && Workflow.IsAuthorized("ViewList", CurrentPerson));
        }
        /// <summary>
        /// Handles the Click event of the btnSave control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
        protected void btnSave_Click(object sender, EventArgs e)
        {
            WorkflowType        workflowType;
            WorkflowTypeService service = new WorkflowTypeService();

            int workflowTypeId = int.Parse(hfWorkflowTypeId.Value);

            if (workflowTypeId == 0)
            {
                workflowType          = new WorkflowType();
                workflowType.IsSystem = false;
                workflowType.Name     = string.Empty;
            }
            else
            {
                workflowType = service.Get(workflowTypeId);
            }

            workflowType.Name        = tbName.Text;
            workflowType.Description = tbDescription.Text;
            workflowType.CategoryId  = cpCategory.SelectedValueAsInt();
            workflowType.Order       = int.Parse(tbOrder.Text);
            workflowType.WorkTerm    = tbWorkTerm.Text;
            if (!string.IsNullOrWhiteSpace(tbProcessingInterval.Text))
            {
                workflowType.ProcessingIntervalSeconds = int.Parse(tbProcessingInterval.Text);
            }

            workflowType.IsPersisted  = cbIsPersisted.Checked;
            workflowType.LoggingLevel = ddlLoggingLevel.SelectedValueAsEnum <WorkflowLoggingLevel>();
            workflowType.IsActive     = cbIsActive.Checked;

            if (!Page.IsValid)
            {
                return;
            }

            if (!workflowType.IsValid)
            {
                // Controls will render the error messages
                return;
            }

            RockTransactionScope.WrapTransaction(() =>
            {
                List <WorkflowActivityTypeEditor> workflowActivityTypeEditorList = phActivities.Controls.OfType <WorkflowActivityTypeEditor>().ToList();

                // delete WorkflowActionTypes that aren't assigned in the UI anymore
                WorkflowActionTypeService workflowActionTypeService = new WorkflowActionTypeService();
                List <WorkflowActionType> actionTypesInDB           = workflowActionTypeService.Queryable().Where(a => a.ActivityType.WorkflowTypeId.Equals(workflowType.Id)).ToList();
                List <WorkflowActionType> actionTypesInUI           = new List <WorkflowActionType>();
                foreach (WorkflowActivityTypeEditor workflowActivityTypeEditor in workflowActivityTypeEditorList)
                {
                    foreach (WorkflowActionTypeEditor editor in workflowActivityTypeEditor.Controls.OfType <WorkflowActionTypeEditor>())
                    {
                        actionTypesInUI.Add(editor.WorkflowActionType);
                    }
                }

                var deletedActionTypes = from actionType in actionTypesInDB
                                         where !actionTypesInUI.Select(u => u.Guid).Contains(actionType.Guid)
                                         select actionType;

                deletedActionTypes.ToList().ForEach(actionType =>
                {
                    workflowActionTypeService.Delete(actionType, CurrentPersonId);
                    workflowActionTypeService.Save(actionType, CurrentPersonId);
                });

                // delete WorkflowActivityTypes that aren't assigned in the UI anymore
                WorkflowActivityTypeService workflowActivityTypeService = new WorkflowActivityTypeService();
                List <WorkflowActivityType> activityTypesInDB           = workflowActivityTypeService.Queryable().Where(a => a.WorkflowTypeId.Equals(workflowType.Id)).ToList();
                List <WorkflowActivityType> activityTypesInUI           = workflowActivityTypeEditorList.Select(a => a.GetWorkflowActivityType()).ToList();

                var deletedActivityTypes = from activityType in activityTypesInDB
                                           where !activityTypesInUI.Select(u => u.Guid).Contains(activityType.Guid)
                                           select activityType;

                deletedActivityTypes.ToList().ForEach(activityType =>
                {
                    workflowActivityTypeService.Delete(activityType, CurrentPersonId);
                    workflowActivityTypeService.Save(activityType, CurrentPersonId);
                });

                // add or update WorkflowActivityTypes(and Actions) that are assigned in the UI
                int workflowActivityTypeOrder = 0;
                foreach (WorkflowActivityTypeEditor workflowActivityTypeEditor in workflowActivityTypeEditorList)
                {
                    WorkflowActivityType editorWorkflowActivityType = workflowActivityTypeEditor.GetWorkflowActivityType();
                    WorkflowActivityType workflowActivityType       = workflowType.ActivityTypes.FirstOrDefault(a => a.Guid.Equals(editorWorkflowActivityType.Guid));

                    if (workflowActivityType == null)
                    {
                        workflowActivityType = editorWorkflowActivityType;
                        workflowType.ActivityTypes.Add(workflowActivityType);
                    }
                    else
                    {
                        workflowActivityType.Name                    = editorWorkflowActivityType.Name;
                        workflowActivityType.Description             = editorWorkflowActivityType.Description;
                        workflowActivityType.IsActive                = editorWorkflowActivityType.IsActive;
                        workflowActivityType.IsActivatedWithWorkflow = editorWorkflowActivityType.IsActivatedWithWorkflow;
                    }

                    workflowActivityType.Order = workflowActivityTypeOrder++;

                    int workflowActionTypeOrder = 0;
                    foreach (WorkflowActionTypeEditor workflowActionTypeEditor in workflowActivityTypeEditor.Controls.OfType <WorkflowActionTypeEditor>())
                    {
                        WorkflowActionType editorWorkflowActionType = workflowActionTypeEditor.WorkflowActionType;
                        WorkflowActionType workflowActionType       = workflowActivityType.ActionTypes.FirstOrDefault(a => a.Guid.Equals(editorWorkflowActionType.Guid));
                        if (workflowActionType == null)
                        {
                            workflowActionType = editorWorkflowActionType;
                            workflowActivityType.ActionTypes.Add(workflowActionType);
                        }
                        else
                        {
                            workflowActionType.Name         = editorWorkflowActionType.Name;
                            workflowActionType.EntityTypeId = editorWorkflowActionType.EntityTypeId;
                            workflowActionType.IsActionCompletedOnSuccess   = editorWorkflowActionType.IsActionCompletedOnSuccess;
                            workflowActionType.IsActivityCompletedOnSuccess = editorWorkflowActionType.IsActivityCompletedOnSuccess;
                            workflowActionType.Attributes      = editorWorkflowActionType.Attributes;
                            workflowActionType.AttributeValues = editorWorkflowActionType.AttributeValues;
                        }


                        workflowActionType.Order = workflowActionTypeOrder++;
                    }
                }

                if (workflowType.Id.Equals(0))
                {
                    service.Add(workflowType, CurrentPersonId);
                }

                service.Save(workflowType, CurrentPersonId);

                foreach (var activityType in workflowType.ActivityTypes)
                {
                    foreach (var workflowActionType in activityType.ActionTypes)
                    {
                        Rock.Attribute.Helper.SaveAttributeValues(workflowActionType, CurrentPersonId);
                    }
                }
            });

            var qryParams = new Dictionary <string, string>();

            qryParams["workflowTypeId"] = workflowType.Id.ToString();
            NavigateToPage(RockPage.Guid, qryParams);
        }