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/CMS/CMSAdminControls/UI/UniGrid/Filters/TextSimpleFilter.ascx.cs
using System;
using System.Linq;
using System.Text;
using System.Web.UI.WebControls;

using CMS.Controls;
using CMS.DataEngine;
using CMS.ExtendedControls;
using CMS.Helpers;

public partial class CMSAdminControls_UI_UniGrid_Filters_TextSimpleFilter : CMSAbstractBaseFilterControl
{
    #region "Private variables"

    private bool mIncludeNULLCondition = true;
    private string mColumn = null;
    private string[] mColumns = null;
    private int mSize = 1000;
    private string[] mOperators = new string[] { WhereBuilder.LIKE, WhereBuilder.NOT_LIKE, WhereBuilder.EQUAL, WhereBuilder.NOT_EQUAL };

    #endregion


    #region "Public properties"

    /// <summary>
    /// Where condition.
    /// </summary>
    public override string WhereCondition
    {
        get
        {
            base.WhereCondition = GetCondition();
            return base.WhereCondition;
        }
        set
        {
            base.WhereCondition = value;
        }
    }


    /// <summary>
    /// Name of the column.
    /// </summary>
    public string Column
    {
        get
        {
            return mColumn;
        }
        set
        {
            mColumn = value;
        }
    }


    /// <summary>
    /// Use this property to search within multiple columns.
    /// </summary>
    public string[] Columns
    {
        get
        {
            return mColumns;
        }
        set
        {
            mColumns = value;
        }
    }


    /// <summary>
    /// Maximum length of the entered text.
    /// </summary>
    public int Size
    {
        get
        {
            return mSize;
        }
        set
        {
            mSize = value;
        }
    }


    /// <summary>
    /// Determines whether condition for NULL values is added when 'NOT LIKE'
    /// or '<>' operand is selected.
    /// </summary>
    public bool IncludeNULLCondition
    {
        get
        {
            return mIncludeNULLCondition;
        }
        set
        {
            mIncludeNULLCondition = value;
        }
    }


    /// <summary>
    /// Gets/sets current text in filter.
    /// </summary>
    public string FilterText
    {
        get
        {
            return txtText.Text;
        }
        set
        {
            txtText.Text = value;
        }
    }


    /// <summary>
    /// Gets current operator.
    /// </summary>
    public string FilterOperator
    {
        get
        {
            // Check that selected operator was not modified
            if (mOperators.Contains(drpCondition.SelectedValue))
            {
                return drpCondition.SelectedValue;
            }
            else
            {
                return null;
            }
        }
        set
        {
            if (value != null && mOperators.Contains(value))
            {
                drpCondition.SelectedValue = value;
            }
        }
    }


    /// <summary>
    /// Determines whether the filter is set.
    /// </summary>
    public override bool FilterIsSet
    {
        get
        {
            return !string.IsNullOrEmpty(txtText.Text);
        }
    }

    #endregion


    #region "Page events"

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        InitFilterDropDown(drpCondition);
        txtText.MaxLength = Size;
    }

    #endregion


    #region "Public methods"

    public string GetCondition()
    {
        // Trim input text
        string tempVal = txtText.Text.Trim();

        string op = FilterOperator;

        // No condition
        if (String.IsNullOrEmpty(tempVal) || (String.IsNullOrEmpty(Column) && (Columns == null)) || String.IsNullOrEmpty(op))
        {
            return null;
        }

        // Avoid SQL Injection
        tempVal = SqlHelper.EscapeQuotes(tempVal);

        // Support for contains phrase search
        if (op.Contains(WhereBuilder.LIKE))
        {
            tempVal = "%" + SqlHelper.EscapeLikeText(tempVal) + "%";
        }

        StringBuilder where = new StringBuilder();
        string additionalForNull = string.Empty;

        // Get where condition for multiple columns
        if (Columns != null)
        {
            foreach (string column in Columns)
            {
                // Handling "NOT LIKE" and "<>" operators
                if (IncludeNULLCondition)
                {
                    if (op.Contains("<") || op.Contains("NOT"))
                    {
                        additionalForNull = " OR " + column + " IS NULL";
                    }
                }

                if (!String.IsNullOrEmpty(where.ToString()))
                {
                    if (op.Contains("<") || op.Contains("NOT"))
                    {
                        where.Append(" AND ");
                    }
                    else
                    {
                        where.Append(" OR ");
                    }
                }
                where.Append("(" + column + " " + op + " N'" + tempVal + "' " + additionalForNull + ")");
            }
            return "(" + where.ToString() + ")";
        }
        // Get where condition for single column
        else
        {
            // Handling "NOT LIKE" and "<>" operators
            if (IncludeNULLCondition)
            {
                if (op.Contains("<") || op.Contains("NOT"))
                {
                    additionalForNull = " OR " + Column + " IS NULL";
                }
            }
            return "(" + Column + " " + op + " N'" + tempVal + "' " + additionalForNull + ")";
        }
    }

    #endregion


    #region "Private methods"

    /// <summary>
    /// Initializes standard filter dropdown.
    /// </summary>
    /// <param name="drp">Dropdown to init</param>
    private void InitFilterDropDown(CMSDropDownList drp)
    {
        if ((drp != null) && (drp.Items.Count <= 0))
        {
            ControlsHelper.FillListWithTextSqlOperators(drp);
        }
    }

    #endregion


    #region "State management"

    /// <summary>
    /// Stores filter state to the specified object.
    /// </summary>
    /// <param name="state">The object that holds the filter state.</param>
    public override void StoreFilterState(FilterState state)
    {
        state.AddValue("Text", FilterText);
        state.AddValue("Operator", FilterOperator);
    }


    /// <summary>
    /// Restores filter state from the specified object.
    /// </summary>
    /// <param name="state">The object that holds the filter state.</param>
    public override void RestoreFilterState(FilterState state)
    {
        FilterText = state.GetString("Text");
        FilterOperator = state.GetString("Operator");
    }


    /// <summary>
    /// Resets the filter settings.
    /// </summary>
    public override void ResetFilter()
    {
        FilterText = String.Empty;
        FilterOperator = mOperators[0];
    }

    #endregion
}