2012-09-04 16:53:46 +02:00
< ? php
/*
FusionPBX
Version : MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 ( the " License " ); you may not use this file except in compliance with
the License . You may obtain a copy of the License at
http :// www . mozilla . org / MPL /
Software distributed under the License is distributed on an " AS IS " basis ,
WITHOUT WARRANTY OF ANY KIND , either express or implied . See the License
for the specific language governing rights and limitations under the
License .
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane < markjcrane @ fusionpbx . com >
Portions created by the Initial Developer are Copyright ( C ) 2008 - 2012
the Initial Developer . All Rights Reserved .
Contributor ( s ) :
Mark J Crane < markjcrane @ fusionpbx . com >
2012-09-04 20:16:39 +02:00
James Rose < james . o . rose @ gmail . com >
2012-09-04 16:53:46 +02:00
*/
include " root.php " ;
require_once " includes/require.php " ;
require_once " includes/checkauth.php " ;
if ( permission_exists ( 'call_center_active_view' )) {
//access granted
}
else {
echo " access denied " ;
exit ;
}
//get the queue_name and set it as a variable
$queue_name = $_GET [ queue_name ] . '@' . $_SESSION [ 'domains' ][ $domain_uuid ][ 'domain_name' ];
//convert the string to a named array
function str_to_named_array ( $tmp_str , $tmp_delimiter ) {
$tmp_array = explode ( " \n " , $tmp_str );
$result = '' ;
if ( trim ( strtoupper ( $tmp_array [ 0 ])) != " +OK " ) {
$tmp_field_name_array = explode ( $tmp_delimiter , $tmp_array [ 0 ]);
$x = 0 ;
foreach ( $tmp_array as $row ) {
if ( $x > 0 ) {
$tmp_field_value_array = explode ( $tmp_delimiter , $tmp_array [ $x ]);
$y = 0 ;
foreach ( $tmp_field_value_array as $tmp_value ) {
$tmp_name = $tmp_field_name_array [ $y ];
if ( trim ( strtoupper ( $tmp_value )) != " +OK " ) {
$result [ $x ][ $tmp_name ] = $tmp_value ;
}
$y ++ ;
}
}
$x ++ ;
}
unset ( $row );
}
return $result ;
}
//alternate the color of the row
$c = 0 ;
$row_style [ " 0 " ] = " row_style0 " ;
$row_style [ " 1 " ] = " row_style1 " ;
//create an event socket connection
$fp = event_socket_create ( $_SESSION [ 'event_socket_ip_address' ], $_SESSION [ 'event_socket_port' ], $_SESSION [ 'event_socket_password' ]);
//get the call center queue, agent and tiers list
if ( ! $fp ) {
$msg = " <div align='center'>Connection to Event Socket failed.<br /></div> " ;
echo " <div align='center'> \n " ;
echo " <table width='40%'> \n " ;
echo " <tr> \n " ;
echo " <th align='left'>Message</th> \n " ;
echo " </tr> \n " ;
echo " <tr> \n " ;
echo " <td class='row_style1'><strong> $msg </strong></td> \n " ;
echo " </tr> \n " ;
echo " </table> \n " ;
echo " </div> \n " ;
}
else {
//get the agent list
//show the title
echo " <table width= \" 100% \" border= \" 0 \" cellpadding= \" 6 \" cellspacing= \" 0 \" > \n " ;
echo " <tr> \n " ;
echo " <td align='left'><b>Agents</b><br /> \n " ;
echo " List all the agents.<br /> \n " ;
echo " </td> \n " ;
echo " </tr> \n " ;
echo " </table> \n " ;
echo " <br /> \n " ;
//send the event socket command and get the response
//callcenter_config queue list tiers [queue_name] |
$switch_cmd = 'callcenter_config queue list tiers ' . $queue_name ;
$event_socket_str = trim ( event_socket_request ( $fp , 'api ' . $switch_cmd ));
$result = str_to_named_array ( $event_socket_str , '|' );
//prepare the result for array_multisort
$x = 0 ;
foreach ( $result as $row ) {
$tier_result [ $x ][ 'level' ] = $row [ 'level' ];
$tier_result [ $x ][ 'position' ] = $row [ 'position' ];
$tier_result [ $x ][ 'agent' ] = $row [ 'agent' ];
$tier_result [ $x ][ 'state' ] = trim ( $row [ 'state' ]);
$tier_result [ $x ][ 'queue' ] = $row [ 'queue' ];
$x ++ ;
}
//sort the array //SORT_ASC, SORT_DESC, SORT_REGULAR, SORT_NUMERIC, SORT_STRING
array_multisort ( $tier_result , SORT_ASC );
//send the event socket command and get the response
//callcenter_config queue list agents [queue_name] [status] |
$switch_cmd = 'callcenter_config queue list agents ' . $queue_name ;
$event_socket_str = trim ( event_socket_request ( $fp , 'api ' . $switch_cmd ));
$agent_result = str_to_named_array ( $event_socket_str , '|' );
//list the agents
echo " <table width='100%' border='0' cellpadding='0' cellspacing='0'> \n " ;
echo " <tr> \n " ;
echo " <th>Name</th> \n " ;
2012-09-04 20:16:39 +02:00
echo " <th>Extension</th> \n " ;
2012-09-04 16:53:46 +02:00
echo " <th>Status</th> \n " ;
echo " <th>State</th> \n " ;
//echo "<th>Offered Call</th>\n";
echo " <th>Status Change</th> \n " ;
echo " <th>Missed</th> \n " ;
echo " <th>Answered</th> \n " ;
echo " <th>Tier State</th> \n " ;
echo " <th>Tier Level</th> \n " ;
echo " <th>Tier Position</th> \n " ;
2012-09-04 20:16:39 +02:00
echo " <th>Options</th> \n " ;
2012-09-04 16:53:46 +02:00
echo " </tr> \n " ;
foreach ( $tier_result as $tier_row ) {
//$queue = $tier_row['queue'];
//$queue = str_replace('@'.$_SESSION['domain_name'], '', $queue);
$agent = $tier_row [ 'agent' ];
//$agent = str_replace('@'.$_SESSION['domain_name'], '', $agent);
$tier_state = $tier_row [ 'state' ];
$tier_level = $tier_row [ 'level' ];
$tier_position = $tier_row [ 'position' ];
foreach ( $agent_result as $agent_row ) {
if ( $tier_row [ 'agent' ] == $agent_row [ 'name' ]) {
$name = $agent_row [ 'name' ];
$name = str_replace ( '@' . $_SESSION [ 'domain_name' ], '' , $name );
//$system = $agent_row['system'];
2012-09-04 20:16:39 +02:00
$a_uuid = $agent_row [ 'uuid' ];
2012-09-04 16:53:46 +02:00
//$type = $agent_row['type'];
$contact = $agent_row [ 'contact' ];
2012-09-04 20:16:39 +02:00
$a_exten = preg_replace ( " /user \ // " , " " , $contact );
$a_exten = preg_replace ( " /@.*/ " , " " , $a_exten );
$a_exten = preg_replace ( " / { .*}/ " , " " , $a_exten );
2012-09-04 16:53:46 +02:00
$status = $agent_row [ 'status' ];
$state = $agent_row [ 'state' ];
$max_no_answer = $agent_row [ 'max_no_answer' ];
$wrap_up_time = $agent_row [ 'wrap_up_time' ];
$reject_delay_time = $agent_row [ 'reject_delay_time' ];
$busy_delay_time = $agent_row [ 'busy_delay_time' ];
$last_bridge_start = $agent_row [ 'last_bridge_start' ];
$last_bridge_end = $agent_row [ 'last_bridge_end' ];
//$last_offered_call = $agent_row['last_offered_call'];
$last_status_change = $agent_row [ 'last_status_change' ];
$no_answer_count = $agent_row [ 'no_answer_count' ];
$calls_answered = $agent_row [ 'calls_answered' ];
$talk_time = $agent_row [ 'talk_time' ];
$ready_time = $agent_row [ 'ready_time' ];
$last_offered_call_seconds = time () - $last_offered_call ;
$last_offered_call_length_hour = floor ( $last_offered_call_seconds / 3600 );
$last_offered_call_length_min = floor ( $last_offered_call_seconds / 60 - ( $last_offered_call_length_hour * 60 ));
$last_offered_call_length_sec = $last_offered_call_seconds - (( $last_offered_call_length_hour * 3600 ) + ( $last_offered_call_length_min * 60 ));
$last_offered_call_length_min = sprintf ( " %02d " , $last_offered_call_length_min );
$last_offered_call_length_sec = sprintf ( " %02d " , $last_offered_call_length_sec );
$last_offered_call_length = $last_offered_call_length_hour . ':' . $last_offered_call_length_min . ':' . $last_offered_call_length_sec ;
$last_status_change_seconds = time () - $last_status_change ;
$last_status_change_length_hour = floor ( $last_status_change_seconds / 3600 );
$last_status_change_length_min = floor ( $last_status_change_seconds / 60 - ( $last_status_change_length_hour * 60 ));
$last_status_change_length_sec = $last_status_change_seconds - (( $last_status_change_length_hour * 3600 ) + ( $last_status_change_length_min * 60 ));
$last_status_change_length_min = sprintf ( " %02d " , $last_status_change_length_min );
$last_status_change_length_sec = sprintf ( " %02d " , $last_status_change_length_sec );
$last_status_change_length = $last_status_change_length_hour . ':' . $last_status_change_length_min . ':' . $last_status_change_length_sec ;
echo " <tr> \n " ;
echo " <td valign='top' class=' " . $row_style [ $c ] . " '> " . $name . " </td> \n " ;
2012-09-04 20:16:39 +02:00
echo " <td valign='top' class=' " . $row_style [ $c ] . " '> " . $a_exten . " </td> \n " ;
2012-09-04 16:53:46 +02:00
echo " <td valign='top' class=' " . $row_style [ $c ] . " '> " . $status . " </td> \n " ;
echo " <td valign='top' class=' " . $row_style [ $c ] . " '> " . $state . " </td> \n " ;
//echo "<td valign='top' class='".$row_style[$c]."'>".$last_offered_call_length."</td>\n";
echo " <td valign='top' class=' " . $row_style [ $c ] . " '> " . $last_status_change_length . " </td> \n " ;
echo " <td valign='top' class=' " . $row_style [ $c ] . " '> " . $no_answer_count . " </td> \n " ;
echo " <td valign='top' class=' " . $row_style [ $c ] . " '> " . $calls_answered . " </td> \n " ;
echo " <td valign='top' class=' " . $row_style [ $c ] . " '> " . $tier_state . " </td> \n " ;
echo " <td valign='top' class=' " . $row_style [ $c ] . " '> " . $tier_level . " </td> \n " ;
echo " <td valign='top' class=' " . $row_style [ $c ] . " '> " . $tier_position . " </td> \n " ;
2012-09-04 20:16:39 +02:00
if ( if_group ( " admin " ) || if_group ( " superadmin " )) {
echo " <td valign='top' class=' " . $row_style [ $c ] . " '> " ;
//need to check state to so only waiting gets call, and trying/answer gets eavesdrop
if ( $tier_state == " Offering " || $tier_state == " Active Inbound " ) {
$orig_command = " { origination_caller_id_name=eavesdrop,origination_caller_id_number= " . $a_exten . " }user/ " . $_SESSION [ 'user' ][ 'extension' ][ 0 ][ 'user' ] . " @ " . $_SESSION [ 'domain_name' ] . " %26eavesdrop( " . $a_uuid . " ) " ;
//debug
//echo $orig_command;
2012-11-24 03:47:34 +01:00
//echo " <a href='javascript:void(0);' style='color: #444444;' onclick=\"confirm_response = confirm('Do you really want to do this?');if (confirm_response){send_cmd('call_center_exec.php?cmd=log+".$orig_command.")');}\">log_cmd</a> \n";
echo " <a href='javascript:void(0);' style='color: #444444;' onclick= \" confirm_response = confirm('Do you really want to do this?');if (confirm_response) { send_cmd('call_center_exec.php?cmd=originate+ " . $orig_command . " )');} \" >eavesdrop</a> \n " ;
2012-09-04 20:16:39 +02:00
$xfer_command = $a_uuid . " -bleg " . $_SESSION [ 'user' ][ 'extension' ][ 0 ][ 'user' ] . " XML " . $_SESSION [ 'domain_name' ];
//$xfer_command = $a_uuid." ".$_SESSION['user']['extension'][0]['user']." XML default";
$xfer_command = urlencode ( $xfer_command );
2012-11-24 03:47:34 +01:00
echo " <a href='javascript:void(0);' style='color: #444444;' onclick= \" confirm_response = confirm('Do you really want to do this?');if (confirm_response) { send_cmd('call_center_exec.php?cmd=uuid_transfer+ " . $xfer_command . " ');} \" >transfer</a> \n " ;
2012-09-04 20:16:39 +02:00
}
else {
$orig_call = " { origination_caller_id_name=c2c- " . urlencode ( $name ) . " ,origination_caller_id_number= " . $a_exten . " }user/ " . $_SESSION [ 'user' ][ 'extension' ][ 0 ][ 'user' ] . " @ " . $_SESSION [ 'domain_name' ] . " %26bridge(user/ " . $a_exten . " @ " . $_SESSION [ 'domain_name' ] . " ) " ;
2012-11-24 03:47:34 +01:00
echo " <a href='javascript:void(0);' style='color: #444444;' onclick= \" confirm_response = confirm('Do you really want to do this?');if (confirm_response) { send_cmd('call_center_exec.php?cmd=originate+ " . $orig_call . " )');} \" >Click to Call</a> \n " ;
2012-09-04 20:16:39 +02:00
}
echo " </td> " ;
}
2012-09-04 16:53:46 +02:00
}
}
echo " </tr> \n " ;
if ( $c == 0 ) { $c = 1 ; } else { $c = 0 ; }
}
echo " </table> \n \n " ;
echo " </br> " ;
//add vertical spacing
echo " <br /> \n " ;
echo " <br /> \n " ;
echo " <br /> \n " ;
2012-09-04 20:16:39 +02:00
//get the queue list
//send the event socket command and get the response
//callcenter_config queue list members [queue_name]
$switch_cmd = 'callcenter_config queue list members ' . $queue_name ;
$event_socket_str = trim ( event_socket_request ( $fp , 'api ' . $switch_cmd ));
$result = str_to_named_array ( $event_socket_str , '|' );
//show the title
echo " <table width= \" 100% \" border= \" 0 \" cellpadding= \" 6 \" cellspacing= \" 0 \" > \n " ;
echo " <tr> \n " ;
echo " <td align='left'><b> " . ucfirst ( $_GET [ queue_name ]) . " Queue</b><br /> \n " ;
echo " Shows a list of callers in the queue.<br /> \n " ;
echo " </td> \n " ;
echo " </tr> \n " ;
echo " </table> \n " ;
echo " <br /> \n " ;
echo " <table width='100%' border='0' cellpadding='0' cellspacing='0'> \n " ;
echo " <tr> \n " ;
echo " <th>Time</th> \n " ;
//echo "<th>System</th>\n";
echo " <th>Name</th> \n " ;
echo " <th>Number</th> \n " ;
echo " <th>Status</th> \n " ;
if ( if_group ( " admin " ) || if_group ( " superadmin " )) {
echo " <th>Options</th> \n " ;
}
echo " <th>Agent</th> \n " ;
echo " </tr> \n " ;
$q_waiting = 0 ;
$q_trying = 0 ;
$q_answered = 0 ;
foreach ( $result as $row ) {
$switch_cmd = 'uuid_exists ' . $row [ 'session_uuid' ];
if ( trim ( event_socket_request ( $fp , 'api ' . $switch_cmd )) == " true " ) {
$queue = $row [ 'queue' ];
$system = $row [ 'system' ];
$uuid = $row [ 'uuid' ];
$session_uuid = $row [ 'session_uuid' ];
$caller_number = $row [ 'cid_number' ];
$caller_name = $row [ 'cid_name' ];
$system_epoch = $row [ 'system_epoch' ];
$joined_epoch = $row [ 'joined_epoch' ];
$rejoined_epoch = $row [ 'rejoined_epoch' ];
$bridge_epoch = $row [ 'bridge_epoch' ];
$abandoned_epoch = $row [ 'abandoned_epoch' ];
$base_score = $row [ 'base_score' ];
$skill_score = $row [ 'skill_score' ];
$serving_agent = $row [ 'serving_agent' ];
$serving_system = $row [ 'serving_system' ];
$state = $row [ 'state' ];
if ( $state == " Trying " ) { $q_trying = $q_trying + 1 ;}
if ( $state == " Waiting " ) { $q_waiting = $q_waiting + 1 ;}
if ( $state == " Answered " ) { $q_answered = $q_answered + 1 ;}
$joined_seconds = time () - $joined_epoch ;
$joined_length_hour = floor ( $joined_seconds / 3600 );
$joined_length_min = floor ( $joined_seconds / 60 - ( $joined_length_hour * 60 ));
$joined_length_sec = $joined_seconds - (( $joined_length_hour * 3600 ) + ( $joined_length_min * 60 ));
$joined_length_min = sprintf ( " %02d " , $joined_length_min );
$joined_length_sec = sprintf ( " %02d " , $joined_length_sec );
$joined_length = $joined_length_hour . ':' . $joined_length_min . ':' . $joined_length_sec ;
//$system_seconds = time() - $system_epoch;
//$system_length_hour = floor($system_seconds/3600);
//$system_length_min = floor($system_seconds/60 - ($system_length_hour * 60));
//$system_length_sec = $system_seconds - (($system_length_hour * 3600) + ($system_length_min * 60));
//$system_length_min = sprintf("%02d", $system_length_min);
//$system_length_sec = sprintf("%02d", $system_length_sec);
//$system_length = $system_length_hour.':'.$system_length_min.':'.$system_length_sec;
echo " <tr> \n " ;
echo " <td valign='top' class=' " . $row_style [ $c ] . " '> " . $joined_length . " </td> \n " ;
//echo "<td valign='top' class='".$row_style[$c]."'>".$system_length."</td>\n";
echo " <td valign='top' class=' " . $row_style [ $c ] . " '> " . $caller_name . " </td> \n " ;
echo " <td valign='top' class=' " . $row_style [ $c ] . " '> " . $caller_number . " </td> \n " ;
echo " <td valign='top' class=' " . $row_style [ $c ] . " '> " . $state . " </td> \n " ;
if ( if_group ( " admin " ) || if_group ( " superadmin " )) {
echo " <td valign='top' class=' " . $row_style [ $c ] . " '> " ;
$q_caller_number = urlencode ( $caller_number );
$orig_command = " { origination_caller_id_name=eavesdrop,origination_caller_id_number= " . $q_caller_number . " }user/ " . $_SESSION [ 'user' ][ 'extension' ][ 0 ][ 'user' ] . " @ " . $_SESSION [ 'domain_name' ] . " %26eavesdrop( " . $session_uuid . " ) " ;
//debug
//echo $orig_command;
2012-11-24 03:47:34 +01:00
//echo " <a href='javascript:void(0);' style='color: #444444;' onclick=\"confirm_response = confirm('Do you really want to do this?');if (confirm_response){send_cmd('call_center_exec.php?cmd=log+".$orig_command.")');}\">log_cmd</a> \n";
2012-09-04 20:16:39 +02:00
2012-11-24 03:47:34 +01:00
echo " <a href='javascript:void(0);' style='color: #444444;' onclick= \" confirm_response = confirm('Do you really want to do this?');if (confirm_response) { send_cmd('call_center_exec.php?cmd=originate+ " . $orig_command . " )');} \" >eavesdrop</a> \n " ;
2012-09-04 20:16:39 +02:00
echo " </td> " ;
}
echo " <td valign='top' class=' " . $row_style [ $c ] . " '> " . $serving_agent . " </td> \n " ;
echo " </tr> \n " ;
if ( $c == 0 ) { $c = 1 ; } else { $c = 0 ; }
} //end if uuid_exists
}
echo " </table> \n " ;
echo " </br> " ;
echo " <b>Total Waiting is { $q_waiting } . Total Trying is { $q_trying } . Total Answered is { $q_answered } . \n </b> " ;
//add vertical spacing
echo " <br /> \n " ;
echo " <br /> \n " ;
echo " <br /> \n " ;
2012-09-04 16:53:46 +02:00
}
?>