using System;
using System.Collections.Generic;
using System.Data;
using System.Collections;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CMS.CMSHelper;
using CMS.ExtendedControls;
using CMS.GlobalHelper;
using CMS.OnlineMarketing;
using CMS.PortalControls;
using CMS.PortalEngine;
using CMS.SettingsProvider;
using CMS.DocumentEngine;
using CMS.WorkflowEngine;
using TreeNode = CMS.DocumentEngine.TreeNode;
public partial class CMSModules_OnlineMarketing_Controls_Content_VariantSlider : CMSAbstractPortalUserControl
{
#region "Variables"
///
/// Web part control of the variant slider.
///
private CMSAbstractWebPart mWebPartControl = null;
///
/// Web part zone control of the variant slider.
///
private CMSWebPartZone mWebPartZoneControl = null;
///
/// Indicates whether processing should be stopped.
///
private bool stopProcessing = false;
///
/// Indicates whether the variant slider is used for a zone, web part or widget.
///
private VariantTypeEnum? mSliderMode = null;
///
/// Gets the variant mode. Indicates whether there are MVT/ContentPersonalization/None variants active.
///
private VariantModeEnum? mVariantMode = null;
///
/// Indicates whether the variant slider is used in the RTL mode.
///
private bool isRTL = (CultureHelper.IsPreferredCultureRTL());
///
/// Unique code for the original web part/zone
///
private string uniqueCode = string.Empty;
#endregion
#region "Public properties"
///
/// Indicates whether the slider is used as a web part slider or a zone slider.
///
public VariantTypeEnum SliderMode
{
get
{
if (mSliderMode == null)
{
// Check whether the slider is used for a webpart or for a zone
Control baseControl = GetBaseControl(this);
if (baseControl is CMSAbstractWebPart)
{
if (((CMSAbstractWebPart)baseControl).IsWidget)
{
mSliderMode = VariantTypeEnum.Widget;
}
else
{
mSliderMode = VariantTypeEnum.WebPart;
}
}
else
{
mSliderMode = VariantTypeEnum.Zone;
}
}
return mSliderMode.Value;
}
}
#endregion
#region "Private properties"
///
/// Gets the web part control of the variant slider.
///
private CMSAbstractWebPart WebPartControl
{
get
{
if (mWebPartControl == null)
{
mWebPartControl = GetBaseControl(Parent) as CMSAbstractWebPart;
}
return mWebPartControl;
}
}
///
/// Gets the web part zone control of the variant slider.
///
private CMSWebPartZone WebPartZoneControl
{
get
{
if (mWebPartZoneControl == null)
{
mWebPartZoneControl = GetBaseControl(Parent) as CMSWebPartZone;
}
return mWebPartZoneControl;
}
}
///
/// Gets the variant mode. Indicates whether there are MVT/ContentPersonalization/None variants active.
///
private VariantModeEnum VariantMode
{
get
{
if (mVariantMode == null)
{
switch (SliderMode)
{
case VariantTypeEnum.WebPart:
case VariantTypeEnum.Widget:
if (WebPartControl.PartInstance != null)
{
// Get the variant mode from the webPartInstance
mVariantMode = WebPartControl.PartInstance.VariantMode;
}
break;
default:
if (WebPartZoneControl.ZoneInstance != null)
{
// Get the variant mode from the zoneInstance
mVariantMode = WebPartZoneControl.ZoneInstance.VariantMode;
}
break;
}
}
return mVariantMode.Value;
}
}
///
/// Checks permissions (depends on variant mode)
///
/// Name of permission to test
private bool CheckPermissions(string permissionName)
{
CurrentUserInfo cui = CMSContext.CurrentUser;
switch (VariantMode)
{
case VariantModeEnum.MVT:
return cui.IsAuthorizedPerResource("cms.mvtest", permissionName);
case VariantModeEnum.ContentPersonalization:
return cui.IsAuthorizedPerResource("cms.contentpersonalization", permissionName);
case VariantModeEnum.Conflicted:
case VariantModeEnum.None:
return cui.IsAuthorizedPerResource("cms.mvtest", permissionName) || cui.IsAuthorizedPerResource("cms.contentpersonalization", permissionName);
}
return true;
}
#endregion
#region "Page methods"
///
/// Init event handler.
///
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
// Check permissions
if ((!CMSContext.CurrentUser.IsAuthorizedPerResource("CMS.Design", "Design") && (SliderMode != VariantTypeEnum.Widget))
|| !CheckPermissions("Read"))
{
stopProcessing = true;
pnlVariations.Visible = false;
}
}
protected void Page_Load(object sender, EventArgs e)
{
// Initialize the uniqueCode variable
switch (SliderMode)
{
case VariantTypeEnum.Zone:
// Zone
uniqueCode = "Variant_Zone_" + WebPartZoneControl.ZoneInstance.ZoneID;
break;
case VariantTypeEnum.WebPart:
case VariantTypeEnum.Widget:
// Web part
uniqueCode = "Variant_WP_" + WebPartControl.PartInstance.InstanceGUID.ToString("N");
break;
}
// Process the postback manually (this must be done manually because when moving web parts between the zones,
// the control ID of the moved web part is not changed in DOM and is not handled properly by the system)
if (RequestHelper.IsPostBack())
{
string argument = Request["__EVENTARGUMENT"];
if (!string.IsNullOrEmpty(argument))
{
string[] parts = argument.Split(new char[] { ':' });
if (parts.Length == 3)
{
// Get uniqueCode, action argument, current variant ID
string argUniqueCode = parts[0];
string argArgument = parts[1];
int argVariantId = ValidationHelper.GetInteger(parts[2], 0);
// Process the post back event if the event was raised by this control
if (argUniqueCode == uniqueCode)
{
RaisePostBackEvent(argArgument, argUniqueCode, argVariantId);
}
}
}
}
}
///
/// Handles the PreRender event of the Page control.
///
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 (CMSContext.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.gif");
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";
}
sliderExtender.HandleCssClass = "SliderHandle";
lblTotal.Text = totalVariants.ToString();
txtSlider.Attributes.Add("onchange", "$j('#" + 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;
imgAddVariant.ImageUrl = GetImageUrl("Design/Controls/VariantSlider/addZone.png");
imgVariantList.ImageUrl = GetImageUrl("Design/Controls/VariantSlider/zoneList.png");
imgRemoveVariant.ImageUrl = GetImageUrl("Design/Controls/VariantSlider/removeZone.png");
imgRemoveVariantDisabled.ImageUrl = GetImageUrl("Design/Controls/VariantSlider/removeZoneDisabled.png");
break;
case VariantTypeEnum.WebPart:
case VariantTypeEnum.Widget:
// Web part
zoneId = WebPartControl.PartInstance.ParentZone.ZoneID;
instanceGuidString = WebPartControl.InstanceGUID.ToString();
webPartName = WebPartControl.PartInstance.ControlID;
if (SliderMode == VariantTypeEnum.WebPart)
{
imgAddVariant.ImageUrl = GetImageUrl("Design/Controls/VariantSlider/addWebPart.png");
imgVariantList.ImageUrl = GetImageUrl("Design/Controls/VariantSlider/webPartList.png");
imgRemoveVariant.ImageUrl = GetImageUrl("Design/Controls/VariantSlider/removeWebPart.png");
imgRemoveVariantDisabled.ImageUrl = GetImageUrl("Design/Controls/VariantSlider/removeWebPartDisabled.png");
}
else
{
imgAddVariant.ImageUrl = GetImageUrl("Design/Controls/VariantSlider/addWidget.png");
imgVariantList.ImageUrl = GetImageUrl("Design/Controls/VariantSlider/widgetList.png");
imgRemoveVariant.ImageUrl = GetImageUrl("Design/Controls/VariantSlider/removeWidget.png");
imgRemoveVariantDisabled.ImageUrl = GetImageUrl("Design/Controls/VariantSlider/removeWidgetDisabled.png");
}
break;
}
// Setup tooltips
pnlLeft.ToolTip = ResHelper.GetString("variantslider.btnleft");
pnlRight.ToolTip = ResHelper.GetString("variantslider.btnright");
imgRemoveVariant.ToolTip = ResHelper.GetString("variantslider.btnremove");
imgVariantList.ToolTip = ResHelper.GetString("variantslider.btnlist");
// Setup default behaviour - no action executed
imgRemoveVariantDisabled.OnClientClick = "return false;";
imgVariantList.OnClientClick = "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 dialogParams = "'" + zoneId + "', '" + 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;
CurrentUserInfo cui = CMSContext.CurrentUser;
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)
{
imgAddVariant.Attributes.Add("onclick", "OpenMenuAddWidgetVariant(this, '" + WebPartControl.ShortClientID + "'); return false;");
imgAddVariant.ToolTip = ResHelper.GetString("variantslider.btnadd");
// 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.OnClientClick = "AddMVTVariant(" + dialogParams + "); return false;";
imgAddVariant.ToolTip = ResHelper.GetString("variantslider.btnaddmvt");
}
else if (PortalContext.ContentPersonalizationEnabled && manageCP)
{
imgAddVariant.OnClientClick = "AddPersonalizationVariant(" + dialogParams + "); return false;";
imgAddVariant.ToolTip = ResHelper.GetString("variantslider.btnaddpesronalization");
}
}
}
}
else
{
if (VariantMode == VariantModeEnum.MVT)
{
imgAddVariant.OnClientClick = "AddMVTVariant(" + dialogParams + "); return false;";
imgAddVariant.ToolTip = ResHelper.GetString("variantslider.btnaddmvt");
}
else
{
imgAddVariant.OnClientClick = "AddPersonalizationVariant(" + dialogParams + "); return false;";
imgAddVariant.ToolTip = ResHelper.GetString("variantslider.btnaddpesronalization");
}
}
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.OnClientClick = "ListMVTVariants(" + dialogParams + ", '" + uniqueCode + "'); return false;";
}
else if (VariantMode == VariantModeEnum.ContentPersonalization)
{
// Activate the variant list button for Content personalization
imgVariantList.OnClientClick = "ListPersonalizationVariants(" + dialogParams + ", '" + uniqueCode + "'); return false;";
}
// Assign the onclick event for he Remove variant button
imgRemoveVariant.OnClientClick = "RemoveVariantPostBack_" + uniqueCode + @"(); return false";
// Register Remove variant script
string removeVariantScript = @"
function RemoveVariantPostBack_" + uniqueCode + @"() {
if (confirm('" + ResHelper.GetString("variantslider.removeconfirm") + @"')) {
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 variantIDsArray = new List();
List variantControlIDsArray = new List();
List divIDsArray = new List();
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();
// 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();
// 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();
// 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();
// 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();
// 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();
// 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;
}
}
#endregion
#region "Private methods"
///
/// Gets the parent control which is the web part or zone control.
///
/// The control
private Control GetBaseControl(Control ctrl)
{
if (ctrl != null)
{
if ((ctrl is CMSWebPartZone)
|| (ctrl is CMSAbstractWebPart))
{
return ctrl;
}
return GetBaseControl(ctrl.Parent);
}
return null;
}
#endregion
#region "IPostBackEventHandler Members"
///
/// Raises event postback event.
///
/// Event argument
/// Unique code
/// Variant ID
public void RaisePostBackEvent(string eventArgument, string uniqueCode, int variantId)
{
// Check permissions
if (!CheckPermissions("Manage")
|| stopProcessing)
{
return;
}
// Get the argument
string arg = eventArgument.ToLowerCSafe();
if (arg == "remove")
{
// Remove variant action
int documentId = 0;
if (VariantMode == VariantModeEnum.MVT)
{
// Is MVT zone => remove the MVT variant
MVTVariantInfo variantObj = MVTVariantInfoProvider.GetMVTVariantInfo(variantId);
if (variantObj != null)
{
// Delete the variant
MVTVariantInfoProvider.DeleteMVTVariantInfo(variantObj);
documentId = variantObj.MVTVariantDocumentID;
}
}
else if (VariantMode == VariantModeEnum.ContentPersonalization)
{
// Is Content personalization zone => remove the Content personalization variant
ContentPersonalizationVariantInfo variantObj = ContentPersonalizationVariantInfoProvider.GetContentPersonalizationVariant(variantId);
if (variantObj != null)
{
// Delete the variant
ContentPersonalizationVariantInfoProvider.DeleteContentPersonalizationVariant(variantObj);
documentId = variantObj.VariantDocumentID;
}
}
else
{
return;
}
// Log widget variant synchronization
if (documentId > 0)
{
TreeProvider tree = new TreeProvider(CMSContext.CurrentUser);
TreeNode node = DocumentHelper.GetDocument(documentId, tree);
DocumentSynchronizationHelper.LogDocumentChange(node, TaskTypeEnum.UpdateDocument, tree);
}
switch (SliderMode)
{
// Remove zone variant
case VariantTypeEnum.Zone:
if ((WebPartZoneControl != null) && (WebPartZoneControl.ZoneInstance != null))
{
// Remove the variant from WebPartZoneControl.ZoneInstance.ZoneInstanceVariants.
// It is necessary to remove the variants from the PartInstanceVariants list manually because the PageLoad method has already run
// and the PartInstanceVariants list was populated with the old values.
WebPartZoneControl.RemoveVariantFromCache(variantId);
}
break;
// Remove web part or widget variant
case VariantTypeEnum.WebPart:
case VariantTypeEnum.Widget:
if ((WebPartControl != null) && (WebPartControl.PartInstance != null))
{
// Remove the variant from WebPartControls.PartInstance.PartInstanceVariants.
// It is necessary to remove the variants from the PartInstanceVariants list manually because the PageLoad method has already run
// and the PartInstanceVariants list was populated with the old values.
WebPartControl.RemoveVariantFromCache(variantId);
// If there are no other variants present, set the VariantMode to None to allow refreshing the add variant buttons.
if ((WebPartControl.PartInstance.PartInstanceVariants == null) || (WebPartControl.PartInstance.PartInstanceVariants.Count == 0))
{
mVariantMode = VariantModeEnum.None;
}
}
break;
default:
break;
}
// Refresh the variant slider position => choose the last variant
ltrScript.Text = ScriptHelper.GetScript(
@"cpVariantSliderPositionElem = GetCPVariantSliderPositionElem();
UpdateVariantPosition('" + uniqueCode + @"', '-1');
SaveSlidersConfiguration();");
}
}
#endregion
}