Voicemail Messages: Add Resend feature, fix manual Transcription if voicemail stored as base64.

This commit is contained in:
fusionate
2024-07-10 16:28:41 -06:00
parent 5af4610a9c
commit ea7fb60533
4 changed files with 483 additions and 22 deletions

View File

@@ -2258,6 +2258,32 @@ $text['button-toggle']['zh-cn'] = "切换";
$text['button-toggle']['ja-jp'] = "トグル";
$text['button-toggle']['ko-kr'] = "비녀장";
$text['button-resend']['en-us'] = "Resend";
$text['button-resend']['en-gb'] = "Resend";
$text['button-resend']['ar-eg'] = "إعادة إرسال";
$text['button-resend']['de-at'] = "Erneut senden";
$text['button-resend']['de-ch'] = "Erneut senden";
$text['button-resend']['de-de'] = "Erneut senden";
$text['button-resend']['el-gr'] = "Εκ νέου αποστολή";
$text['button-resend']['es-cl'] = "Reenviar";
$text['button-resend']['es-mx'] = "Reenviar";
$text['button-resend']['fr-ca'] = "Renvoyer";
$text['button-resend']['fr-fr'] = "Renvoyer";
$text['button-resend']['he-il'] = "שלח שוב";
$text['button-resend']['it-it'] = "Invia nuovamente";
$text['button-resend']['nl-nl'] = "Opnieuw versturen";
$text['button-resend']['pl-pl'] = "Wysłać ponownie";
$text['button-resend']['pt-br'] = "Reenviar";
$text['button-resend']['pt-pt'] = "Reenviar";
$text['button-resend']['ro-ro'] = "Retrimiteți";
$text['button-resend']['ru-ru'] = "Отправить";
$text['button-resend']['sv-se'] = "Skicka igen";
$text['button-resend']['uk-ua'] = "Надіслати повторно";
$text['button-resend']['tr-tr'] = "Yeniden gönder";
$text['button-resend']['zh-cn'] = "重发";
$text['button-resend']['ja-jp'] = "再送信";
$text['button-resend']['ko-kr'] = "재전송";
$text['button-settings']['en-us'] = "Settings";
$text['button-settings']['en-gb'] = "Settings";
$text['button-settings']['ar-eg'] = "إعدادات";
@@ -2310,4 +2336,134 @@ $text['button-greetings']['zh-cn'] = "问候";
$text['button-greetings']['ja-jp'] = "ご挨拶";
$text['button-greetings']['ko-kr'] = "인사말";
?>
$text['modal_title-resend']['en-us'] = "Resend Email";
$text['modal_title-resend']['en-gb'] = "Resend Email";
$text['modal_title-resend']['ar-eg'] = "إعادة إرسال البريد الإلكتروني";
$text['modal_title-resend']['de-at'] = "E-Mail zurücksenden";
$text['modal_title-resend']['de-ch'] = "E-Mail zurücksenden";
$text['modal_title-resend']['de-de'] = "E-Mail zurücksenden";
$text['modal_title-resend']['el-gr'] = "Ξαναστείλτε ηλεκτρονικό μήνυμα";
$text['modal_title-resend']['es-cl'] = "Reenviar email";
$text['modal_title-resend']['es-mx'] = "Reenviar email";
$text['modal_title-resend']['fr-ca'] = "Ré-envoyer l'email";
$text['modal_title-resend']['fr-fr'] = "Ré-envoyer l'email";
$text['modal_title-resend']['he-il'] = "שלח אימייל מחדש";
$text['modal_title-resend']['it-it'] = "Rinvia l'e-mail";
$text['modal_title-resend']['nl-nl'] = "Email opnieuw verzenden";
$text['modal_title-resend']['pl-pl'] = "Ponownie wysłać wiadomość e-mail";
$text['modal_title-resend']['pt-br'] = "Reenviar email";
$text['modal_title-resend']['pt-pt'] = "Reenviar email";
$text['modal_title-resend']['ro-ro'] = "Retrimiteți e-mailul";
$text['modal_title-resend']['ru-ru'] = "Отправить письмо повторно";
$text['modal_title-resend']['sv-se'] = "Skicka email igen";
$text['modal_title-resend']['uk-ua'] = "Повторно надіслати електронний лист";
$text['modal_title-resend']['tr-tr'] = "Elektronik postayı tekrar gönder";
$text['modal_title-resend']['zh-cn'] = "重发电子邮件";
$text['modal_title-resend']['ja-jp'] = "メールを再送";
$text['modal_title-resend']['ko-kr'] = "이메일 재전송";
$text['modal_message-resend']['en-us'] = "You are about to resend email notifications for the selected voicemail message(s).";
$text['modal_message-resend']['en-gb'] = "You are about to resend email notifications for the selected voicemail message(s).";
$text['modal_message-resend']['ar-eg'] = "أنت على وشك إعادة إرسال إشعارات البريد الإلكتروني لرسالة (رسائل) البريد الصوتي المحددة.";
$text['modal_message-resend']['de-at'] = "Sie sind dabei, E-Mail-Benachrichtigungen für die ausgewählte(n) Voicemail-Nachricht(en) erneut zu senden.";
$text['modal_message-resend']['de-ch'] = "Sie sind dabei, E-Mail-Benachrichtigungen für die ausgewählte(n) Voicemail-Nachricht(en) erneut zu senden.";
$text['modal_message-resend']['de-de'] = "Sie sind dabei, E-Mail-Benachrichtigungen für die ausgewählte(n) Voicemail-Nachricht(en) erneut zu senden.";
$text['modal_message-resend']['el-gr'] = "Πρόκειται να στείλετε ξανά ειδοποιήσεις email για τα επιλεγμένα μηνύματα αυτόματου τηλεφωνητή.";
$text['modal_message-resend']['es-cl'] = "Está a punto de reenviar notificaciones por correo electrónico para los mensajes de correo de voz seleccionados.";
$text['modal_message-resend']['es-mx'] = "Está a punto de reenviar notificaciones por correo electrónico para los mensajes de correo de voz seleccionados.";
$text['modal_message-resend']['fr-ca'] = "Vous êtes sur le point de renvoyer des notifications par e-mail pour le(s) message(s) vocal(s) sélectionné(s).";
$text['modal_message-resend']['fr-fr'] = "Vous êtes sur le point de renvoyer des notifications par e-mail pour le(s) message(s) vocal(s) sélectionné(s).";
$text['modal_message-resend']['he-il'] = 'אתה עומד לשלוח שוב הודעות דוא"ל עבור הודעות הדואר הקולי שנבחרו.';
$text['modal_message-resend']['it-it'] = "Stai per inviare nuovamente le notifiche e-mail per i messaggi di posta vocale selezionati.";
$text['modal_message-resend']['nl-nl'] = "U staat op het punt opnieuw e-mailmeldingen te verzenden voor de geselecteerde voicemailberichten.";
$text['modal_message-resend']['pl-pl'] = "Zamierzasz ponownie wysłać powiadomienia e-mail dotyczące wybranych wiadomości poczty głosowej.";
$text['modal_message-resend']['pt-br'] = "Você está prestes a reenviar notificações por e-mail para as mensagens de correio de voz selecionadas.";
$text['modal_message-resend']['pt-pt'] = "Está prestes a reenviar as notificações por e-mail para as mensagens de correio de voz selecionadas.";
$text['modal_message-resend']['ro-ro'] = "Sunteți pe cale să retrimiteți notificări prin e-mail pentru mesajele vocale selectate.";
$text['modal_message-resend']['ru-ru'] = "Вы собираетесь повторно отправить уведомления по электронной почте для выбранных сообщений голосовой почты.";
$text['modal_message-resend']['sv-se'] = "Du är på väg att skicka e-postmeddelanden igen för de valda röstmeddelandena.";
$text['modal_message-resend']['uk-ua'] = "Ви збираєтеся повторно надіслати сповіщення електронною поштою для вибраних повідомлень голосової пошти.";
$text['modal_message-resend']['tr-tr'] = "Seçilen sesli posta mesajları için e-posta bildirimlerini yeniden göndermek üzeresiniz.";
$text['modal_message-resend']['zh-cn'] = "您即将重新发送所选语音邮件的电子邮件通知。";
$text['modal_message-resend']['ja-jp'] = "選択したボイスメール メッセージの電子メール通知を再送信しようとしています。";
$text['modal_message-resend']['ko-kr'] = "선택한 음성 메일 메시지에 대한 이메일 알림을 다시 보내려고 합니다.";
$text['label-voicemail_from']['en-us'] = "Voicemail from";
$text['label-voicemail_from']['en-gb'] = "Voicemail from";
$text['label-voicemail_from']['ar-eg'] = "- البريد الصوتي";
$text['label-voicemail_from']['de-at'] = "Voicemail -";
$text['label-voicemail_from']['de-ch'] = "Voicemail -";
$text['label-voicemail_from']['de-de'] = "Voicemail -";
$text['label-voicemail_from']['el-gr'] = "Τηλεφωνητής -";
$text['label-voicemail_from']['es-cl'] = "Correo de Voz -";
$text['label-voicemail_from']['es-mx'] = "Correo de Voz -";
$text['label-voicemail_from']['fr-ca'] = "Messagerie vocale -";
$text['label-voicemail_from']['fr-fr'] = "Messagerie vocale -";
$text['label-voicemail_from']['he-il'] = " -תא קולי";
$text['label-voicemail_from']['it-it'] = "Casella Vocale -";
$text['label-voicemail_from']['nl-nl'] = "Voicemail -";
$text['label-voicemail_from']['pl-pl'] = "Poczta głosowa -";
$text['label-voicemail_from']['pt-br'] = "Correio de voz -";
$text['label-voicemail_from']['pt-pt'] = "Correio de Voz -";
$text['label-voicemail_from']['ro-ro'] = "Mesageria vocală -";
$text['label-voicemail_from']['ru-ru'] = "Голосовая почта -";
$text['label-voicemail_from']['sv-se'] = "Röstbrevlåda -";
$text['label-voicemail_from']['uk-ua'] = "Голосова пошта -";
$text['label-voicemail_from']['tr-tr'] = "Sesli mesaj -";
$text['label-voicemail_from']['zh-cn'] = "语音信箱 -";
$text['label-voicemail_from']['ja-jp'] = "ボイスメール -";
$text['label-voicemail_from']['ko-kr'] = "음성사서함 -";
$text['label-attached']['en-us'] = "Attached";
$text['label-attached']['en-gb'] = "Attached";
$text['label-attached']['ar-eg'] = "مُرفَق";
$text['label-attached']['de-at'] = "Beigefügt";
$text['label-attached']['de-ch'] = "Beigefügt";
$text['label-attached']['de-de'] = "Beigefügt";
$text['label-attached']['el-gr'] = "Επισυνάπτεται";
$text['label-attached']['es-cl'] = "Adjunto";
$text['label-attached']['es-mx'] = "Adjunto";
$text['label-attached']['fr-ca'] = "Ci-joint";
$text['label-attached']['fr-fr'] = "Ci-joint";
$text['label-attached']['he-il'] = "מְצוֹרָף";
$text['label-attached']['it-it'] = "Allegato";
$text['label-attached']['nl-nl'] = "Bijgevoegd";
$text['label-attached']['pl-pl'] = "Przyłączony";
$text['label-attached']['pt-br'] = "Apegado";
$text['label-attached']['pt-pt'] = "Anexado";
$text['label-attached']['ro-ro'] = "Atașat";
$text['label-attached']['ru-ru'] = "Прикрепил";
$text['label-attached']['sv-se'] = "Bifogad";
$text['label-attached']['uk-ua'] = "Додається";
$text['label-attached']['tr-tr'] = "Ekli";
$text['label-attached']['zh-cn'] = "随附的";
$text['label-attached']['ja-jp'] = "添付";
$text['label-attached']['ko-kr'] = "첨부된";
$text['label-listen']['en-us'] = "Listen";
$text['label-listen']['en-gb'] = "Listen";
$text['label-listen']['ar-eg'] = "يستمع";
$text['label-listen']['de-at'] = "Hören";
$text['label-listen']['de-ch'] = "Hören";
$text['label-listen']['de-de'] = "Hören";
$text['label-listen']['el-gr'] = "Ακούω";
$text['label-listen']['es-cl'] = "Escuchar";
$text['label-listen']['es-mx'] = "Escuchar";
$text['label-listen']['fr-ca'] = "Écouter";
$text['label-listen']['fr-fr'] = "Écouter";
$text['label-listen']['he-il'] = "להקשיב";
$text['label-listen']['it-it'] = "Ascoltare";
$text['label-listen']['nl-nl'] = "Luisteren";
$text['label-listen']['pl-pl'] = "Słuchać";
$text['label-listen']['pt-br'] = "Ouvir";
$text['label-listen']['pt-pt'] = "Escutar";
$text['label-listen']['ro-ro'] = "Asculta";
$text['label-listen']['ru-ru'] = "Слушать";
$text['label-listen']['sv-se'] = "Lyssna";
$text['label-listen']['uk-ua'] = "Слухай";
$text['label-listen']['tr-tr'] = "Dinlemek";
$text['label-listen']['zh-cn'] = "";
$text['label-listen']['ja-jp'] = "聞く";
$text['label-listen']['ko-kr'] = "듣다";
?>

