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/CMSModules/Reporting/FormControls/ReportItemSelector.ascx.cs
using System;
using System.Collections.Generic;
using System.Data;
using System.Web.UI;

using CMS.ExtendedControls;
using CMS.FormControls;
using CMS.FormEngine;
using CMS.Helpers;
using CMS.IO;
using CMS.Reporting;
using CMS.Base;
using CMS.DataEngine;

public partial class CMSModules_Reporting_FormControls_ReportItemSelector : FormEngineUserControl
{
    #region "Private variables"

    private bool mDisplay = true;
    private DataSet mCurrentDataSet;
    private bool mKeepDataInWindowsHelper;
    private string mFirstItemText = String.Empty;
    private ReportInfo mReportInfo;
    private bool mSetValues;

    #endregion


    #region "Public properties"

    /// <summary>
    /// Gets or sets the value that indicates whether id value should be used in selector
    /// </summary>
    public bool UseIDValue
    {
        get;
        set;
    }


    /// <summary>
    /// Gets the current data set.
    /// </summary>
    private DataSet CurrentDataSet
    {
        get
        {
            DataSet ds = WindowHelper.GetItem(CurrentGuid()) as DataSet;
            if (DataHelper.DataSourceIsEmpty(ds))
            {
                if (DataHelper.DataSourceIsEmpty(mCurrentDataSet))
                {
                    mCurrentDataSet = LoadFromXML(Convert.ToString(ViewState["ParametersXmlData"]), Convert.ToString(ViewState["ParametersXmlSchema"]));
                }
                ds = mCurrentDataSet;
            }
            return ds;
        }
    }


    /// <summary>
    /// If false control shows only report selector.
    /// </summary>
    public bool ShowItemSelector
    {
        get
        {
            return GetValue("ShowItemSelector", false);
        }
        set
        {
            SetValue("ShowItemSelector", value);
        }
    }


    /// <summary>
    /// Gets or sets field value.
    /// </summary>
    public override object Value
    {
        get
        {
            EnsureChildControls();

            string usReportsValue = GetString(usReports.Value.ToString());
            string usItemsValue = GetString(usItems.Value.ToString());

            if (!ShowItemSelector)
            {
                if (usReportsValue == "0")
                {
                    return String.Empty;
                }
                return usReportsValue;
            }
            else
            {
                if ((usReportsValue == "0") || (usItemsValue == "0"))
                {
                    return String.Empty;
                }
                return String.Format("{0};{1}", usReportsValue, usItemsValue);
            }
        }
        set
        {
            EnsureChildControls();

            // Convert input value to string
            string values = Convert.ToString(value);

            // Check whether value is defined
            if (!String.IsNullOrEmpty(values))
            {
                if (ShowItemSelector)
                {
                    // Get report name and item name
                    string[] items = values.Split(';');

                    // Check whether all required items are defined
                    if (items.Length == 2)
                    {
                        // Set report and item values
                        usReports.Value = items[0];
                        usItems.Value = items[1];
                    }
                }
                else
                {
                    usReports.Value = values;
                }

                if (!RequestHelper.IsPostBack())
                {
                    LoadOtherValues();
                }
            }
        }
    }


    /// <summary>
    /// Loads the other fields values to the state of the form control
    /// </summary>
    public override void LoadOtherValues()
    {
        if ((Form != null) && (Form.Data != null))
        {
            // Check if the schema information is available
            IDataContainer data = Form.Data;

            if (data.ContainsColumn("ParametersXmlSchema") && data.ContainsColumn("ParametersXmlData"))
            {
                // Get xml schema and data                    
                string schema = Convert.ToString(Form.GetFieldValue("ParametersXmlSchema"));
                string xml = Convert.ToString(Form.GetFieldValue("ParametersXmlData"));

                LoadFromXML(xml, schema);
            }
        }
    }


    /// <summary>
    /// Type of report (graph,table,value).
    /// </summary>
    public ReportItemType ReportType
    {
        get
        {
            return (ReportItemType)GetValue("ReportType", (int)ReportItemType.All);
        }
        set
        {
            SetValue("ReportType", (int)value);
        }
    }


