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

using CMS.Base;
using CMS.CustomTables;
using CMS.DataEngine;
using CMS.ExtendedControls;
using CMS.FormEngine;
using CMS.Helpers;
using CMS.SiteProvider;
using CMS.MacroEngine;
using CMS.Membership;
using CMS.UIControls;
using CMS.UIControls.UniGridConfig;
using Action = CMS.UIControls.UniGridConfig.Action;

public partial class CMSModules_CustomTables_Controls_CustomTableDataList : CMSUserControl
{
    #region "Private & protected variables"

    protected string editToolTip = String.Empty;
    protected string deleteToolTip = String.Empty;
    protected string viewToolTip = String.Empty;
    protected string upToolTip = String.Empty;
    protected string downToolTip = String.Empty;

    // Default pages
    private string mEditItemPage = "~/CMSModules/CustomTables/Tools/CustomTable_Data_EditItem.aspx";
    private string mViewItemPage = "~/CMSModules/CustomTables/Tools/CustomTable_Data_ViewItem.aspx";
    private string mEditItemPageAdditionalParams;
    private string mViewItemPageAdditionalParams;

    protected DataSet ds = null;
    private FormInfo mFormInfo;
    private ObjectTypeInfo ti;

    #endregion


    #region "Properties"

    /// <summary>
    /// Messages placeholder
    /// </summary>
    public override MessagesPlaceHolder MessagesPlaceHolder
    {
        get
        {
            return plcMess;
        }
    }


    /// <summary>
    /// Gets or sets URL of the page where item is edited.
    /// </summary>
    public string EditItemPage
    {
        get
        {
            return mEditItemPage;
        }
        set
        {
            mEditItemPage = value;
        }
    }


    /// <summary>
    /// Gets or sets additional parameters for Edit page.
    /// </summary>
    public string EditItemPageAdditionalParams
    {
        get
        {
            return mEditItemPageAdditionalParams;
        }
        set
        {
            mEditItemPageAdditionalParams = value;
        }
    }


    /// <summary>
    /// Gets or sets URL of the page where whole item is displayed.
    /// </summary>
    public string ViewItemPage
    {
        get
        {
            return mViewItemPage;
        }
        set
        {
            mViewItemPage = value;
        }
    }


    /// <summary>
    /// Gets or sets additional parameters for View page.
    /// </summary>
    public string ViewItemPageAdditionalParams
    {
        get
        {
            return mViewItemPageAdditionalParams;
        }
        set
        {
            mViewItemPageAdditionalParams = value;
        }
    }


    /// <summary>
    /// Gets or sets the class info of custom table which data are displayed.
    /// </summary>
    public DataClassInfo CustomTableClassInfo
    {
        get;
        set;
    }


    /// <summary>
    /// Gets or sets the form info.
    /// </summary>
    public FormInfo FormInfo
    {
        get
        {
            if (mFormInfo == null)
            {
                if (CustomTableClassInfo != null)
                {
                    mFormInfo = FormHelper.GetFormInfo(CustomTableClassInfo.ClassName, true);
                }
            }
            return mFormInfo;
        }
    }


    /// <summary>
    /// Determines whether custom table has ItemOrder field.
    /// </summary>
    public bool HasItemOrderField
    {
        get
        {
            if (FormInfo != null)
            {
                return (FormInfo.FieldExists("ItemOrder") && FormInfo.FieldExists("ItemID"));
            }
            else
            {
                // If form info is not available assume ItemOrder is not present to prevent further exceptions
                return false;
            }
        }
    }


    /// <summary>
    /// Gets custom table data unigrid.
    /// </summary>
    public UniGrid UniGrid
    {
        get
        {
            return gridData;
        }
    }


    /// <summary>
    /// Indicates if control is used on live site.
    /// </summary>
    public override bool IsLiveSite
    {
        get
        {
            return gridData.IsLiveSite;
        }
        set
        {
            plcMess.IsLiveSite = value;
            gridData.IsLiveSite = value;
        }
    }

    #endregion


    #region "Page events"

