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:
@@ -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
|
queXS 1.8.0 - Changes since 1.7.6
|
||||||
|
|
||||||
New Feature: Allow for restricting the view of sample variables to operators
|
New Feature: Allow for restricting the view of sample variables to operators
|
||||||
|
|||||||
@@ -91,6 +91,31 @@ function is_using_availability($case_id)
|
|||||||
return false;
|
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
|
* Return if VOIP is enabled on an operator by operator basis
|
||||||
* Will always return false if VOIP is globally disabled
|
* Will always return false if VOIP is globally disabled
|
||||||
|
|||||||
10
index.php
10
index.php
@@ -158,6 +158,7 @@ $sc = $db->GetOne($sql);
|
|||||||
$ca = get_call_attempt($operator_id,true);
|
$ca = get_call_attempt($operator_id,true);
|
||||||
$appointment = false;
|
$appointment = false;
|
||||||
$availability = is_using_availability($case_id);
|
$availability = is_using_availability($case_id);
|
||||||
|
$chat = operator_chat_enabled($operator_id);
|
||||||
if ($ca)
|
if ($ca)
|
||||||
{
|
{
|
||||||
if (is_on_appointment($ca))
|
if (is_on_appointment($ca))
|
||||||
@@ -271,6 +272,15 @@ xhtml_object($data,"main-content");
|
|||||||
</div>
|
</div>
|
||||||
<?php }?>
|
<?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) { ?>
|
<?php if (TAB_INFO) { ?>
|
||||||
<div class="tabbertab <?php if ((DEFAULT_TAB == 'info' && !$appointment) || (DEFAULT_TAB_APPOINTMENT == 'info' && $appointment))
|
<div class="tabbertab <?php if ((DEFAULT_TAB == 'info' && !$appointment) || (DEFAULT_TAB_APPOINTMENT == 'info' && $appointment))
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
/* Javascript for XMPP client based on: http://blog.wolfspelz.de/2010/09/website-chat-made-easy-with-xmpp-and.html */
|
/* 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)
|
function OnConnectionStatus(nStatus)
|
||||||
{
|
{
|
||||||
|
nConnStatus = nStatus;
|
||||||
|
|
||||||
if (nStatus == Strophe.Status.CONNECTING) {
|
if (nStatus == Strophe.Status.CONNECTING) {
|
||||||
} else if (nStatus == Strophe.Status.CONNFAIL) {
|
} else if (nStatus == Strophe.Status.CONNFAIL) {
|
||||||
} else if (nStatus == Strophe.Status.DISCONNECTING) {
|
} 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
|
//make sure the chat tab is in focus when an incoming messages appears
|
||||||
|
|
||||||
//display message as new row in message table
|
//display message as new row in message table if it is from the supervisor
|
||||||
var html = '<tr><td>' + SUPERVISOR_NAME + '</td><td>' + sBody + '</td></tr>';
|
if (sBareJid == SUPERVISOR_XMPP)
|
||||||
$('#chattable > tbody > tr').eq(0).after(html);
|
{
|
||||||
|
var html = '<tr><td>' + SUPERVISOR_NAME + '</td><td>' + sBody + '</td></tr>';
|
||||||
|
$('#chattable > tbody > tr').eq(0).after(html);
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -46,20 +53,61 @@ function OnPresenceStanza(stanza)
|
|||||||
var sShow = $(stanza).find('show').text();
|
var sShow = $(stanza).find('show').text();
|
||||||
//alert(sFrom + ':' + sType + ':' + sShow + ':' + sBareJid);
|
//alert(sFrom + ':' + sType + ':' + sShow + ':' + sBareJid);
|
||||||
|
|
||||||
// update status on screen
|
// update status on screen if it is the supervisors status
|
||||||
if (sType == null || sType == '') {
|
|
||||||
sType = 'available';
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (sType) {
|
if (sBareJid == SUPERVISOR_XMPP)
|
||||||
case 'available':
|
{
|
||||||
{
|
if (sType == null || sType == '') {
|
||||||
} break;
|
sType = 'available';
|
||||||
|
}
|
||||||
case 'unavailable':
|
|
||||||
{
|
switch (sType) {
|
||||||
} break;
|
case 'available':
|
||||||
|
{
|
||||||
|
$('#statusunavailable').hide();
|
||||||
|
$('#statusavailable').show();
|
||||||
|
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case 'unavailable':
|
||||||
|
{
|
||||||
|
$('#statusavailable').hide();
|
||||||
|
$('#statusunavailable').show();
|
||||||
|
} break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
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('');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|||||||
@@ -56,16 +56,41 @@ if (AUTO_LOGOUT_MINUTES !== false)
|
|||||||
xhtml_head(T_("Supervisor chat"),true,array("css/table.css"),$js);
|
xhtml_head(T_("Supervisor chat"),true,array("css/table.css"),$js);
|
||||||
|
|
||||||
$operator_id = get_operator_id();
|
$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
|
if ($chatenabled && operator_chat_enabled($operator_id))
|
||||||
print "<script type='text/javascript'>";
|
{
|
||||||
print "var SUPERVISOR_NAME = 'Adam';";
|
//get BOSH service URL
|
||||||
print "var conn = new Strophe.Connection('/xmpp-httpbind');";
|
$bosh_service = get_setting("bosh_service");
|
||||||
print "conn.connect('mim@surveys.acspri.org.au', 'mim', OnConnectionStatus);";
|
if (empty($bosh_service))
|
||||||
print "</script>";
|
$bosh_service = "/xmpp-httpbind";
|
||||||
|
|
||||||
//table for chat messages
|
//could set this on a shift by shift basis if required
|
||||||
print "<table class='tclass' id='chattable'><tbody><tr><th>" . T_("From") . "</th><th>" . T_("Message") . "</th></tr></tbody></table>";
|
$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();
|
xhtml_foot();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user