using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CMS.GlobalHelper;
using CMS.FormControls;
using CMS.Newsletter;
public partial class CMSModules_Newsletters_FormControls_VariantFilter : FormEngineUserControl, IFilterFormControl
{
// ID of the main A/B test issue issue
private int mainIssueID = 0;
// ID of the winner variant issue
private int winnerIssueID = -1;
// Indicates if (all) option will be available
private bool allowSelectAll = true;
#region "Properties"
///
/// Gets or sets issue ID of or to variant selector. Used for A/B test issues.
///
public override object Value
{
get
{
if (drpVariants.Items.Count == 0)
{
return 0;
}
return ValidationHelper.GetInteger(drpVariants.SelectedValue, 0);
}
set
{
mainIssueID = (int)value;
// Init selector values
InitVariantSelector(mainIssueID);
}
}
///
/// Gets ID of the winner variant issue.
///
private int WinnerIssueID
{
get
{
if (winnerIssueID < 0)
{
ABTestInfo test = ABTestInfoProvider.GetABTestInfoForIssue(mainIssueID);
if (test != null)
{
winnerIssueID = test.TestWinnerIssueID;
}
}
return winnerIssueID;
}
set
{
winnerIssueID = value;
}
}
#endregion
#region "IFilterFormControl Members"
///
/// Indicates if (all) option will be available. Default value is True.
///
public bool AllowSelectAll
{
get
{
return allowSelectAll;
}
set
{
allowSelectAll = value;
}
}
///
/// Where condition format.
///
public string WhereConditionFormat
{
get
{
// Get filter where condition format or default format
return DataHelper.GetNotEmpty(GetValue("WhereConditionFormat"), "[{0}] {2} {1}");
}
set
{
SetValue("WhereConditionFormat", value);
}
}
#endregion
#region "Methods"
///
/// Initializes selector with variants of the main issue that is specified by its ID.
///
/// Issue ID
protected void InitVariantSelector(int issueId)
{
if (drpVariants.Items.Count == 0)
{
if (AllowSelectAll)
{
// Add (all) option
drpVariants.Items.Add(new ListItem(GetString("general.selectall"), "-1"));
}
// Get A/B test variants
List variants = IssueHelper.GetIssueVariants(issueId, null);
if (variants != null && variants.Count > 0)
{
// Initialize selector
foreach (IssueABVariantItem variant in variants)
{
if (variant.IsWinner)
{
WinnerIssueID = variant.IssueID;
drpVariants.Items.Add(new ListItem(variant.IssueVariantName + " " + GetString("newsletterabtest.winner"), mainIssueID.ToString()));
}
else
{
drpVariants.Items.Add(new ListItem(variant.IssueVariantName, variant.IssueID.ToString()));
}
}
}
if (!RequestHelper.IsPostBack() && drpVariants.Items.FindByValue(issueId.ToString()) != null)
{
// Preselect main issue
drpVariants.SelectedValue = issueId.ToString();
}
}
}
public override string GetWhereCondition()
{
string issueIds = string.Empty;
// Get selected value
int selectedIssue = ValidationHelper.GetInteger(drpVariants.SelectedValue, 0);
if (selectedIssue < 0)
{
// Get IDs of all involved issues (main and variant issues)
foreach (ListItem item in drpVariants.Items)
{
if (ValidationHelper.GetInteger(item.Value, 0) > 0)
{
issueIds += item.Value + ",";
}
}
issueIds += WinnerIssueID;
}
else if (selectedIssue == mainIssueID)
{
// Get IDs of main issue and winner variant
issueIds = (WinnerIssueID > 0) ? string.Format("{0},{1}", mainIssueID, WinnerIssueID) : mainIssueID.ToString();
}
if (string.IsNullOrEmpty(issueIds))
{
return string.Empty;
}
return string.Format(WhereConditionFormat, "IssueID", "(" + issueIds + ")", "IN");
}
#endregion
}