Operator Panel: Optimizations, bug fixes, better auto-complete searching.

This commit is contained in:
Nate Jones 2015-04-08 08:54:10 +00:00
parent f1b1c48e3b
commit 59bd481b6c
3 changed files with 73 additions and 48 deletions

View File

@ -35,6 +35,17 @@ else {
//search term //search term
$term = check_str($_GET['term']); $term = check_str($_GET['term']);
if (isset($_GET['debug'])) {
echo "Search Term: ".$term."<br><br>";
}
//if term contains spaces, break into array
if (substr_count($term, ' ') > 0) {
$terms = explode(' ', $term);
}
else {
$terms[] = $term;
}
//add multi-lingual support //add multi-lingual support
$language = new text; $language = new text;
@ -55,14 +66,19 @@ else {
$sql .= "from "; $sql .= "from ";
$sql .= "v_extensions e "; $sql .= "v_extensions e ";
$sql .= "where "; $sql .= "where ";
$sql .= "( "; foreach ($terms as $index => $term) {
$sql .= " lower(e.effective_caller_id_name) like lower('%".$term."%') or "; $sql .= "( ";
$sql .= " lower(e.outbound_caller_id_name) like lower('%".$term."%') or "; $sql .= " lower(e.effective_caller_id_name) like lower('%".$term."%') or ";
$sql .= " lower(e.directory_full_name) like lower('%".$term."%') or "; $sql .= " lower(e.outbound_caller_id_name) like lower('%".$term."%') or ";
$sql .= " lower(e.description) like lower('%".$term."%') or "; $sql .= " lower(e.directory_full_name) like lower('%".$term."%') or ";
$sql .= " lower(e.call_group) like lower('%".$term."%') or "; $sql .= " lower(e.description) like lower('%".$term."%') or ";
$sql .= " e.extension like '%".$term."%' "; $sql .= " lower(e.call_group) like lower('%".$term."%') or ";
$sql .= ") "; $sql .= " e.extension like '%".$term."%' ";
$sql .= ") ";
if ($index + 1 < sizeof($terms)) {
$sql .= " and ";
}
}
$sql .= "and e.domain_uuid = '".$_SESSION['domain_uuid']."' "; $sql .= "and e.domain_uuid = '".$_SESSION['domain_uuid']."' ";
$sql .= "and e.enabled = 'true' "; $sql .= "and e.enabled = 'true' ";
$sql .= "order by "; $sql .= "order by ";
@ -99,14 +115,19 @@ else {
$sql .= "v_contacts as c, "; $sql .= "v_contacts as c, ";
$sql .= "v_contact_phones as p "; $sql .= "v_contact_phones as p ";
$sql .= "where "; $sql .= "where ";
$sql .= "( "; foreach ($terms as $index => $term) {
$sql .= " lower(c.contact_organization) like lower('%".$term."%') or "; $sql .= "( ";
$sql .= " lower(c.contact_name_given) like lower('%".$term."%') or "; $sql .= " lower(c.contact_organization) like lower('%".$term."%') or ";
$sql .= " lower(c.contact_name_middle) like lower('%".$term."%') or "; $sql .= " lower(c.contact_name_given) like lower('%".$term."%') or ";
$sql .= " lower(c.contact_name_family) like lower('%".$term."%') or "; $sql .= " lower(c.contact_name_middle) like lower('%".$term."%') or ";
$sql .= " lower(c.contact_nickname) like lower('%".$term."%') or "; $sql .= " lower(c.contact_name_family) like lower('%".$term."%') or ";
$sql .= " p.phone_number like '%".$term."%' "; $sql .= " lower(c.contact_nickname) like lower('%".$term."%') or ";
$sql .= ") "; $sql .= " p.phone_number like '%".$term."%' ";
$sql .= ") ";
if ($index + 1 < sizeof($terms)) {
$sql .= " and ";
}
}
$sql .= "and c.contact_uuid = p.contact_uuid "; $sql .= "and c.contact_uuid = p.contact_uuid ";
$sql .= "and c.domain_uuid = '".$_SESSION['domain_uuid']."' "; $sql .= "and c.domain_uuid = '".$_SESSION['domain_uuid']."' ";
if (sizeof($user_group_uuids) > 0) { if (sizeof($user_group_uuids) > 0) {

View File

@ -67,6 +67,7 @@ else {
exit; exit;
} }
$document['title'] = $text['title-operator_panel'];
require_once "resources/header.php"; require_once "resources/header.php";
?> ?>
@ -79,8 +80,9 @@ require_once "resources/header.php";
<link rel="stylesheet" type="text/css" href="<?php echo PROJECT_PATH; ?>/resources/jquery/jquery-ui.css"> <link rel="stylesheet" type="text/css" href="<?php echo PROJECT_PATH; ?>/resources/jquery/jquery-ui.css">
<script language="JavaScript" type="text/javascript" src="<?php echo PROJECT_PATH; ?>/resources/jquery/jquery-ui-1.9.2.min.js"></script> <script language="JavaScript" type="text/javascript" src="<?php echo PROJECT_PATH; ?>/resources/jquery/jquery-ui-1.9.2.min.js"></script>
<script type="text/javascript"> <script type="text/javascript">
//ajax refresh //ajax refresh
var refresh = 1950; var refresh = 1500;
var source_url = 'index_inc.php?' <?php if (isset($_GET['debug'])) { echo " + '&debug'"; } ?>; var source_url = 'index_inc.php?' <?php if (isset($_GET['debug'])) { echo " + '&debug'"; } ?>;
var interval_timer_id; var interval_timer_id;
@ -230,16 +232,11 @@ require_once "resources/header.php";
} }
if (cmd != '') { if (cmd != '') {
send_cmd('exec.php?cmd='+escape(cmd)); send_cmd('exec.php?cmd='+escape(cmd));
$('#destination_'+from_ext+'_'+which).autocomplete("destroy");
$('#destination_'+from_ext+'_'+which).removeAttr('onblur'); $('#destination_'+from_ext+'_'+which).removeAttr('onblur');
toggle_destination(from_ext, which); toggle_destination(from_ext, which);
refresh_start();
} }
} }
} }
else {
toggle_destination(from_ext, which);
}
} }
//kill call //kill call
@ -288,16 +285,16 @@ require_once "resources/header.php";
refresh_stop(); refresh_stop();
if (which == 'call') { if (which == 'call') {
if ($('#destination_'+ext+'_call').is(':visible')) { if ($('#destination_'+ext+'_call').is(':visible')) {
$('#destination_'+ext+'_call').fadeOut(200, function() { $('#destination_'+ext+'_call').val('');
$('#destination_'+ext+'_call').val(''); $('#destination_'+ext+'_call').autocomplete('destroy');
$('#destination_'+ext+'_call').autocomplete('destroy'); $('#destination_'+ext+'_call').hide(0, function() {
$('#destination_control_'+ext+'_call').prop('disabled', false); $('.call_control').children().attr('onmouseout', "refresh_start();");
$('.destination_control').attr('onmouseout', "refresh_start();");
refresh_start(); refresh_start();
}); });
} }
else { else {
$('#destination_control_'+ext+'_call').prop('disabled', true); $('#destination_'+ext+'_call').show(0, function() {
$('#destination_'+ext+'_call').fadeIn(200, function() {
$('#destination_'+ext+'_call').focus(); $('#destination_'+ext+'_call').focus();
$('#destination_'+ext+'_call').autocomplete({ $('#destination_'+ext+'_call').autocomplete({
source: "autocomplete.php", source: "autocomplete.php",
@ -307,31 +304,36 @@ require_once "resources/header.php";
$('#frm_destination_'+ext+'_call').submit(); $('#frm_destination_'+ext+'_call').submit();
} }
}); });
$('.call_control').children().removeAttr('onmouseout');
$('.destination_control').removeAttr('onmouseout');
}); });
} }
} }
else if (which == 'transfer') { else if (which == 'transfer') {
if ($('#destination_'+ext+'_transfer').is(':visible')) { if ($('#destination_'+ext+'_transfer').is(':visible')) {
$('#destination_'+ext+'_transfer').fadeOut(200, function() { $('#destination_'+ext+'_transfer').val('');
$('#destination_'+ext+'_transfer').autocomplete('destroy');
$('#destination_'+ext+'_transfer').hide(0, function() {
$('#op_caller_details_'+ext).show(); $('#op_caller_details_'+ext).show();
$('#destination_'+ext+'_transfer').val(''); $('.call_control').children().attr('onmouseout', "refresh_start();");
$('#destination_'+ext+'_transfer').autocomplete('destroy'); $('.destination_control').attr('onmouseout', "refresh_start();");
$('#destination_control_'+ext+'_transfer').prop('disabled', false);
refresh_start(); refresh_start();
}); });
} }
else { else {
$('#op_caller_details_'+ext).hide(); $('#op_caller_details_'+ext).hide(0, function() {
$('#destination_'+ext+'_transfer').fadeIn(200, function() { $('#destination_'+ext+'_transfer').show(0, function() {
$('#destination_control_'+ext+'_transfer').prop('disabled', true); $('#destination_'+ext+'_transfer').focus();
$('#destination_'+ext+'_transfer').focus(); $('#destination_'+ext+'_transfer').autocomplete({
$('#destination_'+ext+'_transfer').autocomplete({ source: "autocomplete.php",
source: "autocomplete.php", minLength: 3,
minLength: 3, select: function(event, ui) {
select: function(event, ui) { $('#destination_'+ext+'_transfer').val(ui.item.value);
$('#destination_'+ext+'_transfer').val(ui.item.value); $('#frm_destination_'+ext+'_transfer').submit();
$('#frm_destination_'+ext+'_transfer').submit(); }
} });
$('.call_control').children().removeAttr('onmouseout');
$('.destination_control').removeAttr('onmouseout');
}); });
}); });
} }

View File

@ -101,8 +101,8 @@ if (permission_exists('operator_panel_eavesdrop')) {
echo " <td valign='top' nowrap='nowrap'>"; echo " <td valign='top' nowrap='nowrap'>";
if (sizeof($_SESSION['user']['extensions']) > 1) { if (sizeof($_SESSION['user']['extensions']) > 1) {
echo " <input type='hidden' id='eavesdrop_dest' value=\"".(($_REQUEST['eavesdrop_dest'] == '') ? $_SESSION['user']['extensions'][0] : $_REQUEST['eavesdrop_dest'])."\">"; echo " <input type='hidden' id='eavesdrop_dest' value=\"".(($_REQUEST['eavesdrop_dest'] == '') ? $_SESSION['user']['extensions'][0] : $_REQUEST['eavesdrop_dest'])."\">";
echo " <img src='resources/images/eavesdrop.png' style='width: 12px; height: 12px; border: none; margin: 0px 5px; cursor: help;' title='".$text['description-eavesdrop_destination']."' align='absmiddle' ".$onhover_pause_refresh.">"; echo " <img src='resources/images/eavesdrop.png' style='width: 12px; height: 12px; border: none; margin: 0px 5px; cursor: help;' title='".$text['description-eavesdrop_destination']."' align='absmiddle'>";
echo " <select class='formfld' style='margin-right: 5px;' align='absmiddle' onchange=\"document.getElementById('eavesdrop_dest').value = this.options[this.selectedIndex].value; refresh_start();\" onfocus='refresh_stop();' xonblur='refresh_start();'>\n"; echo " <select class='formfld' style='margin-right: 5px;' align='absmiddle' onchange=\"document.getElementById('eavesdrop_dest').value = this.options[this.selectedIndex].value; refresh_start();\" onfocus='refresh_stop();'>\n";
foreach ($_SESSION['user']['extensions'] as $user_extension) { foreach ($_SESSION['user']['extensions'] as $user_extension) {
echo " <option value='".$user_extension."' ".(($_REQUEST['eavesdrop_dest'] == $user_extension) ? "selected" : null).">".$user_extension."</option>\n"; echo " <option value='".$user_extension."' ".(($_REQUEST['eavesdrop_dest'] == $user_extension) ? "selected" : null).">".$user_extension."</option>\n";
} }
@ -131,7 +131,7 @@ if (sizeof($groups) > 0) {
//show buttons //show buttons
echo " <input type='button' class='btn' title=\"".$text['label-call_group']."\" value=\"".$text['button-all']."\" onclick=\"document.getElementById('group').value = '';\" ".$onhover_pause_refresh.">"; echo " <input type='button' class='btn' title=\"".$text['label-call_group']."\" value=\"".$text['button-all']."\" onclick=\"document.getElementById('group').value = '';\" ".$onhover_pause_refresh.">";
foreach ($groups as $group) { foreach ($groups as $group) {
echo " <input type='button' class='btn' title=\"".$text['label-call_group']."\" value=\"".$group."\" ".(($_REQUEST['group'] == $group) ? "disabled='disabled'" : null)." onclick=\"document.getElementById('group').value = this.value;\">"; echo " <input type='button' class='btn' title=\"".$text['label-call_group']."\" value=\"".$group."\" ".(($_REQUEST['group'] == $group) ? "disabled='disabled'" : null)." onclick=\"document.getElementById('group').value = this.value;\" ".$onhover_pause_refresh.">";
} }
} }
echo " </td>"; echo " </td>";
@ -314,6 +314,7 @@ foreach ($activity as $extension => $ext) {
$block .= " <span class='op_caller_info'>"; $block .= " <span class='op_caller_info'>";
$block .= " <table align='right'><tr><td style='text-align: right;'>"; $block .= " <table align='right'><tr><td style='text-align: right;'>";
$block .= " <span class='op_call_info'>".$ext['call_length']."</span><br>"; $block .= " <span class='op_call_info'>".$ext['call_length']."</span><br>";
$block .= " <span class='call_control'>";
//record //record
if (permission_exists('operator_panel_record') && $ext_state == 'active') { if (permission_exists('operator_panel_record') && $ext_state == 'active') {
$call_identifier_record = $ext['call_uuid']; $call_identifier_record = $ext['call_uuid'];
@ -342,9 +343,10 @@ foreach ($activity as $extension => $ext) {
} }
$block .= "<img src='resources/images/kill.png' style='width: 12px; height: 12px; border: none; margin: 4px 0px 0px 5px; cursor: pointer;' title='".$text['label-kill']."' onclick=\"kill_call('".$call_identifier_kill."');\" ".$onhover_pause_refresh.">"; $block .= "<img src='resources/images/kill.png' style='width: 12px; height: 12px; border: none; margin: 4px 0px 0px 5px; cursor: pointer;' title='".$text['label-kill']."' onclick=\"kill_call('".$call_identifier_kill."');\" ".$onhover_pause_refresh.">";
} }
$block .= "</span>";
//transfer //transfer
if (in_array($extension, $_SESSION['user']['extensions']) && $ext_state == 'active') { if (in_array($extension, $_SESSION['user']['extensions']) && $ext_state == 'active') {
$block .= "<img id='destination_control_".$extension."_transfer' src='resources/images/keypad_transfer.png' style='width: 12px; height: 12px; border: none; margin: 4px 0px 0px 5px; cursor: pointer;' onclick=\"toggle_destination('".$extension."', 'transfer');\">"; $block .= "<img id='destination_control_".$extension."_transfer' class='destination_control' src='resources/images/keypad_transfer.png' style='width: 12px; height: 12px; border: none; margin: 4px 0px 0px 5px; cursor: pointer;' onclick=\"toggle_destination('".$extension."', 'transfer');\" ".$onhover_pause_refresh.">";
} }
$block .= " </td></tr></table>"; $block .= " </td></tr></table>";
$block .= " <span id='op_caller_details_".$extension."'><strong>".$call_name."</strong><br>".$call_number."</span>"; $block .= " <span id='op_caller_details_".$extension."'><strong>".$call_name."</strong><br>".$call_number."</span>";
@ -360,7 +362,7 @@ foreach ($activity as $extension => $ext) {
else { else {
//call //call
if (in_array($extension, $_SESSION['user']['extensions'])) { if (in_array($extension, $_SESSION['user']['extensions'])) {
$block .= " <img id='destination_control_".$extension."_call' src='resources/images/keypad_call.png' style='width: 12px; height: 12px; border: none; margin-top: 26px; margin-right: 1px; cursor: pointer;' align='right' onclick=\"toggle_destination('".$extension."', 'call');\">"; $block .= " <img id='destination_control_".$extension."_call' class='destination_control' src='resources/images/keypad_call.png' style='width: 12px; height: 12px; border: none; margin-top: 26px; margin-right: 1px; cursor: pointer;' align='right' onclick=\"toggle_destination('".$extension."', 'call');\" ".$onhover_pause_refresh.">";
$block .= " <form id='frm_destination_".$extension."_call' onsubmit=\"go_destination('".$extension."', document.getElementById('destination_".$extension."_call').value, 'call'); return false;\">"; $block .= " <form id='frm_destination_".$extension."_call' onsubmit=\"go_destination('".$extension."', document.getElementById('destination_".$extension."_call').value, 'call'); return false;\">";
$block .= " <input type='text' class='formfld' id='destination_".$extension."_call' style='width: 100px; min-width: 100px; max-width: 100px; margin-top: 10px; text-align: center; display: none;' onblur=\"toggle_destination('".$extension."', 'call');\">"; $block .= " <input type='text' class='formfld' id='destination_".$extension."_call' style='width: 100px; min-width: 100px; max-width: 100px; margin-top: 10px; text-align: center; display: none;' onblur=\"toggle_destination('".$extension."', 'call');\">";
$block .= " </form>\n"; $block .= " </form>\n";