using System;
using System.Data;
using System.Collections;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CMS.CMSHelper;
using CMS.GlobalHelper;
using CMS.SettingsProvider;
using CMS.UIControls;
using CMS.Chat;
public partial class CMSModules_Chat_Controls_UI_ChatMessage_List : CMSAdminListControl
{
#region "Properties"
///
/// Inner grid.
///
public UniGrid Grid
{
get
{
return this.gridElem;
}
}
///
/// Indicates if the control should perform the operations.
///
public override bool StopProcessing
{
get
{
return base.StopProcessing;
}
set
{
base.StopProcessing = value;
this.gridElem.StopProcessing = value;
}
}
///
/// Indicates if the control is used on the live site.
///
public override bool IsLiveSite
{
get
{
return base.IsLiveSite;
}
set
{
base.IsLiveSite = value;
gridElem.IsLiveSite = value;
}
}
///
/// Filters displayed chat messages only to messages of this chat room.
///
public int ChatRoomID { get; set; }
private bool HasUserModifyPermission { get; set; }
private int? SiteID
{
get
{
return ((ChatRoomInfo)CMSContext.EditedObjectParent).ChatRoomSiteID;
}
}
#endregion
#region "Methods"
protected void Page_Load(object sender, EventArgs e)
{
Grid.OnExternalDataBound += new OnExternalDataBoundEventHandler(Grid_OnExternalDataBound);
Grid.OnAction += new OnActionEventHandler(Grid_OnAction);
Grid.WhereCondition = string.Format("ChatMessageRoomID = {0}", ChatRoomID);
HasUserModifyPermission = ((CMSChatPage)Page).HasUserModifyPermission(SiteID);
}
void Grid_OnAction(string actionName, object actionArgument)
{
((CMSChatPage)Page).CheckModifyPermission(SiteID);
int chatMessageID = ValidationHelper.GetInteger(actionArgument, 0);
switch (actionName)
{
case "delete":
ChatMessageInfoProvider.DeleteChatMessageInfo(chatMessageID);
break;
case "reject":
ChatMessageInfo cmi = ChatMessageInfoProvider.GetChatMessageInfo(chatMessageID);
if (cmi != null)
{
if (cmi.ChatMessageRejected)
{
// Set message as 'not rejected'
cmi.ChatMessageRejected = false;
}
else
{
// Set message as 'rejected'
cmi.ChatMessageRejected = true;
}
ChatMessageInfoProvider.SetChatMessageInfo(cmi);
}
break;
}
}
object Grid_OnExternalDataBound(object sender, string sourceName, object parameter)
{
string name = sourceName.ToLowerCSafe();
switch (name)
{
case "chatmessageauthor":
{
DataRowView row = (DataRowView)parameter;
if (row["AuthorNickname"] == DBNull.Value)
{
return "" + GetString("chat.system") + "";
}
int chatUserID = ValidationHelper.GetInteger(row["ChatMessageUserID"], 0);
string nickname = ValidationHelper.GetString(row["AuthorNickname"], "AuthorNickname");
bool isAnonymous = ValidationHelper.GetBoolean(row["AuthorIsAnonymous"], true);
return ChatHelper.GetCMSDeskChatUserField(this, chatUserID, nickname, isAnonymous);
}
case "edit":
case "reject":
case "delete":
{
DataRowView row = (DataRowView)((GridViewRow)parameter).DataItem;
// Whisper message is consider as system here - it can't be rejected or edited
ChatMessageTypeEnum msgType = (ChatMessageTypeEnum)ValidationHelper.GetInteger(row["ChatMessageSystemMessageType"], 0);
bool isSystem = ((msgType != ChatMessageTypeEnum.ClassicMessage) && (msgType != ChatMessageTypeEnum.Announcement));
bool enabled = true;
string iconName = "";
string toolTipResourceString = null;
if (name == "edit")
{
iconName = "Edit";
}
else if (name == "reject")
{
iconName = "Reject";
}
else if (name == "delete")
{
iconName = "Delete";
}
if (isSystem)
{
if (name == "edit" || name == "reject")
{
// Disable edit and reject buttons for system messages
enabled = false;
}
}
else
{
if (name == "reject")
{
bool isRejected = ValidationHelper.GetBoolean(row["ChatMessageRejected"], false);
if (isRejected)
{
iconName = "Approve";
toolTipResourceString = "general.approve";
}
else
{
iconName = "Reject";
toolTipResourceString = "general.reject";
}
}
}
if (!HasUserModifyPermission && name != "edit")
{
enabled = false;
}
ImageButton actionButton = (ImageButton)sender;
if (!enabled)
{
iconName += "disabled";
}
actionButton.Enabled = enabled;
actionButton.ImageUrl = GetImageUrl("Design/Controls/UniGrid/Actions/" + iconName + ".png");
if (toolTipResourceString != null)
{
actionButton.ToolTip = GetString(toolTipResourceString);
}
break;
}
case "chatmessagesystemmessagetype":
{
DataRowView row = (DataRowView)parameter;
ChatMessageTypeEnum messageType = (ChatMessageTypeEnum)ValidationHelper.GetInteger(row["ChatMessageSystemMessageType"], 0);
if (messageType == ChatMessageTypeEnum.Whisper)
{
ChatUserInfo recipient = ChatUserInfoProvider.GetChatUserInfo(ValidationHelper.GetInteger(row["ChatMessageRecipientID"], 0));
if (recipient != null)
{
// Set text to the format "Whisper to somebody", where somebody may be link to the user if he is not anonymous
return string.Format(ResHelper.GetString("chat.system.cmsdesk.whisperto"), ChatHelper.GetCMSDeskChatUserField(this, recipient));
}
}
return messageType.ToStringValue((int)ChatMessageTypeStringValueUsageEnum.CMSDeskDescription);
}
case "chatmessagetext":
{
DataRowView row = (DataRowView)parameter;
ChatMessageTypeEnum messageType = (ChatMessageTypeEnum)ValidationHelper.GetInteger(row["ChatMessageSystemMessageType"], 0);
string messageText = ValidationHelper.GetString(row["ChatMessageText"], "");
if (messageType.IsSystemMessage())
{
messageText = CMSContext.ResolveMacros(messageText);
}
return HTMLHelper.HTMLEncode(messageText);
}
}
return parameter;
}
#endregion
}