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/UniMatrix.ascx.cs
using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
using System.Web.UI.WebControls;

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

public partial class CMSAdminControls_UI_UniGrid_UniMatrix : UniMatrix
{
    #region "Variables"

    private string mPageSizeOptions = "10,20,50,100,##ALL##";
    private bool? mHasData;

    #endregion


    #region "Properties"

    /// <summary>
    /// Items per page.
    /// </summary>
    public override int ItemsPerPage
    {
        get
        {
            return base.ItemsPerPage;
        }
        set
        {
            base.ItemsPerPage = value;
            pagerElem.UniPager.PageSize = value;
        }
    }


    /// <summary>
    /// Gets the value that indicates whether current selector in multiple mode displays some data or whether the dropdown contains some data.
    /// </summary>
    public override bool HasData
    {
        get
        {
            // Ensure the data
            if (!mHasData.HasValue && !StopProcessing)
            {
                ReloadData(false);
                mHasData = true;
            }

            return ValidationHelper.GetBoolean(ViewState["HasData"], false);
        }
        protected set
        {
            ViewState["HasData"] = value;
            mHasData = true;
        }
    }


    /// <summary>
    /// Page size options for pager.
    /// Numeric values or macro ##ALL## separated with comma.
    /// </summary>
    public override string PageSizeOptions
    {
        get
        {
            return mPageSizeOptions;
        }
        set
        {
            mPageSizeOptions = value;
            pagerElem.PageSizeOptions = value;
        }
    }


    /// <summary>
    /// UniPager control of UniMatrix.
    /// </summary>
    public override UniPager Pager
    {
        get
        {
            return pagerElem.UniPager;
        }
    }


    /// <summary>
    /// Gets or sets HTML content to be rendered as additional content on the top of the matrix.
    /// </summary>
    public override TableRow ContentBeforeRow
    {
        get
        {
            return trContentBefore;
        }
    }

    #endregion