View File

@@ -718,44 +718,309 @@
$this->message_waiting();
}
public function message_resend() {
//check if for valid input
if (!is_uuid($this->voicemail_uuid)
|| !is_uuid($this->domain_uuid)
|| !is_uuid($this->voicemail_message_uuid)
) {
return false;
}
//add multi-lingual support
$language = new text;
$text = $language->get();
//add the settings object
$settings = new settings(["domain_uuid" => $_SESSION['domain_uuid'], "user_uuid" => $_SESSION['user_uuid']]);
$email_from = $settings->get('email', 'smtp_from', '');
$email_from_name = $settings->get('email', 'smtp_from_name', 'PBX');
$switch_scripts = $settings->get('switch', 'scripts', '/usr/share/freeswitch/scripts');
$switch_voicemail = $settings->get('switch', 'voicemail', '/var/lib/freeswitch/storage/voicemail');
$language_dialect = $settings->get('domain', 'language', 'en-us');
$time_zone = $settings->get('domain', 'time_zone', 'UTC');
$display_domain_name = $settings->get('voicemail', 'display_domain_name', 'false');
//get voicemail message details
$sql = "select ";
$sql .= " vm.*, ";
$sql .= " to_char(timezone(:time_zone, to_timestamp(vm.created_epoch)), 'Day DD Mon YYYY HH:MI:SS PM') as message_date, ";
$sql .= " v.voicemail_id, ";
$sql .= " v.voicemail_mail_to, ";
$sql .= " v.voicemail_description, ";
$sql .= " v.voicemail_file, ";
$sql .= " d.domain_name ";
$sql .= "from ";
$sql .= " v_voicemail_messages as vm ";
$sql .= " left join v_voicemails as v on vm.voicemail_uuid = v.voicemail_uuid ";
$sql .= " left join v_domains as d on vm.domain_uuid = d.domain_uuid ";
$sql .= "where ";
$sql .= " vm.voicemail_message_uuid = :voicemail_message_uuid ";
$sql .= "limit 1" ;
$parameters['time_zone'] = $time_zone;
$parameters['voicemail_message_uuid'] = $this->voicemail_message_uuid;
$database = new database;
$message = $database->select($sql, $parameters, 'row');
unset($sql, $parameters);
//retrieve appropriate email template
$sql = "select ";
$sql .= " template_subject, ";
$sql .= " template_body ";
$sql .= "from ";
$sql .= " v_email_templates ";
$sql .= "where ";
$sql .= " template_language = :template_language ";
$sql .= " and template_category = 'voicemail' ";
$sql .= " and template_subcategory = '".(!empty($message['message_transcription']) ? 'transcription' : 'default')."' ";
$sql .= " and template_type = 'html' ";
$sql .= " and template_enabled = 'true' ";
$sql .= " and (domain_uuid = :domain_uuid or domain_uuid is null) ";
$sql .= "limit 1 ";
$parameters['template_language'] = $language_dialect;
$parameters['domain_uuid'] = $this->domain_uuid;
$template = $database->select($sql, $parameters, 'row');
unset($sql, $parameters);
//determine formatted voicemail name
$voicemail_name_formatted = $message['voicemail_id'];
if ($display_domain_name == 'true') {
$voicemail_name_formatted = $message['voicemail_id'].'@'.$message['domain_name'];
}
if (!empty($message['voicemail_description'])) {
$voicemail_name_formatted .= ' ('.$message['voicemail_description'].')';
}
//replace subject variables
if (!empty($template['template_subject'])) {
$template['template_subject'] = str_replace('${caller_id_name}', $message['caller_id_name'], $template['template_subject']);
$template['template_subject'] = str_replace('${caller_id_number}', $message['caller_id_number'], $template['template_subject']);
$template['template_subject'] = str_replace('${message_date}', $message['message_date'], $template['template_subject']);
$template['template_subject'] = str_replace('${message_duration}', '0'.gmdate("G:i:s", ($message['message_length'] ?? 0)), $template['template_subject']);
$template['template_subject'] = str_replace('${account}', $voicemail_name_formatted, $template['template_subject']);
$template['template_subject'] = str_replace('${voicemail_id}', $message['voicemail_id'], $template['template_subject']);
$template['template_subject'] = str_replace('${voicemail_description}', $message['voicemail_description'], $template['template_subject']);
$template['template_subject'] = str_replace('${voicemail_name_formatted}', $voicemail_name_formatted, $template['template_subject']);
$template['template_subject'] = str_replace('${domain_name}', $message['domain_name'], $template['template_subject']);
}
else {
$template['template_subject'] = $text['label-voicemail_from'].' '.$message['caller_id_name'].' <'.$message['caller_id_number'].'> 0'.gmdate("G:i:s", ($message['message_length'] ?? 0));
}
//encode subject
$template['template_subject'] = trim(iconv_mime_encode(null, $template['template_subject'], ['scheme'=>'B','output-charset'=>'utf-8', 'line-break-chars'=>"\n"]), ': ');
//determine voicemail message file path and type
$voicemail_message_path = $switch_voicemail.'/default/'.$message['domain_name'].'/'.$message['voicemail_id'];
if (
!empty($message['message_base64']) &&
!file_exists($voicemail_message_path.'/msg_'.$message['voicemail_message_uuid'].'.wav') &&
!file_exists($voicemail_message_path.'/msg_'.$message['voicemail_message_uuid'].'.mp3')
) {
$voicemail_message_decoded = base64_decode($message['message_base64']);
file_put_contents($voicemail_message_path.'/msg_'.$message['voicemail_message_uuid'].'.ext', $voicemail_message_decoded);
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$voicemail_message_file_mime = finfo_file($finfo, $voicemail_message_path.'/msg_'.$message['voicemail_message_uuid'].'.ext');
finfo_close($finfo);
unset($voicemail_message_decoded);
switch ($voicemail_message_file_mime) {
case 'audio/x-wav':
case 'audio/wav':
$voicemail_message_file_ext = 'wav';
break;
case 'audio/mpeg':
case 'audio/mp3':
$voicemail_message_file_ext = 'mp3';
break;
}
rename($voicemail_message_path.'/msg_'.$message['voicemail_message_uuid'].'.ext', $voicemail_message_path.'/msg_'.$message['voicemail_message_uuid'].'.'.$voicemail_message_file_ext);
$voicemail_message_file = 'msg_'.$message['voicemail_message_uuid'].'.'.$voicemail_message_file_ext;
}
else {
if (file_exists($voicemail_message_path.'/msg_'.$message['voicemail_message_uuid'].'.wav')) { $voicemail_message_file_ext = 'wav'; }
if (file_exists($voicemail_message_path.'/msg_'.$message['voicemail_message_uuid'].'.mp3')) { $voicemail_message_file_ext = 'mp3'; }
$voicemail_message_file = 'msg_'.$message['voicemail_message_uuid'].'.'.$voicemail_message_file_ext;
$voicemail_message_file_mime = mime_content_type($voicemail_message_path.'/msg_'.$message['voicemail_message_uuid'].'.'.$voicemail_message_file_ext);
}
//replace body variables
if (!empty($template['template_body'])) {
$template['template_body'] = str_replace('${caller_id_name}', $message['caller_id_name'], $template['template_body']);
$template['template_body'] = str_replace('${caller_id_number}', $message['caller_id_number'], $template['template_body']);
$template['template_body'] = str_replace('${message_date}', $message['message_date'], $template['template_body']);
$template['template_body'] = str_replace('${message_text}', $message['message_transcription'], $template['template_body']);
$template['template_body'] = str_replace('${message_duration}', '0'.gmdate("G:i:s", ($message['message_length'] ?? 0)), $template['template_body']);
$template['template_body'] = str_replace('${account}', $voicemail_name_formatted, $template['template_body']);
$template['template_body'] = str_replace('${voicemail_id}', $message['voicemail_id'], $template['template_body']);
$template['template_body'] = str_replace('${voicemail_description}', $message['voicemail_description'], $template['template_body']);
$template['template_body'] = str_replace('${voicemail_name_formatted}', $voicemail_name_formatted, $template['template_body']);
$template['template_body'] = str_replace('${domain_name}', $message['domain_name'], $template['template_body']);
$template['template_body'] = str_replace('${sip_to_user}', $message['voicemail_id'], $template['template_body']);
$template['template_body'] = str_replace('${dialed_user}', $message['voicemail_id'], $template['template_body']);
if (!empty($message['voicemail_file'])) {
if ($message['voicemail_file'] == 'attach' && file_exists($voicemail_message_path.'/'.$voicemail_message_file)) {
$template['template_body'] = str_replace('${message}', $text['label-attached'], $template['template_body']);
}
else if ($message['voicemail_file'] == 'link') {
$template['template_body'] = str_replace('${message}', "<a href='https://".$message['domain_name'].PROJECT_PATH.'/app/voicemails/voicemail_messages.php?action=download&id='.$message['voicemail_id'].'&voicemail_uuid='.$message['voicemail_uuid'].'&uuid='.$message['voicemail_message_uuid']."&t=bin'>".$text['label-download']."</a>", $template['template_body']);
}
else { // listen
$template['template_body'] = str_replace('${message}', "<a href='https://".$message['domain_name'].PROJECT_PATH.'/app/voicemails/voicemail_messages.php?action=autoplay&id='.$message['voicemail_uuid'].'&uuid='.$message['voicemail_message_uuid'].'&vm='.$message['voicemail_id']."'>".$text['label-listen']."</a>", $template['template_body']);
}
}
}
else {
$template['template_body'] = "<html>\n<body>\n";
if (!empty($message['caller_id_name']) && $message['caller_id_name'] != $message['caller_id_number']) {
$template['template_body'] .= $message['caller_id_name']."<br>\n";
}
$template['template_body'] .= $message['caller_id_number']."<br>\n";
$template['template_body'] .= $message['message_date']."<br>\n";
if (!empty($message['voicemail_file'])) {
if ($message['voicemail_file'] == 'attach' && file_exists($voicemail_message_path.'/'.$voicemail_message_file)) {
$template['template_body'] .= "<br>\n".$text['label-attached'];
}
else if ($message['voicemail_file'] == 'link') {
$template['template_body'] .= "<br>\n<a href='https://".$message['domain_name'].PROJECT_PATH.'/app/voicemails/voicemail_messages.php?action=download&id='.$message['voicemail_id'].'&voicemail_uuid='.$message['voicemail_uuid'].'&uuid='.$message['voicemail_message_uuid']."&t=bin'>".$text['label-download'].'</a>';
}
else { // listen
$template['template_body'] .= "<br>\n<a href='https://".$message['domain_name'].PROJECT_PATH.'/app/voicemails/voicemail_messages.php?action=autoplay&id='.$message['voicemail_uuid'].'&uuid='.$message['voicemail_message_uuid'].'&vm='.$message['voicemail_id']."'>".$text['label-listen'].'</a>';
}
}
$template['template_body'] .= "\n</body>\n</html>";
}
//build message status update array
$array['email_queue'][0]['email_queue_uuid'] = $email_queue_uuid = uuid();
$array['email_queue'][0]['domain_uuid'] = $this->domain_uuid;
$array['email_queue'][0]['hostname'] = gethostname();
$array['email_queue'][0]['email_date'] = 'now()';
$array['email_queue'][0]['email_from'] = $email_from_name.'<'.$email_from.'>';
$array['email_queue'][0]['email_to'] = $message['voicemail_mail_to'];
$array['email_queue'][0]['email_subject'] = $template['template_subject'];
$array['email_queue'][0]['email_body'] = $template['template_body'];
$array['email_queue'][0]['email_status'] = 'waiting';
$array['email_queue'][0]['email_uuid'] = $this->voicemail_message_uuid;
$array['email_queue'][0]['email_transcription'] = $message['message_transcription'];
$array['email_queue'][0]['insert_date'] = 'now()';
$array['email_queue'][0]['insert_user'] = $_SESSION['user_uuid'];
//add voicemail file details (and/or base64) to queue attachments
if (!empty($message['voicemail_file']) && $message['voicemail_file'] == 'attach' && file_exists($voicemail_message_path.'/'.$voicemail_message_file)) {
$array['email_queue_attachments'][0]['email_queue_attachment_uuid'] = uuid();
$array['email_queue_attachments'][0]['domain_uuid'] = $this->domain_uuid;
$array['email_queue_attachments'][0]['email_queue_uuid'] = $email_queue_uuid;
$array['email_queue_attachments'][0]['email_attachment_type'] = $voicemail_message_file_ext;
$array['email_queue_attachments'][0]['email_attachment_path'] = $voicemail_message_path;
$array['email_queue_attachments'][0]['email_attachment_name'] = $voicemail_message_file;
$array['email_queue_attachments'][0]['email_attachment_base64'] = $message['message_base64'];
$array['email_queue_attachments'][0]['email_attachment_cid'] = !empty($message['message_base64']) ? uuid() : null;
$array['email_queue_attachments'][0]['email_attachment_mime_type'] = $voicemail_message_file_mime;
$array['email_queue_attachments'][0]['insert_date'] = 'now()';
$array['email_queue_attachments'][0]['insert_user'] = $_SESSION['user_uuid'];
}
//grant temporary permissions
$p = new permissions;
$p->add('email_queue_add', 'temp');
$p->add('email_queue_attachment_add', '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('email_queue_add', 'temp');
$p->delete('email_queue_attachment_add', 'temp');
//remove temp file from base64 output
if (!empty($message['message_base64']) && file_exists($voicemail_message_path.'/'.$voicemail_message_file)) {
@unlink($voicemail_message_path.'/'.$voicemail_message_file);
}
}
public function message_transcribe() {
//get the voicemail id
$this->get_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;
}
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', '');
$switch_voicemail = $settings->get('switch', 'voicemail', '/var/lib/freeswitch/storage/voicemail');
//transcribe multiple recordings
if ($transcribe_enabled == 'true' && !empty($transcribe_engine)) {
//get voicemail message base64
$sql = "select message_base64 from v_voicemail_messages where voicemail_message_uuid = :voicemail_message_uuid ";
$parameters['voicemail_message_uuid'] = $this->voicemail_message_uuid;
$database = new database;
$voicemail_message_base64 = $database->select($sql, $parameters, 'column');
unset($sql, $parameters);
//define voicemail message file path
$voicemail_message_path = $switch_voicemail.'/default/'.$_SESSION['domain_name'].'/'.$this->voicemail_id;
//determine voicemail message file properties (decode if base64)
if (
!empty($voicemail_message_base64) &&
!file_exists($voicemail_message_path.'/msg_'.$this->voicemail_message_uuid.'.wav') &&
!file_exists($voicemail_message_path.'/msg_'.$this->voicemail_message_uuid.'.mp3')
) {
$voicemail_message_decoded = base64_decode($voicemail_message_base64);
file_put_contents($voicemail_message_path.'/msg_'.$this->voicemail_message_uuid.'.ext', $voicemail_message_decoded);
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$voicemail_message_file_mime = finfo_file($finfo, $voicemail_message_path.'/msg_'.$this->voicemail_message_uuid.'.ext');
finfo_close($finfo);
switch ($voicemail_message_file_mime) {
case 'audio/x-wav':
case 'audio/wav':
$voicemail_message_file_ext = 'wav';
break;
case 'audio/mpeg':
case 'audio/mp3':
$voicemail_message_file_ext = 'mp3';
break;
}
unset($voicemail_message_decoded, $voicemail_message_file_mime);
rename($voicemail_message_path.'/msg_'.$this->voicemail_message_uuid.'.ext', $voicemail_message_path.'/msg_'.$this->voicemail_message_uuid.'.'.$voicemail_message_file_ext);
$voicemail_message_file = 'msg_'.$this->voicemail_message_uuid.'.'.$voicemail_message_file_ext;
}
else {
if (file_exists($voicemail_message_path.'/msg_'.$this->voicemail_message_uuid.'.wav')) { $voicemail_message_file_ext = 'wav'; }
if (file_exists($voicemail_message_path.'/msg_'.$this->voicemail_message_uuid.'.mp3')) { $voicemail_message_file_ext = 'mp3'; }
$voicemail_message_file = 'msg_'.$this->voicemail_message_uuid.'.'.$voicemail_message_file_ext;
}
unset($voicemail_message_file_ext);
//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;
}
//transcribe the voicemail message file
$transcribe->audio_path = $voicemail_message_path;
$transcribe->audio_filename = basename($voicemail_message_file);
$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;
}
//update the checked rows
@@ -777,6 +1042,11 @@
}
//remove temp file from base64 output
if (!empty($voicemail_message_base64) && file_exists($voicemail_message_path.'/'.$voicemail_message_file)) {
@unlink($voicemail_message_path.'/'.$voicemail_message_file);
}
return !empty($message_transcription) ? true : false;
}

