HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/RMourik/bassol.nl/wwwroot/CMSModules/Scheduler/Pages/Task_Edit.aspx.cs
using System;

using CMS.Base;
using CMS.DataEngine;
using CMS.Helpers;
using CMS.Membership;
using CMS.PortalEngine;
using CMS.Scheduler;
using CMS.UIControls;
using CMS.WebFarmSync;

public partial class CMSModules_Scheduler_Pages_Task_Edit : CMSScheduledTasksPage
{
    #region "Variables"

    protected int? mTaskId = null;
    protected TaskInfo mTaskObj = null;
    protected bool developmentMode = SystemContext.DevelopmentMode;

    #endregion


    #region "Properties"

    /// <summary>
    /// Gets task ID passed as parameter to the page, or 0.
    /// </summary>
    public int TaskID
    {
        get
        {
            if (mTaskId == null)
            {
                mTaskId = QueryHelper.GetInteger("taskname", 0);
            }
            return mTaskId.Value;
        }
    }


    /// <summary>
    /// Gets or sets task info object.
    /// </summary>
    public TaskInfo TaskInfo
    {
        get
        {
            return mTaskObj ?? (mTaskObj = TaskInfoProvider.GetTaskInfo(TaskID));
        }
        set
        {
            mTaskObj = value;
        }
    }

    #endregion


    protected override void OnPreInit(EventArgs e)
    {
        // Page is used for creating and editing global and site tasks 
        string elementName = null;

        if (TaskID == 0)
        {
            elementName = "NewTask";
        }
        else if (TaskInfo == null)
        {
            RedirectToInformation("editedobject.notexists");
        }
        else if (TaskInfo.TaskType == ScheduledTaskTypeEnum.Standard)
        {
            elementName = "EditTask";
        }
        else
        {
            elementName = "EditSystemTask";
        }

        var uiElement = new UIElementAttribute("CMS.ScheduledTasks", elementName);
        uiElement.Check(this);

        base.OnPreInit(e);
    }


    protected void Page_Load(object sender, EventArgs e)
    {
        // Control initializations
        rfvDisplayName.ErrorMessage = GetString("general.requiresdisplayname");
        rfvName.ErrorMessage = GetString("Task_Edit.EmptyName");
        lblFrom.Text = GetString("scheduler.from");
        btnReset.OnClientClick = "if (!confirm(" + ScriptHelper.GetLocalizedString("tasks.reset") + ")) return false;";

        plcDevelopment.Visible = developmentMode;

        // Show 'Allow run in external service' check-box in development mode
        plcAllowExternalService.Visible = developmentMode;

        string currentTask = GetString("Task_Edit.NewItemCaption");

        if (TaskID > 0)
        {
            // Set edited object
            EditedObject = TaskInfo;

            if (TaskInfo != null)
            {
                // Global task and user is not global administrator and task's site id is different than current site id
                if (!MembershipContext.AuthenticatedUser.CheckPrivilegeLevel(UserPrivilegeLevelEnum.GlobalAdmin) && ((TaskInfo.TaskSiteID == 0) || (TaskInfo.TaskSiteID != SiteID)))
                {
                    RedirectToAccessDenied(GetString("general.nopermission"));
                }

                currentTask = TaskInfo.TaskDisplayName;

                if (!RequestHelper.IsPostBack())
                {
                    ReloadData();

                    // Show that the task was created or updated successfully
                    if (Request.QueryString["saved"] == "1")
                    {
                        ShowChangesSaved();
                    }
                }
            }
        }
        else
        {
            // Check "modify" permission
            if (!MembershipContext.AuthenticatedUser.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;");
            }
        }

        plcRunIndividually.Visible = (SiteID <= 0);

        // Initializes page title control		
        BreadcrumbItem tasksLink = new BreadcrumbItem();
        tasksLink.Text = GetString("Task_Edit.ItemListLink");

        bool notSystem = (TaskInfo == null) || (TaskInfo.TaskType != ScheduledTaskTypeEnum.System);
        string listUrl = UIContextHelper.GetElementUrl("CMS.ScheduledTasks", GetElementName(notSystem ? "Tasks" : "SystemTasks"), true);
        listUrl = URLHelper.AddParameterToUrl(listUrl, "siteid", SiteID.ToString());
        tasksLink.RedirectUrl = listUrl;

        PageBreadcrumbs.Items.Add(tasksLink);
        PageBreadcrumbs.Items.Add(new BreadcrumbItem
        {
            Text = currentTask
        });
    }