    /// <summary>
    /// Report Id.
    /// </summary>
    public int ReportID
    {
        get;
        set;
    }


    /// <summary>
    /// Gets the item uniselector drop down list client id for javascript use.
    /// </summary>
    public string UniSelectorClientID
    {
        get
        {
            EnsureChildControls();
            return usItems.UseUniSelectorAutocomplete ? usItems.AutocompleteValueClientID : usItems.DropDownSingleSelect.ClientID;
        }
    }


    /// <summary>
    /// Indicates weather display report drop down list.
    /// </summary>
    public bool Display
    {
        get
        {
            return mDisplay;
        }
        set
        {
            mDisplay = value;
        }
    }

    #endregion


    #region "Methods"

    /// <summary>
    /// Returns an array of values of any other fields returned by the control.
    /// </summary>
    /// <remarks>It returns an array where first dimension is attribute name and the second dimension is its value.</remarks>
    public override object[,] GetOtherValues()
    {
        // Get current dataset
        DataSet ds = CurrentDataSet;

        // Set properties names
        object[,] values = new object[2, 2];
        values[0, 0] = "ParametersXmlSchema";
        values[1, 0] = "ParametersXmlData";

        // Check whether dataset is defined
        if (!DataHelper.DataSourceIsEmpty(ds))
        {
            // Set dataset values
            values[0, 1] = ds.GetXmlSchema();
            values[1, 1] = ds.GetXml();
        }

        return values;
    }


    /// <summary>
    /// Loads dataset to windows helper from schema and data xml definitions.
    /// </summary>
    /// <param name="xml">XML data</param>
    /// <param name="schema">XML schema</param>
    protected DataSet LoadFromXML(string xml, string schema)
    {
        // Check whether schema and data are defined
        if (!String.IsNullOrEmpty(schema) && !String.IsNullOrEmpty(xml))
        {
            //Create data set from xml
            DataSet ds = new DataSet();

            // Load schema
            StringReader sr = StringReader.New(schema);
            ds.ReadXmlSchema(sr);

            // Load data
            ds.TryReadXml(xml);

            // Set current dataset
            WindowHelper.Add(CurrentGuid(), ds);

            return ds;
        }

        return null;
    }


    /// <summary>
    /// Builds condition for report selector
    /// </summary>
    private void BuildReportCondition()
    {
        switch (ReportType)
        {
            case ReportItemType.Graph:
                usReports.WhereCondition = "EXISTS (SELECT GraphID FROM Reporting_ReportGraph as graph WHERE (graph.GraphIsHtml IS NULL OR graph.GraphIsHtml = 0) AND graph.GraphReportID = ReportID)";
                break;

            case ReportItemType.HtmlGraph:
                usReports.WhereCondition = "EXISTS (SELECT GraphID FROM Reporting_ReportGraph as graph WHERE (graph.GraphIsHtml = 1) AND graph.GraphReportID = ReportID)";
                break;

            case ReportItemType.Table:
                usReports.WhereCondition = "EXISTS (SELECT TableID FROM Reporting_ReportTable as reporttable WHERE reporttable.TableReportID = ReportID)";
                break;

            case ReportItemType.Value:
                usReports.WhereCondition = "EXISTS (SELECT ValueID FROM Reporting_ReportValue as value WHERE value.ValueReportID = ReportID)";
                break;

            // By default do nothing
        }
    }


