diff --git a/app/operator_panel/app_config.php b/app/operator_panel/app_config.php index 6f818d4aea..31b29d2632 100644 --- a/app/operator_panel/app_config.php +++ b/app/operator_panel/app_config.php @@ -37,8 +37,24 @@ $apps[$x]['menu'][0]['groups'][] = 'admin'; //permission details - $apps[$x]['permissions'][0]['name'] = 'operator_panel_view'; - $apps[$x]['permissions'][0]['groups'][] = 'superadmin'; - $apps[$x]['permissions'][0]['groups'][] = 'admin'; - + $y = 0; + $apps[$x]['permissions'][$y]['name'] = 'operator_panel_view'; + $apps[$x]['permissions'][$y]['groups'][] = 'superadmin'; + $apps[$x]['permissions'][$y]['groups'][] = 'admin'; + $y++; + $apps[$x]['permissions'][$y]['name'] = 'operator_panel_manage'; + $apps[$x]['permissions'][$y]['groups'][] = 'superadmin'; + $apps[$x]['permissions'][$y]['groups'][] = 'admin'; + $y++; + $apps[$x]['permissions'][$y]['name'] = 'operator_panel_eavesdrop'; + $apps[$x]['permissions'][$y]['groups'][] = 'superadmin'; + $apps[$x]['permissions'][$y]['groups'][] = 'admin'; + $y++; + $apps[$x]['permissions'][$y]['name'] = 'operator_panel_kill'; + $apps[$x]['permissions'][$y]['groups'][] = 'superadmin'; + $apps[$x]['permissions'][$y]['groups'][] = 'admin'; + $y++; + $apps[$x]['permissions'][$y]['name'] = 'operator_panel_record'; + $apps[$x]['permissions'][$y]['groups'][] = 'superadmin'; + $apps[$x]['permissions'][$y]['groups'][] = 'admin'; ?> \ No newline at end of file diff --git a/app/operator_panel/app_languages.php b/app/operator_panel/app_languages.php index ef22d0586b..8ec1eeaf3d 100644 --- a/app/operator_panel/app_languages.php +++ b/app/operator_panel/app_languages.php @@ -30,6 +30,11 @@ $text['label-status_available_on_demand']['pt-pt'] = "Disponível (A Pedido)"; $text['label-status_available_on_demand']['fr-fr'] = "Disponble (sur demande)"; + $text['label-status_on_demand']['en-us'] = "On Demand"; + $text['label-status_on_demand']['es-cl'] = "A Pedido"; + $text['label-status_on_demand']['pt-pt'] = "A Pedido"; + $text['label-status_on_demand']['fr-fr'] = "Sur Demande"; + $text['label-status_logged_out']['en-us'] = "Logged Out"; $text['label-status_logged_out']['es-cl'] = "Desconectado"; $text['label-status_logged_out']['pt-pt'] = "Desligado"; @@ -46,9 +51,9 @@ $text['label-status_on_break']['fr-fr'] = "En Pause"; $text['label-status_do_not_disturb']['en-us'] = "Do Not Disturb"; - $text['label-status_do_not_disturb']['es-cl'] = "No molestar"; + $text['label-status_do_not_disturb']['es-cl'] = "No Molestar"; $text['label-status_do_not_disturb']['pt-pt'] = "Não Perturbar"; - $text['label-status_do_not_disturb']['fr-fr'] = "Ne pas déranger"; + $text['label-status_do_not_disturb']['fr-fr'] = "Ne pas Déranger"; $text['label-eavesdrop']['en-us'] = "Eavesdrop"; $text['label-eavesdrop']['es-cl'] = "Escuchar"; @@ -60,6 +65,16 @@ $text['label-kill']['pt-pt'] = "Chamada Final"; $text['label-kill']['fr-fr'] = "Tuer Appel"; + $text['label-record']['en-us'] = "Record"; + $text['label-record']['es-cl'] = "Registro"; + $text['label-record']['pt-pt'] = "Registro"; + $text['label-record']['fr-fr'] = "Enregistrer"; + + $text['label-recording']['en-us'] = "Recording"; + $text['label-recording']['es-cl'] = "Grabación de Llamadas"; + $text['label-recording']['pt-pt'] = "Gravação de Chamadas"; + $text['label-recording']['fr-fr'] = "Enregistrement de L'appel"; + $text['button-all']['en-us'] = "All"; $text['button-all']['es-cl'] = "Todos"; $text['button-all']['pt-pt'] = "Tudo"; diff --git a/app/operator_panel/index.php b/app/operator_panel/index.php index ead8a4f1a5..982ed20aa8 100644 --- a/app/operator_panel/index.php +++ b/app/operator_panel/index.php @@ -41,6 +41,33 @@ else { $text[$key] = $value[$_SESSION['domain']['language']['code']]; } +//set user status + if (isset($_REQUEST['status']) && $_REQUEST['status'] != '') { + $user_status = check_str($_REQUEST['status']); + //sql update + $sql = "update v_users set "; + $sql .= "user_status = '".$user_status."' "; + $sql .= "where domain_uuid = '".$_SESSION['domain_uuid']."' "; + $sql .= "and user_uuid = '".$_SESSION['user']['user_uuid']."' "; + if (permission_exists("user_account_setting_edit")) { + $count = $db->exec(check_sql($sql)); + } + + //if call center app is installed then update the user_status + if (is_dir($_SERVER["DOCUMENT_ROOT"].PROJECT_PATH.'/app/call_center')) { + //update the user_status + $fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']); + $switch_cmd .= "callcenter_config agent set status ".$_SESSION['user']['username']."@".$_SESSION['domain_name']." '".$user_status."'"; + $switch_result = event_socket_request($fp, 'api '.$switch_cmd); + + //update the user state + $cmd = "api callcenter_config agent set state ".$_SESSION['user']['username']."@".$_SESSION['domain_name']." Waiting"; + $response = event_socket_request($fp, $cmd); + } + + exit; + } + require_once "resources/header.php"; ?> @@ -213,6 +240,16 @@ require_once "resources/header.php"; } } +//record call + function record_call(chan_uuid) { + if (chan_uuid != '') { + cmd = get_record_cmd(chan_uuid); + if (cmd != '') { + send_cmd('exec.php?cmd='+escape(cmd)); + } + } + } + //used by call control and ajax refresh functions function send_cmd(url) { if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari @@ -323,7 +360,7 @@ require_once "resources/header.php"; DIV.ext { float: left; width: 235px; - margin: 0px 10px 10px 0px; + margin: 0px 8px 8px 0px; padding: 0px; border-style: solid; -moz-border-radius: 5px; diff --git a/app/operator_panel/index_inc.php b/app/operator_panel/index_inc.php index a90a56a679..36c6d0e7e0 100644 --- a/app/operator_panel/index_inc.php +++ b/app/operator_panel/index_inc.php @@ -59,36 +59,53 @@ foreach ($activity as $extension => $fields) { $groups = array_unique($groups); sort($groups); +echo ""; +echo " "; +echo " "; +echo " "; +echo " "; +echo " "; +echo "
"; +echo " ".$text['title-operator_panel'].""; +echo " "; +echo " "; -if (sizeof($groups) > 0) { - echo ""; - echo " "; - echo " "; - echo " "; - echo "
"; - echo " "; - echo " ".$text['label-call_group']."  "; - if (sizeof($groups) > 5) { - //show select box - echo " \n"; - } - else { - //show buttons - echo " "; - foreach ($groups as $group) { - echo " "; - } - } - echo "
"; +$status_options = Array( + "Available" => $text['label-status_available'], + "Available (On Demand)" => $text['label-status_on_demand'], + "On Break" => $text['label-status_on_break'], + "Do Not Disturb" => $text['label-status_do_not_disturb'], + "Logged Out" => $text['label-status_logged_out'] + ); +foreach ($status_options as $status_value => $status_label) { + echo " "; } -echo "".$text['title-operator_panel'].""; -echo "


"; +echo "
"; + +if (sizeof($groups) > 0) { + echo " "; + if (sizeof($groups) > 5) { + //show select box + echo " \n"; + } + else { + //show buttons + echo " "; + foreach ($groups as $group) { + echo " "; + } + } +} + +echo "
"; +echo "
"; foreach ($activity as $extension => $ext) { unset($block); @@ -243,6 +260,17 @@ foreach ($activity as $extension => $ext) { $block .= " "; $block .= "
"; $block .= " ".$ext['call_length']."
"; + //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' && !in_array($extension, $_SESSION['user']['extensions'])) { $block .= ""; diff --git a/app/operator_panel/resources/images/record.png b/app/operator_panel/resources/images/record.png new file mode 100644 index 0000000000..897a15abf5 Binary files /dev/null and b/app/operator_panel/resources/images/record.png differ diff --git a/app/operator_panel/resources/images/recording.png b/app/operator_panel/resources/images/recording.png new file mode 100644 index 0000000000..8a18cb565b Binary files /dev/null and b/app/operator_panel/resources/images/recording.png differ