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 "