    /// <summary>
    /// Builds conditions for particular type of selector.
    /// </summary>
    protected void BuildConditions()
    {
        switch (ReportType)
        {
            case ReportItemType.Graph:
                usItems.WhereCondition = "GraphReportID = " + ReportID + " AND (GraphIsHtml IS NULL OR GraphIsHtml = 0)";
                usItems.DisplayNameFormat = "{%GraphDisplayName%}";
                usItems.ReturnColumnName = UseIDValue ? "GraphID" : "GraphName";
                usItems.ObjectType = "reporting.reportgraph";
                mFirstItemText = GetString("rep.graph.pleaseselect");
                break;

            case ReportItemType.HtmlGraph:
                usItems.WhereCondition = "GraphReportID = " + ReportID + " AND (GraphIsHtml = 1)";
                usItems.DisplayNameFormat = "{%GraphDisplayName%}";
                usItems.ReturnColumnName = UseIDValue ? "GraphID" : "GraphName";
                usItems.ObjectType = "reporting.reportgraph";
                mFirstItemText = GetString("rep.graph.pleaseselect");
                break;

            case ReportItemType.Table:
                usItems.WhereCondition = "TableReportID = " + ReportID;
                usItems.ObjectType = "reporting.reporttable";
                usItems.DisplayNameFormat = "{%TableDisplayName%}";
                usItems.ReturnColumnName = UseIDValue ? "TableID" : "TableName";
                mFirstItemText = GetString("rep.table.pleaseselect");
                break;

            case ReportItemType.Value:
                usItems.WhereCondition = "ValueReportID = " + ReportID;
                usItems.ObjectType = "reporting.reportvalue";
                usItems.DisplayNameFormat = "{%ValueDisplayName%}";
                usItems.ReturnColumnName = UseIDValue ? "ValueID" : "ValueName";
                mFirstItemText = GetString("rep.value.pleaseselect");
                break;

            // By default do nothing
        }
    }


    /// <summary>
    /// Forces Items Uni select to reload.
    /// </summary>
    public void ReloadItems()
    {
        string selected = usItems.DropDownSingleSelect.SelectedValue;

        usItems.Reload(true);

        try
        {
            usItems.DropDownSingleSelect.SelectedValue = selected;
        }
        catch
        {
        }
    }


    /// <summary>
    /// Gets GUID from hidden field .. if not there create new one.
    /// </summary>
    private String CurrentGuid()
    {
        // For reloaddata (f.e. webpart save) store guid also in request helper, because hidden is empty after control is reloaded.
        Guid guid = ValidationHelper.GetGuid(RequestStockHelper.GetItem("wppreportselector"), Guid.Empty);
        if (hdnGuid.Value == String.Empty)
        {
            hdnGuid.Value = (guid == Guid.Empty) ? Guid.NewGuid().ToString() : guid.ToString();
        }

        if (guid == Guid.Empty)
        {
            RequestStockHelper.Add("wppreportselector", hdnGuid.Value);
        }

        return hdnGuid.Value;
    }


    protected override void OnLoad(EventArgs e)
    {
        // First item as "please select .." - not default "none"
        usItems.AllowEmpty = false;
        usReports.AllowEmpty = false;

        usReports.SpecialFields.Add(new SpecialField { Text = "(" + GetString("rep.pleaseselect") + ")", Value = "0" });

        // Disable 'please select' for items selector
        usItems.MaxDisplayedItems = usItems.MaxDisplayedTotalItems = 1000;

        BuildReportCondition();
        usReports.OnSelectionChanged += usReports_OnSelectionChanged;
        base.OnLoad(e);
    }


