using System; using CMS.CMSHelper; using CMS.GlobalHelper; using CMS.Scheduler; using CMS.SettingsProvider; using CMS.SiteProvider; using CMS.UIControls; using CMS.WebFarmSync; public partial class CMSModules_Scheduler_Pages_Task_Edit : CMSScheduledTasksPage { #region "Variables" protected int taskId; protected TaskInfo taskObj; protected SiteInfo si; protected bool cmsdesk; protected int siteID = 0; protected bool developmentMode = SettingsKeyProvider.DevelopmentMode; #endregion protected void Page_Load(object sender, EventArgs e) { rfvAssembly.ErrorMessage = GetString("Task_Edit.EmptyAssembly"); rfvDisplayName.ErrorMessage = GetString("general.requiresdisplayname"); rfvName.ErrorMessage = GetString("Task_Edit.EmptyName"); rfvClass.ErrorMessage = GetString("Task_Edit.EmptyClass"); // Control initializations lblTaskAssemblyName.Text = GetString("Task_Edit.TaskAssemblyNameLabel"); lblFrom.Text = GetString("scheduler.from"); lblTaskClass.Text = GetString("Task_Edit.TaskClassLabel"); lblTaskData.Text = GetString("Task_Edit.TaskDataLabel"); lblTaskName.Text = GetString("Task_Edit.TaskNameLabel"); lblTaskEnabled.Text = GetString("Task_Edit.TaskEnabledLabel"); lblTaskInterval.Text = GetString("Task_Edit.TaskIntervalLabel"); lblTaskDisplayName.Text = GetString("Task_Edit.TaskDisplayNameLabel"); lblTaskDeleteAfterLastRun.Text = GetString("Task_Edit.TaskDeleteAfterLastRunLabel"); lblServerName.Text = GetString("Task_Edit.TaskServerNameLabel"); chkAllServers.Text = GetString("Task_Edit.TaskAllServers"); btnReset.Text = GetString("General.reset"); btnReset.Click += new EventHandler(btnReset_Click); btnReset.OnClientClick = "if (!confirm('" + GetString("tasks.reset") + "')) return false;"; plcDevelopment.Visible = developmentMode; // Show 'Allow run in external service' checkbox in development mode plcAllowExternalService.Visible = developmentMode; string currentTask = GetString("Task_Edit.NewItemCaption"); string title = GetString("Task_Edit.HeaderCaption"); taskId = ValidationHelper.GetInteger(Request.QueryString["taskname"], 0); if (taskId > 0) { taskObj = TaskInfoProvider.GetTaskInfo(taskId); if (taskObj != null) { // Global task and user is not global administrator and task's site id is different than current site id if (!CMSContext.CurrentUser.UserSiteManagerAdmin && ((taskObj.TaskSiteID == 0) || (taskObj.TaskSiteID != SiteID))) { RedirectToAccessDenied(GetString("general.nopermission")); } currentTask = taskObj.TaskDisplayName; title = GetString("Task_Edit.HeaderCaptionEdit"); if (!RequestHelper.IsPostBack()) { ReloadData(); // Show that the task was created or updated successfully if (Request.QueryString["saved"] == "1") { ShowChangesSaved(); } } } } else { // Check "modify" permission if (!CMSContext.CurrentUser.IsAuthorizedPerResource("CMS.ScheduledTasks", "Modify")) { RedirectToAccessDenied("CMS.ScheduledTasks", "Modify"); } if (WebFarmServerInfoProvider.UseWebFarmSynchronization()) { if (!RequestHelper.IsPostBack()) { chkAllServers.Visible = true; } chkAllServers.Attributes.Add("onclick", "document.getElementById('" + txtServerName.ClientID + "').disabled = document.getElementById('" + chkAllServers.ClientID + "').checked;"); } } siteID = 0; if (SiteID != 0) { cmsdesk = true; siteID = SiteID; } if (SelectedSiteID != 0) { cmsdesk = false; if (Request.QueryString["selectedsiteid"] != "Global") { siteID = SelectedSiteID; } } // Get the site record if (siteID > 0) { si = SiteInfoProvider.GetSiteInfo(siteID); plcRunIndividually.Visible = false; } // Initializes page title control string[,] tabs = new string[2, 3]; tabs[0, 0] = GetString("Task_Edit.ItemListLink"); if ((taskObj == null) || (taskObj.TaskType != ScheduledTaskTypeEnum.System)) { tabs[0, 1] = "~/CMSModules/Scheduler/Pages/Tab_Tasks.aspx?" + GetSiteOrSelectedSiteQuery(); } else { tabs[0, 1] = "~/CMSModules/Scheduler/Pages/Tab_SystemTasks.aspx?" + GetSiteOrSelectedSiteQuery(); } tabs[1, 0] = currentTask; tabs[1, 1] = ""; tabs[1, 2] = ""; CurrentMaster.Title.Breadcrumbs = tabs; CurrentMaster.Title.HelpTopicName = "newedit_task"; CurrentMaster.Title.HelpName = "helpTopic"; } void btnReset_Click(object sender, EventArgs e) { if (taskObj != null) { taskObj.TaskExecutions = 0; taskObj.TaskLastExecutionReset = DateTime.Now; TaskInfoProvider.SetTaskInfo(taskObj); lblFrom.Text += " " + DateTime.Now.ToString("d"); plcResetFrom.Visible = true; ShowConfirmation(GetString("task.executions.reseted")); } } /// /// Load data of editing task. /// protected void ReloadData() { if (taskObj != null) { txtTaskAssemblyName.Text = taskObj.TaskAssemblyName; txtTaskClass.Text = taskObj.TaskClass; txtTaskData.Text = taskObj.TaskData; txtTaskName.Text = taskObj.TaskName; lblExecutions.Text = (taskObj.TaskExecutions == 0) ? "0" : taskObj.TaskExecutions.ToString(); chkTaskEnabled.Checked = taskObj.TaskEnabled; chkTaskDeleteAfterLastRun.Checked = taskObj.TaskDeleteAfterLastRun; ScheduleInterval1.ScheduleInterval = taskObj.TaskInterval; txtTaskDisplayName.Text = taskObj.TaskDisplayName; txtServerName.Text = taskObj.TaskServerName; chkRunTaskInSeparateThread.Checked = taskObj.TaskRunInSeparateThread; ucMacroEditor.Text = taskObj.TaskCondition; chkRunIndividually.Checked = ValidationHelper.GetBoolean(taskObj.TaskRunIndividuallyForEachSite, false); lblFrom.Text += " " + ((taskObj.TaskLastExecutionReset != DateTimeHelper.ZERO_TIME) ? taskObj.TaskLastExecutionReset.ToString("d") : " - "); bool allowExternalService = taskObj.TaskAllowExternalService; chkTaskAllowExternalService.Checked = allowExternalService; chkTaskUseExternalService.Checked = taskObj.TaskUseExternalService; // Show 'Use external service' if task can run in external service plcUseExternalService.Visible = developmentMode || allowExternalService; drpModule.Value = taskObj.TaskResourceID; ucUser.Value = taskObj.TaskUserID; plcResetFrom.Visible = taskObj.TaskLastExecutionReset != DateTimeHelper.ZERO_TIME; } } /// /// Sets data to database. /// protected void btnOK_Click(object sender, EventArgs e) { // Check "modify" permission if (!CMSContext.CurrentUser.IsAuthorizedPerResource("CMS.ScheduledTasks", "Modify")) { RedirectToAccessDenied("CMS.ScheduledTasks", "Modify"); } // Check required fields format string errorMessage = new Validator().NotEmpty(txtTaskDisplayName.Text, rfvDisplayName.ErrorMessage).NotEmpty(txtTaskName.Text, rfvName.ErrorMessage).NotEmpty(txtTaskAssemblyName.Text, rfvAssembly.ErrorMessage).NotEmpty(txtTaskClass.Text, rfvClass.ErrorMessage). IsCodeName(txtTaskName.Text, GetString("Task_Edit.InvalidTaskName")). IsCodeName(txtTaskAssemblyName.Text, GetString("Task_Edit.InvalidTaskAssemblyName")). IsCodeName(txtTaskClass.Text, GetString("Task_Edit.InvalidTaskClass")) .Result; if ((errorMessage == String.Empty) && !ScheduleInterval1.CheckIntervalPreceedings()) { errorMessage = GetString("Task_Edit.BetweenIntervalPreceedingsError"); } if ((errorMessage == String.Empty) && !ScheduleInterval1.CheckOneDayMinimum()) { errorMessage = GetString("Task_Edit.AtLeastOneDayError"); } // Checking date/time limit (SQL limit) if (errorMessage == String.Empty) { TaskInterval ti = SchedulingHelper.DecodeInterval(ScheduleInterval1.ScheduleInterval); if ((ti != null) && ((ti.StartTime < new DateTime(1755, 1, 1, 0, 0, 0)) || (ti.StartTime > new DateTime(9997, 12, 31, 23, 59, 59)))) { ti.StartTime = DateTime.Now; ScheduleInterval1.ScheduleInterval = SchedulingHelper.EncodeInterval(ti); } } if (errorMessage != "") { ShowError(errorMessage); } else { // Check existing task name TaskInfo existingTask; if (si != null) { existingTask = TaskInfoProvider.GetTaskInfo(txtTaskName.Text.Trim(), si.SiteName); } else { existingTask = TaskInfoProvider.GetTaskInfo(txtTaskName.Text.Trim(), null); } if ((existingTask != null) && ((taskObj == null) || (existingTask.TaskID != taskObj.TaskID))) { ShowError(GetString("Task_Edit.TaskNameExists").Replace("%%name%%", existingTask.TaskName)); return; } if (taskObj == null) { // create new item -> insert taskObj = new TaskInfo(); taskObj.TaskSiteID = siteID; if (!developmentMode) { taskObj.TaskAllowExternalService = true; } } taskObj.TaskAssemblyName = txtTaskAssemblyName.Text.Trim(); taskObj.TaskClass = txtTaskClass.Text.Trim(); taskObj.TaskData = txtTaskData.Text.Trim(); taskObj.TaskName = txtTaskName.Text.Trim(); taskObj.TaskEnabled = chkTaskEnabled.Checked; taskObj.TaskDeleteAfterLastRun = chkTaskDeleteAfterLastRun.Checked; taskObj.TaskInterval = ScheduleInterval1.ScheduleInterval; taskObj.TaskDisplayName = txtTaskDisplayName.Text.Trim(); taskObj.TaskServerName = txtServerName.Text.Trim(); taskObj.TaskRunInSeparateThread = chkRunTaskInSeparateThread.Checked; taskObj.TaskUseExternalService = chkTaskUseExternalService.Checked; taskObj.TaskCondition = ucMacroEditor.Text; taskObj.TaskRunIndividuallyForEachSite = chkRunIndividually.Checked; if (plcAllowExternalService.Visible) { taskObj.TaskAllowExternalService = chkTaskAllowExternalService.Checked; } if (plcUseExternalService.Visible) { taskObj.TaskUseExternalService = chkTaskUseExternalService.Checked; } taskObj.TaskNextRunTime = SchedulingHelper.GetNextTime(taskObj.TaskInterval, new DateTime(), new DateTime()); if (drpModule.Visible) { taskObj.TaskResourceID = ValidationHelper.GetInteger(drpModule.Value, 0); } taskObj.TaskUserID = ValidationHelper.GetInteger(ucUser.Value, 0); // Set synchronization to true (default is false for Scheduled task) taskObj.Generalized.StoreSettings(); taskObj.Generalized.LogSynchronization = SynchronizationTypeEnum.LogSynchronization; taskObj.Generalized.LogIntegration = true; taskObj.Generalized.LogEvents = true; // If web farm support, create the tasks for all servers if (chkAllServers.Checked) { TaskInfoProvider.CreateWebFarmTasks(taskObj); } else { TaskInfoProvider.SetTaskInfo(taskObj); } // Restore original settings taskObj.Generalized.RestoreSettings(); if (cmsdesk) { URLHelper.Redirect("Task_Edit.aspx?taskname=" + taskObj.TaskID + "&saved=1&siteid=" + siteID); } else { URLHelper.Redirect("Task_Edit.aspx?taskname=" + taskObj.TaskID + "&saved=1&selectedsiteid=" + siteID); } } } }