using System; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Xml; using CMS.FormEngine; using CMS.GlobalHelper; using CMS.PortalEngine; using CMS.SettingsProvider; using CMS.UIControls; using CMS.URLRewritingEngine; using CMS.PortalControls; public partial class CMSModules_PortalEngine_UI_WebParts_Development_WebPart_Edit_SystemProperties : SiteManagerPage { protected void Page_Load(object sender, EventArgs e) { int webPartId = QueryHelper.GetInteger("webpartid", 0); // Default values XML load ucDefaultValueEditor.XMLCreated += new EventHandler(ucDefaultValueEditor_XMLCreated); // If saved is found in query string if (!RequestHelper.IsPostBack() && (QueryHelper.GetInteger("saved", 0) == 1)) { ShowChangesSaved(); } // Load the form definition string before = PortalFormHelper.GetWebPartProperties(WebPartTypeEnum.Standard, PropertiesPosition.Before); string after = PortalFormHelper.GetWebPartProperties(WebPartTypeEnum.Standard, PropertiesPosition.After); string formDef = FormHelper.CombineFormDefinitions(before, after); // Get the web part info WebPartInfo wi = WebPartInfoProvider.GetWebPartInfo(webPartId); EditedObject = wi; if (wi != null) { // Load default values for current web part XmlDocument xmlDefault = LoadDefaultValuesXML(wi, formDef); // Set field editor if (String.IsNullOrEmpty(wi.WebPartDefaultValues)) { ucDefaultValueEditor.DefaultValueXMLDefinition = "
"; } else { // WebPartDefaultValues contains changed fields versus default XML settings (stored in files) ucDefaultValueEditor.DefaultValueXMLDefinition = wi.WebPartDefaultValues; } ucDefaultValueEditor.SourceXMLDefinition = xmlDefault.DocumentElement.OuterXml; } } /// /// Load XML with default values (remove keys already overridden in properties tab). /// /// Web part info /// String XML definition of default values of webpart private XmlDocument LoadDefaultValuesXML(WebPartInfo wi, string formDef) { // Test if there is any default properties set string properties = "
"; XmlDocument xmlProperties = new XmlDocument(); // If inherited web part load parent properties if (wi.WebPartParentID > 0) { WebPartInfo parentInfo = WebPartInfoProvider.GetWebPartInfo(wi.WebPartParentID); if (parentInfo != null) { properties = parentInfo.WebPartProperties; } } else { properties = wi.WebPartProperties; } xmlProperties.LoadXml(properties); // Load default system xml XmlDocument xmlDefault = new XmlDocument(); xmlDefault.LoadXml(formDef); // Filter overridden properties - remove properties with same name as in system XML XmlNodeList defaultList = xmlDefault.SelectNodes(@"//field"); foreach (XmlNode node in defaultList) { string columnName = node.Attributes["column"].Value.ToString(); XmlNodeList propertiesList = xmlProperties.SelectNodes("//field[@column=\"" + columnName + "\"]"); //This property already set in properties tab if (propertiesList.Count > 0) { node.ParentNode.RemoveChild(node); } } // Filter empty categories XmlNodeList nodes = xmlDefault.DocumentElement.ChildNodes; for (int i = 0; i < nodes.Count; i++) { XmlNode node = nodes[i]; if (node.Name.ToLowerCSafe() == "category") { // Find next category if (i < nodes.Count - 1) { XmlNode nextNode = nodes[i + 1]; if (nextNode.Name.ToLowerCSafe() == "category") { // Delete actual category node.ParentNode.RemoveChild(node); i--; } } } } // Test if last category is not empty nodes = xmlDefault.DocumentElement.ChildNodes; if (nodes.Count > 0) { XmlNode lastNode = nodes[nodes.Count - 1]; if (lastNode.Name.ToLowerCSafe() == "category") { lastNode.ParentNode.RemoveChild(lastNode); } } return xmlDefault; } /// /// Event loaded after ok button clicked. /// /// Sender /// Event args private void ucDefaultValueEditor_XMLCreated(object sender, EventArgs e) { if (!String.IsNullOrEmpty(ucDefaultValueEditor.ErrorMessage)) { ShowError(ucDefaultValueEditor.ErrorMessage); return; } int webPartId = QueryHelper.GetInteger("webpartid", 0); WebPartInfo wpi = WebPartInfoProvider.GetWebPartInfo(webPartId); if (wpi != null) { if (wpi.WebPartParentID > 0) { //Remove overloaded default values and replace them with new ones string filteredDef = String.Empty; //Load parent WebPartInfo parentInfo = WebPartInfoProvider.GetWebPartInfo(wpi.WebPartParentID); if (parentInfo != null) { // Remove properties from collection with same name as in default system xml filteredDef = ucDefaultValueEditor.FitlerDefaultValuesDefinition(wpi.WebPartDefaultValues, parentInfo.WebPartProperties, false); } // FilteredDef now contains only properties inherited from parent web part // Combine with changed default system values wpi.WebPartDefaultValues = FormHelper.CombineFormDefinitions(filteredDef, ucDefaultValueEditor.DefaultValueXMLDefinition); } else { wpi.WebPartDefaultValues = ucDefaultValueEditor.DefaultValueXMLDefinition; } WebPartInfoProvider.SetWebPartInfo(wpi); } string url = URLHelper.RemoveParameterFromUrl(URLRewriter.CurrentURL, "saved"); url = URLHelper.AddParameterToUrl(url, "saved", "1"); URLHelper.Redirect(url); } }