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 }