View File

@@ -185,6 +185,28 @@
}
}
break;
case 'resend':
if (is_array($voicemail_messages) && @sizeof($voicemail_messages) != 0) {
$messages_resent = 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'])) {
//resend (email) 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'];
$voicemail->message_resend();
unset($voicemail);
//increment counter
$messages_resent++;
}
}
//set message
if ($messages_resent != 0) {
message::add($text['message-toggle'].': '.$messages_resent);
}
}
break;
case 'delete':
if (permission_exists('voicemail_message_delete')) {
if (is_array($voicemail_messages) && @sizeof($voicemail_messages) != 0) {
@@ -302,6 +324,8 @@
$margin_left = true;
}
if ($num_rows) {
echo button::create(['type'=>'button','label'=>$text['button-resend'],'icon'=>$_SESSION['theme']['button_icon_email'],'id'=>'btn_resend','name'=>'btn_resend','collapse'=>'hide-xs','style'=>'display: none;'.(!$margin_left ? 'margin-left: 15px;' : null),'onclick'=>"modal_open('modal-resend','btn_resend');"]);
$margin_left = true;
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;
}
@@ -316,6 +340,14 @@
echo "</div>\n";
if ($num_rows) {
echo modal::create([
'id'=>'modal-resend',
'title'=>$text['modal_title-resend'],
'message'=>$text['modal_message-resend'],
'actions'=>
button::create(['type'=>'button','label'=>$text['button-cancel'],'icon'=>$_SESSION['theme']['button_icon_cancel'],'collapse'=>'hide-xs','onclick'=>'modal_close();']).
button::create(['type'=>'button','label'=>$text['button-continue'],'icon'=>'check','collapse'=>'never','style'=>'float: right;','onclick'=>"modal_close(); list_action_set('resend'); list_form_submit('form_list');"])
]);
echo modal::create(['id'=>'modal-toggle','type'=>'toggle','actions'=>button::create(['type'=>'button','label'=>$text['button-continue'],'icon'=>'check','id'=>'btn_toggle','style'=>'float: right; margin-left: 15px;','collapse'=>'never','onclick'=>"modal_close(); list_action_set('toggle'); list_form_submit('form_list');"])]);
}
if (permission_exists('voicemail_message_delete') && $num_rows) {

View File

@@ -906,12 +906,14 @@
btn_delete = document.getElementById("btn_delete");
btn_download = document.getElementById("btn_download");
btn_transcribe = document.getElementById("btn_transcribe");
btn_resend = document.getElementById("btn_resend");
if (checked == true) {
if (btn_copy) { btn_copy.style.display = "inline"; }
if (btn_toggle) { btn_toggle.style.display = "inline"; }
if (btn_delete) { btn_delete.style.display = "inline"; }
if (btn_download) { btn_download.style.display = "inline"; }
if (btn_transcribe) { btn_transcribe.style.display = "inline"; }
if (btn_resend) { btn_resend.style.display = "inline"; }
}
else {
if (btn_copy) { btn_copy.style.display = "none"; }
@@ -919,6 +921,7 @@
if (btn_delete) { btn_delete.style.display = "none"; }
if (btn_download) { btn_download.style.display = "none"; }
if (btn_transcribe) { btn_transcribe.style.display = "none"; }
if (btn_resend) { btn_resend.style.display = "none"; }
}
}
{/literal}