using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Web.Script.Serialization;
using CMS.PortalControls;
using CMS.UIControls;
using CMS.ExtendedControls;
using CMS.Chat;
using CMS.GlobalHelper;
using CMS.CMSHelper;
using CMS.DataEngine;
using CMS.SettingsProvider;
using CMS.EventLog;
public partial class CMSWebParts_Chat_ChatMessageSend : CMSAbstractWebPart
{
#region "Variables"
bool mIsSupport = false;
int mTooltipLength = 30;
int mRoomID = -1;
#endregion
#region "Properties"
///
/// Gets or sets RoomName property.
///
public string RoomName
{
get
{
return ValidationHelper.GetString(this.GetValue("RoomName"), "");
}
set
{
this.SetValue("RoomName", value);
}
}
///
/// Gets or sets RoomID property.
///
public int RoomID
{
get
{
if (mRoomID < 0)
{
ChatRoomInfo room = ChatRoomInfoProvider.GetChatRoomInfo(RoomName);
if (room != null)
{
mRoomID = room.ChatRoomID;
}
else
{
mRoomID = 0;
}
}
return mRoomID;
}
set
{
mRoomID = value;
}
}
///
/// Gets or sets GroupID property.
///
public string GroupID
{
get
{
return ValidationHelper.GetString(this.GetValue("GroupID"), "DefaultGroup");
}
set
{
this.SetValue("GroupID", value);
}
}
///
/// Indicates if this webpart is in support chat window.
///
public bool IsSupport
{
get
{
return mIsSupport;
}
set
{
mIsSupport = value;
}
}
///
/// Gets or sets EnableBBCode property.
///
public bool EnableBBCode
{
get
{
return ValidationHelper.GetBoolean(this.GetValue("EnableBBCode"), true);
}
set
{
this.SetValue("EnableBBCode", value);
}
}
public string InnerContainerName { get; set; }
public string InnerContainerTitle { get; set; }
#endregion
#region "Public methods"
///
/// Hides elements that are irelevant for one to one window.
///
public void HideUserPicker()
{
pnlRecipientContainer.Visible = false;
}
#endregion
#region "Page Events"
protected void Page_Prerender(object sender, EventArgs e)
{
ChatHelper.MakeWebpartEnvelope("ChatWebpartEnvelope ChatWebpartEnvelopeMessageSend", this, InnerContainerTitle, InnerContainerName);
if (IsSupport)
{
ChatHelper.RegisterStylesheet(Page, true);
}
else
{
ChatHelper.RegisterStylesheet(Page);
}
}
protected void Page_Load(object sender, EventArgs e)
{
// Registration to chat webservice
AbstractCMSPage cmsPage = Page as AbstractCMSPage;
if (cmsPage != null)
{
ChatHelper.RegisterChatAJAXProxy(cmsPage);
}
// Script references insertion
ChatHelper.RegisterChatManager(Page);
ScriptHelper.RegisterScriptFile(Page, "jquery/jquery-ui.js");
ScriptHelper.RegisterScriptFile(Page, "jquery/jquery-a-tools.js");
ScriptHelper.RegisterScriptFile(Page, "~/CMSModules/Chat/CMSPages/Scripts/BBCodeParser.js");
ScriptHelper.RegisterScriptFile(Page, "~/CMSWebParts/Chat/ChatMessageSend_files/ChatMessageSend.js");
imgInformationDialog.ImageUrl = GetImageUrl("General/Labels/Information.png");
RoomID = ChatHelper.GetRoomIdFromQuery(RoomID, GroupID);
// Register startup script
ScriptHelper.RegisterStartupScript(Page, typeof(string), "ChatMessageSend_" + ClientID, BuildStartupScript(), true);
}
#endregion
#region "Methods"
///
/// Converts control's clientID to javascript jQuery selector string
///
/// Webcontrol
private string GetString(WebControl control)
{
return "#" + control.ClientID;
}
private string BuildStartupScript()
{
bool enBBCode = IsSupport || (ChatHelper.EnableBBCodeSetting && EnableBBCode);
WebControl input = enBBCode ? ucBBEditor.TextArea : txtMessage;
if (enBBCode)
{
txtMessage.Visible = false;
}
else
{
ucBBEditor.Visible = false;
}
JavaScriptSerializer sr = new JavaScriptSerializer();
string json = sr.Serialize(
new
{
roomID = RoomID,
inputClientID = GetString(input),
buttonClientID = GetString(btnSendMessage),
groupID = GroupID,
chbWhisperClientID = GetString(chbWhisper),
drpRecipientClientID = GetString(drpRecipient),
noneLabel = ResHelper.GetString("chat.everyone"),
enableBBCode = enBBCode,
bbCodeClientID = GetString(ucBBEditor),
btnCannedResponses = GetString(btnCannedResponses),
pnlContent = GetString(pnlWebpartContent),
envelopeID = "#envelope_" + ClientID,
informDialogID = GetString(pnlChatMessageSendInfoDialog),
btnInformDialogClose = GetString(btnChatMessageSendInformDialogClose)
}
);
string startupScript = String.Format("InitChatSenderWebpart({0});", json);
// If this webpart is for support person -> generate "Canned responses"
if ((ChatOnlineUserHelper.GetLoggedInChatUser() != null) && (IsSupport == true))
{
// Get canned responses from database
IEnumerable cannedResponses = ChatSupportCannedResponseInfoProvider.GetCannedResponses(ChatOnlineUserHelper.GetLoggedInChatUser().ChatUserID, CMSContext.CurrentSiteID);
if (cannedResponses.Count() > 0)
{
btnCannedResponses.Visible = true;
// Register necessary files
ScriptHelper.RegisterScriptFile(Page, "~/CMSWebParts/Chat/ChatMessageSend_files/CannedResponses.js");
CSSHelper.RegisterCSSLink(Page, "~/App_Themes/Design/Chat/ChatIntelliSense.css");
// Creates canned responses in format expected in javascript
var cannedResponseToSerialize = from cr in cannedResponses
let resolvedText = CMSContext.ResolveMacros(cr.ChatSupportCannedResponseText)
select new
{
label = "#" + cr.ChatSupportCannedResponseTagName,
tooltip = TextHelper.LimitLength(resolvedText, mTooltipLength),
value = resolvedText
};
// Serialize canned responses to JS Array expected by javascript
string cannedResponsesJSArray = "";
try
{
cannedResponsesJSArray = sr.Serialize(cannedResponseToSerialize);
}
catch (Exception ex)
{
EventLogProvider.LogException("Chat", "JSON serialization of canned responses", ex);
}
startupScript += string.Format("var CannedResponses = {0};", cannedResponsesJSArray);
startupScript += string.Format("InitCannedResponses({0}, {1});", ScriptHelper.GetString("#" + input.ClientID), ScriptHelper.GetString("#" + btnCannedResponses.ClientID));
}
}
return startupScript;
}
#endregion
}