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/CMS/CMSInstall/Controls/WizardSteps/DatabaseDialog.ascx.cs
using System;

using CMS.DataEngine;
using CMS.Helpers;
using CMS.Scheduler;
using CMS.Base;
using CMS.UIControls;
using CMS.WinServiceEngine;

public partial class CMSInstall_Controls_WizardSteps_DatabaseDialog : CMSUserControl
{
    #region "Variables"

    private ISqlServerCapabilities mSqlServerCapabilities;

    #endregion


    #region "Properties"

    /// <summary>
    /// Gets new database name.
    /// </summary>
    public string NewDatabaseName
    {
        get
        {
            return txtNewDatabaseName.Text.Trim();
        }
    }


    /// <summary>
    /// Indicates if database objects should be created.
    /// </summary>
    public bool CreateDatabaseObjects
    {
        get
        {
            return chkCreateDatabaseObjects.Checked;
        }
    }


    /// <summary>
    /// Schema name.
    /// </summary>
    public string SchemaText
    {
        get
        {
            return txtSchema.Text.Trim();
        }
    }


    /// <summary>
    /// Schema control client ID.
    /// </summary>
    public string SchemaClientID
    {
        get
        {
            return txtSchema.ClientID;
        }
    }


    /// <summary>
    /// Schema label client ID.
    /// </summary>
    public string SchemaLabelClientID
    {
        get
        {
            return lblSchema.ClientID;
        }
    }


    /// <summary>
    /// Advanced label client ID.
    /// </summary>
    public string AdvancedLabelClientID
    {
        get
        {
            return lblAdvanced.ClientID;
        }
    }


    /// <summary>
    /// Gets or sets if use existing radio button is checked.
    /// </summary>
    public bool UseExistingChecked
    {
        get
        {
            return radUseExisting.Checked;
        }
        set
        {
            radUseExisting.Checked = value;
        }
    }


    /// <summary>
    /// Indicates if create new is checked.
    /// </summary>
    public bool CreateNewChecked
    {
        get
        {
            return radCreateNew.Checked;
        }
        set
        {
            radCreateNew.Checked = value;
        }
    }


    /// <summary>
    /// Existing database name,
    /// </summary>
    public string ExistingDatabaseName
    {
        get
        {
            return txtExistingDatabaseName.Text;
        }
        set
        {
            txtExistingDatabaseName.Text = value;
        }
    }


    /// <summary>
    /// Indicates if panel for creating new database should be always displayed.
    /// </summary>
    public bool IsDBSeparation
    {
        get;
        set;
    }


    /// <summary>
    /// Connection string.
    /// </summary>
    public string ConnectionString
    {
        get
        {
            return ValidationHelper.GetString(ViewState["ConnectionString"], null);
        }
        set
        {
            ViewState["ConnectionString"] = value;
        }
    }


    /// <summary>
    /// Password;
    /// </summary>
    public string Password
    {
        get
        {
            return ValidationHelper.GetString(ViewState["Password"], null);
        }
        set
        {
            ViewState["Password"] = value;
        }
    }


    /// <summary>
    /// Server name.
    /// </summary>
    public string ServerName
    {
        get
        {
            return ValidationHelper.GetString(ViewState["ServerName"], null);
        }
        set
        {
            ViewState["ServerName"] = value;
        }
    }


    /// <summary>
    /// Authentication type.
    /// </summary>
    public SQLServerAuthenticationModeEnum AuthenticationType
    {
        get
        {
            return (SQLServerAuthenticationModeEnum)ViewState["AuthenticationType"];
        }
        set
        {
            ViewState["AuthenticationType"] = value;
        }
    }


    /// <summary>
    /// User name.
    /// </summary>
    public string Username
    {
        get
        {
            return ValidationHelper.GetString(ViewState["Username"], null);
        }
        set
        {
            ViewState["Username"] = value;
        }
    }


    /// <summary>
    /// Database.
    /// </summary>
    public string Database
    {
        get
        {
            return ValidationHelper.GetString(ViewState["Database"], null);
        }
        set
        {
            ViewState["Database"] = value;
        }
    }


    /// <summary>
    /// Indicates if scheduled tasks were manually stopped by a user.
    /// </summary>
    public bool TasksManuallyStopped
    {
        get
        {
            return ValidationHelper.GetBoolean(ViewState["TasksManuallyStopped"], false);
        }
        set
        {
            ViewState["TasksManuallyStopped"] = value;
        }
    }

    #endregion


    #region "Methods"

