using System; using CMS.FormEngine; using CMS.SettingsProvider; using CMS.UIControls; using CMS.ExtendedControls; public partial class CMSModules_AdminControls_Controls_Class_AlternativeFormFieldEditor : CMSUserControl { #region "Events" public event EventHandler OnBeforeSave; public event EventHandler OnAfterSave; #endregion #region "Variables" protected int mAlternativeFormId = 0; protected FieldEditorControlsEnum mDisplayedControls = FieldEditorControlsEnum.None; #endregion #region "Properties" /// /// Messages placeholder /// public override MessagesPlaceHolder MessagesPlaceHolder { get { return plcMess; } } /// /// Indicates if control is used on live site. /// public override bool IsLiveSite { get { return base.IsLiveSite; } set { fieldEditor.IsLiveSite = value; plcMess.IsLiveSite = value; base.IsLiveSite = value; } } /// /// Indicates if system fields (node and document fields) are enabled. /// public bool EnableSystemFields { get { return fieldEditor.EnableSystemFields; } set { fieldEditor.EnableSystemFields = value; } } /// /// Indicates if field visibility selector should be displayed. /// public bool ShowFieldVisibility { get { return fieldEditor.ShowFieldVisibility; } set { fieldEditor.ShowFieldVisibility = value; } } /// /// Form id (with alternative form definition). /// public int AlternativeFormID { get { return mAlternativeFormId; } set { mAlternativeFormId = value; } } /// /// Specify set of controls which should be offered for field types. /// public FieldEditorControlsEnum DisplayedControls { get { return mDisplayedControls; } set { mDisplayedControls = value; } } /// /// Field editor mode. /// public FieldEditorModeEnum Mode { get { return fieldEditor.Mode; } set { fieldEditor.Mode = value; } } /// /// Enables or disables to edit settings. /// public bool ShowInheritanceSettings { get { return fieldEditor.ShowInheritanceSettings; } set { fieldEditor.ShowInheritanceSettings = value; } } #endregion #region "Methods" protected void Page_Load(object sender, EventArgs e) { AlternativeFormInfo afi = AlternativeFormInfoProvider.GetAlternativeFormInfo(mAlternativeFormId); CMSPage.EditedObject = afi; if (afi != null) { DataClassInfo dci = DataClassInfoProvider.GetDataClass(afi.FormClassID); if (dci != null) { string formDef = dci.ClassFormDefinition; string coupledClassName = null; if (afi.FormCoupledClassID > 0) { // If coupled class is defined combine form definitions DataClassInfo coupledDci = DataClassInfoProvider.GetDataClass(afi.FormCoupledClassID); if (coupledDci != null) { formDef = FormHelper.MergeFormDefinitions(formDef, coupledDci.ClassFormDefinition, true); coupledClassName = coupledDci.ClassName; } } // Merge class and alternative form definitions formDef = FormHelper.MergeFormDefinitions(formDef, afi.FormDefinition); // Initialize field editor mode and load form definition fieldEditor.IsAlternativeForm = true; fieldEditor.AlternativeFormFullName = afi.FullName; fieldEditor.FormDefinition = formDef; // Specify set of controls which should be offered for field types fieldEditor.DisplayedControls = mDisplayedControls; fieldEditor.ClassName = dci.ClassName; fieldEditor.CoupledClassName = coupledClassName; // Handle definition update (move up, move down, delete, OK button) fieldEditor.OnAfterDefinitionUpdate += fieldEditor_OnAfterDefinitionUpdate; } else { ShowError(GetString("general.invalidid")); } } } /// /// After form definition update event handler. /// private void fieldEditor_OnAfterDefinitionUpdate(object sender, EventArgs e) { // Perform OnBeforeSave if defined if (OnBeforeSave != null) { OnBeforeSave(this, EventArgs.Empty); } // Stop processing if set from outside if (StopProcessing) { return; } // Get alternative form info object and data class info object AlternativeFormInfo afi = AlternativeFormInfoProvider.GetAlternativeFormInfo(mAlternativeFormId); if (afi != null) { DataClassInfo dci = DataClassInfoProvider.GetDataClass(afi.FormClassID); if (dci != null) { string formDefinition = dci.ClassFormDefinition; if (afi.FormCoupledClassID > 0) { // Combine form definitions of class and its coupled class DataClassInfo coupledDci = DataClassInfoProvider.GetDataClass(afi.FormCoupledClassID); if (coupledDci != null) { formDefinition = FormHelper.MergeFormDefinitions(formDefinition, coupledDci.ClassFormDefinition, true); } } // Compare original and alternative form definitions - store differences only afi.FormDefinition = FormHelper.GetFormDefinitionDifference(formDefinition, fieldEditor.FormDefinition); // Update alternative form info in database AlternativeFormInfoProvider.SetAlternativeFormInfo(afi); } else { ShowError(GetString("general.invalidid")); } } // Perform OnAfterSave if defined if (OnAfterSave != null) { OnAfterSave(this, EventArgs.Empty); } } #endregion }