using System; using System.Data; using System.Web.UI; using System.Web.UI.WebControls; using System.Collections.Generic; using System.Text; using CMS.CMSHelper; using CMS.GlobalHelper; using CMS.SettingsProvider; using CMS.DocumentEngine; using CMS.UIControls; using CMS.WorkflowEngine; using CMS.WorkflowEngine.GraphConfig; public partial class CMSModules_Workflows_Workflow_Steps : CMSWorkflowPage { #region "Page events" protected void Page_Load(object sender, EventArgs e) { stepsGrid.OnAction += stepsGrid_OnAction; stepsGrid.DataBinding += stepsGrid_DataBinding; int workflowId = QueryHelper.GetInteger("workflowid", 0); // Control initialization InitializeMasterPage(workflowId); // Prepare the steps query parameters QueryDataParameters parameters = new QueryDataParameters(); parameters.Add("@StepWorkflowID", workflowId); stepsGrid.WhereCondition = "StepWorkflowID = @StepWorkflowID"; stepsGrid.QueryParameters = parameters; stepsGrid.OnExternalDataBound += stepsGrid_OnExternalDataBound; } #endregion #region "Private methods" /// /// Initializes the master page elements. /// private void InitializeMasterPage(int workflowId) { // Get workflow WorkflowInfo wi = WorkflowInfoProvider.GetWorkflowInfo(workflowId); // Set edited object EditedObject = wi; if (wi != null) { // Check if 'automatically publish changes' is allowed if (wi.WorkflowAutoPublishChanges) { ShowInformation(GetString("Development-Workflow_Steps.CustomStepsCanNotBeCreated")); } else { // Set actions string[,] actions = new string[1, 8]; actions[0, 0] = "HyperLink"; actions[0, 1] = GetString("Development-Workflow_Steps.NewStep"); actions[0, 3] = "~/CMSModules/Workflows/Workflow_Step_New.aspx?workflowid=" + workflowId; actions[0, 5] = GetImageUrl("Objects/CMS_WorkflowStep/add.png"); CurrentMaster.HeaderActions.Actions = actions; } } } #endregion #region "Grid events" protected static object stepsGrid_OnExternalDataBound(object sender, string sourceName, object parameter) { WorkflowStepTypeEnum stepType = WorkflowStepTypeEnum.Undefined; GridViewRow container = null; switch (sourceName.ToLowerCSafe()) { case "allowaction": container = (GridViewRow)parameter; stepType = (WorkflowStepTypeEnum)ValidationHelper.GetInteger(DataHelper.GetDataRowViewValue((DataRowView)container.DataItem, "StepType"), 3); switch (stepType) { case WorkflowStepTypeEnum.DocumentEdit: case WorkflowStepTypeEnum.DocumentPublished: case WorkflowStepTypeEnum.DocumentArchived: ((Control)sender).Visible = false; break; } break; case "steptype": stepType = (WorkflowStepTypeEnum)ValidationHelper.GetInteger(parameter, 3); WorkflowNode node = WorkflowNode.GetInstance(stepType); return HTMLHelper.HTMLEncode(node.Name); case "#objectmenu": container = (GridViewRow)parameter; WorkflowStepInfo step = new WorkflowStepInfo(((DataRowView)container.DataItem).Row); if (step.StepIsDefault) { ImageButton button = ((ImageButton)sender); button.Visible = false; } break; } return parameter; } protected void stepsGrid_DataBinding(object sender, EventArgs e) { stepsGrid.GridView.Sort("StepOrder", SortDirection.Ascending); } /// /// Handles the UniGrid's OnAction event. /// /// Name of item (button) that threw event /// ID (value of Primary key) of corresponding data row protected void stepsGrid_OnAction(string actionName, object actionArgument) { int workflowstepid = Convert.ToInt32(actionArgument); if (actionName == "edit") { URLHelper.Redirect("Workflow_Step_Edit.aspx?objectid=" + workflowstepid); } else if (actionName == "delete") { // Check if documents use the workflow WorkflowStepInfo si = WorkflowStepInfoProvider.GetWorkflowStepInfo(workflowstepid); if (si != null) { List documentNames = new List(); if (WorkflowStepInfoProvider.CheckDependencies(workflowstepid, ref documentNames)) { // Encode and localize names StringBuilder sb = new StringBuilder(); documentNames.ForEach(item => sb.Append("
", HTMLHelper.HTMLEncode(ResHelper.LocalizeString(item)))); ShowError(GetString("Workflow.CannotDeleteStepUsed"), GetString("workflow.documentlist") + sb.ToString(), null); return; } else { // Delete the workflow step WorkflowStepInfoProvider.DeleteWorkflowStepInfo(workflowstepid); } } } else if (actionName == "moveup") { WorkflowStepInfoProvider.MoveStepUp(WorkflowStepInfoProvider.GetWorkflowStepInfo(workflowstepid)); } else if (actionName == "movedown") { WorkflowStepInfoProvider.MoveStepDown(WorkflowStepInfoProvider.GetWorkflowStepInfo(workflowstepid)); } } #endregion }