2
0
mirror of https://github.com/ACSPRI/queXS synced 2024-04-02 12:12:16 +00:00

Added database changes to changelog (need to update database/quexs.sql)

Added operator_chat_enabled function
Added sUpervisor chat tab to index
updated chat to be able to send and receive
This commit is contained in:
Adam Zammit
2013-07-16 16:34:36 +10:00
parent 69ba3fb690
commit 0554fd4b25
5 changed files with 139 additions and 23 deletions

View File

@@ -1,3 +1,11 @@
queXS 1.9.0 - Changes since 1.8.0
Database updates:
ALTER TABLE `operator` ADD `chat_enable` TINYINT( 1 ) NULL DEFAULT '0',
ADD `chat_user` VARCHAR( 255 ) NULL ,
ADD `chat_password` VARCHAR( 255 ) NULL ;
queXS 1.8.0 - Changes since 1.7.6
New Feature: Allow for restricting the view of sample variables to operators

View File

@@ -91,6 +91,31 @@ function is_using_availability($case_id)
return false;
}
/**
* Return if chat is enabled for this operator
*
* @param int $operator_id the operator id
*
* @return bool True if enabled, false if not
* @author Adam Zammit <adam.zammit@acspri.org.au>
* @since 2013-07-16
*/
function operator_chat_enabled($operator_id)
{
global $db;
$sql = "SELECT chat_enable
FROM `operator`
WHERE operator_id = '$operator_id'";
$c = $db->GetOne($sql);
if ($c == 1)
return true;
return false;
}
/**
* Return if VOIP is enabled on an operator by operator basis
* Will always return false if VOIP is globally disabled

View File

@@ -158,6 +158,7 @@ $sc = $db->GetOne($sql);
$ca = get_call_attempt($operator_id,true);
$appointment = false;
$availability = is_using_availability($case_id);
$chat = operator_chat_enabled($operator_id);
if ($ca)
{
if (is_on_appointment($ca))
@@ -271,6 +272,15 @@ xhtml_object($data,"main-content");
</div>
<?php }?>
<?php if ($chat) { ?>
<div class="tabbertab <?php if ((DEFAULT_TAB == 'chat' && !$appointment) || (DEFAULT_TAB_APPOINTMENT == 'chat' && $appointment))
print "tabbertabdefault"; ?>">
<h2><?php echo T_("Supervisor chat"); ?></h2>
<div id="div-supervisorchat" class="tabberdiv"><?php xhtml_object("supervisorchat.php","main-supervisorchat");?></div>
</div>
<?php }?>
<?php if (TAB_INFO) { ?>
<div class="tabbertab <?php if ((DEFAULT_TAB == 'info' && !$appointment) || (DEFAULT_TAB_APPOINTMENT == 'info' && $appointment))

View File

@@ -1,7 +1,11 @@
/* Javascript for XMPP client based on: http://blog.wolfspelz.de/2010/09/website-chat-made-easy-with-xmpp-and.html */
var nConnStatus = "";
function OnConnectionStatus(nStatus)
{
nConnStatus = nStatus;
if (nStatus == Strophe.Status.CONNECTING) {
} else if (nStatus == Strophe.Status.CONNFAIL) {
} else if (nStatus == Strophe.Status.DISCONNECTING) {
@@ -31,9 +35,12 @@ function OnMessageStanza(stanza)
//make sure the chat tab is in focus when an incoming messages appears
//display message as new row in message table
var html = '<tr><td>' + SUPERVISOR_NAME + '</td><td>' + sBody + '</td></tr>';
$('#chattable > tbody > tr').eq(0).after(html);
//display message as new row in message table if it is from the supervisor
if (sBareJid == SUPERVISOR_XMPP)
{
var html = '<tr><td>' + SUPERVISOR_NAME + '</td><td>' + sBody + '</td></tr>';
$('#chattable > tbody > tr').eq(0).after(html);
}
return true;
}
@@ -46,20 +53,61 @@ function OnPresenceStanza(stanza)
var sShow = $(stanza).find('show').text();
//alert(sFrom + ':' + sType + ':' + sShow + ':' + sBareJid);
// update status on screen
if (sType == null || sType == '') {
sType = 'available';
}
// update status on screen if it is the supervisors status
switch (sType) {
case 'available':
{
} break;
case 'unavailable':
{
} break;
if (sBareJid == SUPERVISOR_XMPP)
{
if (sType == null || sType == '') {
sType = 'available';
}
switch (sType) {
case 'available':
{
$('#statusunavailable').hide();
$('#statusavailable').show();
} break;
case 'unavailable':
{
$('#statusavailable').hide();
$('#statusunavailable').show();
} break;
}
}
return true;
}
function SendChat(chat)
{
if (chat != '')
{
if (nConnStatus == Strophe.Status.CONNECTED)
{
var stanza = $msg({ to: SUPERVISOR_XMPP, type: 'chat' }).c('body').t(chat);
conn.send(stanza.tree());
var html = '<tr><td>' + MY_NAME + '</td><td>' + chat + '</td></tr>';
$('#chattable > tbody > tr').eq(0).after(html);
}
}
}
$(document).ready(function(){
$('#chatclick').bind('click', function()
{
SendChat($('#chattext').val());
$('#chattext').val('');
});
$('#chattext').bind('keypress', function(ev)
{
if (ev.keyCode == 13) {
SendChat($('#chattext').val());
$('#chattext').val('');
}
});
});

View File

@@ -56,16 +56,41 @@ if (AUTO_LOGOUT_MINUTES !== false)
xhtml_head(T_("Supervisor chat"),true,array("css/table.css"),$js);
$operator_id = get_operator_id();
$chatenabled = get_setting("chat_enabled");
if (empty($chatenabled))
$chatenabled = false;
else
$chatenabled = true;
//javascript to activate connection for this user
print "<script type='text/javascript'>";
print "var SUPERVISOR_NAME = 'Adam';";
print "var conn = new Strophe.Connection('/xmpp-httpbind');";
print "conn.connect('mim@surveys.acspri.org.au', 'mim', OnConnectionStatus);";
print "</script>";
if ($chatenabled && operator_chat_enabled($operator_id))
{
//get BOSH service URL
$bosh_service = get_setting("bosh_service");
if (empty($bosh_service))
$bosh_service = "/xmpp-httpbind";
//table for chat messages
print "<table class='tclass' id='chattable'><tbody><tr><th>" . T_("From") . "</th><th>" . T_("Message") . "</th></tr></tbody></table>";
//could set this on a shift by shift basis if required
$supervisor_xmpp = get_setting("supervisor_xmpp");
//javascript to activate connection for this user
print "<script type='text/javascript'>";
print "var SUPERVISOR_NAME = '" . T_("Supervisor") . "';";
print "var MY_NAME = '" . T_("Me") . "';";
print "var SUPERVISOR_XMPP = '$supervisor_xmpp';";
print "var conn = new Strophe.Connection('$bosh_service');";
print "conn.connect('" . get_operator_variable("chat_user",$operator_id) ."', '" . get_operator_variable("chat_password",$operator_id) . "', OnConnectionStatus);";
print "</script>";
print "<div style='display:none' id='statusavailable'>" . T_("Supervisor is available") . "</div>";
print "<div id='statusunavailable'>" . T_("Supervisor not available") . "</div>";
print "<div id='chatbox'><input type='text' id='chattext'/> <div id='chatclick'>" . T_("Send") . "</div></div>";
//table for chat messages
print "<table class='tclass' id='chattable'><tbody><tr><th>" . T_("From") . "</th><th>" . T_("Message") . "</th></tr></tbody></table>";
}
else
print "<p>" . T_("Supervisor chat is not enabled") . "</p>";
xhtml_foot();