diff --git a/actions.php b/actions.php
index 203383b34..28a057484 100644
--- a/actions.php
+++ b/actions.php
@@ -15,7 +15,7 @@ if (!empty($id_plugin)) {
$permesso = $id_module;
}
-$upload_dir = $docroot.'/files/'.basename($directory);
+$upload_dir = DOCROOT.'/files/'.basename($directory);
$dbo->query('START TRANSACTION');
@@ -214,32 +214,108 @@ if (filter('op') == 'link_file' || filter('op') == 'unlink_file') {
$rs = $dbo->fetchArray('SELECT * FROM zz_files WHERE id_module='.prepare($id_module).' AND id='.prepare(filter('id')).' AND filename='.prepare(filter('filename')));
download($upload_dir.'/'.$rs[0]['filename'], $rs[0]['original']);
+} elseif (filter('op') == 'send-email') {
+ $template = Mail::getTemplate($post['template']);
+
+ $final_attachments = [];
+
+ $prints = Prints::getModulePrints($id_module);
+ foreach ($prints as $print) {
+ if (!empty($post['print-'.$print['id']])) {
+ $filename = $upload_dir.'/'.$print['title'].' - '.$id_record.'.pdf';
+
+ Prints::render($print['id'], $id_record, $filename);
+
+ $final_attachments[] = [
+ 'path' => $filename,
+ 'name' => $print['title'],
+ ];
+ }
+ }
+
+ $attachments = $dbo->fetchArray('SELECT * FROM zz_files WHERE id_module = '.prepare($id_module).' AND id_record = '.prepare($id_record));
+ foreach ($attachments as $attachment) {
+ if (!empty($post['attachment-'.$attachment['id']])) {
+ $final_attachments[] = [
+ 'path' => $upload_dir.'/'.$attachment['filename'],
+ 'name' => $attachment['nome'],
+ ];
+ }
+ }
+
+ $anagrafiche = Modules::get('Anagrafiche');
+ $attachments = $dbo->fetchArray('SELECT * FROM zz_files WHERE id_module = '.prepare($anagrafiche['id'])." AND id_record = (SELECT valore FROM zz_settings WHERE nome = 'Azienda predefinita')");
+ foreach ($attachments as $attachment) {
+ if (!empty($post['default-'.$attachment['id']])) {
+ $final_attachments[] = [
+ 'path' => DOCROOT.'/files/'.$anagrafiche['directory'].'/'.$attachment['filename'],
+ 'name' => $attachment['nome'],
+ ];
+ }
+ }
+
+ // Preparazione email
+ $mail = new Mail();
+
+ $mail->AddAddress($post['email']);
+
+ // Reply To
+ if (!empty($template['reply_to'])) {
+ $mail->AddReplyTo($template['reply_to']);
+ }
+
+ // CC
+ if (!empty($template['cc'])) {
+ $mail->AddCC($template['cc']);
+ }
+
+ // BCC
+ if (!empty($template['bcc'])) {
+ $mail->AddBCC($template['bcc']);
+ }
+
+ // Oggetto
+ $mail->Subject = $post['subject'];
+
+ // Allegati
+ foreach ($final_attachments as $attachment) {
+ $mail->AddAttachment($attachment['path'], $attachment['name']);
+ }
+
+ $mail->Body = $post['body'];
+
+ // Invio mail
+ if (!$mail->send()) {
+ $_SESSION['errors'][] = tr("Errore durante l'invio della segnalazione").': '.$mail->ErrorInfo;
+ } else {
+ $_SESSION['infos'][] = tr('Email inviata correttamente!');
+ }
}
if (Modules::getPermission($permesso) == 'r' || Modules::getPermission($permesso) == 'rw') {
if (!empty($info['script'])) {
// Inclusione di eventuale plugin personalizzato
- if (file_exists($docroot.'/modules/'.$info['module_dir'].'/plugins/custom/'.$info['script'])) {
- include $docroot.'/modules/'.$info['module_dir'].'/plugins/custom/'.$info['script'];
- } elseif (file_exists($docroot.'/modules/'.$info['module_dir'].'/plugins/'.$info['script'])) {
- include $docroot.'/modules/'.$info['module_dir'].'/plugins/'.$info['script'];
+ if (file_exists(DOCROOT.'/modules/'.$info['module_dir'].'/plugins/custom/'.$info['script'])) {
+ include DOCROOT.'/modules/'.$info['module_dir'].'/plugins/custom/'.$info['script'];
+ } elseif (file_exists(DOCROOT.'/modules/'.$info['module_dir'].'/plugins/'.$info['script'])) {
+ include DOCROOT.'/modules/'.$info['module_dir'].'/plugins/'.$info['script'];
}
return;
}
// Caricamento helper modulo (verifico se ci sono helper personalizzati)
- if (file_exists($docroot.$directory.'/custom/modutil.php')) {
- include_once $docroot.$directory.'/custom/modutil.php';
- } elseif (file_exists($docroot.$directory.'/modutil.php')) {
- include_once $docroot.$directory.'/modutil.php';
+ if (file_exists(DOCROOT.$directory.'/custom/modutil.php')) {
+ include_once DOCROOT.$directory.'/custom/modutil.php';
+ } elseif (file_exists(DOCROOT.$directory.'/modutil.php')) {
+ include_once DOCROOT.$directory.'/modutil.php';
}
// Lettura risultato query del modulo
- if (file_exists($docroot.$directory.'/custom/init.php')) {
- include $docroot.$directory.'/custom/init.php';
- } elseif (file_exists($docroot.$directory.'/init.php')) {
- include $docroot.$directory.'/init.php';
+ if (file_exists(DOCROOT.$directory.'/custom/init.php')) {
+ include DOCROOT.$directory.'/custom/init.php';
+ } elseif (file_exists(DOCROOT.$directory.'/init.php')) {
+ include DOCROOT.$directory.'/init.php';
}
if (Modules::getPermission($permesso) == 'rw') {
@@ -250,10 +326,10 @@ if (Modules::getPermission($permesso) == 'r' || Modules::getPermission($permesso
$id_records = array_unique($id_records);
$bulk = null;
- if (file_exists($docroot.$directory.'/custom/bulk.php')) {
- $bulk = include $docroot.$directory.'/custom/bulk.php';
- } elseif (file_exists($docroot.$directory.'/bulk.php')) {
- $bulk = include $docroot.$directory.'/bulk.php';
+ if (file_exists(DOCROOT.$directory.'/custom/bulk.php')) {
+ $bulk = include DOCROOT.$directory.'/custom/bulk.php';
+ } elseif (file_exists(DOCROOT.$directory.'/bulk.php')) {
+ $bulk = include DOCROOT.$directory.'/bulk.php';
}
$bulk = (array) $bulk;
@@ -261,10 +337,10 @@ if (Modules::getPermission($permesso) == 'r' || Modules::getPermission($permesso
redirect(ROOTDIR.'/controller.php?id_module='.$id_module, 'js');
} else {
// Esecuzione delle operazioni del modulo
- if (file_exists($docroot.$directory.'/custom/actions.php')) {
- include $docroot.$directory.'/custom/actions.php';
- } elseif (file_exists($docroot.$directory.'/actions.php')) {
- include $docroot.$directory.'/actions.php';
+ if (file_exists(DOCROOT.$directory.'/custom/actions.php')) {
+ include DOCROOT.$directory.'/custom/actions.php';
+ } elseif (file_exists(DOCROOT.$directory.'/actions.php')) {
+ include DOCROOT.$directory.'/actions.php';
}
// Operazioni generiche per i campi personalizzati
diff --git a/mail.php b/mail.php
new file mode 100644
index 000000000..e03cf7dce
--- /dev/null
+++ b/mail.php
@@ -0,0 +1,145 @@
+
+
+
+
+
+
+
+
+
+
'.tr('Dati').'
+
+
+
+
+
+ {[ "type": "text", "label": "'.tr('Oggetto').'", "name": "subject", "value": "'.$subject.'", "required": 1 ]}
+
+
+
+ {[ "type": "email", "label": "'.tr('Destinatario').'", "name": "email", "value": "'.$email.'", "required": 1 ]}
+
+
+
+
+
+ {[ "type": "textarea", "label": "'.tr('Contenuto').'", "name": "body", "value": '.json_encode($body).' ]}
+
+
+
+
';
+
+echo '
+
+
+
+
+
+
+
'.tr('Stampe').'
+
+
+
';
+
+$selected_prints = $dbo->fetchArray('SELECT id_print FROM zz_email_print WHERE id_email = '.prepare($template['id']));
+$selected = array_column($selected_prints, 'id_print');
+
+$prints = Prints::getModulePrints($id_module);
+foreach ($prints as $print) {
+ echo '
+ {[ "type": "checkbox", "label": "'.$print['title'].'", "name": "print-'.$print['id'].'", "value": "'.in_array($print['id'], $selected).'" ]}';
+}
+
+echo '
+
+
+
+
+
+
+
+
+
'.tr('Allegati').'
+
+
+
';
+
+$attachments = $dbo->fetchArray('SELECT * FROM zz_files WHERE id_module = '.prepare($id_module).' AND id_record = '.prepare($id_record));
+
+if (empty($attachments)) {
+ echo '
+
'.tr('Nessun allegato disponibile').'.
';
+}
+
+foreach ($attachments as $attachment) {
+ echo '
+ {[ "type": "checkbox", "label": "'.$attachment['nome'].'", "name": "attachment-'.$attachment['id'].'" ]}';
+}
+
+echo '
+
+
+
+
+
+
+
+
+
'.tr('Anagrafica').'
+
+
+
';
+
+$attachments = $dbo->fetchArray('SELECT * FROM zz_files WHERE id_module = '.prepare(Modules::get('Anagrafiche')['id'])." AND id_record = (SELECT valore FROM zz_settings WHERE nome = 'Azienda predefinita')");
+
+if (empty($attachments)) {
+ echo '
+
'.tr('Nessun allegato disponibile').'.
';
+}
+
+foreach ($attachments as $attachment) {
+ echo '
+ {[ "type": "checkbox", "label": "'.$attachment['nome'].'", "name": "default-'.$attachment['id'].'" ]}';
+}
+
+echo '
+
+
+
+
+
+
+
+
+';
+
+echo '
+';
+
+echo '
+';
+
+echo '
+ ';
diff --git a/modules/interventi/edit.php b/modules/interventi/edit.php
index 9de9ca57d..a337c25a1 100644
--- a/modules/interventi/edit.php
+++ b/modules/interventi/edit.php
@@ -45,6 +45,8 @@ if (empty($records[0]['firma_file'])) {
{( "name": "button", "type": "print", "id_module": "", "id_record": "" )}
+ {( "name": "button", "type": "email", "id_module": "", "id_record": "" )}
+
@@ -138,13 +140,13 @@ if (empty($records[0]['firma_file'])) {
{[ "type": "date", "label": "", "name": "data_richiesta", "required": 1, "value": "$data_richiesta$", "extra": "= $readonly; ?>" ]}
-
+
{[ "type": "select", "label": "", "name": "idzona", "values": "query=SELECT id, CONCAT_WS( ' - ', nome, descrizione) AS descrizione FROM an_zone ORDER BY nome", "value": "$idzona$" ,"extra": "readonly" ]}
-
-
-
+
+
+
@@ -292,17 +294,17 @@ if (empty($records[0]['firma_file'])) {
$("#idsede").selectReset();
$("#idpreventivo").selectReset();
$("#idcontratto").selectReset();
-
+
if (($(this).val())) {
if (($(this).selectData().idzona)){
$('#idzona').val($(this).selectData().idzona).change();
-
+
}else{
$('#idzona').val('').change();
}
//session_set('superselect,idzona', $(this).selectData().idzona, 0);
}
-
+
});
$('#idpreventivo').change( function(){
@@ -321,7 +323,7 @@ if (empty($records[0]['firma_file'])) {
$('#matricola').change( function(){
session_set('superselect,marticola', $(this).val(), 0);
});
-
+
$('#idsede').change( function(){
if (($(this).val())) {
if (($(this).selectData().idzona)){
@@ -332,8 +334,8 @@ if (empty($records[0]['firma_file'])) {
//session_set('superselect,idzona', $(this).selectData().idzona, 0);
}
});
-
-
+
+
diff --git a/src/HTMLBuilder/Manager/ButtonManager.php b/src/HTMLBuilder/Manager/ButtonManager.php
index 6febf7df5..d13d03c05 100644
--- a/src/HTMLBuilder/Manager/ButtonManager.php
+++ b/src/HTMLBuilder/Manager/ButtonManager.php
@@ -32,6 +32,15 @@ class ButtonManager implements ManagerInterface
'title' => $print['title'],
'icon' => $print['icon'],
];
+ } else {
+ $template = \Mail::getTemplate($options['id']);
+
+ $result = [
+ 'link' => ROOTDIR.'/mail.php?id_module='.$options['id_module'].'&id_record='.$options['id_record'].'&id='.$options['id'],
+ 'title' => $template['name'],
+ 'icon' => $template['icon'],
+ 'type' => 'modal',
+ ];
}
return $result;
@@ -49,8 +58,23 @@ class ButtonManager implements ManagerInterface
$icon = !empty($options['icon']) ? $options['icon'] : $info['icon'];
$icon = str_replace('|default|', $info['icon'], $icon);
- return '
- '.$title.' ';
+ // Modal
+ if (isset($info['type']) && $info['type'] == 'modal') {
+ $result = '
+';
+ }
+
+ // Link normale
+ else {
+ $result = '
+ ';
+ }
+
+ $result .= '
+ '.$title.'
+ ';
+
+ return $result;
}
protected function getList($options)
@@ -59,6 +83,8 @@ class ButtonManager implements ManagerInterface
if ($options['type'] == 'print') {
$results = \Prints::getModulePrints($options['id_module']);
+ } else {
+ $results = \Mail::getModuleTemplates($options['id_module']);
}
return $results;
@@ -67,10 +93,11 @@ class ButtonManager implements ManagerInterface
protected function dropdown($options)
{
$list = $this->getList($options);
+ $count = count($list);
$options['class'] = isset($options['class']) ? $options['class'] : 'btn-info';
- if (count($list) > 1) {
+ if ($count > 1) {
$result = '
';
@@ -81,6 +108,7 @@ class ButtonManager implements ManagerInterface
$result .= $this->link([
'type' => $options['type'],
'id' => $element['id'],
+ 'id_module' => $options['id_module'],
'id_record' => $options['id_record'],
'class' => $options['class'],
]);
@@ -100,6 +128,7 @@ class ButtonManager implements ManagerInterface
'.$this->link([
'type' => $options['type'],
'id' => $element['id'],
+ 'id_module' => $options['id_module'],
'id_record' => $options['id_record'],
'class' => false,
]).' ';
@@ -108,13 +137,16 @@ class ButtonManager implements ManagerInterface
$result .= '
';
- } else {
+ } elseif ($count == 1) {
$result = $this->link([
'type' => $options['type'],
'id' => $list[0]['id']['id'],
+ 'id_module' => $options['id_module'],
'id_record' => $options['id_record'],
'class' => $options['class'],
]);
+ } else {
+ $result = ' ';
}
return $result;
@@ -126,6 +158,8 @@ class ButtonManager implements ManagerInterface
if ($options['type'] == 'print') {
$result = ' '.tr('Stampe');
+ } else {
+ $result = ' '.tr('Email');
}
return $result;
diff --git a/src/Mail.php b/src/Mail.php
index f970d544a..8ef037928 100644
--- a/src/Mail.php
+++ b/src/Mail.php
@@ -113,6 +113,33 @@ class Mail extends PHPMailer\PHPMailer\PHPMailer
return self::getTemplates()[$template];
}
+ /**
+ * Restituisce le informazioni relative a un singolo template specificato.
+ *
+ * @param string|int $template
+ *
+ * @return array
+ */
+ public static function getTemplateVariables($template)
+ {
+ $template = self::getTemplate($template);
+ $module = Modules::get($template['id_module']);
+
+ $directory = DOCROOT.'/modules/'.$module['directory'].'|custom|/variables.php';
+
+ $original_file = str_replace('|custom|', '', $directory).'form.php';
+ $custom_file = str_replace('|custom|', '/custom', $directory).'form.php';
+
+ // Lettura delle variabili nei singoli moduli
+ if (file_exists($custom_file)) {
+ $variables = require $custom_file;
+ } elseif (file_exists($original_file)) {
+ $variables = require $original_file;
+ }
+
+ return (array) $variables;
+ }
+
/**
* Restituisce le informazioni relative ai template di un singolo modulo specificato.
*
@@ -124,6 +151,8 @@ class Mail extends PHPMailer\PHPMailer\PHPMailer
{
$module_id = Modules::get($module)['id'];
+ self::getTemplates();
+
$result = [];
foreach ((array) self::$modules[$module_id] as $value) {
@@ -169,6 +198,9 @@ class Mail extends PHPMailer\PHPMailer\PHPMailer
}
}
+ $this->From = $config['from_address'];
+ $this->FromName = $_SESSION['from_name'];
+
$this->WordWrap = 78;
}