    #region "Control events"

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);

        pagerElem.PagedControl = this;
        pagerElem.UniPager.PageControl = "uniMatrix";
        pagerElem.PageSizeOptions = PageSizeOptions;
        pagerElem.UniPager.PageSize = ItemsPerPage;
        pagerElem.PageSizeDropdown.SelectedIndexChanged += drpPageSize_SelectedIndexChanged;

        ScriptHelper.RegisterJQuery(Page);
    }


    protected override void OnPreRender(EventArgs e)
    {
        base.OnPreRender(e);

        if (!RequestHelper.IsCallback())
        {
            ReloadData(false);
        }
    }


    protected void drpPageSize_SelectedIndexChanged(object sender, EventArgs e)
    {
        pagerElem.UniPager.CurrentPage = 1;
        ItemsPerPage = ValidationHelper.GetInteger(pagerElem.PageSizeDropdown.SelectedValue, -1);

        if (pagerElem.UniPager.PagedControl != null)
        {
            pagerElem.UniPager.PagedControl.ReBind();
        }
    }


    /// <summary>
    /// Filters the content.
    /// </summary>
    protected void btnFilter_Click(object sender, EventArgs e)
    {
        pagerElem.UniPager.CurrentPage = 1;

        // Get the expression
        string expr = txtFilter.Text.Trim();

        SetFilterWhere(expr);

        txtFilter.Focus();
    }

    #endregion


    #region "Methods"

    /// <summary>
    /// Reloads the control data.
    /// </summary>
    /// <param name="forceReload">Force the reload of the control</param>
    public override void ReloadData(bool forceReload)
    {
        if (StopProcessing)
        {
            plcPager.Visible = false;
            tblMatrix.Visible = false;
            return;
        }

        base.ReloadData(forceReload);

        SetPageSize(forceReload);

        // Clear filter if forced reload
        if (forceReload)
        {
            txtFilter.Text = "";
            FilterWhere = null;
        }

        if (forceReload || !mLoaded)
        {
            // Prepare parameters for data loading
            int currentPage = pagerElem.UniPager.CurrentPage;
            string where = SqlHelper.AddWhereCondition(WhereCondition, FilterWhere);
            string orderBy = GetOrderByClause();

            mTotalRows = 0;
            bool headersOnly = false;

            // Load matrix data
            var headerData = LoadData(where, orderBy, currentPage, ref headersOnly);

            if (HasData)
            {
                tblMatrix.Visible = true;
                if (!headersOnly)
                {
                    RegisterScripts();
                }

                // Set CSS classes
                thcFirstColumn.CssClass = FirstColumnClass;
                tblMatrix.AddCssClass(CssClass);
                trContentBefore.AddCssClass(ContentBeforeRowCssClass);

                // Set the correct number of columns
                ColumnsCount = headerData.Count;
                mTotalRows = mTotalRows / ColumnsCount;

                GenerateMatrixContent(headerData, headersOnly);

                SetupMatrixFilter();

                // Show content before rows and pager
                ContentBeforeRow.Visible = ShowContentBeforeRow && !headersOnly;
            }
            else
            {
                tblMatrix.Visible = false;

                // If no-records message set, hide everything and show message
                if (!String.IsNullOrEmpty(NoRecordsMessage))
                {
                    lblInfo.Text = NoRecordsMessage;
                    lblInfo.Visible = true;
                }
            }

            // Setup pager visibility
            plcPager.Visible = HasData && !headersOnly;
            if (HasData)
            {
                // Set correct ID for direct page control
                pagerElem.DirectPageControlID = ((float)mTotalRows / pagerElem.CurrentPageSize > 20.0f) ? "txtPage" : "drpPage";
            }

            mLoaded = true;

            RaiseOnPageBinding();
        }
    }


    /// <summary>
    /// Sets pager to first page.
    /// </summary>
    public void ResetPager()
    {
        pagerElem.UniPager.CurrentPage = 1;
    }


    /// <summary>
    /// Resets the pager and filter.
    /// </summary>
    public void ResetMatrix()
    {
        pagerElem.UniPager.CurrentPage = 1;
        txtFilter.Text = String.Empty;
        FilterWhere = null;
    }

    #endregion


    #region "Private methods"

    /// <summary>
    /// Sets page size dropdown list according to PageSize property.
    /// </summary>
    private void SetPageSize(bool forceReload)
    {
        var pageSizeDropdown = pagerElem.PageSizeDropdown;

        SetPageSize(forceReload, pageSizeDropdown);
    }


    /// <summary>
    /// Generate matrix content
    /// </summary>
    /// <param name="matrixData">Data of the matrix to be generated</param>
    /// <param name="generateOnlyHeader">Indicates if only matrix header should be generated</param>
    private void GenerateMatrixContent(List<DataRow> matrixData, bool generateOnlyHeader)
    {
        GenerateMatrixHeader(matrixData, thrFirstRow);

        if (generateOnlyHeader)
        {
            lblInfoAfter.Text = NoRecordsMessage;
            lblInfoAfter.Visible = true;
        }
        else
        {
            GenerateMatrixBody(matrixData, tblMatrix);
        }
    }


    /// <summary>
    /// Register custom scripts for matrix
    /// </summary>
    private void RegisterScripts()
    {
        // Register the scripts
        string script =
            "function UM_ItemChanged_" + ClientID + "(item) {" + Page.ClientScript.GetCallbackEventReference(this, "item.id + ':' + item.checked", "UM_ItemSaved_" + ClientID, "item.id") + "; } \n" +
            "function UM_ItemSaved_" + ClientID + "(rvalue, context) { var contentBefore = $cmsj(\"#" + trContentBefore.ClientID + "\"); if(contentBefore){ contentBefore.replaceWith(rvalue);}}";

        ScriptHelper.RegisterClientScriptBlock(this, typeof(string), "UniMatrix_" + ClientID, ScriptHelper.GetScript(script));
    }


    /// <summary>
    /// Setup matrix filter
    /// </summary>
    private void SetupMatrixFilter()
    {
        // Show filter / header
        bool showFilter = ((FilterLimit <= 0) || !String.IsNullOrEmpty(FilterWhere) || (mTotalRows >= FilterLimit));
        pnlFilter.Visible = showFilter;

        // Show label in corner if text given and filter is hidden
        if (!showFilter && !string.IsNullOrEmpty(CornerText))
        {
            thcFirstColumn.Text += HTMLHelper.HTMLEncode(CornerText);
        }

        // Initialize filter if displayed
        if (ShowFilterRow && showFilter)
        {
            btnFilter.ResourceString = "general.search";
            thrFirstRow.AddCssClass("with-filter");
        }
        else if (!ShowHeaderRow)
        {
            plcFilter.Visible = false;
        }
    }

    #endregion
}