mirror of
https://github.com/fusionpbx/fusionpbx.git
synced 2025-12-30 00:53:50 +00:00
Voicemail Messages: Add Resend feature, fix manual Transcription if voicemail stored as base64.
This commit is contained in:
@@ -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'] = "듣다";
|
||||
|
||||
?>
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user