/// <summary> /// PreInit event handler. /// </summary> protected void PreInit_Setting(object sender, EventArgs e) { mBodyClass = BrowserHelper.GetBrowserClass(); // Initialize the control widgetProperties.AliasPath = aliasPath; widgetProperties.CultureCode = QueryHelper.GetString("culture", CMSContext.PreferredCultureCode); widgetProperties.PageTemplateId = templateId; widgetProperties.WidgetId = QueryHelper.GetString("widgetid", ""); widgetProperties.ZoneId = QueryHelper.GetString("zoneid", ""); widgetProperties.InstanceGUID = QueryHelper.GetGuid("instanceguid", Guid.Empty); widgetProperties.IsNewWidget = QueryHelper.GetBoolean("isnew", false); widgetProperties.IsNewVariant = QueryHelper.GetBoolean("isnewvariant", false); widgetProperties.IsInline = QueryHelper.GetBoolean("Inline", false); widgetProperties.VariantID = QueryHelper.GetInteger("variantid", 0); widgetProperties.VariantMode = VariantModeFunctions.GetVariantModeEnum(QueryHelper.GetString("variantmode", string.Empty)); widgetProperties.ZoneType = WidgetZoneTypeCode.ToEnum(QueryHelper.GetString("zonetype", "")); widgetProperties.IsLiveSite = false; // Ensure the design mode for the dialog if (String.IsNullOrEmpty(aliasPath)) { PortalContext.SetRequestViewMode(ViewModeEnum.Design); } widgetProperties.OnNotAllowed += widgetProperties_OnNotAllowed; }
/// <summary> /// Handles the OnSaved event of the editElem control. /// </summary> protected void UIFormControl_OnBeforeSaved(object sender, EventArgs e) { if (editElem.ValidateData()) { // Add the properties to the window helper Hashtable parameters = new Hashtable(); parameters.Add("displayname", ValidationHelper.GetString(editElem.UIFormControl.FieldControls["VariantDisplayName"].Value, string.Empty)); parameters.Add("codename", editElem.VariantCodeName); parameters.Add("description", ValidationHelper.GetString(editElem.UIFormControl.FieldControls["VariantDescription"].Value, string.Empty)); parameters.Add("enabled", ValidationHelper.GetBoolean(editElem.UIFormControl.FieldControls["VariantEnabled"].Value, false)); parameters.Add("condition", ValidationHelper.GetString(editElem.UIFormControl.FieldControls["VariantDisplayCondition"].Value, string.Empty)); WindowHelper.Add("variantProperties", parameters); // Set a script to open the web part properties modal dialog string query = URLHelper.GetQuery(URLHelper.CurrentURL); query = URLHelper.RemoveUrlParameter(query, "nodeid"); query = URLHelper.AddUrlParameter(query, "variantmode", VariantModeFunctions.GetVariantModeString(VariantModeEnum.ContentPersonalization)); // Choose the correct javascript method for opening web part/zone properties string functionName = string.Empty; switch (variantType) { case VariantTypeEnum.WebPart: functionName = "OnAddWebPartVariant"; break; case VariantTypeEnum.Widget: functionName = "OnAddWidgetVariant"; query = URLHelper.RemoveUrlParameter(query, "varianttype"); string widgetId = QueryHelper.GetString("webpartid", string.Empty); query = URLHelper.RemoveUrlParameter(query, "webpartid"); query = URLHelper.AddParameterToUrl(query, "widgetid", widgetId); break; case VariantTypeEnum.Zone: functionName = "OnAddWebPartZoneVariant"; break; } // Setup the script for opening web part/zone properties string script = @" function OpenVariantProperties() { if (wopener." + functionName + @") { wopener." + functionName + "('" + query + @"'); } CloseDialog(); } window.onload = OpenVariantProperties;"; ltrScript.Text = ScriptHelper.GetScript(script); } // Do not save the variant. Will be saved when saving the web part/zone properties. editElem.UIFormControl.StopProcessing = true; }
/// <summary> /// Saves webpart properties. /// </summary> public bool Save() { // Check MVT/CP security if (VariantID > 0) { // Check OnlineMarketing permissions. if (!CheckPermissions("Manage")) { ShowError(GetString("general.modifynotallowed")); return(false); } } // Save the data if ((pi != null) && (pti != null) && (templateInstance != null) && SaveForm(form)) { if (SynchronizationHelper.IsCheckedOutByOtherUser(pti)) { string userName = null; UserInfo ui = UserInfoProvider.GetUserInfo(pti.Generalized.IsCheckedOutByUserID); if (ui != null) { userName = HTMLHelper.HTMLEncode(ui.GetFormattedUserName(IsLiveSite)); } ShowError(string.Format(GetString("ObjectEditMenu.CheckedOutByAnotherUser"), pti.TypeInfo.ObjectType, pti.DisplayName, userName)); return(false); } // Add web part if new if (IsNewWebPart) { int webpartId = ValidationHelper.GetInteger(WebPartID, 0); // Ensure layout zone flag if (QueryHelper.GetBoolean("layoutzone", false)) { WebPartZoneInstance zone = pti.TemplateInstance.EnsureZone(ZoneID); zone.LayoutZone = true; } webPartInstance = PortalHelper.AddNewWebPart(webpartId, ZoneID, false, ZoneVariantID, Position, templateInstance); // Set default layout if (wpi.WebPartParentID > 0) { WebPartLayoutInfo wpli = WebPartLayoutInfoProvider.GetDefaultLayout(wpi.WebPartID); if (wpli != null) { webPartInstance.SetValue("WebPartLayout", wpli.WebPartLayoutCodeName); } } } webPartInstance.XMLVersion = 1; if (IsNewVariant) { webPartInstance = webPartInstance.Clone(); webPartInstance.VariantMode = VariantModeFunctions.GetVariantModeEnum(QueryHelper.GetString("variantmode", String.Empty).ToLowerInvariant()); } // Get basic form's data row and update web part SaveFormToWebPart(form); // Set new position if set if (PositionLeft > 0) { webPartInstance.SetValue("PositionLeft", PositionLeft); } if (PositionTop > 0) { webPartInstance.SetValue("PositionTop", PositionTop); } bool isWebPartVariant = (VariantID > 0) || (ZoneVariantID > 0) || IsNewVariant; if (!isWebPartVariant) { // Save the changes CMSPortalManager.SaveTemplateChanges(pi, templateInstance, WidgetZoneTypeEnum.None, ViewModeEnum.Design, tree); } else { Hashtable varProperties = WindowHelper.GetItem("variantProperties") as Hashtable; // Save changes to the web part variant VariantHelper.SaveWebPartVariantChanges(webPartInstance, VariantID, ZoneVariantID, VariantMode, varProperties); } // Reload the form (because of macro values set only by JS) form.ReloadData(); // Clear the cached web part CacheHelper.TouchKey("webpartinstance|" + InstanceGUID.ToString().ToLowerInvariant()); ShowChangesSaved(); return(true); } if (webPartInstance?.ParentZone?.ParentTemplateInstance != null) { // Reload the zone/web part variants when saving of the form fails webPartInstance.ParentZone.ParentTemplateInstance.LoadVariants(true, VariantModeEnum.None); } return(false); }
/// <summary> /// Handles the PreRender event of the Page control. /// </summary> protected void Page_PreRender(object sender, EventArgs e) { if (stopProcessing) { Visible = false; return; } // Check permissions if (!CheckPermissions("Manage")) { // Hide add/remove variant buttons when the Manage permission is not allowed plcRemoveVariant.Visible = false; plcAddVariant.Visible = false; } // Hide buttons in the template edit in the site manager if (DocumentContext.CurrentDocument == null) { plcRemoveVariant.Visible = false; plcAddVariant.Visible = false; plcVariantList.Visible = false; } // Get the sum of all variants int totalVariants = 0; switch (SliderMode) { case VariantTypeEnum.Zone: // Zone if ((WebPartZoneControl != null) && (WebPartZoneControl.HasVariants) && (WebPartZoneControl.ZoneInstance != null) && (WebPartZoneControl.ZoneInstance.ZoneInstanceVariants != null)) { totalVariants = WebPartZoneControl.ZoneInstance.ZoneInstanceVariants.Count; } break; case VariantTypeEnum.WebPart: case VariantTypeEnum.Widget: // Web part // Widget if ((WebPartControl != null) && (WebPartControl.HasVariants) && (WebPartControl.PartInstance != null) && (WebPartControl.PartInstance.PartInstanceVariants != null)) { totalVariants = WebPartControl.PartInstance.PartInstanceVariants.Count; } break; } // Increase by 1 to include the original webpart totalVariants++; // Reset the slider state (correct variant for the current combination is chosen by javascript in window.onload) txtSlider.Text = "1"; if (isRTL) { // Reverse position index when in RTL txtSlider.Text = totalVariants.ToString(); } // Change the slider CSS class if used for widgets if ((WebPartControl != null) && WebPartControl.IsWidget) { pnlVariations.CssClass = "WidgetVariantSlider"; } // Setup the variant slider extender sliderExtender.Minimum = 1; sliderExtender.Maximum = totalVariants; sliderExtender.Steps = totalVariants; sliderExtender.HandleImageUrl = GetImageUrl("Design/Controls/VariantSlider/slider.png"); if (isRTL) { // RTL culture - set the javascript variable ScriptHelper.RegisterStartupScript(Page, typeof(string), "VariantSliderRTL", ScriptHelper.GetScript("variantSliderIsRTL = true;")); } // Change the arrows design for MVT if ((VariantMode == VariantModeEnum.MVT) || !PortalContext.ContentPersonalizationEnabled) { //pnlLeft.CssClass = "SliderLeftMVT"; //pnlRight.CssClass = "SliderRightMVT"; } CssRegistration.RegisterBootstrap(Page); sliderExtender.HandleCssClass = "slider-horizontal-handle"; sliderExtender.RailCssClass = "slider-horizontal-rail"; lblTotal.Text = totalVariants.ToString(); txtSlider.Attributes.Add("onchange", "$cmsj('#" + hdnSliderPosition.ClientID + "').change();"); txtSlider.Style.Add("display", "none"); // Prepare the parameters string zoneId = string.Empty; PageInfo pi = PagePlaceholder.PageInfo; string aliasPath = pi.NodeAliasPath; string templateId = pi.GetUsedPageTemplateId().ToString(); string webPartName = string.Empty; string instanceGuidString = string.Empty; switch (SliderMode) { case VariantTypeEnum.Zone: // Zone zoneId = WebPartZoneControl.ZoneInstance.ZoneID; break; case VariantTypeEnum.WebPart: case VariantTypeEnum.Widget: // Web part zoneId = WebPartControl.PartInstance.ParentZone.ZoneID; instanceGuidString = WebPartControl.InstanceGUID.ToString(); webPartName = WebPartControl.PartInstance.ControlID; break; } // Setup tooltips pnlLeft.ToolTip = ResHelper.GetString("variantslider.btnleft", UICulture); pnlRight.ToolTip = ResHelper.GetString("variantslider.btnright", UICulture); imgRemoveVariant.ToolTip = ResHelper.GetString("variantslider.btnremove", UICulture); imgVariantList.ToolTip = ResHelper.GetString("variantslider.btnlist", UICulture); // Setup default behaviour - no action executed imgRemoveVariantDisabled.Attributes.Add("onclick", "return false;"); imgVariantList.Attributes.Add("onclick", "return false;"); // Cancel propagation of the double-click event (skips opening the web part properties dialog) pnlVariations.Attributes.Add("ondblclick", "CancelEventPropagation(event)"); // Hidden field used for changing the slider position. The position of the slider is stored also here because of the usage of the slider arrows. hdnSliderPosition.Style.Add("display", "none"); hdnSliderPosition.Attributes.Add("onchange", "OnHiddenChanged(this, document.getElementById('" + lblPart.ClientID + "'), '" + uniqueCode + "', '" + sliderExtender.BehaviorID + @"' );"); String zoneIdPar = (WebPartControl != null) ? "GetActualZoneId('wp_" + WebPartControl.InstanceGUID.ToString("N") + "')" : "'" + zoneId + "'"; string dialogParams = zoneIdPar + ", '" + webPartName + "', '" + aliasPath + "', '" + instanceGuidString + "', " + templateId + ", '" + VariantTypeFunctions.GetVariantTypeString(SliderMode) + "'"; // Allow edit actions if (totalVariants == 1) { if (SliderMode == VariantTypeEnum.Widget) { plcRemoveVariant.Visible = false; plcVariantList.Visible = false; plcSliderPanel.Visible = false; var cui = MembershipContext.AuthenticatedUser; bool manageMVT = cui.IsAuthorizedPerResource("cms.mvtest", "manage") && cui.IsAuthorizedPerResource("cms.mvtest", "read"); bool manageCP = cui.IsAuthorizedPerResource("cms.contentpersonalization", "manage") && cui.IsAuthorizedPerResource("cms.contentpersonalization", "read"); if (PortalContext.MVTVariantsEnabled && PortalContext.ContentPersonalizationEnabled && manageMVT && manageCP) { pnlAddVariantWrapper.Attributes.Add("onclick", "OpenMenuAddWidgetVariant(this, '" + WebPartControl.ShortClientID + "'); return false;"); imgAddVariant.ToolTip = ResHelper.GetString("variantslider.btnadd", UICulture); // Script for opening a new variant dialog window and activating widget border to prevent to widget border from hiding // when the user moves his mouse to the 'add widget' context menu. string script = @" function OpenMenuAddWidgetVariant(menuPositionEl, targetId) { currentContextMenuId = targetId; ContextMenu('addWidgetVariantMenu', menuPositionEl, webPartLocation[targetId + '_container'], true); AutoPostitionContextMenu('addWidgetVariantMenu'); }"; ScriptHelper.RegisterStartupScript(this, typeof(string), "OpenMenuAddWidgetVariantScript", ScriptHelper.GetScript(script)); } else { if (PortalContext.MVTVariantsEnabled && manageMVT) { imgAddVariant.Attributes.Add("onclick", "AddMVTVariant(" + dialogParams + "); return false;"); imgAddVariant.ToolTip = ResHelper.GetString("variantslider.btnaddmvt", UICulture); } else if (PortalContext.ContentPersonalizationEnabled && manageCP) { imgAddVariant.Attributes.Add("onclick", "AddPersonalizationVariant(" + dialogParams + "); return false;"); imgAddVariant.ToolTip = ResHelper.GetString("variantslider.btnaddpesronalization", UICulture); } } } } else { if (VariantMode == VariantModeEnum.MVT) { imgAddVariant.Attributes.Add("onclick", "AddMVTVariant(" + dialogParams + "); return false;"); imgAddVariant.ToolTip = ResHelper.GetString("variantslider.btnaddmvt", UICulture); } else { imgAddVariant.Attributes.Add("onclick", "AddPersonalizationVariant(" + dialogParams + "); return false;"); imgAddVariant.ToolTip = ResHelper.GetString("variantslider.btnaddpesronalization", UICulture); } } if ((totalVariants > 1) || (SliderMode == VariantTypeEnum.Widget)) { // Register only for full postback or first page load if (!RequestHelper.IsAsyncPostback()) { if ((VariantMode == VariantModeEnum.MVT)) { // Activate the variant list button fot MVT imgVariantList.Attributes.Add("onclick", "ListMVTVariants(" + dialogParams + ", '" + uniqueCode + "'); return false;"); } else if (VariantMode == VariantModeEnum.ContentPersonalization) { // Activate the variant list button for Content personalization imgVariantList.Attributes.Add("onclick", "ListPersonalizationVariants(" + dialogParams + ", '" + uniqueCode + "'); return false;"); } // Assign the onclick event for he Remove variant button imgRemoveVariant.Attributes.Add("onclick", "RemoveVariantPostBack_" + uniqueCode + @"(); return false"); // Register Remove variant script string removeVariantScript = @" function RemoveVariantPostBack_" + uniqueCode + @"() { if (confirm(" + ScriptHelper.GetLocalizedString("variantslider.removeconfirm") + @")) {" + DocumentManager.GetAllowSubmitScript() + @" var postBackCode = '" + uniqueCode + ":remove:' + GetCurrentVariantId('" + uniqueCode + @"'); SetVariant('" + uniqueCode + @"', 0);" + ControlsHelper.GetPostBackEventReference(this, "#").Replace("'#'", "postBackCode") + @"; } }"; ScriptHelper.RegisterStartupScript(Page, typeof(string), "removeVariantScript_" + uniqueCode, ScriptHelper.GetScript(removeVariantScript)); int step = 1; if (isRTL) { // Reverse step direction step = -1; } // Assign the onclick events for the slider arrows pnlLeft.Attributes.Add("onclick", "OnSliderChanged(event, '" + hdnSliderPosition.ClientID + "', " + totalVariants + ", " + step * (-1) + ");"); pnlRight.Attributes.Add("onclick", "OnSliderChanged(event, '" + hdnSliderPosition.ClientID + "', " + totalVariants + ", " + step + ");"); // Get all variants GUIDs List <string> variantIDsArray = new List <string>(); List <string> variantControlIDsArray = new List <string>(); List <string> divIDsArray = new List <string>(); switch (SliderMode) { case VariantTypeEnum.Zone: // Zone if ((WebPartZoneControl != null) && (WebPartZoneControl.ZoneInstance != null) && (WebPartZoneControl.ZoneInstance.ZoneInstanceVariants != null)) { // Fill the variant IDs array variantIDsArray = WebPartZoneControl.ZoneInstance.ZoneInstanceVariants.Select(zone => zone.VariantID.ToString()).ToList <string>(); // First item is the original zone (variantid=0) variantIDsArray.Insert(0, "0"); // Fill the variant control IDs array variantControlIDsArray = WebPartZoneControl.ZoneInstance.ZoneInstanceVariants.Select(zone => "\"" + (!string.IsNullOrEmpty(ValidationHelper.GetString(zone.Properties["zonetitle"], string.Empty)) ? HTMLHelper.HTMLEncode(zone.Properties["zonetitle"].ToString()) : zone.ZoneID) + "\"").ToList <string>(); // First item is the original web part/widget variantControlIDsArray.Insert(0, "\"" + (!string.IsNullOrEmpty(WebPartZoneControl.ZoneTitle) ? HTMLHelper.HTMLEncode(WebPartZoneControl.ZoneTitle) : WebPartZoneControl.ZoneInstance.ZoneID) + "\""); // Fill the DIV tag IDs array divIDsArray = WebPartZoneControl.ZoneInstance.ZoneInstanceVariants.Select(zone => "\"Variant_" + VariantModeFunctions.GetVariantModeString(zone.VariantMode) + "_" + zone.VariantID.ToString() + "\"").ToList <string>(); // First item is the original web part divIDsArray.Insert(0, "\"" + uniqueCode + "\""); } break; case VariantTypeEnum.WebPart: case VariantTypeEnum.Widget: // Web part or widget if ((WebPartControl != null) && (WebPartControl.PartInstance != null) && (WebPartControl.PartInstance.PartInstanceVariants != null)) { // Fill the variant IDs array variantIDsArray = WebPartControl.PartInstance.PartInstanceVariants.Select(webpart => webpart.VariantID.ToString()).ToList <string>(); // First item is the original web part/widget (variantid=0) variantIDsArray.Insert(0, "0"); // Fill the variant control IDs array variantControlIDsArray = WebPartControl.PartInstance.PartInstanceVariants.Select(webpart => "\"" + (!string.IsNullOrEmpty(ValidationHelper.GetString(webpart.Properties["webparttitle"], string.Empty)) ? HTMLHelper.HTMLEncode(webpart.Properties["webparttitle"].ToString()) : webpart.ControlID) + "\"").ToList <string>(); // First item is the original web part/widget variantControlIDsArray.Insert(0, "\"" + (!string.IsNullOrEmpty(ValidationHelper.GetString(WebPartControl.PartInstance.Properties["webparttitle"], string.Empty)) ? HTMLHelper.HTMLEncode(WebPartControl.PartInstance.Properties["webparttitle"].ToString()) : WebPartControl.PartInstance.ControlID) + "\""); // Fill the DIV tag IDs array divIDsArray = WebPartControl.PartInstance.PartInstanceVariants.Select(webpart => "\"Variant_" + VariantModeFunctions.GetVariantModeString(webpart.VariantMode) + "_" + webpart.VariantID + "\"").ToList <string>(); // First item is the original web part/widget divIDsArray.Insert(0, "\"" + uniqueCode + "\""); } break; } // Create a javascript arrays: // Fill the following javascript array: itemCodesArray.push([variantIDs], [divIDs], actualSliderPosition, totalVariants, variantSliderId, sliderElement, hiddenElem_SliderPosition, zoneId, webPartInstanceGuid) StringBuilder sb = new StringBuilder(); sb.Append("itemIDs = ["); sb.Append(String.Join(",", variantIDsArray.ToArray())); sb.Append("]; divIDs = ["); sb.Append(String.Join(",", divIDsArray.ToArray())); sb.Append("]; itemControlIDs = ["); sb.Append(String.Join(",", variantControlIDsArray.ToArray())); sb.Append("];"); sb.Append("itemCodes = [itemIDs, divIDs, itemControlIDs, 1, "); // 0, 1, 2, 3 (see the details in the 'variants.js' file) sb.Append(totalVariants); // 4 sb.Append(", \""); sb.Append(pnlVariations.ClientID); // 5 sb.Append("\", \""); sb.Append(sliderExtender.ClientID); // 6 sb.Append("_handleImage\", \""); sb.Append(hdnSliderPosition.ClientID); // 7 sb.Append("\", \""); if (SliderMode == VariantTypeEnum.Zone) // 8 { sb.Append(WebPartZoneControl.TitleLabel.ClientID); } else { // Display label only for web parts (editor widgets have title hidden) if (WebPartControl.TitleLabel != null) { sb.Append(WebPartControl.TitleLabel.ClientID); } } sb.Append("\", \""); sb.Append(zoneId); // 9 sb.Append("\", \""); if (SliderMode != VariantTypeEnum.Zone) // 10 { sb.Append(instanceGuidString); } sb.Append("\", \""); sb.Append(VariantModeFunctions.GetVariantModeString(VariantMode)); // 11 sb.Append("\", \""); sb.Append(pnlVariations.ClientID); // 12 sb.Append("\"]; itemCodesAssociativeArray[\""); sb.Append(uniqueCode); sb.Append("\"] = itemCodes;"); ScriptHelper.RegisterStartupScript(Page, typeof(string), sliderExtender.ClientID + "_InitScript", sb.ToString(), true); } } else { Visible = false; } }
/// <summary> /// OnInit event (BasicForm initialization). /// </summary> protected override void OnInit(EventArgs e) { base.OnInit(e); string zoneId = QueryHelper.GetString("zoneid", ""); string aliasPath = QueryHelper.GetString("aliaspath", ""); int templateId = QueryHelper.GetInteger("templateid", 0); string culture = QueryHelper.GetString("culture", LocalizationContext.PreferredCultureCode); mZoneVariantID = QueryHelper.GetInteger("variantid", 0); mIsNewVariant = QueryHelper.GetBoolean("isnewvariant", false); variantMode = VariantModeFunctions.GetVariantModeEnum(QueryHelper.GetString("variantmode", string.Empty)); // When displaying an existing variant of a web part, get the variant mode for its original web part if (ZoneVariantID > 0) { PageTemplateInfo pti = PageTemplateInfoProvider.GetPageTemplateInfo(templateId); if ((pti != null) && ((pti.TemplateInstance != null))) { // Get the original webpart and retrieve its variant mode WebPartZoneInstance zoneInstance = pti.TemplateInstance.GetZone(zoneId); if ((zoneInstance != null) && (zoneInstance.VariantMode != VariantModeEnum.None)) { variantMode = zoneInstance.VariantMode; } } } // Try to find the zone 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 = VariantHelper.GetVariantID(variantMode, templateId, variantName, true); // Set the variant id from the database if (variantIdFromDB > 0) { mZoneVariantID = variantIdFromDB; mIsNewVariant = false; } } } if (!String.IsNullOrEmpty(zoneId)) { // Get page info pi = CMSWebPartPropertiesPage.GetPageInfo(aliasPath, templateId, culture); if (pi == null) { ShowInformation(GetString("webpartzone.notfound")); pnlFormArea.Visible = false; return; } // Get template pti = PageTemplateInfoProvider.GetPageTemplateInfo(templateId); if (pti != null) { // Get web part zone pti.TemplateInstance.EnsureZone(zoneId); webPartZone = pti.TemplateInstance.GetZone(zoneId); if ((ZoneVariantID > 0) && (webPartZone != null) && (webPartZone.ZoneInstanceVariants != null)) { // Check OnlineMarketing permissions if (CheckPermissions("Read")) { webPartZone = webPartZone.ZoneInstanceVariants.Find(v => v.VariantID.Equals(ZoneVariantID)); } else { // Not authorized for OnlineMarketing - Manage. RedirectToInformation(String.Format(GetString("general.permissionresource"), "Read", (variantMode == VariantModeEnum.ContentPersonalization) ? "CMS.ContentPersonalization" : "CMS.MVTest")); } } if (webPartZone == null) { ShowInformation(GetString("webpartzone.notfound")); pnlFormArea.Visible = false; return; } FormInfo fi = BuildFormInfo(webPartZone); // Get the DataRow and fill the data row with values DataRow dr = fi.GetDataRow(); foreach (DataColumn column in dr.Table.Columns) { try { DataHelper.SetDataRowValue(dr, column.ColumnName, webPartZone.GetValue(column.ColumnName)); } catch { } } // Initialize Form formElem.DataRow = dr; formElem.MacroTable = webPartZone.MacroTable; formElem.SubmitButton.Visible = false; formElem.SiteName = SiteContext.CurrentSiteName; formElem.FormInformation = fi; formElem.OnAfterDataLoad += formElem_OnAfterDataLoad; // HTML editor toolbar if (fi.UsesHtmlArea()) { plcToolbarPadding.Visible = true; plcToolbar.Visible = true; pnlFormArea.Height = 285; } } } }
/// <summary> /// Tabs the elem_ on tab created. /// </summary> protected void tabElem_OnTabCreated(object sender, TabCreatedEventArgs e) { if (e.Tab == null) { return; } var tab = e.Tab; var element = e.UIElement; switch (element.ElementName.ToLowerCSafe()) { case "widgetproperties.variant": { bool isNewVariant = QueryHelper.GetBoolean("isnewvariant", false); int variantId = QueryHelper.GetInteger("variantid", 0); // Set the variant mode into the tab url if ((variantMode != VariantModeEnum.None) && !string.IsNullOrEmpty(tab.RedirectUrl)) { tab.RedirectUrl = URLHelper.AddParameterToUrl(tab.RedirectUrl, "variantmode", VariantModeFunctions.GetVariantModeString(variantMode)); } if ((variantId <= 0) || isNewVariant) { e.Tab = null; return; } } break; } }
/// <summary> /// Saves webpart properties. /// </summary> public bool Save() { // Check MVT/CP security if (VariantID > 0) { // Check OnlineMarketing permissions. if (!CheckPermissions("Manage")) { lblError.Visible = true; lblError.Text = GetString("general.modifynotallowed"); return(false); } } // Save the data if ((pi != null) && (pti != null) && (templateInstance != null) && SaveForm(form)) { // Add web part if new if (IsNewWebPart) { AddWebPart(); } WebPartInstance originalWebPartInstance = webPartInstance; if (IsNewVariant) { webPartInstance = webPartInstance.Clone(); webPartInstance.VariantMode = VariantModeFunctions.GetVariantModeEnum(QueryHelper.GetString("variantmode", String.Empty).ToLower()); } // Get basicform's datarow and update webpart SaveFormToWebPart(form); bool isWebPartVariant = (VariantID > 0) || (ZoneVariantID > 0) || IsNewVariant; if (!isWebPartVariant) { // Save the changes CMSPortalManager.SaveTemplateChanges(pi, pti, templateInstance, WidgetZoneTypeEnum.None, ViewModeEnum.Design, tree); } else { // Save the variant properties if ((webPartInstance != null) && (webPartInstance.ParentZone != null) && (!webPartInstance.ParentZone.HasVariants) && // Save only if the parent zone does not have any variants (webPartInstance.ParentZone.ParentTemplateInstance != null) && (webPartInstance.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 = webPartInstance.ParentZone.ZoneID; int templateId = webPartInstance.ParentZone.ParentTemplateInstance.ParentPageTemplate.PageTemplateId; Guid instanceGuid = Guid.Empty; XmlDocument doc = new XmlDocument(); XmlNode xmlWebParts = null; if (ZoneVariantID > 0) { // This webpart is in a zone variant therefore save the whole variant webparts xmlWebParts = webPartInstance.ParentZone.GetXmlNode(doc); if (VariantMode == VariantModeEnum.MVT) { // MVT variant ModuleCommands.OnlineMarketingSaveMVTVariantWebParts(ZoneVariantID, xmlWebParts); } else if (VariantMode == VariantModeEnum.ContentPersonalization) { // Content personalization variant ModuleCommands.OnlineMarketingSaveContentPersonalizationVariantWebParts(ZoneVariantID, xmlWebParts); } } else { // web part/widget variant xmlWebParts = webPartInstance.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) { // MVT variant ModuleCommands.OnlineMarketingSaveMVTVariant(VariantID, variantName, variantDisplayName, variantDescription, variantEnabled, zoneId, webPartInstance.InstanceGUID, templateId, 0, xmlWebParts); } else if (VariantMode == VariantModeEnum.ContentPersonalization) { // Content personalization variant ModuleCommands.OnlineMarketingSaveContentPersonalizationVariant(VariantID, variantName, variantDisplayName, variantDescription, variantEnabled, variantDisplayCondition, zoneId, webPartInstance.InstanceGUID, templateId, 0, xmlWebParts); } // The variants are cached -> Reload if (originalWebPartInstance != null) { originalWebPartInstance.LoadVariants(true, VariantMode); } } } } // Reload the form (because of macro values set only by JS) form.ReloadData(); // Clear the cached web part if (InstanceGUID != null) { CacheHelper.TouchKey("webpartinstance|" + InstanceGUID.ToString().ToLower()); } return(true); } else if ((webPartInstance != null) && (webPartInstance.ParentZone != null)) { // Reload the zone/web part variants when saving of the form fails webPartInstance.ParentZone.LoadVariants(true, VariantModeEnum.None); } return(false); }
/// <summary> /// Tabs the elem_ on tab created. /// </summary> protected string[] tabElem_OnTabCreated(CMS.SiteProvider.UIElementInfo element, string[] parameters, int tabIndex) { // Show/hide context help for some tabs String script = "SetTabsContext('');"; String defaultParam = parameters[1]; switch (element.ElementName.ToLower()) { case "widgetproperties.variant": script = "SetTabsContext('variants');"; String varName = (variantMode == VariantModeEnum.MVT) ? "mvtvariant_edit" : "cpvariant_edit"; defaultParam = "if (window.SetHelpTopic) { window.SetHelpTopic('helpTopic', '" + varName + "')}"; bool isNewVariant = QueryHelper.GetBoolean("isnewvariant", false); int variantId = QueryHelper.GetInteger("variantid", 0); // Set the variant mode into the tab url if ((variantMode != VariantModeEnum.None) && (parameters.Length > 2)) { parameters[2] = URLHelper.AddParameterToUrl(parameters[2], "variantmode", VariantModeFunctions.GetVariantModeString(variantMode)); } if ((variantId <= 0) || isNewVariant) { return(null); } break; } parameters[1] = script + defaultParam; return(parameters); }
/// <summary> /// Tabs the elem_ on tab created. /// </summary> protected TabItem tabElem_OnTabCreated(UIElementInfo element, TabItem tab, int tabIndex) { // Show/hide context help for some tabs String script = "SetTabsContext('');"; String defaultParam = tab.OnClientClick; switch (element.ElementName.ToLowerCSafe()) { case "widgetproperties.variant": script = "SetTabsContext('variants');"; String varName = (variantMode == VariantModeEnum.MVT) ? "mvtvariant_edit" : "cpvariant_edit"; defaultParam = "if (window.SetHelpTopic) { window.SetHelpTopic('helpTopic', '" + varName + "')}"; bool isNewVariant = QueryHelper.GetBoolean("isnewvariant", false); int variantId = QueryHelper.GetInteger("variantid", 0); // Set the variant mode into the tab url if ((variantMode != VariantModeEnum.None) && !string.IsNullOrEmpty(tab.RedirectUrl)) { tab.RedirectUrl = URLHelper.AddParameterToUrl(tab.RedirectUrl, "variantmode", VariantModeFunctions.GetVariantModeString(variantMode)); } if ((variantId <= 0) || isNewVariant) { return(null); } break; } tab.OnClientClick = script + defaultParam; return(tab); }