    protected override void OnPreRender(EventArgs e)
    {
        pnlReports.Attributes.Add("style", "margin-bottom:3px");

        string reportName = ValidationHelper.GetString(usReports.Value, String.Empty);
        mReportInfo = ReportInfoProvider.GetReportInfo(reportName);
        if (mReportInfo != null)
        {
            usItems.Enabled = true;

            // Test if there is any item visible in report parameters
            FormInfo fi = new FormInfo(mReportInfo.ReportParameters);

            // Get dataset from cache
            DataSet ds = (DataSet)WindowHelper.GetItem(CurrentGuid());
            DataRow dr = fi.GetDataRow(false);
            fi.LoadDefaultValues(dr, true);
            bool itemVisible = false;
            List<IField> items = fi.ItemsList;
            foreach (IField item in items)
            {
                FormFieldInfo ffi = item as FormFieldInfo;
                if (ffi != null)
                {
                    if (ffi.Visible)
                    {
                        itemVisible = true;
                        break;
                    }
                }
            }

            ReportID = mReportInfo.ReportID;

            plcParametersButtons.Visible = itemVisible;
        }
        else
        {
            if (ReportID == 0)
            {
                plcParametersButtons.Visible = false;
                usItems.Enabled = false;
            }
        }

        ltlScript.Text = ScriptHelper.GetScript("function refresh () {" + ControlsHelper.GetPostBackEventReference(pnlUpdate, String.Empty) + "}");
        usReports.DropDownSingleSelect.AutoPostBack = true;

        if (!mDisplay)
        {
            pnlReports.Visible = false;
            plcParametersButtons.Visible = false;
            usItems.Enabled = true;
        }

        if (!ShowItemSelector)
        {
            pnlItems.Visible = false;
        }

        usItems.IsLiveSite = IsLiveSite;
        usReports.IsLiveSite = IsLiveSite;
        ugParameters.GridName = "~/CMSModules/Reporting/FormControls/ReportParametersList.xml";
        ugParameters.ZeroRowsText = String.Empty;
        ugParameters.PageSize = "##ALL##";
        ugParameters.Pager.DefaultPageSize = -1;

        BuildConditions();

        if (mReportInfo == null)
        {
            usItems.SpecialFields.Add(new SpecialField { Text = "(" + mFirstItemText + ")", Value = "0" });
        }

        if (ShowItemSelector)
        {
            ReloadItems();
        }

        if (mSetValues)
        {
            WindowHelper.Add(CurrentGuid(), CurrentDataSet);
	        ScriptHelper.RegisterDialogScript(Page);
            ScriptHelper.RegisterStartupScript(Page, typeof(Page), "OpenModalWindowReportItem", ScriptHelper.GetScript("modalDialog('" + ResolveUrl("~/CMSModules/Reporting/Dialogs/ReportParametersSelector.aspx?ReportID=" + ReportID + "&guid=" + CurrentGuid()) + "','ReportParametersDialog', 700, 500);"));
            mKeepDataInWindowsHelper = true;
        }

        // Apply reportid condition if report was selected via uniselector
        if (mReportInfo != null)
        {
            DataSet ds = CurrentDataSet;

            ViewState["ParametersXmlData"] = null;
            ViewState["ParametersXmlSchema"] = null;

            if (!DataHelper.DataSourceIsEmpty(ds))
            {
                ViewState["ParametersXmlData"] = ds.GetXml();
                ViewState["ParametersXmlSchema"] = ds.GetXmlSchema();
            }

            if (!mKeepDataInWindowsHelper)
            {
                WindowHelper.Remove(CurrentGuid());
            }

            if (!DataHelper.DataSourceIsEmpty(ds))
            {
                ds = DataHelper.DataSetPivot(ds, new [] { "ParameterName", "ParameterValue" });
                ugParameters.DataSource = ds;
                ugParameters.ReloadData();
                pnlParameters.Visible = true;
            }
            else
            {
                pnlParameters.Visible = false;
            }
        }
        else
        {
            pnlParameters.Visible = false;
        }

        base.OnPreRender(e);
    }


    protected void btnSet_Click(object sender, EventArgs e)
    {
        mSetValues = true;
    }


    protected void btnClear_Click(object sender, EventArgs e)
    {
        WindowHelper.Remove(CurrentGuid());
        ViewState["ParametersXmlData"] = null;
        ViewState["ParametersXmlSchema"] = null;
    }


    protected void usReports_OnSelectionChanged(object sender, EventArgs ea)
    {
        WindowHelper.Remove(CurrentGuid());
        ViewState["ParametersXmlData"] = null;
        ViewState["ParametersXmlSchema"] = null;

        // Try to set first item
        if (usItems.DropDownSingleSelect.Items.Count > 0)
        {
            usItems.DropDownSingleSelect.SelectedIndex = 0;
        }
    }

    #endregion
}