    /// <summary>
    /// Load data of editing task.
    /// </summary>
    protected void ReloadData()
    {
        if (TaskInfo != null)
        {
            assemblyElem.AssemblyName = TaskInfo.TaskAssemblyName;
            assemblyElem.ClassName = TaskInfo.TaskClass;

            txtTaskData.Text = TaskInfo.TaskData;
            txtTaskName.Text = TaskInfo.TaskName;
            lblExecutions.Text = (TaskInfo.TaskExecutions == 0) ? "0" : TaskInfo.TaskExecutions.ToString();
            chkTaskEnabled.Checked = TaskInfo.TaskEnabled;
            chkTaskDeleteAfterLastRun.Checked = TaskInfo.TaskDeleteAfterLastRun;
            schedInterval.ScheduleInterval = TaskInfo.TaskInterval;
            txtTaskDisplayName.Text = TaskInfo.TaskDisplayName;
            txtServerName.Text = TaskInfo.TaskServerName;
            chkRunTaskInSeparateThread.Checked = TaskInfo.TaskRunInSeparateThread;
            ucMacroEditor.Text = TaskInfo.TaskCondition;
            chkRunIndividually.Checked = ValidationHelper.GetBoolean(TaskInfo.TaskRunIndividuallyForEachSite, false);

            lblFrom.Text += " " + ((TaskInfo.TaskLastExecutionReset != DateTimeHelper.ZERO_TIME) ? TaskInfo.TaskLastExecutionReset.ToString("d") : " - ");

            bool allowExternalService = TaskInfo.TaskAllowExternalService;
            chkTaskAllowExternalService.Checked = allowExternalService;
            chkTaskUseExternalService.Checked = TaskInfo.TaskUseExternalService;

            // Show 'Use external service' if task can run in external service
            plcUseExternalService.Visible = developmentMode || allowExternalService;

            drpModule.Value = TaskInfo.TaskResourceID;
            ucUser.Value = TaskInfo.TaskUserID;

            plcResetFrom.Visible = TaskInfo.TaskLastExecutionReset != DateTimeHelper.ZERO_TIME;
        }
    }