    protected void Page_Load(object sender, EventArgs e)
    {
        lblExistingDatabaseName.Text = ResHelper.GetFileString("Install.lblExistingDatabaseName");
        lblAdvanced.Text = ResHelper.GetFileString("install.ShowAdvancedOptions");
        lblAdvanced.NavigateUrl = "#";
        lblAdvanced.Attributes.Add("onclick", " AdvancedOptions('?'); ");
        lblNewDatabaseName.Text = ResHelper.GetFileString("Install.lblNewDatabaseName");
        lblSchema.Text = ResHelper.GetFileString("Install.Schema") + ":";
        lblDatabase.Text = IsDBSeparation ? GetString("separationDB.database") : ResHelper.GetFileString("Install.lblDatabase");
        radCreateNew.Text = ResHelper.GetFileString("Install.radCreateNew");
        radUseExisting.Text = ResHelper.GetFileString("Install.radUseExisting");
        chkCreateDatabaseObjects.Text = ResHelper.GetFileString("Install.chkCreateDatabaseObjects");
        plcRunningTasks.Visible = IsDBSeparation;
        btnStopTasks.Click += btnStopTasks_Click;
        if (IsDBSeparation)
        {
            iconHelp.ToolTip = spanScreenReader.Text = GetString("separationDB.enabledtasksseparation");
        }
    }


    protected override void OnPreRender(EventArgs e)
    {
        base.OnPreRender(e);

        if (IsDBSeparation)
        {
            DisplayTaskStatus();
        }

        if (AzureHelper.IsSQLAzureServer(ServerName))
        {
            plcNewDB.Visible = false;
            plcExistingRadio.Visible = false;
            plcRadNew.Visible = false;
            plcEmptyLine.Visible = false;

            radCreateNew.Checked = false;
            radUseExisting.Checked = true;
            lblAdvanced.Visible = false;
        }
        else
        {
            radCreateNew.Enabled = true;
        }

        plcCreateDatabaseObjects.Visible = !IsDBSeparation;
        txtNewDatabaseName.Enabled = radCreateNew.Checked;
        txtExistingDatabaseName.Enabled = radUseExisting.Checked;
        txtExistingDatabaseName.Text = null;

        if (radCreateNew.Checked)
        {
            chkCreateDatabaseObjects.Checked = true;
            chkCreateDatabaseObjects.Enabled = false;
        }
        else
        {
            chkCreateDatabaseObjects.Enabled = true;
        }

        if (!RequestHelper.IsPostBack())
        {
            txtNewDatabaseName.Text = TextHelper.LimitLength(GetWebDirectory(), 90);

            if (ConnectionHelper.IsConnectionStringInitialized && !IsDBSeparation)
            {
                radUseExisting.Enabled = true;
                txtExistingDatabaseName.Text = DatabaseHelper.GetDatabaseName(ConnectionHelper.ConnectionString);
                txtExistingDatabaseName.Enabled = false;
                plcNewDB.Visible = false;
            }
        }
    }


    /// <summary>
    /// Gets web directory.
    /// </summary>
    private string GetWebDirectory()
    {
        string webDirectory = SystemContext.WebApplicationVirtualPath.Replace("/", "");
        if ((webDirectory == "") || (webDirectory == "~"))
        {
            webDirectory = "KenticoCMS";
        }
        return webDirectory;
    }


    /// <summary>
    /// Returns SQL server capabilities.
    /// </summary>
    private ISqlServerCapabilities SqlServerCapabilities
    {
        get
        {
            return mSqlServerCapabilities ?? (mSqlServerCapabilities = SqlServerCapabilitiesFactory.GetSqlServerCapabilities(ConnectionHelper.GetSqlConnectionString()));
        }
    }


    /// <summary>
    /// Validates control.
    /// </summary>
    public bool ValidateForSeparation()
    {
        // Get database name
        if (radCreateNew.Checked && SqlServerCapabilities.SupportsDatabaseCreation)
        {
            Database = txtNewDatabaseName.Text;
        }
        else
        {
            Database = txtExistingDatabaseName.Text;
        }
        Database = TextHelper.LimitLength(Database, 100, String.Empty);

        if (String.IsNullOrEmpty(Database))
        {
            DisplaySeparationError(GetString("Install.ErrorDBNameEmpty"));
            return false;
        }

        // Set up the connection string
        ConnectionString = ConnectionHelper.GetConnectionString(AuthenticationType, ServerName, Database, Username, Password, 240, false);

        // Test existing DB
        if (radUseExisting.Checked || !SqlServerCapabilities.SupportsDatabaseCreation)
        {
            if (SqlServerCapabilities.ControlServerPermissionAvailable &&
                !DatabaseHelper.CheckDBPermission(DatabasePermission.ModifyDatabase, AuthenticationType, ServerName,Username, Password))
            {
                DisplaySeparationError(GetString("separationDB.permissionmodify"));
                return false;
            }

            if (!String.IsNullOrEmpty(ConnectionHelper.TestConnection(AuthenticationType, ServerName, Database, Username, Password)))
            {
                DisplaySeparationError(String.Format(ResHelper.GetFileString("Install.ErrorDatabseDoesntExist"), Database));
                return false;
            }

            if (DatabaseSeparationHelper.CheckCMDatabase(ConnectionString))
            {
                DisplaySeparationError(GetString("separationDB.errorCMexists"));
                return false;
            }
        }
        // Test new DB
        else
        {
            if (DatabaseHelper.DatabaseExists(ConnectionString))
            {
                DisplaySeparationError(GetString("separationDB.ErrorDBExists"));
                return false;
            }
            if (SqlServerCapabilities.ControlServerPermissionAvailable)
            {
                if (!DatabaseHelper.CheckDBPermission(DatabasePermission.ModifyDatabase, AuthenticationType, ServerName, Username, Password))
                {
                    DisplaySeparationError(GetString("separationDB.permissionmodify"));
                    return false;
                }
                if (!DatabaseHelper.CheckDBPermission(DatabasePermission.CreateDatabase, AuthenticationType, ServerName, Username, Password))
                {
                    DisplaySeparationError(GetString("separationDB.permissioncreate"));
                    return false;
                }
            }
        }

        // Test if tasks are stopped
        if (EnabledTasks())
        {
            DisplaySeparationError(GetString("separationDB.stoptaskserror"));
            return false;
        }
        iconHelp.Visible = btnStopTasks.Visible = true;

        // Test if separation process is not already started.
        if (DatabaseSeparationHelper.SeparationInProgress)
        {
            DisplaySeparationError(GetString("separationDB.processalreadystarted"));
            return false;
        }

        return true;
    }


