diff --git a/app/voicemails/app_languages.php b/app/voicemails/app_languages.php index 85c418f523..56023fad08 100644 --- a/app/voicemails/app_languages.php +++ b/app/voicemails/app_languages.php @@ -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'] = "듣다"; + +?> \ No newline at end of file diff --git a/app/voicemails/resources/classes/voicemail.php b/app/voicemails/resources/classes/voicemail.php index 661298cf0e..ac4acd135d 100644 --- a/app/voicemails/resources/classes/voicemail.php +++ b/app/voicemails/resources/classes/voicemail.php @@ -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}', "".$text['label-download']."", $template['template_body']); + } + else { // listen + $template['template_body'] = str_replace('${message}', "".$text['label-listen']."", $template['template_body']); + } + } + } + else { + $template['template_body'] = "\n
\n"; + if (!empty($message['caller_id_name']) && $message['caller_id_name'] != $message['caller_id_number']) { + $template['template_body'] .= $message['caller_id_name']."