[Vtigercrm-commits] [vtiger-commits] r7919 - in /branches/VTIGERCRM-5.0.2-MMBRICH: include/js/objects/CommSystem.js schema/DatabaseSchema.xml
vtigercrm-commits at vtiger.fosslabs.com
vtigercrm-commits at vtiger.fosslabs.com
Sun Jul 9 22:56:32 EDT 2006
Author: mmbrich
Date: Sun Jul 9 20:56:31 2006
New Revision: 7919
Log:
merge with trunk
Modified:
branches/VTIGERCRM-5.0.2-MMBRICH/include/js/objects/CommSystem.js
branches/VTIGERCRM-5.0.2-MMBRICH/schema/DatabaseSchema.xml
Modified: branches/VTIGERCRM-5.0.2-MMBRICH/include/js/objects/CommSystem.js
==============================================================================
--- branches/VTIGERCRM-5.0.2-MMBRICH/include/js/objects/CommSystem.js (original)
+++ branches/VTIGERCRM-5.0.2-MMBRICH/include/js/objects/CommSystem.js Sun Jul 9 20:56:31 2006
@@ -15,7 +15,6 @@
this.refreshtime = '1000';
this.username = VtUser.user_name;
this.sliderElement = element;
- this.CheckSession();
this.sliderOpen = "false";
this.timer;
this.keycount=0;
@@ -26,6 +25,7 @@
this.ChattingWith=chatWith;
this.SendValue=sendValue;
this.reloadMsg="This is reloaded content:";
+ this.CheckSession();
},
/*
@@ -56,6 +56,12 @@
}
},
+ /*
+ * internal function. Please increase the number
+ * of times this function returns true if you call it
+ * more than it already is (ie: each time it's called in the first
+ * loop should return true)
+ */
IsPageReload: function() {
if(typeof(globalCommSystem.tmpCount) == "undefined") {
globalCommSystem.tmpCount++;
@@ -510,3 +516,516 @@
globalCommSystem.timer = window.setTimeout('globalCommSystem.CommUpdate()',globalCommSystem.refreshtime);
}
}
+=======
+/******************************************
+ * The contents of this file are subject to the vtiger CRM Public License Version 1.0
+ * ("License"); You may not use this file except in compliance with the License
+ * The Original Code is: vtiger CRM Open Source
+ * The Initial Developer of the Original Code is FOSS Labs.
+ * Portions created by FOSS Labs are Copyright (C) FOSS Lbas.
+ * All Rights Reserved.
+ *
+ *****************************************/
+CommSystem = Class.create();
+
+CommSystem.prototype = {
+ initialize: function(element,CurrentUser,chatWith,sendValue) {
+ this.debug=true;
+ this.refreshtime = '1000';
+ this.username = VtUser.user_name;
+ this.sliderElement = element;
+ this.CheckSession();
+ this.sliderOpen = "false";
+ this.timer;
+ this.keycount=0;
+ this.keytimer;
+ this.user=CurrentUser;
+ this.tmpCount=0;
+ this.Focused='true';
+ this.ChattingWith=chatWith;
+ this.SendValue=sendValue;
+ this.reloadMsg="This is reloaded content:";
+ },
+
+ /*
+ * Update function to fire @ refreshtime
+ * Calls the HandleEvent function which
+ * will react on the JSON data passed to it.
+ */
+ CommUpdate: function() {
+ globalCommSystem = this;
+ if(globalCommSystem.Focused == 'false') {
+ window.clearTimeout(globalCommSystem.timer);
+ globalCommSystem.timer = window.setTimeout('globalCommSystem.CommUpdate()',globalCommSystem.refreshtime);
+ } else {
+ window.clearTimeout(globalCommSystem.timer);
+ var first = globalCommSystem.IsPageReload();
+ new Ajax.Request(
+ 'index.php',
+ {queue: {position: 'end', scope: 'commsys'},
+ method: 'post',
+ postBody: 'module=CommSystem&action=CommSystemAjax&command=getPeriodicalInfo&first_load='+first,
+ onComplete: globalCommSystem.HandleEvent,
+ onFailure: function() {
+ alert("Failed");
+ window.clearTimeout(globalCommSystem.timer);
+ }
+ }
+ );
+ }
+ },
+
+ IsPageReload: function() {
+ if(typeof(globalCommSystem.tmpCount) == "undefined") {
+ globalCommSystem.tmpCount++;
+ var answer = 'true';
+ } else if(globalCommSystem.tmpCount < 1) {
+ globalCommSystem.tmpCount++;
+ var answer = 'true';
+ } else
+ var answer = 'false';
+
+ return answer;
+ },
+
+ /*
+ * Function to open slider for comm center.
+ * First the function tries to open the slider by
+ * using an Effect(), if that fails it uses a css
+ * class value to change the appearance
+ */
+ OpenSlider: function() {
+ globalCommSystem = this;
+ if(this.sliderOpen == "false") {
+ Try.these (
+ function() {
+ $(globalCommSystem.sliderElement).className = "commSliderOpen";
+ },
+ function() {
+ $(globalCommSystem.sliderElement).style.width = '180px';
+ },
+ function() {
+ new Effect.Appear($(globalCommSystem.sliderElement),{duration:'0.2'});
+ }
+ );
+ this.sliderOpen = "true";
+ } else {
+ Try.these (
+ function() {
+ $(globalCommSystem.sliderElement).className = "commSlider";
+ },
+ function() {
+ new Effect.Fade($(globalCommSystem.sliderElement),{duration:'0.2'});
+ },
+ function() {
+ $(globalCommSystem.sliderElement).style.width = '0px';
+ }
+ );
+ this.sliderOpen = "false";
+ }
+ },
+
+ /*
+ * Function to check past sessions and load elements
+ * that were open when window was reloaded, etc.
+ * Creates elements and populates with past info
+ */
+ CheckSession: function() {
+ this.Focused='true';
+ Event.observe(document, 'focus', this.OnFocusEvent.bindAsEventListener(this));
+ Event.observe(document, 'blur', this.OnFocusEvent.bindAsEventListener(this));
+ window.clearTimeout(this.timer);
+ this.CommUpdate();
+ },
+
+ /*
+ * Called when this window is focused or un-focused
+ */
+ OnFocusEvent: function(evt) {
+ if(evt.type == "focus")
+ this.Focused='true';
+ else if(evt.type == "blur") {
+ window.focus();
+ this.Focused='false';
+ }
+ },
+
+ /*
+ * Send a "User is typing" or "Done typing" message
+ */
+ SendStatusMessage: function(period,users) {
+ new Ajax.Request(
+ 'index.php',
+ {queue: {position: 'end', scope: 'commsys'},
+ method: 'post',
+ postBody: 'module=CommSystem&action=CommSystemAjax&command=sendStatusMessage&receivers='+users+'&period='+period,
+ onComplete: function(response) {
+ //alert(response.responseText);
+ }
+ }
+ );
+ },
+
+ /*
+ * Function to send an instant message to another
+ * user and update the chat window element with
+ * message text.
+ */
+ SendChatMessage: function(otheruser,msg) {
+ if(msg == "") {return;}
+ var myDate=new Date();
+ msgStruct = {
+ sending_user: otheruser,
+ msg_data: msg,
+ msg_type: 'P2PIM',
+ user_name: globalCommSystem.user.user_name,
+ timestamp: myDate.getHours()+":"+myDate.getMinutes()+":"+myDate.getSeconds()
+ }
+ globalCommSystem = this;
+ new Ajax.Request(
+ 'index.php',
+ {queue: {position: 'end', scope: 'commsys'},
+ method: 'post',
+ postBody: 'module=CommSystem&action=CommSystemAjax&command=sendChatMessage&receivers='+otheruser+'&msg='+msg.stripTags()+'&msg_type=P2PIM',
+ onComplete: function(response) {
+ if(response.responseText != "failed") {
+ globalCommSystem.ShowNewChatMessage(msgStruct,"");
+ } else {
+ Object.extend(msgStruct, {msg_data:'<font color="red">Failed to deliver message</font>: '+msgStruct.msg_data});
+ globalCommSystem.ShowNewChatMessage(msgStruct,"");
+ }
+ }
+ }
+ );
+ },
+
+ /*
+ * Called prior to SendChatMessage so that proper variables
+ * can be populated
+ */
+ SendMsg: function(evt) {
+ try {
+ globalCommSystem.UserStopTyping(Event.element(evt).name);
+ var dat = $("msg_input_"+Event.element(evt).name);
+ globalCommSystem.SendChatMessage(Event.element(evt).name,dat.value);
+ }catch(p){alert(p);}
+ dat.value = "";
+ },
+
+ OpenChatSession: function(receivers,usr_name) {
+ var myDate=new Date();
+ msgStruct = {
+ sending_user: receivers,
+ msg_data: '',
+ msg_type: 'P2PIM',
+ user_name: usr_name,
+ timestamp: myDate.getHours()+":"+myDate.getMinutes()+":"+myDate.getSeconds()
+ }
+ this.ShowNewChatMessage(msgStruct, this.ChattingWith+" "+usr_name);
+ },
+
+ /*
+ * Open a new chat window for a fresh session
+ * or open a past window that was closed during
+ * this session
+ */
+ ShowNewChatMessage: function(msg,header_msg) {
+ Try.these (
+ /* Try to open a window from past messaging with this user */
+ function() {
+ new Effect.Appear("msgwindow_"+msg.sending_user,{duration:'0.2'});
+ if(msg.user_name == "" || typeof(msg.user_name) == "undefined" || msg.user_name == globalCommSystem.user.user_name) {
+ msg.msg_data = "<BR><font color='blue'>"+globalCommSystem.user.user_name+"</font> ("+msg.timestamp+"): "+msg.msg_data;
+ } else if(msg.user_name != globalCommSystem.user.user_name && msg.msg_data != "") {
+ msg.msg_data = "<br><font color='red'>"+msg.user_name+"</font> ("+msg.timestamp+"): "+msg.msg_data;
+ } else if(msg.msg_data != "")
+ msg.msg_data = "<br>"+msg.msg_data;
+
+ $("chat_data_"+msg.sending_user).innerHTML += msg.msg_data;
+ globalCommSystem.ScrollChatWindow($("chat_data_"+msg.sending_user));
+ },
+ /* Build a new chat window */
+ function() {
+ if(msg.msg_type == "P2PIM")
+ var clsname = "chatWindow";
+ else if(msg.msg_type == "GRPCHAT")
+ var clsname = "grpChatWindow";
+
+ var main_table = Builder.node(
+ 'table',
+ {
+ name:msg.sending_user,cellpadding:'2',cellspacing:'0',border:'0',
+ className:clsname,id:'msgwindow_'+msg.sending_user
+ }
+ );
+ var top_bar = Builder.node(
+ 'tr',
+ {
+ align:'center',width:'100%',valign:'top'
+ },
+ [ Builder.node(
+ 'td',
+ [ Builder.node(
+ 'span',
+ {
+ className:'chatWindowHeaderLeft'
+ },
+ header_msg+" "
+ )],
+ [ Builder.node(
+ 'span',
+ {
+ className:'chatWindowHeaderRight'
+ },
+ [ Builder.node(
+ 'img',
+ {src:'themes/blue/images/close.gif',
+ onClick: 'globalCommSystem.CloseSession(\''+msg.sending_user+'\')'
+ }
+ )]
+ )]
+ )]
+ );
+ main_table.appendChild(top_bar);
+
+ Try.these (
+ function() {
+ if(msg.user_name != globalCommSystem.user.user_name) {return false;}
+ msg.msg_data = "<BR><font color='red'>"+msg.user_name+"</font> ("+msg.timestamp+"): "+msg.msg_data;
+ },
+ function() {
+ msg.msg_data += "<BR>";
+ }
+ );
+
+ var chat_data = Builder.node(
+ 'tr',
+ {
+ valign:'top',align:'center',id:'chatd_row_'+msg.sending_user
+ },
+ [ Builder.node(
+ 'td',
+ {
+ width:'100%',height:'100%',colspan:'2'
+ },
+ [ Builder.node(
+ 'div', {id:'chat_data_'+msg.sending_user,className:'chatWindowDataArea',name:msg.sending_user}
+ )]
+ )]
+ );
+ main_table.appendChild(chat_data);
+
+ var msg_input = Builder.node(
+ 'tr',
+ {valign:'top',align:'center',id:'bchat_row_'+msg.sending_user},
+ [ Builder.node(
+ 'td',
+ [ Builder.node(
+ 'div', {id:'msg_wrapper_'+msg.sending_user},
+ [ Builder.node(
+ 'textarea', {id:'msg_input_'+msg.sending_user,name:msg.sending_user}
+ )]
+ )],
+ [ Builder.node(
+ 'p',{id:'status_bar_'+msg.sending_user}
+ )],
+ {width:'100%',colspan:'2'}
+ )]
+ );
+ main_table.appendChild(msg_input);
+
+ main_table.style.display = "none";
+ $("comm_sys").appendChild(main_table);
+
+ if(globalCommSystem.IsPageReload() != 'true' && msg.sending_user != globalCommSystem.user.user_name && msg.msg_data != "") {
+ $("chat_data_"+msg.sending_user).innerHTML = "<font color='red'>"+msg.user_name+"</font> ("+msg.timestamp+"): "+msg.msg_data;
+ } else if(msg.msg_data != "") {
+ $("chat_data_"+msg.sending_user).innerHTML = "<font color='red'>"+globalCommSystem.reloadMsg+"<BR>"+msg.user_name+"</font> ("+msg.timestamp+"): "+msg.msg_data;
+ }
+
+ try {
+ $("msg_wrapper_"+msg.sending_user).innerHTML += '<input type="submit" class="button" value="'+globalCommSystem.SendValue+'" id="send_button_'+msg.sending_user+'" name="'+msg.sending_user+'">';
+ Event.observe($("msg_input_"+msg.sending_user), 'keypress', globalCommSystem.UserTyping.bindAsEventListener(this));
+ Event.observe($("send_button_"+msg.sending_user), 'click', globalCommSystem.SendMsg.bindAsEventListener(this));
+ }catch(g){alert(g);}
+
+ new Effect.Appear(main_table,{duration:'0.2'});
+ new Draggable(main_table);
+ }
+ );
+ },
+
+ /*
+ * call this function with any old message
+ * to have it appear in the alert slider
+ */
+ ShowAlertSlider: function(msg) {
+ $("alert_display").innerHTML = "<b><a href='index.php?module=Webmails&action=index'>"+msg+"</a></b>";
+ $("alert_display").style.display = "block";
+
+ new Effect.Highlight("alert_display",{startcolor:'#ff99ff',endcolor:'#999999',
+ queue: {position: 'end', scope: 'commsys'},
+ afterFinish:function() {
+ new Effect.Highlight("alert_display",{
+ startcolor:'#ff99ff',endcolor:'#999999',
+ queue: {position: 'end', scope: 'commsys'}
+ }
+ )
+ }
+ }
+ );
+ window.setTimeout(function() {
+ globalCommSystem.HideAlertSlider();
+ },4500);
+ },
+
+ /*
+ * Hide the alert slider
+ */
+ HideAlertSlider: function() {
+ new Effect.Squish($("alert_display"), {
+ queue: {position: 'end', scope: 'commsys'},
+ afterFinish: function() {
+ $("alert_display").innerHTML = "";
+ }
+ }
+ );
+ },
+
+ CloseSession: function(sending_user) {
+ new Effect.Fade($("msgwindow_"+sending_user),{duration:'0.2'});
+ new Ajax.Request(
+ 'index.php',
+ {queue: {position: 'end', scope: 'commsys'},
+ method: 'post',
+ postBody: 'module=CommSystem&action=CommSystemAjax&command=closeSession&sending_user='+sending_user
+ }
+ );
+ },
+
+ /*
+ * Call this any time you suspect the chat window
+ * content has changed. Can either be called with
+ * the prototype event listener or with the actual
+ * element passed to this function
+ */
+ ScrollChatWindow: function(evt) {
+ //$("debug_win").innerHTML += "<br>Scrolling";
+ Try.these (
+ function() {
+ var tname = "chat_data_"+Event.element(evt).name;
+ $(tname).scrollTop = $(tname).scrollHeight;
+ },
+ function() {
+ evt.scrollTop = evt.scrollHeight;
+ }
+ );
+ },
+
+ /*
+ * called from event listeners. This will send a user typing
+ * status message to the other user
+ */
+ UserTyping: function(evt) {
+ var tname = "status_bar_"+Event.element(evt).name;
+ if(evt.type === "keypress") {
+ window.clearTimeout(globalCommSystem.keytimer);
+ if(globalCommSystem.keycount == 0) {
+ globalCommSystem.SendStatusMessage('begin',Event.element(evt).name);
+ globalCommSystem.keycount++;
+ }
+ globalCommSystem.keytimer = window.setTimeout('globalCommSystem.UserStopTyping("'+Event.element(evt).name+'")',1000);
+ }
+ },
+
+ /*
+ * stop your last UserTyping() message
+ */
+ UserStopTyping: function(sending_user) {
+ window.clearTimeout(globalCommSystem.keytimer);
+ globalCommSystem.keycount=0;
+ globalCommSystem.SendStatusMessage('end',sending_user);
+ },
+
+ /*
+ * Call this function (n) seconds after your message
+ * was first opened. This is for session tracking.
+ * If this function isn't called after a message is
+ * displayed it will appear again the next time the
+ * receiving user opens a CRM window of any kind.
+ */
+ MarkAsRead: function(msgid) {
+ new Ajax.Request(
+ 'index.php',
+ {queue: {position: 'end', scope: 'commsys'},
+ method: 'post',
+ postBody: 'module=CommSystem&action=CommSystemAjax&command=markAsRead&msgid='+msgid
+ }
+ );
+ },
+
+ /*
+ * function to parse JSON msg data
+ * and act on alerts or messages
+ * for alerts the system will open a small slider
+ * on the screen to alert the user
+ * for messages (IMs) a window object will be built for the message.
+ */
+ HandleEvent: function(responseData) {
+ //$("debug_win").innerHTML += "<BR>"+responseData.responseText;
+ try {
+ if(!responseData.responseText.match(/none/)) {
+ var msgs = eval('(' + responseData.responseText + ')');
+ for (var i=0;i<msgs.CommSysMessages.length;i++) {
+ try {
+ var msg = msgs.CommSysMessages[i].message;
+ var msgid = msg.msgid;
+ var msg_type = msg.msg_type;
+ if(msg.sending_user == globalCommSystem.user.user_id) {return;}
+ switch(msg_type) {
+ case 'P2PIM':
+ window.setTimeout('globalCommSystem.MarkAsRead("'+msgid+'")',3000);
+ globalCommSystem.ShowNewChatMessage(msg,globalCommSystem.ChattingWith+" "+msg.user_name);
+ break;
+ case 'GRPIM':
+ window.setTimeout('globalCommSystem.MarkAsRead("'+msgid+'")',3000);
+ alert(msgs.CommSysMessages[i].message.msg_data);
+ break;
+ case 'EMAIL':
+ window.setTimeout('globalCommSystem.MarkAsRead("'+msgid+'")',3000);
+ globalCommSystem.ShowAlertSlider("<b>New Email:</b><br> "+msgs.CommSysMessages[i].message.recordid);
+ break;
+ case 'INPHONE':
+ window.setTimeout('globalCommSystem.MarkAsRead("'+msgid+'")',3000);
+ globalCommSystem.ShowAlertSlider("<b>Incoming Call:</b><br> "+msgs.CommSysMessages[i].message.msg_data);
+ break;
+ case 'VOICEMAIL':
+ window.setTimeout('globalCommSystem.MarkAsRead("'+msgid+'")',3000);
+ globalCommSystem.ShowAlertSlider("<b>New Voicemial:</b><br> "+msgs.CommSysMessages[i].message.msg_data);
+ break;
+ case 'GENERAL':
+ window.setTimeout('globalCommSystem.MarkAsRead("'+msgid+'")',3000);
+ globalCommSystem.ShowAlertSlider("<b>New Voicemial:</b><br> "+msgs.CommSysMessages[i].message.msg_data);
+ break;
+ case 'STATUS':
+ $("status_bar_"+msg.sending_user).innerHTML = msg.msg_data;
+ window.setTimeout('globalCommSystem.MarkAsRead("'+msgid+'")',3000);
+ break;
+ }
+ }catch(h){}
+ Try.these (
+ function() {
+ if(msgs.CommSysMessages[i].email.unseen_emails > 0)
+ globalCommSystem.ShowAlertSlider("You have "+msgs.CommSysMessages[i].email.unseen_emails+" new emails");
+ },
+ function() {
+ if(msgs.CommSysMessages[(i+1)].email.unseen_emails > 0)
+ globalCommSystem.ShowAlertSlider("You have "+msgs.CommSysMessages[i].email.unseen_emails+" new emails");
+ }
+ );
+ }
+ }
+ }catch(f){}
+ globalCommSystem.timer = window.setTimeout('globalCommSystem.CommUpdate()',globalCommSystem.refreshtime);
+ }
+}
Modified: branches/VTIGERCRM-5.0.2-MMBRICH/schema/DatabaseSchema.xml
==============================================================================
--- branches/VTIGERCRM-5.0.2-MMBRICH/schema/DatabaseSchema.xml (original)
+++ branches/VTIGERCRM-5.0.2-MMBRICH/schema/DatabaseSchema.xml Sun Jul 9 20:56:31 2006
@@ -6127,4 +6127,4 @@
<opt platform="mysql">Type=InnoDB</opt>
</table>
-</schema>
+</schema>
More information about the vtigercrm-commits
mailing list