using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Collections;
using CMS.CMSHelper;
using CMS.GlobalHelper;
using CMS.PortalControls;
using CMS.PortalEngine;
using CMS.SettingsProvider;
public partial class CMSModules_PortalEngine_Controls_Layout_ZoneMenu : CMSAbstractPortalUserControl
{
#region "Variables"
// Column names
private string columnVariantID = string.Empty;
private string columnVariantDisplayName = string.Empty;
private string columnVariantZoneID = string.Empty;
private string columnVariantPageTemplateID = string.Empty;
private string columnVariantInstanceGUID = string.Empty;
private string updateCombinationPanelScript = string.Empty;
private CurrentUserInfo currentUser = null;
#endregion
#region "Page methods"
protected void Page_Load(object sender, EventArgs e)
{
currentUser = CMSContext.CurrentUser;
// Use UI culture for strings
string culture = currentUser.PreferredUICultureCode;
// Hide the add MVT/CP variant when Manage permission is not allowed
if (!currentUser.IsAuthorizedPerResource("cms.contentpersonalization", "Manage"))
{
plcAddCPVariant.Visible = false;
}
if (!currentUser.IsAuthorizedPerResource("cms.mvtest", "Manage"))
{
plcAddMVTVariant.Visible = false;
}
// Main menu
imgNewWebPart.ImageUrl = GetImageUrl("CMSModules/CMS_PortalEngine/ContextMenu/Add.png");
lblNewWebPart.Text = ResHelper.GetString("ZoneMenu.IconNewWebPart", culture);
imgNewWebPart.AlternateText = lblNewWebPart.Text;
pnlNewWebPart.Attributes.Add("onclick", "ContextNewWebPart(GetContextMenuParameter('webPartZoneMenu'));");
// Configure
imgConfigureZone.ImageUrl = GetImageUrl("CMSModules/CMS_PortalEngine/ContextMenu/Properties.png");
lblConfigureZone.Text = ResHelper.GetString("ZoneMenu.IconConfigureWebpartZone", culture);
imgConfigureZone.AlternateText = lblConfigureZone.Text;
pnlConfigureZone.Attributes.Add("onclick", "ContextConfigureWebPartZone(GetContextMenuParameter('webPartZoneMenu'));");
// Move to
imgMoveTo.ImageUrl = GetImageUrl("CMSModules/CMS_PortalEngine/ContextMenu/MoveTo.png");
lblMoveTo.Text = ResHelper.GetString("ZoneMenu.IconMoveTo", culture);
// Delete all web parts
imgDelete.ImageUrl = GetImageUrl("CMSModules/CMS_PortalEngine/ContextMenu/Delete.png");
lblDelete.Text = ResHelper.GetString("ZoneMenu.RemoveAll", culture);
imgDelete.AlternateText = lblDelete.Text;
pnlDelete.Attributes.Add("onclick", "ContextRemoveAllWebParts(GetContextMenuParameter('webPartZoneMenu'));");
// Add new MVT variants
lblAddMVTVariant.Text = ResHelper.GetString("ZoneMenu.AddZoneVariant", culture);
imgAddMVTVariant.ImageUrl = GetImageUrl("CMSModules/CMS_PortalEngine/ContextMenu/Variants/addZone.png");
imgAddMVTVariant.AlternateText = lblAddMVTVariant.Text;
// Add new Content personalization variant
lblAddCPVariant.Text = ResHelper.GetString("ZoneMenu.AddZoneVariant", culture);
imgAddCPVariant.ImageUrl = GetImageUrl("CMSModules/CMS_PortalEngine/ContextMenu/Variants/addZone.png");
imgAddCPVariant.AlternateText = lblAddCPVariant.Text;
// Add new variant
pnlAddMVTVariant.Attributes.Add("onclick", "ContextAddWebPartZoneMVTVariant(GetContextMenuParameter('webPartZoneMenu'));");
pnlAddCPVariant.Attributes.Add("onclick", "ContextAddWebPartZoneCPVariant(GetContextMenuParameter('webPartZoneMenu'));");
// List all variants
lblMVTVariants.Text = ResHelper.GetString("ZoneMenu.ZoneMVTVariants", culture);
lblCPVariants.Text = ResHelper.GetString("ZoneMenu.ZonePersonalizationVariants", culture);
// No MVT variants
lblNoZoneMVTVariants.Text = ResHelper.GetString("ZoneMenu.NoVariants");
imgNoZoneMVTVariants.ImageUrl = GetImageUrl("CMSModules/CMS_PortalEngine/ContextMenu/Variants/novariant.png");
// No CP variants
lblNoZoneCPVariants.Text = ResHelper.GetString("ZoneMenu.NoVariants");
imgNoZoneCPVariants.ImageUrl = GetImageUrl("CMSModules/CMS_PortalEngine/ContextMenu/Variants/novariant.png");
// List all variants
imgMVTVariants.ImageUrl = GetImageUrl("CMSModules/CMS_PortalEngine/ContextMenu/Variants/zoneList.png");
imgMVTVariants.AlternateText = lblMVTVariants.Text;
imgCPVariants.ImageUrl = GetImageUrl("CMSModules/CMS_PortalEngine/ContextMenu/Variants/zoneList.png");
imgCPVariants.AlternateText = lblCPVariants.Text;
if (PortalManager.CurrentPlaceholder != null)
{
// Build the list of web part zones
ArrayList webPartZones = new ArrayList();
if (PortalManager.CurrentPlaceholder.WebPartZones != null)
{
foreach (CMSWebPartZone zone in PortalManager.CurrentPlaceholder.WebPartZones)
{
// Add only standard zones to the list
if (zone.ZoneInstance.WidgetZoneType == WidgetZoneTypeEnum.None)
{
webPartZones.Add(zone);
}
}
}
repZones.DataSource = webPartZones;
repZones.DataBind();
}
if (PortalContext.MVTVariantsEnabled || PortalContext.ContentPersonalizationEnabled)
{
menuMoveToZoneVariants.LoadingContent = "
";
menuMoveToZoneVariants.OnReloadData += menuMoveToZoneVariants_OnReloadData;
repMoveToZoneVariants.ItemDataBound += repZoneVariants_ItemDataBound;
// Display the MVT menu part in the CMSDesk->Design only. Hide the context menu in the SM->PageTemplates->Design
if (PortalContext.MVTVariantsEnabled && (CMSContext.CurrentPageInfo != null) && (CMSContext.CurrentPageInfo.DocumentID > 0) && currentUser.IsAuthorizedPerResource("cms.mvtest", "read"))
{
// Set Display='none' for the MVT panel. Show dynamically only if required.
pnlContextMenuMVTVariants.Visible = true;
pnlContextMenuMVTVariants.Style.Add("display", "none");
menuZoneMVTVariants.LoadingContent = "";
menuZoneMVTVariants.OnReloadData += menuZoneMVTVariants_OnReloadData;
repZoneMVTVariants.ItemDataBound += repVariants_ItemDataBound;
string script = "zoneMVTVariantContextMenuId = '" + pnlContextMenuMVTVariants.ClientID + "';";
ScriptHelper.RegisterStartupScript(this, typeof(string), "zoneMVTVariantContextMenuId", ScriptHelper.GetScript(script));
}
else
{
// Hide the MVT variant context menu items when MVT is not enabled for the current document
pnlUIMVTVariants.Visible = false;
}
// Display the Content personalization menu part in the CMSDesk->Design only. Hide the context menu in the SM->PageTemplates->Design
if ((PortalContext.ContentPersonalizationEnabled) && (CMSContext.CurrentPageInfo != null) && (CMSContext.CurrentPageInfo.DocumentID > 0) && currentUser.IsAuthorizedPerResource("cms.contentpersonalization", "read"))
{
// Set Display='none' for the MVT panel. Show dynamically only if required.
pnlContextMenuCPVariants.Visible = true;
pnlContextMenuCPVariants.Style.Add("display", "none");
menuZoneCPVariants.LoadingContent = "";
menuZoneCPVariants.OnReloadData += menuZoneCPVariants_OnReloadData;
repZoneCPVariants.ItemDataBound += repVariants_ItemDataBound;
string script = "zoneCPVariantContextMenuId = '" + pnlContextMenuCPVariants.ClientID + "';";
ScriptHelper.RegisterStartupScript(this, typeof(string), "zoneCPVariantContextMenuId", ScriptHelper.GetScript(script));
}
else
{
// Hide the Content personalization variant context menu items when the Content Personalization is not enabled.
pnlUICPVariants.Visible = false;
}
}
}
///
/// Handles the ItemDataBound event of the repVariants control.
///
protected void repVariants_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
Panel pnlVariantItem = (Panel)e.Item.FindControl("pnlVariantItem");
if (pnlVariantItem != null)
{
Label lblVariantName = pnlVariantItem.FindControl("lblVariantItem") as Label;
if (lblVariantName != null)
{
string variantName = (((DataRowView)e.Item.DataItem)[columnVariantDisplayName]).ToString();
lblVariantName.Text = HTMLHelper.HTMLEncode(ResHelper.LocalizeString(variantName, currentUser.PreferredUICultureCode));
}
// Get unique zone code
string zoneId = ValidationHelper.GetString(((DataRowView)e.Item.DataItem)[columnVariantZoneID], string.Empty);
int variantId = ValidationHelper.GetInteger(((DataRowView)e.Item.DataItem)[columnVariantID], 0);
string itemCode = "Variant_Zone_" + zoneId;
// Display the zone variant when clicked
pnlVariantItem.Attributes.Add("onclick", "SetVariant('" + itemCode + "', " + variantId + "); " + updateCombinationPanelScript);
}
// Display zone icon for each of the zone variants
Image imgZoneVariant = (Image)e.Item.FindControl("imgVariantItem");
if (imgZoneVariant != null)
{
imgZoneVariant.ImageUrl = GetImageUrl("CMSModules/CMS_PortalEngine/ContextMenu/Variants/zone.png");
}
}
///
/// Handles the ItemDataBound event of the repZoneVariants control.
///
protected void repZoneVariants_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
Panel pnlZoneVariantItem = (Panel)e.Item.FindControl("pnlZoneVariantItem");
if (pnlZoneVariantItem != null)
{
// Set the zone label
Label lblZoneVariantItem = pnlZoneVariantItem.FindControl("lblZoneVariantItem") as Label;
if (lblZoneVariantItem != null)
{
string variantName = (((DataRowView)e.Item.DataItem)[columnVariantDisplayName]).ToString();
lblZoneVariantItem.Text = HTMLHelper.HTMLEncode(ResHelper.LocalizeString(variantName, currentUser.PreferredUICultureCode));
}
// Set the zone icon
Image imgZoneVariantItem = pnlZoneVariantItem.FindControl("imgZoneVariantItem") as Image;
if (imgZoneVariantItem != null)
{
imgZoneVariantItem.ImageUrl = GetImageUrl("CMSModules/CMS_PortalEngine/ContextMenu/Variants/zone.png");
}
// Get unique web part code
string zoneId = ValidationHelper.GetString(((DataRowView)e.Item.DataItem)[columnVariantZoneID], string.Empty);
int variantId = ValidationHelper.GetInteger(((DataRowView)e.Item.DataItem)[columnVariantID], 0);
string itemCode = "Variant_Zone_" + zoneId;
// Select the web part variant on mouse over
pnlZoneVariantItem.Attributes.Add("onmouseover", "SetVariant('" + itemCode + "', " + variantId + "); " + updateCombinationPanelScript);
// Hide the context menus when clicked
pnlZoneVariantItem.Attributes.Add("onclick", "ContextMoveWebPartsToZone(GetContextMenuParameter('webPartZoneMenu'), '" + zoneId + "', " + variantId + ");");
}
}
///
/// Handles the OnReloadData event of the menuWebPartVariants control.
///
protected void menuZoneMVTVariants_OnReloadData(object sender, EventArgs e)
{
// Check permissions
if ((currentUser == null)
|| (!currentUser.IsAuthorizedPerResource("CMS.MVTest", "Read")))
{
return;
}
SetColumnNames(VariantModeEnum.MVT);
string parameters = ValidationHelper.GetString(menuZoneMVTVariants.Parameter, string.Empty);
string[] items = parameters.Split(new char[] { ',' }, 3);
if ((items == null) || (items.Length != 3))
{
return;
}
string zoneId = ValidationHelper.GetString(items[0], string.Empty);
string aliasPath = ValidationHelper.GetString(items[1], string.Empty);
if ((CMSContext.CurrentPageInfo != null)
&& (CMSContext.CurrentPageInfo.TemplateInstance != null))
{
int templateId = CMSContext.CurrentPageInfo.UsedPageTemplateInfo.PageTemplateId;
// Get all MVT zone variants of the current web part
DataSet ds = ModuleCommands.OnlineMarketingGetMVTVariants(templateId, zoneId, Guid.Empty, 0);
DataTable resultTable = null;
if (!DataHelper.DataSourceIsEmpty(ds))
{
DataTable table = ds.Tables[0].Copy();
table.DefaultView.Sort = columnVariantID;
// Add the original web part as the first item in the variant list
DataRow originalVariant = table.NewRow();
originalVariant[columnVariantID] = 0;
originalVariant[columnVariantDisplayName] = ResHelper.GetString("WebPartMenu.OriginalWebPart");
originalVariant[columnVariantZoneID] = zoneId;
originalVariant[columnVariantPageTemplateID] = templateId;
originalVariant[columnVariantInstanceGUID] = Guid.Empty;
table.Rows.InsertAt(originalVariant, 0);
resultTable = table.DefaultView.ToTable();
if (DataHelper.DataSourceIsEmpty(resultTable))
{
pnlNoZoneMVTVariants.Visible = true;
lblNoZoneMVTVariants.Text = ResHelper.GetString("Content.NoPermissions");
}
}
else
{
pnlNoZoneMVTVariants.Visible = true;
}
repZoneMVTVariants.DataSource = resultTable;
repZoneMVTVariants.DataBind();
}
}
///
/// Handles the OnReloadData event of the menuWebPartVariants control.
///
protected void menuZoneCPVariants_OnReloadData(object sender, EventArgs e)
{
// Check permissions
if ((currentUser == null)
|| (!currentUser.IsAuthorizedPerResource("CMS.ContentPersonalization", "Read")))
{
return;
}
SetColumnNames(VariantModeEnum.ContentPersonalization);
string parameters = ValidationHelper.GetString(menuZoneCPVariants.Parameter, string.Empty);
string[] items = parameters.Split(new char[] { ',' }, 3);
if ((items == null) || (items.Length != 3))
{
return;
}
string zoneId = ValidationHelper.GetString(items[0], string.Empty);
string aliasPath = ValidationHelper.GetString(items[1], string.Empty);
if ((CMSContext.CurrentPageInfo != null)
&& (CMSContext.CurrentPageInfo.TemplateInstance != null))
{
int templateId = CMSContext.CurrentPageInfo.UsedPageTemplateInfo.PageTemplateId;
DataSet ds = ModuleCommands.OnlineMarketingGetContentPersonalizationVariants(templateId, zoneId, Guid.Empty, 0);
DataTable resultTable = null;
if (!DataHelper.DataSourceIsEmpty(ds))
{
DataTable table = ds.Tables[0].Copy();
table.DefaultView.Sort = columnVariantID;
// Add the original web part as the first item in the variant list
DataRow originalVariant = table.NewRow();
originalVariant[columnVariantID] = 0;
originalVariant[columnVariantDisplayName] = ResHelper.GetString("WebPartMenu.OriginalWebPart");
originalVariant[columnVariantZoneID] = zoneId;
originalVariant[columnVariantPageTemplateID] = templateId;
originalVariant[columnVariantInstanceGUID] = Guid.Empty;
table.Rows.InsertAt(originalVariant, 0);
resultTable = table.DefaultView.ToTable();
if (DataHelper.DataSourceIsEmpty(resultTable))
{
pnlNoZoneCPVariants.Visible = true;
lblNoZoneCPVariants.Text = ResHelper.GetString("Content.NoPermissions");
}
}
else
{
pnlNoZoneCPVariants.Visible = true;
}
repZoneCPVariants.DataSource = resultTable;
repZoneCPVariants.DataBind();
}
}
///
/// Handles the OnReloadData event of the menuZoneVariants control.
///
protected void menuMoveToZoneVariants_OnReloadData(object sender, EventArgs e)
{
// Check permissions
if (currentUser == null)
{
return;
}
if ((CMSContext.CurrentPageInfo != null)
&& (CMSContext.CurrentPageInfo.TemplateInstance != null))
{
VariantModeEnum currentVariantMode = VariantModeEnum.None;
string targetZoneId = ValidationHelper.GetString(menuMoveToZoneVariants.Parameter, string.Empty);
int pageTemplateId = CMSContext.CurrentPageInfo.UsedPageTemplateInfo.PageTemplateId;
// Get selected zone variant mode
if ((CMSContext.CurrentPageInfo != null)
&& (CMSContext.CurrentPageInfo.TemplateInstance != null))
{
WebPartZoneInstance targetZone = CMSContext.CurrentPageInfo.TemplateInstance.GetZone(targetZoneId);
if (targetZone != null)
{
currentVariantMode = targetZone.VariantMode;
}
}
SetColumnNames(currentVariantMode);
// Get all zone variants of the current web part
DataSet ds = null;
DataTable resultTable = null;
if (currentVariantMode == VariantModeEnum.MVT)
{
if (currentUser.IsAuthorizedPerResource("CMS.mvtest", "Read"))
{
// MVT variants
ds = ModuleCommands.OnlineMarketingGetMVTVariants(pageTemplateId, targetZoneId, Guid.Empty, 0);
}
}
else if (currentVariantMode == VariantModeEnum.ContentPersonalization)
{
if (currentUser.IsAuthorizedPerResource("CMS.ContentPersonalization", "Read"))
{
// Content personalization variants
ds = ModuleCommands.OnlineMarketingGetContentPersonalizationVariants(pageTemplateId, targetZoneId, Guid.Empty, 0);
}
}
if (!DataHelper.DataSourceIsEmpty(ds))
{
DataTable table = ds.Tables[0].Copy();
table.DefaultView.Sort = columnVariantID;
// Add the original web part as the first item in the variant list
DataRow originalVariant = table.NewRow();
originalVariant[columnVariantID] = 0;
originalVariant[columnVariantDisplayName] = ResHelper.GetString("ZoneMenu.OriginalZone");
originalVariant[columnVariantZoneID] = targetZoneId;
originalVariant[columnVariantPageTemplateID] = pageTemplateId;
originalVariant[columnVariantInstanceGUID] = Guid.Empty;
table.Rows.InsertAt(originalVariant, 0);
resultTable = table.DefaultView.ToTable();
if (DataHelper.DataSourceIsEmpty(resultTable))
{
pnlNoZoneVariants.Visible = true;
ltlNoZoneVariants.Text = ResHelper.GetString("Content.NoPermissions");
}
}
repMoveToZoneVariants.DataSource = resultTable;
repMoveToZoneVariants.DataBind();
}
}
///
/// Sets the column names according to the variant mode.
///
private void SetColumnNames(VariantModeEnum variantMode)
{
if (variantMode == VariantModeEnum.MVT)
{
// MVT column names
columnVariantID = "MVTVariantID";
columnVariantDisplayName = "MVTVariantDisplayName";
columnVariantZoneID = "MVTVariantZoneID";
columnVariantPageTemplateID = "MVTVariantPageTemplateID";
columnVariantInstanceGUID = "MVTVariantInstanceGUID";
updateCombinationPanelScript = "UpdateCombinationPanel();";
}
else if (variantMode == VariantModeEnum.ContentPersonalization)
{
// Content personalization column names
columnVariantID = "VariantID";
columnVariantDisplayName = "VariantDisplayName";
columnVariantZoneID = "VariantZoneID";
columnVariantPageTemplateID = "VariantPageTemplateID";
columnVariantInstanceGUID = "VariantInstanceGUID";
updateCombinationPanelScript = string.Empty;
}
}
#endregion
}