Portions created by the Initial Developer are Copyright (C) 2008-2016 the Initial Developer. All Rights Reserved. Contributor(s): Mark J Crane */ //includes include "root.php"; require_once "resources/require.php"; require_once "resources/check_auth.php"; require_once "./resources/functions/get_call_activity.php"; //check permissions if (permission_exists('operator_panel_view')) { //access granted } else { echo "access denied"; exit; } //add multi-lingual support $language = new text; $text = $language->get(); //get the call activity $activity = get_call_activity(); if (is_array($activity)) foreach ($activity as $extension => $fields) { if (substr_count($fields['call_group'], ',')) { $tmp = explode(',', $fields['call_group']); if (is_array($tmp)) foreach ($tmp as $tmp_index => $tmp_value) { if (trim($tmp_value) == '') { unset($tmp[$tmp_index]); } else { $groups[] = $tmp_value; } } } else if ($fields['call_group'] != '') { $groups[] = $fields['call_group']; } } if (is_array($groups)) { $groups = array_unique($groups); sort($groups); } //prevent warnings if (!is_array($_SESSION['user']['extensions'])) { $_SESSION['user']['extensions'] = array(); } $onhover_pause_refresh = " onmouseover='refresh_stop();' onmouseout='refresh_start();'"; echo ""; echo " "; echo " "; echo " "; echo " "; echo " "; echo "
"; echo " ".$text['title-operator_panel'].""; echo " "; if (sizeof($_SESSION['user']['extensions']) > 0) { $status_options[1]['status'] = "Available"; $status_options[1]['label'] = $text['label-status_available']; $status_options[1]['style'] = "op_btn_status_available"; if (permission_exists('operator_panel_on_demand')) { $status_options[2]['status'] = "Available (On Demand)"; $status_options[2]['label'] = $text['label-status_on_demand']; $status_options[2]['style'] = "op_btn_status_available_on_demand"; } $status_options[3]['status'] = "On Break"; $status_options[3]['label'] = $text['label-status_on_break']; $status_options[3]['style'] = "op_btn_status_on_break"; $status_options[4]['status'] = "Do Not Disturb"; $status_options[4]['label'] = $text['label-status_do_not_disturb']; $status_options[4]['style'] = "op_btn_status_do_not_disturb"; $status_options[5]['status'] = "Logged Out"; $status_options[5]['label'] = $text['label-status_logged_out']; $status_options[5]['style'] = "op_btn_status_logged_out"; if (is_array($status_options)) foreach ($status_options as $status_option) { echo " \n"; } } echo " "; echo " "; echo " "; echo " "; if (permission_exists('operator_panel_eavesdrop')) { echo " "; } if (sizeof($groups) > 0) { echo " "; } echo " "; echo "
"; echo " \"".$text['label-refresh_pause']."\""; echo " "; if (sizeof($_SESSION['user']['extensions']) > 1) { echo " "; echo " "; echo " \n"; } else if (sizeof($_SESSION['user']['extensions']) == 1) { echo " "; } echo " "; echo " "; if (sizeof($groups) > 5) { //show select box echo " \n"; } else { //show buttons echo " "; if (is_array($groups)) foreach ($groups as $group) { echo " "; } } echo "
"; echo "
"; echo "
"; if (is_array($activity)) foreach ($activity as $extension => $ext) { unset($block); //filter by group, if defined if ($_REQUEST['group'] != '' && substr_count($ext['call_group'], $_REQUEST['group']) == 0 && !in_array($extension, $_SESSION['user']['extensions'])) { continue; } //check if feature code being called $format_number = (substr($ext['dest'], 0, 1) == '*') ? false : true; //determine extension state, direction icon, and displayed name/number for caller/callee if ($ext['state'] == 'CS_EXECUTE') { if (($ext['callstate'] == 'RINGING' || $ext['callstate'] == 'EARLY' || $ext['callstate'] == 'RING_WAIT') && $ext['direction'] == 'inbound') { $ext_state = 'ringing'; } else if ($ext['callstate'] == 'ACTIVE' && $ext['direction'] == 'outbound') { $ext_state = 'active'; } else if ($ext['callstate'] == 'RING_WAIT' && $ext['direction'] == 'outbound') { $ext_state = 'ringing'; } else if ($ext['callstate'] == 'ACTIVE' && $ext['direction'] == 'inbound') { $ext_state = 'active'; } if (!$format_number) { $call_name = 'System'; $call_number = $ext['dest']; } else { $call_name = $activity[$ext['dest']]['effective_caller_id_name']; $call_number = format_phone($ext['dest']); } $dir_icon = 'outbound'; } else if ($ext['state'] == 'CS_HIBERNATE') { if ($ext['callstate'] == 'ACTIVE') { $ext_state = 'active'; if ($ext['direction'] == 'inbound') { $call_name = $activity[$ext['dest']]['effective_caller_id_name']; $call_number = format_phone($ext['dest']); $dir_icon = 'outbound'; } else if ($ext['direction'] == 'outbound') { $call_name = $activity[$ext['cid_num']]['effective_caller_id_name']; $call_number = format_phone($ext['cid_num']); $dir_icon = 'inbound'; } } } else if ($ext['state'] == 'CS_CONSUME_MEDIA' || $ext['state'] == 'CS_EXCHANGE_MEDIA') { if ($ext['state'] == 'CS_CONSUME_MEDIA' && $ext['callstate'] == 'RINGING' && $ext['direction'] == 'outbound') { $ext_state = 'ringing'; } else if ($ext['state'] == 'CS_EXCHANGE_MEDIA' && $ext['callstate'] == 'ACTIVE' && $ext['direction'] == 'outbound') { $ext_state = 'active'; } $dir_icon = 'inbound'; $call_name = $activity[$ext['cid_num']]['effective_caller_id_name']; $call_number = format_phone($ext['cid_num']); } else { unset($ext_state, $dir_icon, $call_name, $call_number); } //determine block style by state (if any) $style = ($ext_state != '') ? "op_state_".$ext_state : null; //determine the call identifier passed on drop if ($ext['uuid'] == $ext['call_uuid'] && $ext['variable_bridge_uuid'] == '') { // transfer an outbound internal call $call_identifier = $activity[$call_number]['uuid']; } else if (($ext['variable_call_direction'] == 'outbound' || $ext['variable_call_direction'] == 'local') && $ext['variable_bridge_uuid'] != '') { // transfer an outbound external call $call_identifier = $ext['variable_bridge_uuid']; } else { if( $ext['call_uuid'] ) { $call_identifier = $ext['call_uuid']; // transfer all other call types } else { $call_identifier = $ext['uuid']; // e.g. voice menus } } //determine extension draggable state if (permission_exists('operator_panel_manage')) { if (!in_array($extension, $_SESSION['user']['extensions'])) { //other extension if ($ext_state == "ringing") { if ($_GET['vd_ext_from'] == '' && $dir_icon == 'inbound') { $draggable = true; // selectable - is ringing and not outbound so can transfer away the call (can set as vd_ext_from) } else { $draggable = false; // unselectable - is ringing so can't send a call to the ext (can't set as vd_ext_to) } } else if ($ext_state == 'active') { $draggable = false; // unselectable - on a call already so can't transfer or send a call to the ext (can't set as vd_ext_from or vd_ext_to) } else { // idle if ($_GET['vd_ext_from'] == '') { $draggable = false; // unselectable - is idle, but can't initiate a call from the ext as is not assigned to user (can't set as vd_ext_from) } else { $draggable = true; // selectable - is idle, so can transfer a call in to ext (can set as vd_ext_to). } } } else { //user extension if ($ext['uuid'] != '' && $ext['uuid'] == $ext['call_uuid'] && $ext['variable_bridge_uuid'] == '') { $draggable = false; } else if ($ext_state == 'ringing' && $ext['variable_call_direction'] == 'local') { $draggable = false; } else if ($ext_state != '' && !$format_number) { $draggable = false; } else { $draggable = true; } } } else { $draggable = false; } //determine extension (user) status $ext_status = (in_array($extension, $_SESSION['user']['extensions'])) ? $ext_user_status[$_SESSION['user_uuid']] : $ext_user_status[$ext['user_uuid']]; switch ($ext_status) { case "Available" : $status_icon = "available"; $status_hover = $text['label-status_available']; break; case "Available (On Demand)" : $status_icon = "available_on_demand"; $status_hover = $text['label-status_available_on_demand']; break; case "On Break" : $status_icon = "on_break"; $status_hover = $text['label-status_on_break']; break; case "Do Not Disturb" : $status_icon = "do_not_disturb"; $status_hover = $text['label-status_do_not_disturb']; break; default : $status_icon = "logged_out"; $status_hover = $text['label-status_logged_out_or_unknown']; } $block .= "
"; // DRAG TO $block .= ""; $block .= " "; $block .= " "; $block .= " "; $block .= " "; $block .= "
"; $block .= " "; // DRAG FROM $block .= ""; $block .= ""; $block .= " "; if ($dir_icon != '') { $block .= " \"".$text['label-call_direction']."\""; } $block .= "
"; if ($ext_state != '') { $block .= " "; $block .= "
"; $block .= " ".$ext['call_length']."
"; $block .= " "; //record if (permission_exists('operator_panel_record') && $ext_state == 'active') { $call_identifier_record = $ext['call_uuid']; $rec_file = $_SESSION['switch']['recordings']['dir']."/archive/".date("Y")."/".date("M")."/".date("d")."/".$call_identifier_record.".wav"; if (file_exists($rec_file)) { $block .= ""; } else { $block .= ""; } } //eavesdrop if (permission_exists('operator_panel_eavesdrop') && $ext_state == 'active' && sizeof($_SESSION['user']['extensions']) > 0 && !in_array($extension, $_SESSION['user']['extensions'])) { $block .= ""; } //kill if (permission_exists('operator_panel_kill') || in_array($extension, $_SESSION['user']['extensions'])) { if ($ext['variable_bridge_uuid'] == '' && $ext_state == 'ringing') { $call_identifier_kill = $ext['uuid']; } else if ($dir_icon == 'outbound') { $call_identifier_kill = $ext['uuid']; } else { $call_identifier_kill = $call_identifier; } $block .= ""; } $block .= ""; //transfer if (in_array($extension, $_SESSION['user']['extensions']) && $ext_state == 'active') { $block .= ""; } $block .= "
"; $block .= " ".$call_name."
".$call_number."
"; $block .= "
"; //transfer if (in_array($extension, $_SESSION['user']['extensions']) && $ext_state == 'active') { $call_identifier_transfer = $ext['variable_bridge_uuid']; $block .= "
"; $block .= " "; $block .= "
\n"; } } else { //call if (in_array($extension, $_SESSION['user']['extensions'])) { $block .= " "; $block .= "
"; $block .= " "; $block .= "
\n"; } } $block .= "
"; if (if_group("superadmin") && isset($_GET['debug'])) { $block .= ""; $block .= "From ID
    ".$extension."