    /// <summary>
    /// Sets data to database.
    /// </summary>
    protected void btnOK_Click(object sender, EventArgs e)
    {
        // Check "modify" permission
        if (!MembershipContext.AuthenticatedUser.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).IsCodeName(txtTaskName.Text, GetString("Task_Edit.InvalidTaskName")).Result;

        if ((errorMessage == String.Empty) && !schedInterval.CheckIntervalPreceedings())
        {
            errorMessage = GetString("Task_Edit.BetweenIntervalPreceedingsError");
        }

        if ((errorMessage == String.Empty) && !schedInterval.CheckOneDayMinimum())
        {
            errorMessage = GetString("Task_Edit.AtLeastOneDayError");
        }

        // Validate assembly, but only if task is enabled (so tasks for not-installed modules can be disabled)
        if ((errorMessage == String.Empty) && chkTaskEnabled.Checked && !assemblyElem.IsValid())
        {
            errorMessage = assemblyElem.ErrorMessage;
        }

        // Checking date/time limit (SQL limit)
        if (errorMessage == String.Empty)
        {
            TaskInterval ti = SchedulingHelper.DecodeInterval(schedInterval.ScheduleInterval);
            if ((ti != null) && ((ti.StartTime < DataTypeManager.MIN_DATETIME) || (ti.StartTime > DataTypeManager.MAX_DATETIME)))
            {
                ti.StartTime = DateTime.Now;
                schedInterval.ScheduleInterval = SchedulingHelper.EncodeInterval(ti);
            }
        }

        // Check macro condition length
        if ((errorMessage == String.Empty) && (ucMacroEditor.Text.Length > 400))
        {
            errorMessage = String.Format(GetString("task_edit.invalidlength"), 400);
        }

        if (!String.IsNullOrEmpty(errorMessage))
        {
            ShowError(errorMessage);
        }
        else
        {
            // Check existing task name
            TaskInfo existingTask = TaskInfoProvider.GetTaskInfo(txtTaskName.Text.Trim(), SiteInfo != null ? SiteInfo.SiteName : null);

            if ((existingTask != null) && ((TaskInfo == null) || (existingTask.TaskID != TaskInfo.TaskID)))
            {
                ShowError(GetString("Task_Edit.TaskNameExists").Replace("%%name%%", existingTask.TaskName));
                return;
            }

            if (TaskInfo == null)
            {
                // create new item -> insert
                TaskInfo = new TaskInfo { TaskSiteID = SiteID };
                if (!developmentMode)
                {
                    TaskInfo.TaskAllowExternalService = true;
                }
            }

            TaskInfo.TaskAssemblyName = assemblyElem.AssemblyName.Trim();
            TaskInfo.TaskClass = assemblyElem.ClassName.Trim();
            TaskInfo.TaskData = txtTaskData.Text.Trim();
            TaskInfo.TaskName = txtTaskName.Text.Trim();
            TaskInfo.TaskEnabled = chkTaskEnabled.Checked;
            TaskInfo.TaskDeleteAfterLastRun = chkTaskDeleteAfterLastRun.Checked;
            TaskInfo.TaskInterval = schedInterval.ScheduleInterval;
            TaskInfo.TaskDisplayName = txtTaskDisplayName.Text.Trim();
            TaskInfo.TaskServerName = txtServerName.Text.Trim();
            TaskInfo.TaskRunInSeparateThread = chkRunTaskInSeparateThread.Checked;
            TaskInfo.TaskUseExternalService = chkTaskUseExternalService.Checked;
            TaskInfo.TaskCondition = ucMacroEditor.Text;
            TaskInfo.TaskRunIndividuallyForEachSite = chkRunIndividually.Checked;

            if (plcAllowExternalService.Visible)
            {
                TaskInfo.TaskAllowExternalService = chkTaskAllowExternalService.Checked;
            }
            if (plcUseExternalService.Visible)
            {
                TaskInfo.TaskUseExternalService = chkTaskUseExternalService.Checked;
            }

            TaskInfo.TaskNextRunTime = SchedulingHelper.GetNextTime(TaskInfo.TaskInterval, new DateTime(), new DateTime());

            if (drpModule.Visible)
            {
                TaskInfo.TaskResourceID = ValidationHelper.GetInteger(drpModule.Value, 0);
            }

            TaskInfo.TaskUserID = ValidationHelper.GetInteger(ucUser.Value, 0);

            // Set synchronization to true (default is false for Scheduled task)
            TaskInfo.Generalized.StoreSettings();
            TaskInfo.Generalized.LogSynchronization = SynchronizationTypeEnum.LogSynchronization;
            TaskInfo.Generalized.LogIntegration = true;
            TaskInfo.Generalized.LogEvents = true;

            // If web farm support, create the tasks for all servers
            if (chkAllServers.Checked)
            {
                TaskInfoProvider.CreateWebFarmTasks(TaskInfo);
            }
            else
            {
                TaskInfoProvider.SetTaskInfo(TaskInfo);
            }

            // Restore original settings
            TaskInfo.Generalized.RestoreSettings();

            bool notSystem = (TaskInfo == null) || (TaskInfo.TaskType != ScheduledTaskTypeEnum.System);
            string url = UIContextHelper.GetElementUrl("CMS.ScheduledTasks", GetElementName(notSystem ? "EditTask" : "EditSystemTask"), true);
            
            // Add task ID and saved="1" query parameters
            url = URLHelper.AddParameterToUrl(String.Format(url, TaskInfo.TaskID), "saved", "1");

            // Add site ID query parameter and redirect to the finished URL
            URLHelper.Redirect(URLHelper.AddParameterToUrl(url, "siteid", SiteID.ToString()));
        }
    }


    /// <summary>
    /// Performs reset of execution counter.
    /// </summary>
    protected void btnReset_Click(object sender, EventArgs e)
    {
        if (TaskInfo != null)
        {
            TaskInfo.TaskExecutions = 0;
            TaskInfo.TaskLastExecutionReset = DateTime.Now;
            TaskInfoProvider.SetTaskInfo(TaskInfo);

            lblFrom.Text += " " + DateTime.Now.ToString("d");
            plcResetFrom.Visible = true;

            ShowConfirmation(GetString("task.executions.reseted"));
        }
    }
}