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 }