    /// <summary>
    /// Page load.
    /// </summary>
    protected void Page_Load(object sender, EventArgs e)
    {
        if (StopProcessing)
        {
            return;
        }

        // Register Javascripts
        ScriptHelper.RegisterDialogScript(Page);
        ScriptHelper.RegisterClientScriptBlock(this, typeof(string), "DeleteEditView", ScriptHelper.GetScript(
            "var deleteConfirmation = ''; " +
            "function DeleteConfirm() { return confirm(deleteConfirmation); } " +
            "function EditItem(customtableid, itemId) { " +
            "  document.location.replace('" + ResolveUrl(EditItemPage) + "?" +
            (String.IsNullOrEmpty(mEditItemPageAdditionalParams) ? String.Empty : mEditItemPageAdditionalParams + "&") + "objectid=' + customtableid + '&itemId=' + itemId); } " +
            "function ViewItem(customtableid, itemId) { " +
            "  modalDialog('" + ResolveUrl(ViewItemPage) + "?" +
            (String.IsNullOrEmpty(mViewItemPageAdditionalParams) ? String.Empty : mViewItemPageAdditionalParams + "&") + "customtableid=' + customtableid + '&itemId=' + itemId,'ViewItem',600,600); } "));

        // Buttons' tooltips
        editToolTip = GetString("general.edit");
        deleteToolTip = GetString("general.delete");
        viewToolTip = GetString("general.view");
        upToolTip = GetString("general.up");
        downToolTip = GetString("general.down");

        // Delete confirmation
        ltlScript.Text = ScriptHelper.GetScript("deleteConfirmation = '" + GetString("customtable.data.DeleteConfirmation") + "';");

        gridData.ObjectType = CustomTableItemProvider.GetObjectType(CustomTableClassInfo.ClassName);
        gridData.OnLoadColumns += gridData_OnLoadColumns;
        gridData.OnExternalDataBound += gridData_OnExternalDataBound;
        gridData.OnAction += gridData_OnAction;

        ti = CustomTableItemProvider.GetTypeInfo(CustomTableClassInfo.ClassName);

        if (HasItemOrderField)
        {
            gridData.OrderBy = "ItemOrder ASC";
        }
        else
        {
            gridData.OrderBy = ti.IDColumn;
        }
    }

    #endregion


    #region "Grid events"

    protected void gridData_OnAction(string actionName, object actionArgument)
    {
        switch (actionName.ToLowerCSafe())
        {
            // Delete item action
            case "delete":
                if (CheckPermissions(PermissionsEnum.Delete))
                {
                    if (CustomTableClassInfo != null)
                    {
                        CustomTableItem item = CustomTableItemProvider.GetItem(ValidationHelper.GetInteger(actionArgument, 0), CustomTableClassInfo.ClassName);
                        if (item != null)
                        {
                            item.Delete();
                        }
                    }

                    URLHelper.RefreshCurrentPage();
                }
                break;

            // Move item up action
            case "moveup":
                if (CheckPermissions(PermissionsEnum.Modify))
                {
                    if (CustomTableClassInfo != null)
                    {
                        var item = CustomTableItemProvider.GetItem(ValidationHelper.GetInteger(actionArgument, 0), CustomTableClassInfo.ClassName);
                        item.Generalized.MoveObjectUp();
                    }

                    URLHelper.RefreshCurrentPage();
                }
                break;

            // Move item down action
            case "movedown":
                if (CheckPermissions(PermissionsEnum.Modify))
                {
                    if (CustomTableClassInfo != null)
                    {
                        var item = CustomTableItemProvider.GetItem(ValidationHelper.GetInteger(actionArgument, 0), CustomTableClassInfo.ClassName);
                        item.Generalized.MoveObjectDown();
                    }

                    URLHelper.RefreshCurrentPage();
                }
                break;
        }
    }


    protected object gridData_OnExternalDataBound(object sender, string sourceName, object parameter)
    {
        string source = sourceName.ToLowerCSafe();
        // Get button and grid view row
        CMSGridActionButton button = sender as CMSGridActionButton;
        GridViewRow grv = parameter as GridViewRow;

        if (grv != null)
        {
            DataRowView drv = grv.DataItem as DataRowView;

            // Hide Move Up/Down buttons when there is no Order field
            switch (source)
            {
                case "edit":
                    if ((button != null) && (drv != null))
                    {
                        // Add edit script
                        button.OnClientClick = "EditItem(" + CustomTableClassInfo.ClassID + ", " + drv[ti.IDColumn] + "); return false;";
                    }
                    break;

                case "view":
                    if ((button != null) && (drv != null))
                    {
                        // Add view script
                        button.OnClientClick = "ViewItem(" + CustomTableClassInfo.ClassID + ", " + drv[ti.IDColumn] + "); return false;";
                    }
                    break;

                case "moveup":
                case "movedown":
                    if (!HasItemOrderField && (button != null))
                    {
                        // Hide button
                        button.Visible = false;
                    }
                    break;
            }
        }
        else
        {
            switch (source)
            {
                case "itemcreatedby":
                case "itemmodifiedby":
                    int userId = ValidationHelper.GetInteger(parameter, 0);
                    return HTMLHelper.HTMLEncode(GetUserName(userId));

                default:
                    return HTMLHelper.HTMLEncode(parameter.ToString());
            }
        }