    /// <summary>
    /// Checks if any tasks are running.
    /// </summary>
    private void DisplayTaskStatus()
    {
        if (EnabledTasks())
        {
            if (!btnStopTasks.Visible && TasksManuallyStopped && (hdnTurnedOff.Value != bool.TrueString))
            {
                DisplayStoppingTasks();
            }
            else
            {
                lblStatusValue.Text = "<span class=\"task-error\">" + GetString("general.enabled") + "</span>";
                plcRunningTasks.Visible = true;
                lblTaskStatus.Visible = true;
                lblStatusValue.Visible = true;
                ltlStatus.Visible = false;
                iconHelp.Visible = btnStopTasks.Visible = true;
            }
        }
        else
        {
            if (TasksManuallyStopped)
            {
                lblTaskStatus.Visible = true;
                lblStatusValue.Visible = true;
                plcRunningTasks.Visible = true;
                ltlStatus.Visible = false;
                ltlStatus.Text = null;
                lblStatusValue.Text = "<span class=\"task-success\">" + GetString("general.disabled") + "</span>";
                iconHelp.Visible = btnStopTasks.Visible = false;
            }
            else
            {
                plcRunningTasks.Visible = true;
                lblTaskStatus.Visible = false;
                lblStatusValue.Visible = false;
                ltlStatus.Visible = false;
                iconHelp.Visible = btnStopTasks.Visible = false;
            }
            hdnTurnedOff.Value = bool.TrueString;
        }
    }


    /// <summary>
    /// Checks if any tasks are enabled.
    /// </summary>
    public bool EnabledTasks()
    {
        InfoDataSet<TaskInfo> tasks = TaskInfoProvider.GetTasks("(TaskNextRunTime IS NULL) AND (TaskInterval NOT LIKE '" + SchedulingHelper.PERIOD_ONCE + "%') AND (TaskEnabled = 1)", null, -1, "TaskID");
        return ((tasks != null) && (tasks.Items.Count > 0)) || SchedulingHelper.EnableScheduler;
    }


    /// <summary>
    /// Stop tasks.
    /// </summary>
    void btnStopTasks_Click(object sender, EventArgs e)
    {
        // Stop tasks
        PersistentStorageHelper.SetValue("CMSSchedulerTasksEnabled", SettingsKeyInfoProvider.GetBoolValue("CMSSchedulerTasksEnabled"));
        if (SchedulingHelper.EnableScheduler)
        {
            SettingsKeyInfoProvider.SetValue("CMSSchedulerTasksEnabled", false);
        }

        // Restart win service
        WinServiceItem def = WinServiceHelper.GetServiceDefinition(WinServiceHelper.HM_SERVICE_BASENAME);
        if (def != null)
        {
            WinServiceHelper.RestartService(def.GetServiceName());
        }

        // Display stopping progress
        iconHelp.Visible = btnStopTasks.Visible = false;
        DisplayStoppingTasks();
        TasksManuallyStopped = true;
    }


    /// <summary>
    /// Displays separation error.
    /// </summary>
    private void DisplaySeparationError(string error)
    {
        plcSeparationError.Visible = true;
        lblError.Text = TextHelper.LimitLength(HTMLHelper.HTMLEncode(error), 180);
        lblError.ToolTip = error;
    }


    /// <summary>
    /// Displays that tasks are being stopped.
    /// </summary>
    private void DisplayStoppingTasks()
    {
        ltlStatus.Text = ScriptHelper.GetLoaderInlineHtml(Page, GetString("general.disabling"));
        plcRunningTasks.Visible = true;
        lblTaskStatus.Visible = true;
        lblStatusValue.Visible = true;
        ltlStatus.Visible = true;
        iconHelp.Visible = btnStopTasks.Visible = false;
    }

    #endregion
}