From f24f2c8f17dd5679dd91f93db8c5d766cf7d4a46 Mon Sep 17 00:00:00 2001 From: Nate Jones Date: Tue, 9 Dec 2014 03:38:02 +0000 Subject: [PATCH] Operator Panel: Added ability to record an extension, and set the current user's status. --- app/operator_panel/app_config.php | 24 ++++- app/operator_panel/app_languages.php | 19 +++- app/operator_panel/index.php | 39 ++++++++- app/operator_panel/index_inc.php | 82 ++++++++++++------ .../resources/images/record.png | Bin 0 -> 813 bytes .../resources/images/recording.png | Bin 0 -> 830 bytes 6 files changed, 130 insertions(+), 34 deletions(-) create mode 100644 app/operator_panel/resources/images/record.png create mode 100644 app/operator_panel/resources/images/recording.png 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 0000000000000000000000000000000000000000..897a15abf5503cc1886ce396d96d52ea061d69f7 GIT binary patch literal 813 zcmV+|1JeA7P)(&U9uvo^$CW#>A7H+&lN4@4Mf5j1T^??r?Z=u&e7{Djpw-ghDYNTB%Yw+Rf)T zH#3=)tZBXrN26BZ-~c2^0-py|B&qFUZ}0Ofy8ghgD5~u^;@rX2=enRM3YfNCU*FnV z-6$3pc5}HM$Fj}{R7q;RIXL)sT-PVdCnwO6Ou{)$14UJ#W}0xE&qHQ=8%l)&G)1HE zYj1Dkx8vN2_4NFZ5YH|rlP|7~j@~X6i!d-g4(Er5fy*+~ZCfayeIynWigM{Rw70Z$ zr~q1@uD_R(t*zImM@C*+hQU)qL(rB;KgCeBHu4ZFCD$v1&D7SU4AJBH?{4m%Gb5!r@`c zQ{^1Wn4>6~U~mPALunvE4Z%cUR;z-P%qSN7IRc|}aEdQe(Ny$00)2wR6<{K<8Y)b~ z01OZ@b<+%U+%RBF$Sv&eLnsmfPBJloRFEQ1g^er4QU4iY9E{;EV`T|H=+MOg1KY?k z9h@IvzQ&l4BHVlD$aJ>Ka+P7v(^MoP@R&t#ek}>`N7kqj)5!fK>deiV`ByDt02FX+N*d z%)G`smcGBR@H7~YXUdg|VE>P)?OmvnK8|DXIonY&jhFrahYI?Y(7)qT+fU_;?=R&Vm3WS%!-5`ybZV zUp-Tld*4f?HE1-B0PO(QL(6)3vA;iC-`@v0nFKAJ2BvA?SF6z2+JegJD)_s*pjsAu z+Syrs9*tg?dwRZ!=+EwG+T7K?zH3!&4B zbexJb8Yy{X{0*Lxq>Sr0 z07&;RGNsIjfJOuWGz?X*Lx2DeZ3#+mmy5*&*BR^Z(7?mUlBxnnQJMk)a6btk30PEy z;IKQ6qjNM412T;4B7~VHaK=JsfdF_;VhHhRM@NqR4+J5E@FwSF5u*k8HZp=zDSRhG z1J;@m%E&_-fd&W9DI=eDMRAyvN^QD$AYxP^bG#5y{P>@Q^^p)tHX#^y53`ZGx(X~Y zGxH873?%GzSbcOjhLMwuqHh{oa-^(iDy!6miHWx?F+QGCMn_jFSYf)L;)PKtlNLy9 z{nH&spo5(V1_pk1Pfk8%c)6LLo4bF|-TmhfFG2|Xzy3L67xqlkK081EK+^RuVV(3? zY07*qo IM6N<$g120Ai~s-t literal 0 HcmV?d00001