mirror of
https://github.com/fusionpbx/fusionpbx.git
synced 2026-01-06 11:43:50 +00:00
Operator Panel: Added ability to set Eavesdrop destination (from assigned extensions), pause refresh manually or on mouse hover of control elements for better user experience. Hide eavesdrop function if no extensions assigned to user (addresses Issue 851).
This commit is contained in:
@@ -60,6 +60,11 @@
|
|||||||
$text['label-eavesdrop']['pt-pt'] = "Bisbilhotar";
|
$text['label-eavesdrop']['pt-pt'] = "Bisbilhotar";
|
||||||
$text['label-eavesdrop']['fr-fr'] = "Espionner";
|
$text['label-eavesdrop']['fr-fr'] = "Espionner";
|
||||||
|
|
||||||
|
$text['description-eavesdrop_destination']['en-us'] = "Select the Eavesdrop Destination";
|
||||||
|
$text['description-eavesdrop_destination']['es-cl'] = "Seleccione el Eavesdrop Destino";
|
||||||
|
$text['description-eavesdrop_destination']['pt-pt'] = "Selecione o Eavesdrop Destino";
|
||||||
|
$text['description-eavesdrop_destination']['fr-fr'] = "Sélectionnez le Eavesdrop Destinations";
|
||||||
|
|
||||||
$text['label-kill']['en-us'] = "Kill";
|
$text['label-kill']['en-us'] = "Kill";
|
||||||
$text['label-kill']['es-cl'] = "Finalizar Llamada";
|
$text['label-kill']['es-cl'] = "Finalizar Llamada";
|
||||||
$text['label-kill']['pt-pt'] = "Chamada Final";
|
$text['label-kill']['pt-pt'] = "Chamada Final";
|
||||||
@@ -80,4 +85,19 @@
|
|||||||
$text['button-all']['pt-pt'] = "Tudo";
|
$text['button-all']['pt-pt'] = "Tudo";
|
||||||
$text['button-all']['fr-fr'] = "Tous";
|
$text['button-all']['fr-fr'] = "Tous";
|
||||||
|
|
||||||
|
$text['label-refresh_pause']['en-us'] = "Pause Refresh";
|
||||||
|
$text['label-refresh_pause']['es-cl'] = "Actualizar Pausa";
|
||||||
|
$text['label-refresh_pause']['pt-pt'] = "Pausa Atualizar";
|
||||||
|
$text['label-refresh_pause']['fr-fr'] = "Pause Actualiser";
|
||||||
|
|
||||||
|
$text['label-refresh_enable']['en-us'] = "Enable Refresh";
|
||||||
|
$text['label-refresh_enable']['es-cl'] = "Activar Actualizar";
|
||||||
|
$text['label-refresh_enable']['pt-pt'] = "Habilitar Atualização";
|
||||||
|
$text['label-refresh_enable']['fr-fr'] = "Activer Actualiser";
|
||||||
|
|
||||||
|
$text['label-call_direction']['en-us'] = "Call Direction";
|
||||||
|
$text['label-call_direction']['es-cl'] = "Dirección de la llamada";
|
||||||
|
$text['label-call_direction']['pt-pt'] = "Direção da chamada";
|
||||||
|
$text['label-call_direction']['fr-fr'] = "Sens de l'appel";
|
||||||
|
|
||||||
?>
|
?>
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
The Initial Developer of the Original Code is
|
The Initial Developer of the Original Code is
|
||||||
Mark J Crane <markjcrane@fusionpbx.com>
|
Mark J Crane <markjcrane@fusionpbx.com>
|
||||||
Portions created by the Initial Developer are Copyright (C) 2008-2012
|
Portions created by the Initial Developer are Copyright (C) 2008-2015
|
||||||
the Initial Developer. All Rights Reserved.
|
the Initial Developer. All Rights Reserved.
|
||||||
|
|
||||||
Contributor(s):
|
Contributor(s):
|
||||||
@@ -119,6 +119,7 @@ require_once "resources/header.php";
|
|||||||
url += '&vd_ext_from=' + document.getElementById('vd_ext_from').value;
|
url += '&vd_ext_from=' + document.getElementById('vd_ext_from').value;
|
||||||
url += '&vd_ext_to=' + document.getElementById('vd_ext_to').value;
|
url += '&vd_ext_to=' + document.getElementById('vd_ext_to').value;
|
||||||
url += '&group=' + ((document.getElementById('group')) ? document.getElementById('group').value : '');
|
url += '&group=' + ((document.getElementById('group')) ? document.getElementById('group').value : '');
|
||||||
|
url += '&eavesdrop_dest=' + ((document.getElementById('eavesdrop_dest')) ? document.getElementById('eavesdrop_dest').value : '');
|
||||||
<?php
|
<?php
|
||||||
if (isset($_GET['debug'])) {
|
if (isset($_GET['debug'])) {
|
||||||
echo "url += '&debug';";
|
echo "url += '&debug';";
|
||||||
@@ -192,14 +193,17 @@ require_once "resources/header.php";
|
|||||||
//refresh controls
|
//refresh controls
|
||||||
function refresh_stop() {
|
function refresh_stop() {
|
||||||
clearInterval(interval_timer_id);
|
clearInterval(interval_timer_id);
|
||||||
|
document.getElementById('refresh_state').innerHTML = "<img src='resources/images/refresh_paused.png' style='width: 16px; height: 16px; border: none; margin-top: 1px; cursor: pointer;' onclick='refresh_start();' alt=\"<?=$text['label-refresh_enable']?>\" title=\"<?=$text['label-refresh_enable']?>\">";
|
||||||
}
|
}
|
||||||
|
|
||||||
function refresh_start() {
|
function refresh_start() {
|
||||||
|
if (document.getElementById('refresh_state')) { document.getElementById('refresh_state').innerHTML = "<img src='resources/images/refresh_active.gif' style='width: 16px; height: 16px; border: none; margin-top: 3px; cursor: pointer;' alt=\"<?=$text['label-refresh_pause']?>\" title=\"<?=$text['label-refresh_pause']?>\">"; }
|
||||||
interval_timer_id = setInterval( function() {
|
interval_timer_id = setInterval( function() {
|
||||||
url = source_url;
|
url = source_url;
|
||||||
url += '&vd_ext_from=' + document.getElementById('vd_ext_from').value;
|
url += '&vd_ext_from=' + document.getElementById('vd_ext_from').value;
|
||||||
url += '&vd_ext_to=' + document.getElementById('vd_ext_to').value;
|
url += '&vd_ext_to=' + document.getElementById('vd_ext_to').value;
|
||||||
url += '&group=' + ((document.getElementById('group')) ? document.getElementById('group').value : '');
|
url += '&group=' + ((document.getElementById('group')) ? document.getElementById('group').value : '');
|
||||||
|
url += '&eavesdrop_dest=' + ((document.getElementById('eavesdrop_dest')) ? document.getElementById('eavesdrop_dest').value : '');
|
||||||
<?php
|
<?php
|
||||||
if (isset($_GET['debug'])) {
|
if (isset($_GET['debug'])) {
|
||||||
echo "url += '&debug';";
|
echo "url += '&debug';";
|
||||||
@@ -286,7 +290,7 @@ require_once "resources/header.php";
|
|||||||
}
|
}
|
||||||
|
|
||||||
function get_eavesdrop_cmd(ext, chan_uuid) {
|
function get_eavesdrop_cmd(ext, chan_uuid) {
|
||||||
cmd = "bgapi originate {origination_caller_id_name=<?=$text['label-eavesdrop']?>,origination_caller_id_number=" + ext + "}user/<?=$_SESSION['user']['extensions'][0]?>@<?=$_SESSION['domain_name']?> &eavesdrop(" + chan_uuid + ")";
|
cmd = "bgapi originate {origination_caller_id_name=<?=$text['label-eavesdrop']?>,origination_caller_id_number=" + ext + "}user/"+(document.getElementById('eavesdrop_dest').value)+"@<?=$_SESSION['domain_name']?> &eavesdrop(" + chan_uuid + ")";
|
||||||
return cmd;
|
return cmd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
The Initial Developer of the Original Code is
|
The Initial Developer of the Original Code is
|
||||||
Mark J Crane <markjcrane@fusionpbx.com>
|
Mark J Crane <markjcrane@fusionpbx.com>
|
||||||
Portions created by the Initial Developer are Copyright (C) 2008-2012
|
Portions created by the Initial Developer are Copyright (C) 2008-2015
|
||||||
the Initial Developer. All Rights Reserved.
|
the Initial Developer. All Rights Reserved.
|
||||||
|
|
||||||
Contributor(s):
|
Contributor(s):
|
||||||
@@ -57,6 +57,8 @@ foreach ($activity as $extension => $fields) {
|
|||||||
$groups = array_unique($groups);
|
$groups = array_unique($groups);
|
||||||
sort($groups);
|
sort($groups);
|
||||||
|
|
||||||
|
$onhover_pause_refresh = " onmouseover='refresh_stop();' onmouseout='refresh_start();'";
|
||||||
|
|
||||||
echo "<table width='100%'>";
|
echo "<table width='100%'>";
|
||||||
echo " <tr>";
|
echo " <tr>";
|
||||||
echo " <td valign='top' align='left' width='50%' nowrap>";
|
echo " <td valign='top' align='left' width='50%' nowrap>";
|
||||||
@@ -84,34 +86,61 @@ if (sizeof($_SESSION['user']['extensions']) > 0) {
|
|||||||
$status_options[5]['style'] = "op_btn_status_logged_out";
|
$status_options[5]['style'] = "op_btn_status_logged_out";
|
||||||
|
|
||||||
foreach ($status_options as $status_option) {
|
foreach ($status_options as $status_option) {
|
||||||
echo " <input type='button' id='".$status_option['style']."' class='btn' value=\"".$status_option['label']."\" onclick=\"send_cmd('index.php?status='+escape('".$status_option['status']."'));\">\n";
|
echo " <input type='button' id='".$status_option['style']."' class='btn' value=\"".$status_option['label']."\" onclick=\"send_cmd('index.php?status='+escape('".$status_option['status']."'));\" ".$onhover_pause_refresh.">\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
echo " </td>";
|
echo " </td>";
|
||||||
echo " <td valign='top' align='right' width='50%' nowrap>";
|
echo " <td valign='top' align='right' width='50%' nowrap>";
|
||||||
|
echo " <table cellpadding='0' cellspacing='0' border='0'>";
|
||||||
|
echo " <tr>";
|
||||||
|
echo " <td valign='middle' nowrap='nowrap' style='padding-right: 15px' id='refresh_state'>";
|
||||||
|
echo " <img src='resources/images/refresh_active.gif' style='width: 16px; height: 16px; border: none; margin-top: 3px; cursor: pointer;' onclick='refresh_stop();' alt=\"".$text['label-refresh_pause']."\" title=\"".$text['label-refresh_pause']."\">";
|
||||||
|
echo " </td>";
|
||||||
|
|
||||||
|
if (permission_exists('operator_panel_eavesdrop')) {
|
||||||
|
echo " <td valign='top' nowrap='nowrap'>";
|
||||||
|
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 " <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 " <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";
|
||||||
|
foreach ($_SESSION['user']['extensions'] as $user_extension) {
|
||||||
|
echo " <option value='".$user_extension."' ".(($_REQUEST['eavesdrop_dest'] == $user_extension) ? "selected" : null).">".$user_extension."</option>\n";
|
||||||
|
}
|
||||||
|
echo " </select>\n";
|
||||||
|
}
|
||||||
|
else if (sizeof($_SESSION['user']['extensions']) == 1) {
|
||||||
|
echo " <input type='hidden' id='eavesdrop_dest' value=\"".$_SESSION['user']['extensions'][0]."\">";
|
||||||
|
}
|
||||||
|
echo " </td>";
|
||||||
|
}
|
||||||
|
|
||||||
if (sizeof($groups) > 0) {
|
if (sizeof($groups) > 0) {
|
||||||
echo " <input type='hidden' id='group' value=\"".$_REQUEST['group']."\">";
|
echo " <td valign='top' nowrap='nowrap'>";
|
||||||
|
echo " <input type='hidden' id='group' value=\"".$_REQUEST['group']."\">";
|
||||||
if (sizeof($groups) > 5) {
|
if (sizeof($groups) > 5) {
|
||||||
//show select box
|
//show select box
|
||||||
echo " <select class='formfld' onchange=\"document.getElementById('group').value = this.options[this.selectedIndex].value; refresh_start();\" onfocus='refresh_stop();' onblur='refresh_start();'>\n";
|
echo " <select class='formfld' onchange=\"document.getElementById('group').value = this.options[this.selectedIndex].value; refresh_start();\" onfocus='refresh_stop();' xonblur='refresh_start();'>\n";
|
||||||
echo " <option value='' ".(($_REQUEST['group'] == '') ? "selected" : null).">".$text['label-call_group']."</option>";
|
echo " <option value='' ".(($_REQUEST['group'] == '') ? "selected" : null).">".$text['label-call_group']."</option>";
|
||||||
echo " <option value=''>".$text['button-all']."</option>";
|
echo " <option value=''>".$text['button-all']."</option>";
|
||||||
foreach ($groups as $group) {
|
foreach ($groups as $group) {
|
||||||
echo " <option value='".$group."' ".(($_REQUEST['group'] == $group) ? "selected" : null).">".$group."</option>\n";
|
echo " <option value='".$group."' ".(($_REQUEST['group'] == $group) ? "selected" : null).">".$group."</option>\n";
|
||||||
}
|
}
|
||||||
echo " </select>\n";
|
echo " </select>\n";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
//show buttons
|
//show buttons
|
||||||
echo " <input type='button' class='btn' title=\"".$text['label-call_group']."\" value=\"".$text['button-all']."\" onclick=\"document.getElementById('group').value = '';\">";
|
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;\">";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
echo " </td>";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
echo " </tr>";
|
||||||
|
echo " </table>";
|
||||||
|
|
||||||
echo " </td>";
|
echo " </td>";
|
||||||
echo " </tr>";
|
echo " </tr>";
|
||||||
echo "</table>";
|
echo "</table>";
|
||||||
@@ -256,7 +285,7 @@ foreach ($activity as $extension => $ext) {
|
|||||||
$block .= " </td>";
|
$block .= " </td>";
|
||||||
$block .= " <td class='op_ext_info ".$style."'>";
|
$block .= " <td class='op_ext_info ".$style."'>";
|
||||||
if ($dir_icon != '') {
|
if ($dir_icon != '') {
|
||||||
$block .= " <img src='resources/images/".$dir_icon.".png' align='right' style='margin-top: 3px; margin-right: 1px; width: 12px; height: 12px;' draggable='false'>";
|
$block .= " <img src='resources/images/".$dir_icon.".png' align='right' style='margin-top: 3px; margin-right: 1px; width: 12px; height: 12px; cursor: help;' draggable='false' alt=\"".$text['label-call_direction']."\" title=\"".$text['label-call_direction']."\" ".$onhover_pause_refresh.">";
|
||||||
}
|
}
|
||||||
$block .= " <span class='op_user_info'>";
|
$block .= " <span class='op_user_info'>";
|
||||||
if ($ext['effective_caller_id_name'] != '' && $ext['effective_caller_id_name'] != $extension) {
|
if ($ext['effective_caller_id_name'] != '' && $ext['effective_caller_id_name'] != $extension) {
|
||||||
@@ -275,15 +304,15 @@ foreach ($activity as $extension => $ext) {
|
|||||||
$call_identifier_record = $ext['call_uuid'];
|
$call_identifier_record = $ext['call_uuid'];
|
||||||
$rec_file = $_SESSION['switch']['recordings']['dir']."/archive/".date("Y")."/".date("M")."/".date("d")."/".$call_identifier_record.".wav";
|
$rec_file = $_SESSION['switch']['recordings']['dir']."/archive/".date("Y")."/".date("M")."/".date("d")."/".$call_identifier_record.".wav";
|
||||||
if (file_exists($rec_file)) {
|
if (file_exists($rec_file)) {
|
||||||
$block .= "<img src='resources/images/recording.png' style='width: 12px; height: 12px; border: none; margin: 4px 0px 0px 5px; cursor: help;' title=\"".$text['label-recording']."\">";
|
$block .= "<img src='resources/images/recording.png' style='width: 12px; height: 12px; border: none; margin: 4px 0px 0px 5px; cursor: help;' title=\"".$text['label-recording']."\" ".$onhover_pause_refresh.">";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$block .= "<img src='resources/images/record.png' style='width: 12px; height: 12px; border: none; margin: 4px 0px 0px 5px; cursor: pointer;' title=\"".$text['label-record']."\" onclick=\"record_call('".$call_identifier_record."');\">";
|
$block .= "<img src='resources/images/record.png' style='width: 12px; height: 12px; border: none; margin: 4px 0px 0px 5px; cursor: pointer;' title=\"".$text['label-record']."\" onclick=\"record_call('".$call_identifier_record."');\" ".$onhover_pause_refresh.">";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//eavesdrop
|
//eavesdrop
|
||||||
if (permission_exists('operator_panel_eavesdrop') && $ext_state == 'active' && !in_array($extension, $_SESSION['user']['extensions'])) {
|
if (permission_exists('operator_panel_eavesdrop') && $ext_state == 'active' && sizeof($_SESSION['user']['extensions']) > 0 && !in_array($extension, $_SESSION['user']['extensions'])) {
|
||||||
$block .= "<img src='resources/images/eavesdrop.png' style='width: 12px; height: 12px; border: none; margin: 4px 0px 0px 5px; cursor: pointer;' title='".$text['label-eavesdrop']."' onclick=\"eavesdrop_call('".$extension."','".$call_identifier."');\">";
|
$block .= "<img src='resources/images/eavesdrop.png' style='width: 12px; height: 12px; border: none; margin: 4px 0px 0px 5px; cursor: pointer;' title='".$text['label-eavesdrop']."' onclick=\"eavesdrop_call('".$extension."','".$call_identifier."');\" ".$onhover_pause_refresh.">";
|
||||||
}
|
}
|
||||||
//kill
|
//kill
|
||||||
if (in_array($extension, $_SESSION['user']['extensions']) || permission_exists('operator_panel_kill')) {
|
if (in_array($extension, $_SESSION['user']['extensions']) || permission_exists('operator_panel_kill')) {
|
||||||
@@ -296,7 +325,7 @@ foreach ($activity as $extension => $ext) {
|
|||||||
else {
|
else {
|
||||||
$call_identifier_kill = $call_identifier;
|
$call_identifier_kill = $call_identifier;
|
||||||
}
|
}
|
||||||
$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."');\">";
|
$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 .= " </td></tr></table>";
|
$block .= " </td></tr></table>";
|
||||||
$block .= " <strong>".$call_name."</strong><br>".$call_number;
|
$block .= " <strong>".$call_name."</strong><br>".$call_number;
|
||||||
|
|||||||
BIN
app/operator_panel/resources/images/refresh_active.gif
Normal file
BIN
app/operator_panel/resources/images/refresh_active.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
BIN
app/operator_panel/resources/images/refresh_paused.png
Normal file
BIN
app/operator_panel/resources/images/refresh_paused.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 501 B |
@@ -776,7 +776,7 @@ function format_string ($format, $data) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//browser detection without browscap.ini dependency
|
//browser detection without browscap.ini dependency
|
||||||
function http_user_agent() {
|
function http_user_agent($info = '') {
|
||||||
$u_agent = $_SERVER['HTTP_USER_AGENT'];
|
$u_agent = $_SERVER['HTTP_USER_AGENT'];
|
||||||
$bname = 'Unknown';
|
$bname = 'Unknown';
|
||||||
$platform = 'Unknown';
|
$platform = 'Unknown';
|
||||||
@@ -851,13 +851,21 @@ function format_string ($format, $data) {
|
|||||||
// check if we have a number
|
// check if we have a number
|
||||||
if ($version==null || $version=="") {$version="?";}
|
if ($version==null || $version=="") {$version="?";}
|
||||||
|
|
||||||
return array(
|
switch ($info) {
|
||||||
'userAgent' => $u_agent,
|
case "agent": return $u_agent; break;
|
||||||
'name' => $bname,
|
case "name": return $bname; break;
|
||||||
'version' => $version,
|
case "version": return $version; break;
|
||||||
'platform' => $platform,
|
case "platform": return $platform; break;
|
||||||
'pattern' => $pattern
|
case "pattern": return $pattern; break;
|
||||||
);
|
default :
|
||||||
|
return array(
|
||||||
|
'userAgent' => $u_agent,
|
||||||
|
'name' => $bname,
|
||||||
|
'version' => $version,
|
||||||
|
'platform' => $platform,
|
||||||
|
'pattern' => $pattern
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//tail php function for non posix systems
|
//tail php function for non posix systems
|
||||||
|
|||||||
Reference in New Issue
Block a user