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/Chat/Controls/UI/ChatRoomUser/List.ascx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using CMS.Membership;
using CMS.UIControls;
using CMS.Helpers;
using CMS.Base;
using CMS.Chat;
using System.Data;
using CMS.PortalEngine;
using CMS.ExtendedControls;

public partial class CMSModules_Chat_Controls_UI_ChatRoomUser_List : CMSAdminListControl
{
    #region "Private fields"

    private ChatRoomInfo chatRoom;

    #endregion


    #region "Properties"

    /// <summary>
    /// Inner grid.
    /// </summary>
    public UniGrid Grid
    {
        get
        {
            return this.gridElem;
        }
    }


    public ChatRoomInfo ChatRoom
    {
        get
        {
            if (chatRoom == null)
            {
                chatRoom = ChatRoomInfoProvider.GetChatRoomInfo(ChatRoomID);
            }

            return chatRoom;
        }
    }


    /// <summary>
    /// Filters displayed chat users only to users of this chat room.
    /// </summary>
    public int ChatRoomID { get; set; }


    private bool HasUserModifyPermission { get; set; }


    private int? SiteID
    {
        get
        {
            return ((ChatRoomInfo)UIContext.EditedObjectParent).ChatRoomSiteID;
        }
    }

    #endregion


    #region "Methods"

    protected void Page_Load(object sender, EventArgs e)
    {
        AdminLevelEnum minimumAdminLevel;
        if (ChatRoom.ChatRoomPrivate)
        {
            // In private rooms, chat user must have join rights or higher to be displayed
            minimumAdminLevel = AdminLevelEnum.Join;
        }
        else
        {
            // In public rooms everybody has Join rights, so only users with AdminRights and higher are displayed
            minimumAdminLevel = AdminLevelEnum.Admin;
        }

        Grid.WhereCondition = string.Format("ChatRoomUserRoomID = {0} AND (ChatRoomUserAdminLevel >= {1} OR ChatRoomUserJoinTime IS NOT NULL)", ChatRoomID, (int)minimumAdminLevel);
        Grid.EditActionUrl = "Edit.aspx?roomUserID={0}&roomid=" + ChatRoomID;

        Grid.OnExternalDataBound += new OnExternalDataBoundEventHandler(Grid_OnExternalDataBound);
        Grid.OnAction += new OnActionEventHandler(Grid_OnAction);

        HasUserModifyPermission = ((CMSChatPage)Page).HasUserModifyPermission(SiteID);
    }


    void Grid_OnAction(string actionName, object actionArgument)
    {
        // If room is global also modifyglobal permission has to be checked.. add it to every action which has modify permisison
        ((CMSChatPage)Page).CheckModifyPermission(SiteID);

        int chatRoomUserID = ValidationHelper.GetInteger(actionArgument, 0);

        if (chatRoomUserID == 0)
        {
            return;
        }

        ChatRoomUserInfo chatRoomUser = ChatRoomUserInfoProvider.GetChatRoomUser(chatRoomUserID);

        if (chatRoomUser == null)
        {
            return;
        }

        // Can't perform any action in one to one support room
        if (ChatRoom.IsOneToOneSupport)
        {
            ShowError(GetString("chat.cantrevokerightsofsupportroomcreator"));
            return;
        }

        switch (actionName)
        {
            case "kick":
                if (!chatRoomUser.IsOnline)
                {
                    ShowError(GetString("chat.cantkickofflineuser"));
                    return;
                }
                ChatRoomUserHelper.KickUserFromRoom(ChatRoomID, ChatUserInfoProvider.GetChatUserInfo(chatRoomUser.ChatRoomUserChatUserID), ChatUserHelper.GetChatUserFromCMSUser(MembershipContext.AuthenticatedUser));
                break;
            case "revoke":
                if (chatRoomUser.ChatRoomUserAdminLevel == AdminLevelEnum.Creator)
                {
                    ShowError(GetString("chat.cantrevokecreatorrights"));
                    return;
                }
                ChatRoomUserHelper.KickUserPermanentlyFromRoom(ChatRoomID, ChatUserInfoProvider.GetChatUserInfo(chatRoomUser.ChatRoomUserChatUserID), ChatUserHelper.GetChatUserFromCMSUser(MembershipContext.AuthenticatedUser));
                break;
        }
    }


    object Grid_OnExternalDataBound(object sender, string sourceName, object parameter)
    {
        int chatUserID = ValidationHelper.GetInteger(parameter, 0);
        string name = sourceName.ToLowerCSafe();
        switch (name)
        {
            case "chatroomuserchatuserid":
                ChatUserInfo user = ChatUserInfoProvider.GetChatUserInfo(chatUserID);

                return ChatHelper.GetCMSDeskChatUserField(this, user);
            case "adminlevel":
                AdminLevelEnum adminLevel = (AdminLevelEnum)parameter;

                return adminLevel.ToStringValue();
            case "onlinestatus":
                if (parameter == DBNull.Value)
                {
                    parameter = null;
                }

                DateTime? joinTime = (DateTime?)parameter;

                string input = "<span class=\"{0}\">{1}</span>";

                return String.Format(input, (joinTime.HasValue) ? "StatusEnabled" : "StatusDisabled", GetString(joinTime.HasValue ? "general.yes" : "general.no"));


            case "action_kick":
            case "action_revoke":
            case "action_edit":
                //Gets the value of the UserName column from the current data row
                DataRow row = ((DataRowView)((GridViewRow)parameter).DataItem).Row;

                bool visible = true;
                CMSGridActionButton actionButton = (CMSGridActionButton)sender;

                // Can't perform any action in one to one support room
                if (ChatRoom.IsOneToOneSupport)
                {
                    visible = false;
                }
                else
                {
                    if (name == "action_kick")
                    {
                        if (row["ChatRoomUserJoinTime"] == DBNull.Value)
                        {
                            visible = false;
                        }
                        actionButton.IconCssClass = "icon-arrow-right-rect";
                    }
                    else if (name == "action_revoke")
                    {
                        // Can't revoke access to the creator of the room
                        // Can't revoke access to the public room
                        if (!ChatRoom.ChatRoomPrivate || ((int)row["ChatRoomUserAdminLevel"] == (int)AdminLevelEnum.Creator))
                        {
                            visible = false;
                        }
                        actionButton.IconCssClass = "icon-times-circle color-red-70";
                    }
                    else if (name == "action_edit")
                    {
                        actionButton.IconCssClass = "icon-edit";
                        actionButton.IconStyle = GridIconStyle.Allow;
                    }
                }

                if (!visible)
                {
                    actionButton.Visible = false;
                }
                else if (!HasUserModifyPermission)
                {
                    actionButton.Enabled = false;
                }

                break;
        }

        return parameter;
    }

    #endregion
}