"; $block .= "uuid
    ".$ext['uuid']."
"; $block .= "call_uuid
    ".$ext['call_uuid']."
"; $block .= "variable_bridge_uuid
    ".$ext['variable_bridge_uuid']."
"; $block .= "direction
    ".$ext['direction']."
"; $block .= "variable_call_direction
    ".$ext['variable_call_direction']."
"; $block .= "state
    ".$ext['state']."
"; $block .= "cid_num
    ".$ext['cid_num']."
"; $block .= "dest
    ".$ext['dest']."
"; $block .= "context
    ".$ext['context']."
"; $block .= "presence_id
    ".$ext['presence_id']."
"; $block .= "callstate
    ".$ext['callstate']."
"; $block .= "
"; } $block .= "
"; if (in_array($extension, $_SESSION['user']['extensions'])) { $user_extensions[] = $block; } else { $other_extensions[] = $block; } } if (sizeof($user_extensions) > 0) { echo "
"; if (is_array($user_extensions)) foreach ($user_extensions as $ext_block) { echo $ext_block; } echo "
"; } if ($_REQUEST['group'] != '') { if (sizeof($user_extensions) > 0) { echo "
"; } echo "".ucwords($_REQUEST['group']).""; echo "

"; } else if (sizeof($user_extensions) > 0) { echo "
"; echo "".$text['label-other_extensions'].""; echo "

"; } if (sizeof($other_extensions) > 0) { echo "
"; if (is_array($other_extensions)) foreach ($other_extensions as $ext_block) { echo $ext_block; } echo "
"; } else { echo $text['label-no_extensions_found']; } echo "

"; if (if_group("superadmin") && isset($_GET['debug'])) { echo '$activity
'; echo ""; echo "

"; echo '$_SESSION
'; echo ""; } ?>