        return parameter;
    }


    private string GetUserName(int userId)
    {
        if (userId != 0)
        {
            // Get user information
            UserInfo ui = UserInfoProvider.GetUserInfo(userId);
            if (ui != null)
            {
                return ui.GetFormattedUserName(IsLiveSite);
            }
        }

        return String.Empty;
    }


    protected void gridData_OnLoadColumns()
    {
        if ((CustomTableClassInfo != null) && (FormInfo != null))
        {
            // Update the actions command argument
            foreach (Action action in gridData.GridActions.Actions)
            {
                action.CommandArgument = ti.IDColumn;
            }

            string columnNames = null;
            List<string> columnList;

            string columns = CustomTableClassInfo.ClassShowColumns;
            if (string.IsNullOrEmpty(columns))
            {
                columnList = new List<string>();
                columnList.AddRange(GetExistingColumns(false).Take(5));

                // Show info message
                ShowInformation(GetString("customtable.columnscount.default"));
            }
            else
            {
                // Get existing columns names
                List<string> existingColumns = GetExistingColumns(true);

                // Get selected columns
                List<string> selectedColumns = GetSelectedColumns(columns);

                columnList = new List<string>();
                StringBuilder sb = new StringBuilder();

                // Remove non-existing columns
                foreach (string col in selectedColumns)
                {
                    int index = existingColumns.BinarySearch(col, StringComparer.InvariantCultureIgnoreCase);
                    if (index >= 0)
                    {
                        string colName = existingColumns[index];
                        columnList.Add(colName);
                        sb.Append(",[", colName, "]");
                    }
                }

                // Ensure item order column
                selectedColumns.Sort();
                if ((selectedColumns.BinarySearch("ItemOrder", StringComparer.InvariantCultureIgnoreCase) < 0) && HasItemOrderField)
                {
                    sb.Append(",[ItemOrder]");
                }

                // Ensure itemid column
                if (selectedColumns.BinarySearch(ti.IDColumn, StringComparer.InvariantCultureIgnoreCase) < 0)
                {
                    sb.Insert(0, ",[" + ti.IDColumn + "]");
                }

                columnNames = sb.ToString().TrimStart(',');
            }

            // Get macro resolver
            MacroResolver resolver = MacroResolverStorage.GetRegisteredResolver(FormHelper.FORM_PREFIX + CustomTableClassInfo.ClassName);

            // Loop trough all columns
            for (int i = 0; i < columnList.Count; i++)
            {
                string column = columnList[i];

                // Get field caption
                FormFieldInfo ffi = FormInfo.GetFormField(column);
                string fieldCaption = string.Empty;
                if (ffi == null)
                {
                    fieldCaption = column;
                }
                else
                {
                    string caption = ffi.GetPropertyValue(FormFieldPropertyEnum.FieldCaption, resolver);
                    fieldCaption = (caption == string.Empty) ? column : ResHelper.LocalizeString(caption);
                }

                Column columnDefinition = new Column
                {
                    Caption = fieldCaption,
                    Source = column,
                    ExternalSourceName = column,
                    AllowSorting = true,
                    Wrap = false
                };

                if (i == columnList.Count - 1)
                {
                    // Stretch last column
                    columnDefinition.Width = "100%";
                }

                gridData.GridColumns.Columns.Add(columnDefinition);
            }

            // Set column names
            gridData.Columns = columnNames;
        }
    }

    #endregion


    #region "Methods"

    /// <summary>
    /// Checks the specified permission.
    /// </summary>
    private bool CheckPermissions(PermissionsEnum permissionName)
    {
        // Check permission
        if (!CustomTableClassInfo.CheckPermissions(permissionName, SiteContext.CurrentSiteName, MembershipContext.AuthenticatedUser))
        {
            ShowError(String.Format(GetString("customtable.permissiondenied." + permissionName), CustomTableClassInfo.ClassName));
            return false;
        }
        return true;
    }


    /// <summary>
    /// Gets existing columns from form info
    /// </summary>
    /// <param name="sort">Indicates if the columns should be sorted</param>
    private List<string> GetExistingColumns(bool sort)
    {
        if (FormInfo == null)
        {
            return null;
        }

        var existingColumns = FormInfo.GetColumnNames(false);
        if (sort)
        {
            existingColumns.Sort(StringComparer.InvariantCultureIgnoreCase);
        }

        return existingColumns;
    }


    /// <summary>
    /// Gets list of selected columns
    /// </summary>
    private static List<string> GetSelectedColumns(string columns)
    {
        return columns.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries).ToList();
    }

    #endregion
}