diff --git a/app/voicemails/resources/classes/voicemail.php b/app/voicemails/resources/classes/voicemail.php index 9f32927c1a..a140e25b80 100644 --- a/app/voicemails/resources/classes/voicemail.php +++ b/app/voicemails/resources/classes/voicemail.php @@ -711,6 +711,71 @@ $this->message_waiting(); } + public function message_transcribe() { + + //get the voicemail id + $this->get_voicemail_id(); + + //check if for valid input + if (!is_numeric($this->voicemail_id) + || !is_uuid($this->voicemail_uuid) + || !is_uuid($this->domain_uuid) + || !is_uuid($this->voicemail_message_uuid) + ) { + return false; + } + + //add the settings object + $settings = new settings(["domain_uuid" => $_SESSION['domain_uuid'], "user_uuid" => $_SESSION['user_uuid']]); + $transcribe_enabled = $settings->get('transcribe', 'enabled', 'false'); + $transcribe_engine = $settings->get('transcribe', 'engine', ''); + + //transcribe multiple recordings + if ($transcribe_enabled == 'true' && !empty($transcribe_engine)) { + + //add the transcribe object + $transcribe = new transcribe($settings); + + //get each voicemail message file + $file_path = $_SESSION['switch']['voicemail']['dir']."/default/".$_SESSION['domain_name']."/".$this->voicemail_id; + foreach (glob($file_path."/msg_".$this->voicemail_message_uuid.".*") as $file_name) { + //audio to text - get the transcription from the audio file + $transcribe->audio_path = $file_path; + $transcribe->audio_filename = basename($file_name); + $message_transcription = $transcribe->transcribe(); + //build voicemail message data array + if (!empty($message_transcription)) { + $array['voicemail_messages'][0]['voicemail_message_uuid'] = $this->voicemail_message_uuid; + $array['voicemail_messages'][0]['message_transcription'] = $message_transcription; + break; + } + } + + //update the checked rows + if (is_array($array) && @sizeof($array) != 0) { + + //grant temporary permissions + $p = new permissions; + $p->add('voicemail_message_edit', 'temp'); + + //execute update + $database = new database; + $database->app_name = $this->app_name; + $database->app_name = $this->app_uuid; + $database->save($array); + unset($array); + + //revoke temporary permissions + $p->delete('voicemail_message_edit', 'temp'); + + } + + return !empty($message_transcription) ? true : false; + + } + + } + public function message_saved() { //check if for valid input diff --git a/app/voicemails/voicemail_messages.php b/app/voicemails/voicemail_messages.php index e605a53715..3075163b35 100644 --- a/app/voicemails/voicemail_messages.php +++ b/app/voicemails/voicemail_messages.php @@ -85,6 +85,11 @@ exit; } +//add the settings object + $settings = new settings(["domain_uuid" => $_SESSION['domain_uuid'], "user_uuid" => $_SESSION['user_uuid']]); + $transcribe_enabled = $settings->get('transcribe', 'enabled', 'false'); + $transcribe_engine = $settings->get('transcribe', 'engine', ''); + //set the back button url $_SESSION['back'][$_SERVER['PHP_SELF']] = !empty($_GET['back']) ? urldecode($_GET['back']) : ($_SESSION['back'][$_SERVER['PHP_SELF']] ?? PROJECT_PATH.'/app/voicemails/voicemails.php'); @@ -125,12 +130,45 @@ //handle action switch ($action) { + case 'mark_saved': + //transcribe voicemail message + $voicemail = new voicemail; + $voicemail->domain_uuid = $_SESSION['domain_uuid']; + $voicemail->voicemail_uuid = $voicemail_messages[0]['voicemail_uuid']; + $voicemail->voicemail_message_uuid = $voicemail_messages[0]['uuid']; + $voicemail->message_saved(); + // no return, exit + exit; + case 'transcribe': + if ($transcribe_enabled == 'true' && !empty($transcribe_engine) && is_array($voicemail_messages) && @sizeof($voicemail_messages) != 0) { + $messages_transcribed = 0; + foreach ($voicemail_messages as $voicemail_message) { + if (!empty($voicemail_message['checked']) && $voicemail_message['checked'] == 'true' && is_uuid($voicemail_message['uuid']) && is_uuid($voicemail_message['voicemail_uuid'])) { + //transcribe voicemail message + $voicemail = new voicemail; + $voicemail->domain_uuid = $_SESSION['domain_uuid']; + $voicemail->voicemail_uuid = $voicemail_message['voicemail_uuid']; + $voicemail->voicemail_message_uuid = $voicemail_message['uuid']; + $result = $voicemail->message_transcribe(); + unset($voicemail); + //increment counter + if ($result == true) { + $messages_transcribed++; + } + } + } + //set message + if ($messages_transcribed != 0) { + message::add($text['message-audio_transcribed'].': '.$messages_transcribed); + } + } + break; case 'toggle': if (is_array($voicemail_messages) && @sizeof($voicemail_messages) != 0) { $messages_toggled = 0; foreach ($voicemail_messages as $voicemail_message) { if (!empty($voicemail_message['checked']) && $voicemail_message['checked'] == 'true' && is_uuid($voicemail_message['uuid']) && is_uuid($voicemail_message['voicemail_uuid'])) { - //delete voicemail message + //toggle voicemail message $voicemail = new voicemail; $voicemail->domain_uuid = $_SESSION['domain_uuid']; $voicemail->voicemail_uuid = $voicemail_message['voicemail_uuid']; @@ -204,16 +242,20 @@ $vm->order = $order; $voicemails = $vm->messages(); -//count messages +//count messages and detect if any transcriptions available $new_messages = $num_rows = 0; - if (is_array($voicemails) && @sizeof($voicemails) != 0) { + $transcriptions_exists = false; + if (!empty($voicemails) && is_array($voicemails)) { foreach ($voicemails as $voicemail) { - if (is_array($voicemail['messages'])) { + if (!empty($voicemail['messages']) && is_array($voicemail['messages'])) { $num_rows += sizeof($voicemail['messages']); foreach ($voicemail['messages'] as $message) { if ($message['message_status'] != 'saved') { $new_messages++; } + if ($transcribe_enabled == 'true' && !empty($transcribe_engine) && !empty($message['message_transcription'])) { + $transcriptions_exists = true; + } } } } @@ -232,11 +274,17 @@ echo "
".$text['title-voicemail_messages']." (".$num_rows.")
\n"; echo "
\n"; echo button::create(['type'=>'button','label'=>$text['button-back'],'icon'=>$_SESSION['theme']['button_icon_back'],'id'=>'btn_back','link'=>$_SESSION['back'][$_SERVER['PHP_SELF']]]); + $margin_left = false; + if ($transcribe_enabled == 'true' && !empty($transcribe_engine) && $num_rows) { + echo button::create(['type'=>'button','label'=>$text['button-transcribe'],'icon'=>'quote-right','id'=>'btn_transcribe','name'=>'btn_transcribe','collapse'=>'hide-xs','style'=>'display: none; margin-left: 15px;','onclick'=>"list_action_set('transcribe'); list_form_submit('form_list');"]); + $margin_left = true; + } if ($num_rows) { - echo button::create(['type'=>'button','label'=>$text['button-toggle'],'icon'=>$_SESSION['theme']['button_icon_toggle'],'id'=>'btn_toggle','name'=>'btn_toggle','collapse'=>'hide-xs','style'=>'margin-left: 15px; display: none;','onclick'=>"modal_open('modal-toggle','btn_toggle');"]); + echo button::create(['type'=>'button','label'=>$text['button-toggle'],'icon'=>$_SESSION['theme']['button_icon_toggle'],'id'=>'btn_toggle','name'=>'btn_toggle','collapse'=>'hide-xs','style'=>'display: none;'.(!$margin_left ? 'margin-left: 15px;' : null),'onclick'=>"modal_open('modal-toggle','btn_toggle');"]); + $margin_left = true; } if (permission_exists('voicemail_message_delete') && $num_rows) { - echo button::create(['type'=>'button','label'=>$text['button-delete'],'icon'=>$_SESSION['theme']['button_icon_delete'],'id'=>'btn_delete','name'=>'btn_delete','collapse'=>'hide-xs','style'=>'display: none;','onclick'=>"modal_open('modal-delete','btn_delete');"]); + echo button::create(['type'=>'button','label'=>$text['button-delete'],'icon'=>$_SESSION['theme']['button_icon_delete'],'id'=>'btn_delete','name'=>'btn_delete','collapse'=>'hide-xs','style'=>'display: none;'.(!$margin_left ? 'margin-left: 15px;' : null),'onclick'=>"modal_open('modal-delete','btn_delete');"]); } echo "
\n"; echo "
\n"; @@ -337,8 +385,11 @@ echo ""; echo button::create(['type'=>'button','title'=>$text['label-play'].' / '.$text['label-pause'],'icon'=>$_SESSION['theme']['button_icon_play'],'id'=>'recording_button_'.escape($row['voicemail_message_uuid']),'onclick'=>"recording_play('".escape($row['voicemail_message_uuid'])."','".$row['voicemail_id'].'|'.$row['voicemail_uuid']."','message');"]); echo button::create(['type'=>'button','title'=>$text['label-download'],'icon'=>$_SESSION['theme']['button_icon_download'],'link'=>"voicemail_messages.php?action=download&id=".urlencode($row['voicemail_id'])."&voicemail_uuid=".escape($row['voicemail_uuid'])."&uuid=".escape($row['voicemail_message_uuid'])."&t=bin&r=".uuid(),'onclick'=>"$(this).closest('tr').children('td').css('font-weight','normal');"]); - if (!empty($_SESSION['voicemail']['transcribe_enabled']['boolean']) && $_SESSION['voicemail']['transcribe_enabled']['boolean'] == 'true' && $row['message_transcription'] != '') { - echo button::create(['type'=>'button','title'=>$text['label-transcription'],'icon'=>'quote-right','onclick'=>"document.getElementById('transcription_".$row['voicemail_message_uuid']."').style.display = document.getElementById('transcription_".$row['voicemail_message_uuid']."').style.display == 'none' ? 'table-row' : 'none'; this.blur(); return false;"]); + if ( + (!empty($_SESSION['voicemail']['transcribe_enabled']['boolean']) && $_SESSION['voicemail']['transcribe_enabled']['boolean'] == 'true' && !empty($row['message_transcription'])) || + ($transcribe_enabled == 'true' && !empty($transcribe_engine) && $transcriptions_exists === true) + ) { + echo button::create(['type'=>'button','title'=>$text['label-transcription'],'icon'=>'quote-right','style'=>(empty($row['message_transcription']) ? 'visibility:hidden;' : null),'onclick'=>(!empty($bold) ? "mark_saved('".$row['voicemail_message_uuid']."', '".$row['voicemail_uuid']."');" : null)."document.getElementById('transcription_".$row['voicemail_message_uuid']."').style.display = document.getElementById('transcription_".$row['voicemail_message_uuid']."').style.display == 'none' ? 'table-row' : 'none'; this.blur(); return false;"]); } echo " \n"; echo " ".escape($row['message_length_label'])."\n"; @@ -346,7 +397,10 @@ echo " ".escape($row['file_size_label'])."\n"; } echo "\n"; - if (!empty($_SESSION['voicemail']['transcribe_enabled']['boolean']) && $_SESSION['voicemail']['transcribe_enabled']['boolean'] == 'true' && !empty($row['message_transcription'])) { + if ( + (!empty($_SESSION['voicemail']['transcribe_enabled']['boolean']) && $_SESSION['voicemail']['transcribe_enabled']['boolean'] == 'true' && !empty($row['message_transcription'])) || + ($transcribe_enabled == 'true' && !empty($transcribe_engine) && $transcriptions_exists === true) + ) { echo "\n"; // dummy row to maintain same background color for transcription row echo "\n"; echo " \n"; @@ -395,7 +449,18 @@ echo " });\n"; echo "\n"; +//if viewing transcription, mark message as read/saved + if ($transcriptions_exists) { + echo "\n"; + } + //include the footer require_once "resources/footer.php"; -?> +?> \ No newline at end of file