/// <summary> /// Control ID validation. /// </summary> private void formElem_OnItemValidation(object sender, ref string errorMessage) { Control ctrl = (Control)sender; if (ctrl.ID.ToLowerCSafe() == "webpartcontrolid") { FormEngineUserControl ctrlTextbox = (FormEngineUserControl)ctrl; string newId = ValidationHelper.GetString(ctrlTextbox.Value, null); // Validate unique ID WebPartInstance existingPart = pti.GetWebPart(newId); if ((existingPart != null) && ((webPartInstance == null) || (existingPart.InstanceGUID != webPartInstance.InstanceGUID))) { // Error - duplicity IDs errorMessage = GetString("WebPartProperties.ErrorUniqueID"); } else { string uniqueId = WebPartZoneInstance.GetUniqueWebPartId(newId, pi.TemplateInstance); if (!uniqueId.EqualsCSafe(newId, true)) { // Check if there is already a widget with the same id in the page existingPart = pi.TemplateInstance.GetWebPart(newId); if ((existingPart != null) && existingPart.IsWidget) { // Error - the ID collide with another widget which is already in the page errorMessage = ResHelper.GetString("WidgetProperties.ErrorUniqueID"); } } } } }
/// <summary> /// Gets a unique widget id. Returned widget id is unique among both document widgets (Page tab) and default widgets (Design tab). /// </summary> /// <param name="baseId">The base id.</param> private string GetUniqueWidgetId(string baseId) { int counter = 0; string controlId = null; if ((CurrentPageInfo != null) && CurrentPageInfo.UsedPageTemplateInfo != null) { // Get the document widgets template instance PageTemplateInstance documentTemplateInstance = mWebPartZoneInstance.ParentTemplateInstance; // Get the default widgets template instance PageTemplateInstance templateInstance = CurrentPageInfo.UsedPageTemplateInfo.TemplateInstance; // Limit the search while (counter < 100) { // Try to find the first available controlId for both templates controlId = WebPartZoneInstance.GetUniqueWebPartId(baseId, documentTemplateInstance, counter); if (controlId == WebPartZoneInstance.GetUniqueWebPartId(baseId, templateInstance, counter)) { break; } counter++; } } return(controlId); }
/// <summary> /// Control ID validation. /// </summary> private void formElem_OnItemValidation(object sender, ref string errorMessage) { Control ctrl = (Control)sender; if (ctrl.ID.ToLowerCSafe() == "webpartcontrolid") { FormEngineUserControl ctrlTextbox = (FormEngineUserControl)ctrl; // New web part control id string newControlId = ValidationHelper.GetString(ctrlTextbox.Value, null); // Load the web part variants if not loaded yet if ((PortalContext.MVTVariantsEnabled && !templateInstance.MVTVariantsLoaded) || (PortalContext.ContentPersonalizationEnabled && !templateInstance.ContentPersonalizationVariantsLoaded)) { templateInstance.LoadVariants(false, VariantModeEnum.None); } // Check control ID validity if (!ValidationHelper.IsIdentifier(newControlId)) { errorMessage = GetString("webpartproperties.controlid.allowedcharacters"); } // New or changed web part control id bool checkIdUniqueness = IsNewWebPart || IsNewVariant || (webPartInstance == null) || (webPartInstance.ControlID != newControlId); // Try to find a web part with the same web part control id amongst all the web parts and their variants if (checkIdUniqueness && (templateInstance.GetWebPart(newControlId, true) != null)) { // Error - duplicity IDs errorMessage = GetString("WebPartProperties.ErrorUniqueID"); } else { string uniqueId = WebPartZoneInstance.GetUniqueWebPartId(newControlId, pi.TemplateInstance); if (!uniqueId.EqualsCSafe(newControlId, true)) { // Check if there is already a widget with the same id in the page WebPartInstance foundWidget = pi.TemplateInstance.GetWebPart(newControlId); if ((foundWidget != null) && foundWidget.IsWidget) { // Error - the ID collide with another widget which is already in the page errorMessage = ResHelper.GetString("WidgetProperties.ErrorUniqueID"); } } } } }
/// <summary> /// Returns new unique web part ID based on the given <paramref name="controlId"/>. /// </summary> /// <param name="controlId">Id of target control</param> private string GetUniqueWebPartId(string controlId) { return(WebPartZoneInstance.GetUniqueWebPartId(controlId, templateInstance)); }
/// <summary> /// Loads the web part form. /// </summary> protected void LoadForm() { // Load settings if (!string.IsNullOrEmpty(Request.Form[hdnIsNewWebPart.UniqueID])) { IsNewWebPart = ValidationHelper.GetBoolean(Request.Form[hdnIsNewWebPart.UniqueID], false); } if (!string.IsNullOrEmpty(Request.Form[hdnInstanceGUID.UniqueID])) { InstanceGUID = ValidationHelper.GetGuid(Request.Form[hdnInstanceGUID.UniqueID], Guid.Empty); } // Indicates whether the new variant should be chosen when closing this dialog selectNewVariant = IsNewVariant; // Try to find the web part variant in the database and set its VariantID if (IsNewVariant) { Hashtable varProperties = WindowHelper.GetItem("variantProperties") as Hashtable; if (varProperties != null) { // Get the variant code name from the WindowHelper string variantName = ValidationHelper.GetString(varProperties["codename"], string.Empty); // Check if the variant exists in the database int variantIdFromDB = VariantHelper.GetVariantID(VariantMode, PageTemplateID, variantName, true); // Set the variant id from the database if (variantIdFromDB > 0) { VariantID = variantIdFromDB; IsNewVariant = false; } } } if (!String.IsNullOrEmpty(WebPartID)) { // Get the page info pi = CMSWebPartPropertiesPage.GetPageInfo(AliasPath, PageTemplateID, CultureCode); if (pi == null) { ShowError(GetString("general.pagenotfound")); pnlExport.Visible = false; return; } // Get template pti = pi.UsedPageTemplateInfo; // Get template instance templateInstance = pti.TemplateInstance; if (!IsNewWebPart) { // Standard zone webPartInstance = templateInstance.GetWebPart(InstanceGUID, WebPartID); // If the web part not found, try to find it among the MVT/CP variants if (webPartInstance == null) { // MVT/CP variant templateInstance.LoadVariants(false, VariantModeEnum.None); webPartInstance = templateInstance.GetWebPart(InstanceGUID, -1, 0); // Set the VariantMode according to the selected web part/zone variant if ((webPartInstance != null) && (webPartInstance.ParentZone != null)) { VariantMode = (webPartInstance.VariantMode != VariantModeEnum.None) ? webPartInstance.VariantMode : webPartInstance.ParentZone.VariantMode; } else { VariantMode = VariantModeEnum.None; } } else { // Ensure that the ZoneVariantID is not set when the web part was found in a regular zone ZoneVariantID = 0; } if ((VariantID > 0) && (webPartInstance != null) && (webPartInstance.PartInstanceVariants != null)) { // Check OnlineMarketing permissions. if (CheckPermissions("Read")) { webPartInstance = webPartInstance.FindVariant(VariantID); } else { // Not authorized for OnlineMarketing - Manage. RedirectToInformation(String.Format(GetString("general.permissionresource"), "Read", (VariantMode == VariantModeEnum.ContentPersonalization) ? "CMS.ContentPersonalization" : "CMS.MVTest")); } } if (webPartInstance == null) { UIContext.EditedObject = null; return; } } mainWebPartInstance = webPartInstance; // Keep xml version if (webPartInstance != null) { xmlVersion = webPartInstance.XMLVersion; // If data source ID set, edit the data source if (NestedWebPartID > 0) { webPartInstance = webPartInstance.NestedWebParts[NestedWebPartKey] ?? new WebPartInstance() { InstanceGUID = Guid.NewGuid() }; } } // Get the form info FormInfo fi = GetWebPartFormInfo(); // Get the form definition if (fi != null) { fi.ContextResolver.Settings.RelatedObject = templateInstance; form.AllowMacroEditing = true; // Get data row with required columns DataRow dr = fi.GetDataRow(); if (IsNewWebPart || (xmlVersion > 0)) { fi.LoadDefaultValues(dr); } // Load values from existing web part LoadDataRowFromWebPart(dr, webPartInstance, fi); // Set a unique WebPartControlID for the new variant if (IsNewVariant || IsNewWebPart) { // Set control ID string webPartControlId = ValidationHelper.GetCodeName(wpi.WebPartDisplayName); dr["WebPartControlID"] = WebPartZoneInstance.GetUniqueWebPartId(webPartControlId, templateInstance); } // Init the form InitForm(form, dr, fi); AddExportLink(); } else { UIContext.EditedObject = null; } } }
/// <summary> /// Saves widget properties. /// </summary> public bool Save() { if (VariantID > 0) { // Check MVT/CP security if (!CheckPermissions("Manage")) { DisplayError("general.modifynotallowed"); return(false); } } // Save the data if ((pi != null) && (templateInstance != null) && SaveForm(formCustom)) { // Check manage permission for non-livesite version if ((CMSContext.ViewMode != ViewModeEnum.LiveSite) && (CMSContext.ViewMode != ViewModeEnum.DashboardWidgets)) { if (CMSContext.CurrentUser.IsAuthorizedPerDocument(pi.NodeID, pi.ClassName, NodePermissionsEnum.Modify) != AuthorizationResultEnum.Allowed) { return(false); } } PageTemplateInfo pti = templateInstance.ParentPageTemplate; if ((CMSContext.ViewMode == ViewModeEnum.Design) && CMSObjectHelper.IsCheckedOutByOtherUser(pti)) { string userName = null; UserInfo ui = UserInfoProvider.GetUserInfo(pti.Generalized.IsCheckedOutByUserID); if (ui != null) { userName = HTMLHelper.HTMLEncode(ui.GetFormattedUserName(IsLiveSite)); } DisplayError(string.Format(GetString("ObjectEditMenu.CheckedOutByAnotherUser"), pti.ObjectType, pti.DisplayName, userName)); return(false); } // Get the zone zone = templateInstance.EnsureZone(ZoneId); if (zone != null) { zone.WidgetZoneType = zoneType; // Add new widget if (IsNewWidget) { bool isLayoutZone = (QueryHelper.GetBoolean("layoutzone", false)); int widgetID = ValidationHelper.GetInteger(WidgetId, 0); // Create new widget instance widgetInstance = PortalHelper.AddNewWidget(widgetID, ZoneId, ZoneType, isLayoutZone, templateInstance, null); } widgetInstance.XMLVersion = 1; if (IsNewVariant) { widgetInstance = widgetInstance.Clone(); if (pi.DocumentTemplateInstance.WebPartZones.Count == 0) { // Save to the document as editor admin changes TreeNode node = DocumentHelper.GetDocument(pi.DocumentID, tree); // Extract and set the document web parts node.SetValue("DocumentWebParts", templateInstance.GetZonesXML(WidgetZoneTypeEnum.Editor)); // Save the document DocumentHelper.UpdateDocument(node, tree); } } // Get basicform's datarow and update widget SaveFormToWidget(formCustom, templateInstance); if (IsNewVariant) { // Ensures unique id for new widget variant widgetInstance.ControlID = WebPartZoneInstance.GetUniqueWebPartId(wi.WidgetName, zone.ParentTemplateInstance); } // Allow set dashboard in design mode if ((zoneType == WidgetZoneTypeEnum.Dashboard) && String.IsNullOrEmpty(PortalContext.DashboardName)) { PortalContext.SetViewMode(ViewModeEnum.Design); } bool isWidgetVariant = (VariantID > 0) || IsNewVariant; if (!isWidgetVariant) { // Save the changes CMSPortalManager.SaveTemplateChanges(pi, templateInstance, zoneType, CMSContext.ViewMode, tree); } else if ((CMSContext.ViewMode == ViewModeEnum.Edit) && (zoneType == WidgetZoneTypeEnum.Editor)) { Hashtable properties = WindowHelper.GetItem("variantProperties") as Hashtable; PortalHelper.SaveWebPartVariantChanges(widgetInstance, VariantID, 0, VariantMode, properties); // Clear the document template templateInstance.ParentPageTemplate.ParentPageInfo.DocumentTemplateInstance = null; // Log widget variant synchronization TreeNode node = DocumentHelper.GetDocument(pi.DocumentID, tree); DocumentSynchronizationHelper.LogDocumentChange(node, TaskTypeEnum.UpdateDocument, tree); } } // Reload the form (because of macro values set only by JS) formCustom.ReloadData(); // Clear the cached web part if (InstanceGUID != null) { CacheHelper.TouchKey("webpartinstance|" + InstanceGUID.ToString().ToLowerCSafe()); } return(true); } return(false); }
/// <summary> /// Saves web part zone properties. /// </summary> public bool Save() { if (ZoneVariantID > 0) { // Check OnlineMarketing permissions if (!CheckPermissions("Manage")) { ShowInformation(GetString("general.modifynotallowed")); return(false); } } // Save the data if (formElem.SaveData("")) { DataRow dr = formElem.DataRow; // Get basicform's datarow and update the fields if ((webPartZone != null) && (dr != null) && (pti != null)) { webPartZone.XMLVersion = 1; // New variant if (IsNewVariant) { webPartZone = pti.TemplateInstance.EnsureZone(webPartZone.ZoneID); // Ensure that all the zones which are not saved in the template already will be saved now // This is a case for new layout zones if (!webPartZone.HasVariants) { TreeProvider tree = new TreeProvider(MembershipContext.AuthenticatedUser); CMSPortalManager.SaveTemplateChanges(pi, pti.TemplateInstance, WidgetZoneTypeEnum.None, ViewModeEnum.Design, tree); } webPartZone = webPartZone.Clone(); string webPartControlId = string.Empty; // Re-generate web part unique IDs foreach (WebPartInstance wpi in webPartZone.WebParts) { bool webPartIdExists = false; int offset = 0; // Set new web part unique ID string baseId = Regex.Replace(wpi.ControlID, "\\d+$", ""); do { webPartControlId = WebPartZoneInstance.GetUniqueWebPartId(baseId, pti.TemplateInstance, offset); // Check if the returned web part control id is already used in the new zone variant webPartIdExists = (webPartZone.GetWebPart(webPartControlId) != null); offset++; } while (webPartIdExists); wpi.ControlID = webPartControlId; wpi.InstanceGUID = new Guid(); } } // If zone type changed, delete all webparts in the zone if (dr.Table.Columns.Contains("WidgetZoneType") && ValidationHelper.GetString(webPartZone.GetValue("WidgetZoneType"), "") != ValidationHelper.GetString(dr["WidgetZoneType"], "")) { webPartZone.RemoveAllWebParts(); } foreach (DataColumn column in dr.Table.Columns) { webPartZone.MacroTable[column.ColumnName.ToLowerCSafe()] = formElem.MacroTable[column.ColumnName.ToLowerCSafe()]; webPartZone.SetValue(column.ColumnName, dr[column]); } // Ensure the layout zone flag webPartZone.LayoutZone = QueryHelper.GetBoolean("layoutzone", false); // Save standard zone if ((ZoneVariantID == 0) && (!IsNewVariant)) { // Update page template PageTemplateInfoProvider.SetPageTemplateInfo(pti); } else { // Save zone variant if ((webPartZone != null) && (webPartZone.ParentTemplateInstance != null) && (webPartZone.ParentTemplateInstance.ParentPageTemplate != null) && (!webPartZone.WebPartsContainVariants)) // Save only if any of the child web parts does not have variants { // Save the variant properties VariantSettings variant = new VariantSettings() { ID = ZoneVariantID, ZoneID = webPartZone.ZoneID, PageTemplateID = webPartZone.ParentTemplateInstance.ParentPageTemplate.PageTemplateId, }; // Get variant description properties Hashtable properties = WindowHelper.GetItem("variantProperties") as Hashtable; if (properties != null) { variant.Name = ValidationHelper.GetString(properties["codename"], string.Empty); variant.DisplayName = ValidationHelper.GetString(properties["displayname"], string.Empty); variant.Description = ValidationHelper.GetString(properties["description"], string.Empty); variant.Enabled = ValidationHelper.GetBoolean(properties["enabled"], true); if (PortalContext.ContentPersonalizationEnabled) { variant.Condition = ValidationHelper.GetString(properties["condition"], string.Empty); } } mZoneVariantID = VariantHelper.SetVariant(variantMode, variant, webPartZone.GetXmlNode()); // The variants are cached -> Reload pti.TemplateInstance.LoadVariants(true, VariantModeEnum.None); } } // Reload the form (because of macro values set only by JS) formElem.LoadData(dr); ShowChangesSaved(); return(true); } else { return(false); } } else { return(false); } }
/// <summary> /// Init event handler. /// </summary> protected override void OnInit(EventArgs e) { base.OnInit(e); // Load settings if (!string.IsNullOrEmpty(Request.Form[hdnIsNewWebPart.UniqueID])) { IsNewWebPart = ValidationHelper.GetBoolean(Request.Form[hdnIsNewWebPart.UniqueID], false); } if (!string.IsNullOrEmpty(Request.Form[hdnInstanceGUID.UniqueID])) { InstanceGUID = ValidationHelper.GetGuid(Request.Form[hdnInstanceGUID.UniqueID], Guid.Empty); } // Try to find the web part variant in the database and set its VariantID if (IsNewVariant) { Hashtable properties = WindowHelper.GetItem("variantProperties") as Hashtable; if (properties != null) { // Get the variant code name from the WindowHelper string variantName = ValidationHelper.GetString(properties["codename"], string.Empty); // Check if the variant exists in the database int variantIdFromDB = 0; if (VariantMode == VariantModeEnum.MVT) { variantIdFromDB = ModuleCommands.OnlineMarketingGetMVTVariantId(PageTemplateId, variantName); } else if (VariantMode == VariantModeEnum.ContentPersonalization) { variantIdFromDB = ModuleCommands.OnlineMarketingGetContentPersonalizationVariantId(PageTemplateId, variantName); } // Set the variant id from the database if (variantIdFromDB > 0) { VariantID = variantIdFromDB; IsNewVariant = false; } } } if (!String.IsNullOrEmpty(WebpartId)) { // Get the page info pi = CMSWebPartPropertiesPage.GetPageInfo(this.AliasPath, this.PageTemplateId); if (pi != null) { // Get template pti = pi.PageTemplateInfo; // Get template instance templateInstance = pti.TemplateInstance; // Parent webpart WebPartInfo parentWpi = null; //Before FormInfo FormInfo beforeFI = null; //After FormInfo FormInfo afterFI = null; // Webpart form info FormInfo fi = null; if (!IsNewWebPart) { // Standard zone webPartInstance = pti.GetWebPart(InstanceGUID, WebpartId); // If the web part not found, try to find it among the MVT/CP variants if (webPartInstance == null) { // MVT/CP variant templateInstance.LoadVariants(false, VariantModeEnum.None); webPartInstance = templateInstance.GetWebPart(InstanceGUID, true); // Set the VariantMode according to the selected web part/zone variant if ((webPartInstance != null) && (webPartInstance.ParentZone != null)) { VariantMode = (webPartInstance.VariantMode != VariantModeEnum.None) ? webPartInstance.VariantMode : webPartInstance.ParentZone.VariantMode; } else { VariantMode = VariantModeEnum.None; } } else { // Ensure that the ZoneVarianID is not set when the web part was found in a regural zone. ZoneVariantID = 0; } if ((VariantID > 0) && (webPartInstance != null) && (webPartInstance.PartInstanceVariants != null)) { // Check OnlineMarketing permissions. if (CheckPermissions("Read")) { webPartInstance = webPartInstance.FindVariant(VariantID); } else { // Not authorised for OnlineMarketing - Manage. RedirectToInformation(String.Format(GetString("general.permissionresource"), "Read", (VariantMode == VariantModeEnum.ContentPersonalization) ? "CMS.ContentPersonalization" : "CMS.MVTest")); } } if (webPartInstance == null) { lblInfo.Text = GetString("WebPartProperties.WebPartNotFound"); pnlFormArea.Visible = false; return; } wpi = WebPartInfoProvider.GetWebPartInfo(webPartInstance.WebPartType); form.Mode = FormModeEnum.Update; } // Webpart instance hasn't created yet else { wpi = WebPartInfoProvider.GetWebPartInfo(ValidationHelper.GetInteger(WebpartId, 0)); form.Mode = FormModeEnum.Insert; } // Load parent if (wpi != null) { if (wpi.WebPartParentID > 0) { parentWpi = WebPartInfoProvider.GetWebPartInfo(wpi.WebPartParentID); } } // Get the form definition string wpProperties = "<form></form>"; if (wpi != null) { wpProperties = wpi.WebPartProperties; // Use parent webpart if is defined if (parentWpi != null) { wpProperties = parentWpi.WebPartProperties; } // Get before FormInfo if (BeforeFormDefinition == null) { beforeFI = PortalHelper.GetPositionFormInfo((WebPartTypeEnum)wpi.WebPartType, PropertiesPosition.Before); } else { beforeFI = new FormInfo(BeforeFormDefinition); } // Get after FormInfo if (AfterFormDefinition == null) { afterFI = PortalHelper.GetPositionFormInfo((WebPartTypeEnum)wpi.WebPartType, PropertiesPosition.After); } else { afterFI = new FormInfo(AfterFormDefinition); } } // Add 'General' category at the beginning if no one is specified if (!string.IsNullOrEmpty(wpProperties) && (!wpProperties.StartsWith("<form><category", StringComparison.InvariantCultureIgnoreCase))) { wpProperties = wpProperties.Insert(6, "<category name=\"" + GetString("general.general") + "\" />"); } // Get merged web part FormInfo fi = FormHelper.GetWebPartFormInfo(wpi.WebPartName, wpProperties, beforeFI, afterFI, true); // Get datarow with required columns DataRow dr = fi.GetDataRow(); if (IsNewWebPart) { // Load default properties values fi.LoadDefaultValues(dr); // Load overriden system values fi.LoadDefaultValues(dr, wpi.WebPartDefaultValues); // Set control ID FormFieldInfo ffi = fi.GetFormField("WebPartControlID"); if (ffi != null) { ffi.DefaultValue = WebPartZoneInstance.GetUniqueWebPartId(wpi.WebPartName, templateInstance); fi.UpdateFormField("WebPartControlID", ffi); } } // Load values from existing webpart LoadDataRowFromWebPart(dr, webPartInstance); // Set a unique WebPartControlID for athe new variant if (IsNewVariant) { // Set control ID dr["WebPartControlID"] = WebPartZoneInstance.GetUniqueWebPartId(wpi.WebPartName, templateInstance); } // Init the form InitForm(form, dr, fi); AddExportLink(); } } }
/// <summary> /// Saves web part zone properties. /// </summary> public bool Save() { if (ZoneVariantID > 0) { // Check OnlineMarketing permissions if (!CheckPermissions("Manage")) { lblError.Visible = true; lblError.Text = GetString("general.modifynotallowed"); return(false); } } // Save the data if (formElem.SaveData("")) { DataRow dr = formElem.DataRow; // Get basicform's datarow and update the fields if ((webPartZone != null) && (dr != null) && (pti != null)) { // New variant // Clone original zone WebPartZoneInstance originalWebPartZone = webPartZone; if (IsNewVariant) { webPartZone = pti.EnsureZone(webPartZone.ZoneID); // Ensure that all the zones which are not saved in the template already will be saved now // This is a case for new layout zones if (!webPartZone.HasVariants) { TreeProvider tree = new TreeProvider(CMSContext.CurrentUser); CMSPortalManager.SaveTemplateChanges(pi, pti, pti.TemplateInstance, WidgetZoneTypeEnum.None, ViewModeEnum.Design, tree); } webPartZone = webPartZone.Clone(); bool webPartIdExists = false; int offset = 0; string webPartControlId = string.Empty; // Re-generate web part unique IDs foreach (WebPartInstance wpi in webPartZone.WebParts) { webPartIdExists = false; offset = 0; // Set new web part unique ID string baseId = Regex.Replace(wpi.ControlID, "\\d+$", ""); do { webPartControlId = WebPartZoneInstance.GetUniqueWebPartId(baseId, pti.TemplateInstance, offset); // Check if the returned web part control id is already used in the new zone variant webPartIdExists = (webPartZone.GetWebPart(webPartControlId) != null); offset++; } while (webPartIdExists); wpi.ControlID = webPartControlId; wpi.InstanceGUID = new Guid(); } } // If zone type changed, delete all webparts in the zone if (ValidationHelper.GetString(webPartZone.GetValue("WidgetZoneType"), "") != ValidationHelper.GetString(dr["WidgetZoneType"], "")) { // Remove all variants if (variantMode == VariantModeEnum.MVT) { ModuleCommands.OnlineMarketingRemoveMVTWebPartVariants(webPartZone.WebParts); } else if (variantMode == VariantModeEnum.ContentPersonalization) { ModuleCommands.OnlineMarketingRemoveContentPersonalizationWebPartVariants(webPartZone.WebParts); } webPartZone.WebParts.Clear(); } foreach (DataColumn column in dr.Table.Columns) { webPartZone.MacroTable[column.ColumnName.ToLower()] = formElem.MacroTable[column.ColumnName.ToLower()]; webPartZone.SetValue(column.ColumnName, dr[column]); } // Ensure the layout zone flag webPartZone.LayoutZone = QueryHelper.GetBoolean("layoutzone", false); // Save standard zone if ((ZoneVariantID == 0) && (!IsNewVariant)) { // Update page template PageTemplateInfoProvider.SetPageTemplateInfo(pti); } else { // Save zone variant if ((webPartZone != null) && (webPartZone.ParentTemplateInstance != null) && (webPartZone.ParentTemplateInstance.ParentPageTemplate != null) && (!webPartZone.WebPartsContainVariants)) // Save only if any of the child web parts does not have variants { // Save the variant properties string variantName = string.Empty; string variantDisplayName = string.Empty; string variantDisplayCondition = string.Empty; string variantDescription = string.Empty; bool variantEnabled = true; string zoneId = webPartZone.ZoneID; int templateId = webPartZone.ParentTemplateInstance.ParentPageTemplate.PageTemplateId; XmlDocument doc = new XmlDocument(); XmlNode xmlWebParts = webPartZone.GetXmlNode(doc); // Get variant description properties Hashtable properties = WindowHelper.GetItem("variantProperties") as Hashtable; if (properties != null) { variantName = ValidationHelper.GetString(properties["codename"], string.Empty); variantDisplayName = ValidationHelper.GetString(properties["displayname"], string.Empty); variantDescription = ValidationHelper.GetString(properties["description"], string.Empty); variantEnabled = ValidationHelper.GetBoolean(properties["enabled"], true); if (PortalContext.ContentPersonalizationEnabled) { variantDisplayCondition = ValidationHelper.GetString(properties["condition"], string.Empty); } } if (variantMode == VariantModeEnum.MVT) { // Save MVT variant properties mZoneVariantID = ModuleCommands.OnlineMarketingSaveMVTVariant(ZoneVariantID, variantName, variantDisplayName, variantDescription, variantEnabled, zoneId, Guid.Empty, templateId, 0, xmlWebParts); } else if (variantMode == VariantModeEnum.ContentPersonalization) { // Save Content personalization variant properties mZoneVariantID = ModuleCommands.OnlineMarketingSaveContentPersonalizationVariant(ZoneVariantID, variantName, variantDisplayName, variantDescription, variantEnabled, variantDisplayCondition, zoneId, Guid.Empty, templateId, 0, xmlWebParts); } // The variants are cached -> Reload if (originalWebPartZone != null) { originalWebPartZone.LoadVariants(true, variantMode); } } } // Reload the form (because of macro values set only by JS) this.formElem.LoadData(dr); return(true); } else { return(false); } } else { return(false); } }
/// <summary> /// Saves widget properties. /// </summary> public bool Save() { if (VariantID > 0) { // Check MVT/CP security if (!CheckPermissions("Manage")) { ShowError("general.modifynotallowed"); return(false); } } // Save the data if ((pi != null) && (pti != null) && (templateInstance != null) && SaveForm(formCustom)) { // Check manage permission for non-livesite version if ((CMSContext.ViewMode != ViewModeEnum.LiveSite) && (CMSContext.ViewMode != ViewModeEnum.DashboardWidgets)) { if (CMSContext.CurrentUser.IsAuthorizedPerDocument(pi.NodeId, pi.ClassName, NodePermissionsEnum.Modify) != AuthorizationResultEnum.Allowed) { return(false); } } // Get the zone zone = templateInstance.EnsureZone(ZoneId); if (zone != null) { zone.WidgetZoneType = zoneType; // Add new widget if (IsNewWidget) { AddWidget(); } if (IsNewVariant) { widgetInstance = widgetInstance.Clone(); if (pi.DocumentTemplateInstance.WebPartZones.Count == 0) { // Save to the document as editor admin changes TreeNode node = DocumentHelper.GetDocument(pi.DocumentId, tree); // Extract and set the document web parts node.SetValue("DocumentWebParts", templateInstance.GetZonesXML(WidgetZoneTypeEnum.Editor)); // Save the document DocumentHelper.UpdateDocument(node, tree); } } // Get basicform's datarow and update widget SaveFormToWidget(formCustom); if (IsNewVariant) { // Ensures unique id for new widget variant widgetInstance.ControlID = WebPartZoneInstance.GetUniqueWebPartId(wi.WidgetName, zone.ParentTemplateInstance); } // Allow set dashboard in design mode if ((zoneType == WidgetZoneTypeEnum.Dashboard) && String.IsNullOrEmpty(PortalContext.DashboardName)) { PortalContext.SetViewMode(ViewModeEnum.Design); } bool isWidgetVariant = (VariantID > 0) || IsNewVariant; if (!isWidgetVariant) { // Save the changes CMSPortalManager.SaveTemplateChanges(pi, pti, templateInstance, zoneType, CMSContext.ViewMode, tree); } else if ((CMSContext.ViewMode == ViewModeEnum.Edit) && (zoneType == WidgetZoneTypeEnum.Editor)) { // Save the variant properties if ((widgetInstance != null) && (widgetInstance.ParentZone != null) && (widgetInstance.ParentZone.ParentTemplateInstance != null) && (widgetInstance.ParentZone.ParentTemplateInstance.ParentPageTemplate != null)) { string variantName = string.Empty; string variantDisplayName = string.Empty; string variantDisplayCondition = string.Empty; string variantDescription = string.Empty; bool variantEnabled = true; string zoneId = widgetInstance.ParentZone.ZoneID; int templateId = widgetInstance.ParentZone.ParentTemplateInstance.ParentPageTemplate.PageTemplateId; Guid instanceGuid = Guid.Empty; XmlDocument doc = new XmlDocument(); XmlNode xmlWebParts = null; xmlWebParts = widgetInstance.GetXmlNode(doc); instanceGuid = InstanceGUID; Hashtable properties = WindowHelper.GetItem("variantProperties") as Hashtable; if (properties != null) { variantName = ValidationHelper.GetString(properties["codename"], string.Empty); variantDisplayName = ValidationHelper.GetString(properties["displayname"], string.Empty); variantDescription = ValidationHelper.GetString(properties["description"], string.Empty); variantEnabled = ValidationHelper.GetBoolean(properties["enabled"], true); if (VariantMode == VariantModeEnum.ContentPersonalization) { variantDisplayCondition = ValidationHelper.GetString(properties["condition"], string.Empty); } } // Save the web part variant properties if (VariantMode == VariantModeEnum.MVT) { ModuleCommands.OnlineMarketingSaveMVTVariant(VariantID, variantName, variantDisplayName, variantDescription, variantEnabled, zoneId, widgetInstance.InstanceGUID, templateId, pi.DocumentId, xmlWebParts); } else if (VariantMode == VariantModeEnum.ContentPersonalization) { ModuleCommands.OnlineMarketingSaveContentPersonalizationVariant(VariantID, variantName, variantDisplayName, variantDescription, variantEnabled, variantDisplayCondition, zoneId, widgetInstance.InstanceGUID, templateId, pi.DocumentId, xmlWebParts); } // Clear the document template templateInstance.ParentPageTemplate.ParentPageInfo.DocumentTemplateInstance = null; // Log widget variant synchronization TreeNode node = DocumentHelper.GetDocument(pi.DocumentId, tree); DocumentSynchronizationHelper.LogDocumentChange(node, TaskTypeEnum.UpdateDocument, tree); } } } // Reload the form (because of macro values set only by JS) formCustom.ReloadData(); // Clear the cached web part if (InstanceGUID != null) { CacheHelper.TouchKey("webpartinstance|" + InstanceGUID.ToString().ToLower()); } return(true); } return(false); }