using System; using System.Web.UI.WebControls; using CMS.CMSHelper; using CMS.FormControls; using CMS.GlobalHelper; using CMS.SettingsProvider; using CMS.ExtendedControls; using CMS.PortalEngine; /// /// This form control is used in layout UI to edit page layouts code. /// public partial class CMSFormControls_Layouts_PageLayoutCode : FormEngineUserControl { #region "Properties" /// /// Gets or sets Page layout code. /// public override object Value { get { return tbLayoutCode.Text; } set { tbLayoutCode.Text = ValidationHelper.GetString(value, ""); } } /// /// Name of the column with layout code. /// public string CodeColumn { get { return ValidationHelper.GetString(GetValue("CodeColumn"), ""); } set { SetValue("CodeColumn", value); } } /// /// Name of the column with layout type. /// public string TypeColumn { get { return ValidationHelper.GetString(GetValue("TypeColumn"), ""); } set { SetValue("TypeColumn", value); } } /// /// Returns ExtendedArea object for code editing. /// public ExtendedTextArea Editor { get { return tbLayoutCode.Editor; } } /// /// Enables or disables the control /// public override bool Enabled { get { return drpType.Enabled; } set { drpElements.Enabled = value; btn.Enabled = value; drpType.Enabled = value; tbLayoutCode.ReadOnly = !value; } } /// /// Determines whether the code is in the fullscreen mode. /// public bool FullscreenMode { get; set; } #endregion #region "Page events public override object[,] GetOtherValues() { object[,] values = new object[2, 2]; values[0, 0] = CodeColumn; values[0, 1] = tbLayoutCode.Text; values[1, 0] = TypeColumn; values[1, 1] = (drpType.SelectedValue == null ? TransformationTypeEnum.Ascx.ToString() : drpType.SelectedValue.ToLowerCSafe()); return values; } protected override void OnInit(EventArgs e) { base.OnInit(e); string lang = DataHelper.GetNotEmpty(SettingsHelper.AppSettings["CMSProgrammingLanguage"], "C#"); ltlDirectives.Text = "<%@ Control Language=\"" + lang + "\" Inherits=\"CMS.PortalControls.CMSAbstractLayout\" %>
<%@ Register Assembly=\"CMS.PortalControls\" Namespace=\"CMS.PortalControls\" TagPrefix=\"cms\" %>"; if (drpType.Items.Count == 0) { drpType.Items.Add(new ListItem(GetString("TransformationType.Ascx"), TransformationTypeEnum.Ascx.ToString())); drpType.Items.Add(new ListItem(GetString("TransformationType.Html"), TransformationTypeEnum.Html.ToString())); } } /// /// Ensures insert zone element items /// protected void InitZoneElements() { drpElements.Items.Clear(); // Ascx if (drpType.SelectedIndex == 0) { drpElements.Items.Add(new ListItem(GetString("PageLayout.ConditionalElement"), "cl")); drpElements.Items.Add(new ListItem(GetString("PageLayout.DeviceElement"), "dl")); drpElements.Items.Add(new ListItem(GetString("PageLayout.ZoneElement"), "wpz")); drpElements.SelectedIndex = 2; } // Html else { drpElements.Items.Add(new ListItem(GetString("PageLayout.ZoneElement"), "wpzhtml")); } btn.Text = GetString("dialogs.actions.insert"); } protected void InitZoneElementsScript() { // Insert element script string script = @" function InsertLayoutElement() { var type = document.getElementById('" + drpElements.ClientID + @"').value; var cedit = " + tbLayoutCode.Editor.EditorID + @"; var elem = ''; var idDefault = 'ZoneA'; switch(type) { case 'wpzhtml': elem = '{^WebPartZone|(id)#^}'; break; case 'cl': elem = ''; idDefault = 'ConditionLayout'; break; case 'dl': elem = ''; idDefault = 'DeviceLayout'; break; } cedit.replaceSelection(elem.replace('#',idDefault)); cedit.focus(); } "; ScriptHelper.RegisterStartupScript(this, typeof(string), "LayoutCodeInsertElement", ScriptHelper.GetScript(script)); btn.OnClientClick = "InsertLayoutElement();return false;"; } protected override void OnLoad(EventArgs e) { base.OnLoad(e); if (!RequestHelper.IsPostBack()) { string type = ValidationHelper.GetString(this.Form.GetFieldValue(TypeColumn), "ascx").ToLowerCSafe(); if (type == "html") { drpType.SelectedIndex = 1; } else { drpType.SelectedIndex = 0; } tbLayoutCode.Text = ValidationHelper.GetString(this.Form.GetFieldValue(CodeColumn), ""); } if (FullscreenMode) { tbLayoutCode.TopOffset = 40; } InitZoneElements(); } /// /// Display info message /// public void ShowMessage() { string type = ValidationHelper.GetString(this.Form.GetFieldValue(TypeColumn), "ascx").ToLowerCSafe(); if ((type == "ascx") && !CMSContext.CurrentUser.IsAuthorizedPerResource("cms.design", "editcode")) { // Display info message for active UI form if (Visible) { ShowWarning(GetString("design.editcodemissing"), null, null); } } } protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); bool isAscx = (drpType.SelectedValue.ToLowerCSafe() == "ascx"); if (Enabled) { Enabled = !isAscx || CMSContext.CurrentUser.IsAuthorizedPerResource("cms.design", "editcode"); drpType.Enabled = true; } // Setup the information and code type if (isAscx) { tbLayoutCode.Editor.Language = LanguageEnum.ASPNET; tbLayoutCode.UseAutoComplete = false; } else { tbLayoutCode.Editor.Language = LanguageEnum.HTMLMixed; tbLayoutCode.UseAutoComplete = true; } plcDirectives.Visible = isAscx; InitZoneElementsScript(); } protected void drpType_selectedIndexChanged(object sender, EventArgs ea) { // If not ascx authorized only change to HTML is allowed if (!CMSContext.CurrentUser.IsAuthorizedPerResource("cms.design", "editcode")) { drpType.SelectedIndex = 1; return; } ShowMessage(); } #endregion }