HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/RMourik/bassol.nl/wwwroot/CMSModules/Newsletters/Controls/OpenedByFilter.ascx.cs
using System;
using System.Collections.Generic;
using System.Data;

using CMS.DataEngine;
using CMS.Helpers;
using CMS.Newsletters;
using CMS.SiteProvider;
using CMS.UIControls;

public partial class CMSModules_Newsletters_Controls_OpenedByFilter : CMSUserControl
{
    #region "Properties"

    /// <summary>
    /// Gets the where condition created using filtered parameters.
    /// </summary>
    public string WhereCondition
    {
        get
        {
            // Get condition from name and email parts of the filter
            string whereCond = GetSubscriberCondition();
            if (ShowDateFilter)
            {
                // Get condition from date part of the filter
                whereCond = SqlHelper.AddWhereCondition(whereCond, fltOpenedBetween.GetCondition());
            }
            if (plcVariants.Visible)
            {
                // Get condition from variant part of the filter
                whereCond = SqlHelper.AddWhereCondition(whereCond, fltVariants.GetWhereCondition());
            }

            return whereCond;
        }
    }


    /// <summary>
    /// Indicates if date part of the filter should be visible.
    /// </summary>
    public bool ShowDateFilter
    {
        get;
        set;
    }


    /// <summary>
    /// Gets or sets issue ID of or to variant selector. Used for A/B test issues.
    /// </summary>
    public int IssueId
    {
        get
        {
            return ValidationHelper.GetInteger(fltVariants.Value, 0);
        }
        set
        {
            fltVariants.Value = value;

            // Display variant part of the filter
            plcVariants.Visible = fltVariants.Visible = true;
        }
    }

    #endregion


    #region "Page events"

    protected void Page_PreRender(object sender, EventArgs e)
    {
        // Display/hide date part of the filter
        plcDate.Visible = ShowDateFilter;
    }

    #endregion


    #region "Methods"

    /// <summary>
    /// Gets complex where condition for name and email fields.
    /// </summary>
    protected string GetSubscriberCondition()
    {
        string result = string.Empty;

        // Get condition from subscriber filter fields
        string nameCondition = fltSubscriberName.GetCondition();
        string emailCondition = fltEmail.GetCondition();

        // Prepare base condition for subscriber email and name
        string baseCondition = SqlHelper.AddWhereCondition(nameCondition, emailCondition);

        if (!string.IsNullOrEmpty(emailCondition))
        {
            // Extend the condition for 'Email' column
            fltEmail.Column = "Email";
            emailCondition = SqlHelper.AddWhereCondition(emailCondition, fltEmail.GetCondition(), "OR");
        }

        if (!string.IsNullOrEmpty(baseCondition))
        {
            string subscriberCondition = SqlHelper.AddWhereCondition(nameCondition, emailCondition);
            result = BuildCondition(baseCondition, subscriberCondition, !string.IsNullOrEmpty(emailCondition));
        }

        return result;
    }


    /// <summary>
    /// Builds where condition with subscriber IDs from main DB who meet base filter condition.
    /// </summary>
    /// <param name="baseCondition">Base condition</param>
    /// <param name="subscriberCondition">Condition for subscribers from main DB</param>
    /// <param name="useView">Indicates if subscriber view should be used</param>
    protected string BuildCondition(string baseCondition, string subscriberCondition, bool useView)
    {
        string result = string.Empty;

        // Get IDs of subscribers from current site who meet the original condition
        string tempWhere = SqlHelper.AddWhereCondition("SubscriberSiteID=" + SiteContext.CurrentSiteID, subscriberCondition);
        DataSet ds;
        if (useView)
        {
            ds = SubscriberInfoProvider.GetSubscribersFromView().Where(tempWhere).Column("SubscriberID");
        }
        else
        {
            ds = SubscriberInfoProvider.GetSubscribers().Where(tempWhere).Column("SubscriberID");
        }

        if (!DataHelper.DataSourceIsEmpty(ds))
        {
            List<string> subscriberIDs = DataHelper.GetStringValues(ds.Tables[0], "SubscriberID");

            string subscriberIDCond = string.Empty;
            int maxItems = 10000;
            do
            {
                int maxToProcess = (subscriberIDs.Count > maxItems) ? maxItems : subscriberIDs.Count;

                // Get condition in form 'SubscriberID IN (....)' with maximally 10.000 items
                subscriberIDCond = SqlHelper.AddWhereCondition(subscriberIDCond, SqlHelper.GetWhereCondition<string>("SubscriberID", subscriberIDs.GetRange(0, maxToProcess), false), "OR");

                subscriberIDs.RemoveRange(0, maxToProcess);
            }
            while (subscriberIDs.Count > 0);

            // Add the condition that only clasic subscribers should be filtered with the IDs condition
            result = SqlHelper.AddWhereCondition("SubscriberID>0", subscriberIDCond);
        }

        // Add original condition for contact group members
        return SqlHelper.AddWhereCondition(result, string.Format("(SubscriberID=0 AND {0})", baseCondition), "OR");
    }

    #endregion
}