card_presend.tpl.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. <?php
  2. /* Copyright (C) 2017-2018 Laurent Destailleur <eldy@users.sourceforge.net>
  3. * Copyright (C) 2022 Charlene Benke <charlene@patas-monkey.com>
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation; either version 3 of the License, or
  8. * (at your option) any later version.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License
  16. * along with this program. If not, see <https://www.gnu.org/licenses/>.
  17. * or see https://www.gnu.org/
  18. */
  19. /*
  20. * Code to ouput content when action is presend
  21. *
  22. * $trackid must be defined
  23. * $modelmail
  24. * $defaulttopic
  25. * $diroutput
  26. * $arrayoffamiliestoexclude=array('system', 'mycompany', 'object', 'objectamount', 'date', 'user', ...);
  27. */
  28. // Protection to avoid direct call of template
  29. if (empty($conf) || !is_object($conf)) {
  30. print "Error, template page can't be called as URL";
  31. exit;
  32. }
  33. if ($action == 'presend') {
  34. $langs->load("mails");
  35. $titreform = 'SendMail';
  36. $object->fetch_projet();
  37. if (!in_array($object->element, array('societe', 'user', 'member'))) {
  38. // TODO get also the main_lastdoc field of $object. If not found, try to guess with following code
  39. $ref = dol_sanitizeFileName($object->ref);
  40. include_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
  41. // Special case
  42. if ($object->element == 'invoice_supplier') {
  43. $fileparams = dol_most_recent_file($diroutput.'/'.get_exdir($object->id, 2, 0, 0, $object, $object->element).$ref, preg_quote($ref, '/').'([^\-])+');
  44. } else {
  45. $fileparams = dol_most_recent_file($diroutput.'/'.$ref, preg_quote($ref, '/').'[^\-]+');
  46. }
  47. $file = $fileparams['fullname'];
  48. }
  49. // Define output language
  50. $outputlangs = $langs;
  51. $newlang = '';
  52. if (!empty($conf->global->MAIN_MULTILANGS) && empty($newlang)) {
  53. $newlang = $object->thirdparty->default_lang;
  54. if (GETPOST('lang_id', 'aZ09')) {
  55. $newlang = GETPOST('lang_id', 'aZ09');
  56. }
  57. }
  58. if (!empty($newlang)) {
  59. $outputlangs = new Translate('', $conf);
  60. $outputlangs->setDefaultLang($newlang);
  61. // Load traductions files required by page
  62. $outputlangs->loadLangs(array('commercial', 'bills', 'orders', 'contracts', 'members', 'propal', 'products', 'supplier_proposal', 'interventions', 'receptions', 'sendings'));
  63. }
  64. $topicmail = '';
  65. if (empty($object->ref_client)) {
  66. $topicmail = $outputlangs->trans($defaulttopic, '__REF__');
  67. } elseif (!empty($object->ref_client)) {
  68. $topicmail = $outputlangs->trans($defaulttopic, '__REF__ (__REF_CLIENT__)');
  69. }
  70. // Build document if it not exists
  71. $forcebuilddoc = true;
  72. if (in_array($object->element, array('societe', 'user', 'member'))) {
  73. $forcebuilddoc = false;
  74. }
  75. if ($object->element == 'invoice_supplier' && empty($conf->global->INVOICE_SUPPLIER_ADDON_PDF)) {
  76. $forcebuilddoc = false;
  77. }
  78. if ($forcebuilddoc) { // If there is no default value for supplier invoice, we do not generate file, even if modelpdf was set by a manual generation
  79. if ((!$file || !is_readable($file)) && method_exists($object, 'generateDocument')) {
  80. $result = $object->generateDocument(GETPOST('model') ? GETPOST('model') : $object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
  81. if ($result < 0) {
  82. dol_print_error($db, $object->error, $object->errors);
  83. exit();
  84. }
  85. if ($object->element == 'invoice_supplier') {
  86. $fileparams = dol_most_recent_file($diroutput.'/'.get_exdir($object->id, 2, 0, 0, $object, $object->element).$ref, preg_quote($ref, '/').'([^\-])+');
  87. } else {
  88. $fileparams = dol_most_recent_file($diroutput.'/'.$ref, preg_quote($ref, '/').'[^\-]+');
  89. }
  90. $file = $fileparams['fullname'];
  91. }
  92. }
  93. print '<div id="formmailbeforetitle" name="formmailbeforetitle"></div>';
  94. print '<div class="clearboth"></div>';
  95. print '<br>';
  96. print load_fiche_titre($langs->trans($titreform));
  97. print dol_get_fiche_head('');
  98. // Create form for email
  99. include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php';
  100. $formmail = new FormMail($db);
  101. $formmail->param['langsmodels'] = (empty($newlang) ? $langs->defaultlang : $newlang);
  102. $formmail->fromtype = (GETPOST('fromtype') ?GETPOST('fromtype') : (!empty($conf->global->MAIN_MAIL_DEFAULT_FROMTYPE) ? $conf->global->MAIN_MAIL_DEFAULT_FROMTYPE : 'user'));
  103. if ($formmail->fromtype === 'user') {
  104. $formmail->fromid = $user->id;
  105. }
  106. if ($object->element === 'facture' && !empty($conf->global->INVOICE_EMAIL_SENDER)) {
  107. $formmail->frommail = $conf->global->INVOICE_EMAIL_SENDER;
  108. $formmail->fromname = (!empty($conf->global->INVOICE_EMAIL_SENDER_NAME) ? $conf->global->INVOICE_EMAIL_SENDER_NAME : '');
  109. $formmail->fromtype = 'special';
  110. }
  111. if ($object->element === 'shipping' && !empty($conf->global->SHIPPING_EMAIL_SENDER)) {
  112. $formmail->frommail = $conf->global->SHIPPING_EMAIL_SENDER;
  113. $formmail->fromname = (!empty($conf->global->SHIPPING_EMAIL_SENDER_NAME) ? $conf->global->SHIPPING_EMAIL_SENDER_NAME : '');
  114. $formmail->fromtype = 'special';
  115. }
  116. if ($object->element === 'commande' && !empty($conf->global->COMMANDE_EMAIL_SENDER)) {
  117. $formmail->frommail = $conf->global->COMMANDE_EMAIL_SENDER;
  118. $formmail->fromname = (!empty($conf->global->COMMANDE_EMAIL_SENDER_NAME) ? $conf->global->COMMANDE_EMAIL_SENDER_NAME : '');
  119. $formmail->fromtype = 'special';
  120. }
  121. if ($object->element === 'order_supplier' && !empty($conf->global->ORDER_SUPPLIER_EMAIL_SENDER)) {
  122. $formmail->frommail = $conf->global->ORDER_SUPPLIER_EMAIL_SENDER;
  123. $formmail->fromname = (!empty($conf->global->ORDER_SUPPLIER_EMAIL_SENDER_NAME) ? $conf->global->ORDER_SUPPLIER_EMAIL_SENDER_NAME : '');
  124. $formmail->fromtype = 'special';
  125. }
  126. $formmail->trackid = $trackid;
  127. $formmail->withfrom = 1;
  128. // Define $liste, a list of recipients with email inside <>.
  129. $liste = array();
  130. if ($object->element == 'expensereport') {
  131. $fuser = new User($db);
  132. $fuser->fetch($object->fk_user_author);
  133. $liste['thirdparty'] = $fuser->getFullName($outputlangs)." <".$fuser->email.">";
  134. } elseif ($object->element == 'partnership' && getDolGlobalString('PARTNERSHIP_IS_MANAGED_FOR') == 'member') {
  135. $fadherent = new Adherent($db);
  136. $fadherent->fetch($object->fk_member);
  137. $liste['member'] = $fadherent->getFullName($outputlangs)." <".$fadherent->email.">";
  138. } elseif ($object->element == 'societe') {
  139. foreach ($object->thirdparty_and_contact_email_array(1) as $key => $value) {
  140. $liste[$key] = $value;
  141. }
  142. } elseif ($object->element == 'contact') {
  143. $liste['contact'] = $object->getFullName($outputlangs)." <".$object->email.">";
  144. } elseif ($object->element == 'user' || $object->element == 'member') {
  145. $liste['thirdparty'] = $object->getFullName($outputlangs)." <".$object->email.">";
  146. } else {
  147. if (!empty($object->socid) && $object->socid > 0 && !is_object($object->thirdparty) && method_exists($object, 'fetch_thirdparty')) {
  148. $object->fetch_thirdparty();
  149. }
  150. if (is_object($object->thirdparty)) {
  151. foreach ($object->thirdparty->thirdparty_and_contact_email_array(1) as $key => $value) {
  152. $liste[$key] = $value;
  153. }
  154. }
  155. }
  156. if (!empty($conf->global->MAIN_MAIL_ENABLED_USER_DEST_SELECT)) {
  157. $listeuser = array();
  158. $fuserdest = new User($db);
  159. $result = $fuserdest->fetchAll('ASC', 't.lastname', 0, 0, array('customsql'=>"t.statut=1 AND t.employee=1 AND t.email IS NOT NULL AND t.email <> ''"), 'AND', true);
  160. if ($result > 0 && is_array($fuserdest->users) && count($fuserdest->users) > 0) {
  161. foreach ($fuserdest->users as $uuserdest) {
  162. $listeuser[$uuserdest->id] = $uuserdest->user_get_property($uuserdest->id, 'email');
  163. }
  164. } elseif ($result < 0) {
  165. setEventMessages(null, $fuserdest->errors, 'errors');
  166. }
  167. if (count($listeuser) > 0) {
  168. $formmail->withtouser = $listeuser;
  169. $formmail->withtoccuser = $listeuser;
  170. }
  171. }
  172. //$arrayoffamiliestoexclude=array('system', 'mycompany', 'object', 'objectamount', 'date', 'user', ...);
  173. if (!isset($arrayoffamiliestoexclude)) {
  174. $arrayoffamiliestoexclude = null;
  175. }
  176. // Make substitution in email content
  177. if ($object) {
  178. // First we set ->substit (useless, it will be erased later) and ->substit_lines
  179. $formmail->setSubstitFromObject($object, $langs);
  180. }
  181. $substitutionarray = getCommonSubstitutionArray($outputlangs, 0, $arrayoffamiliestoexclude, $object);
  182. $substitutionarray['__CHECK_READ__'] = "";
  183. if (is_object($object) && is_object($object->thirdparty)) {
  184. $checkRead= '<img src="'.DOL_MAIN_URL_ROOT.'/public/emailing/mailing-read.php';
  185. $checkRead.='?tag='.(!empty($object->thirdparty->tag)?urlencode($object->thirdparty->tag):"");
  186. $checkRead.='&securitykey='.(!empty($conf->global->MAILING_EMAIL_UNSUBSCRIBE_KEY)?urlencode($conf->global->MAILING_EMAIL_UNSUBSCRIBE_KEY):"");
  187. $checkRead.='" width="1" height="1" style="width:1px;height:1px" border="0"/>';
  188. $substitutionarray['__CHECK_READ__'] = $checkRead;
  189. }
  190. $substitutionarray['__PERSONALIZED__'] = ''; // deprecated
  191. $substitutionarray['__CONTACTCIVNAME__'] = '';
  192. $parameters = array(
  193. 'mode' => 'formemail'
  194. );
  195. complete_substitutions_array($substitutionarray, $outputlangs, $object, $parameters);
  196. // Find all external contact addresses
  197. $tmpobject = $object;
  198. if (($object->element == 'shipping' || $object->element == 'reception')) {
  199. $origin = $object->origin;
  200. $origin_id = $object->origin_id;
  201. if (!empty($origin) && !empty($origin_id)) {
  202. $element = $subelement = $origin;
  203. $regs = array();
  204. if (preg_match('/^([^_]+)_([^_]+)/i', $origin, $regs)) {
  205. $element = $regs[1];
  206. $subelement = $regs[2];
  207. }
  208. // For compatibility
  209. if ($element == 'order') {
  210. $element = $subelement = 'commande';
  211. }
  212. if ($element == 'propal') {
  213. $element = 'comm/propal';
  214. $subelement = 'propal';
  215. }
  216. if ($element == 'contract') {
  217. $element = $subelement = 'contrat';
  218. }
  219. if ($element == 'inter') {
  220. $element = $subelement = 'ficheinter';
  221. }
  222. if ($element == 'shipping') {
  223. $element = $subelement = 'expedition';
  224. }
  225. if ($element == 'order_supplier') {
  226. $element = 'fourn';
  227. $subelement = 'fournisseur.commande';
  228. }
  229. if ($element == 'project') {
  230. $element = 'projet';
  231. }
  232. dol_include_once('/'.$element.'/class/'.$subelement.'.class.php');
  233. $classname = ucfirst($origin);
  234. $objectsrc = new $classname($db);
  235. $objectsrc->fetch($origin_id);
  236. $tmpobject = $objectsrc;
  237. }
  238. }
  239. $contactarr = array();
  240. $contactarr = $tmpobject->liste_contact(-1, 'external');
  241. if (is_array($contactarr) && count($contactarr) > 0) {
  242. require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
  243. require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php';
  244. $contactstatic = new Contact($db);
  245. $tmpcompany = new Societe($db);
  246. foreach ($contactarr as $contact) {
  247. $contactstatic->fetch($contact['id']);
  248. // Complete substitution array
  249. $substitutionarray['__CONTACT_NAME_'.$contact['code'].'__'] = $contactstatic->getFullName($outputlangs, 1);
  250. $substitutionarray['__CONTACT_LASTNAME_'.$contact['code'].'__'] = $contactstatic->lastname;
  251. $substitutionarray['__CONTACT_FIRSTNAME_'.$contact['code'].'__'] = $contactstatic->firstname;
  252. $substitutionarray['__CONTACT_TITLE_'.$contact['code'].'__'] = $contactstatic->getCivilityLabel();
  253. // Complete $liste with the $contact
  254. if (empty($liste[$contact['id']])) { // If this contact id not already into the $liste
  255. $contacttoshow = '';
  256. if (isset($object->thirdparty) && is_object($object->thirdparty)) {
  257. if ($contactstatic->fk_soc != $object->thirdparty->id) {
  258. $tmpcompany->fetch($contactstatic->fk_soc);
  259. if ($tmpcompany->id > 0) {
  260. $contacttoshow .= $tmpcompany->name.': ';
  261. }
  262. }
  263. }
  264. $contacttoshow .= $contactstatic->getFullName($outputlangs, 1);
  265. $contacttoshow .= " <".($contactstatic->email ? $contactstatic->email : $langs->transnoentitiesnoconv("NoEMail")) .">";
  266. $liste[$contact['id']] = $contacttoshow;
  267. }
  268. }
  269. }
  270. $formmail->withto = $liste;
  271. $formmail->withtofree = (GETPOST('sendto', 'alphawithlgt') ? GETPOST('sendto', 'alphawithlgt') : '1');
  272. $formmail->withtocc = $liste;
  273. $formmail->withtoccc = getDolGlobalString('MAIN_EMAIL_USECCC');
  274. $formmail->withtopic = $topicmail;
  275. $formmail->withfile = 2;
  276. $formmail->withbody = 1;
  277. $formmail->withdeliveryreceipt = 1;
  278. $formmail->withcancel = 1;
  279. // Array of substitutions
  280. $formmail->substit = $substitutionarray;
  281. // Array of other parameters
  282. $formmail->param['action'] = 'send';
  283. $formmail->param['models'] = $modelmail;
  284. $formmail->param['models_id'] = GETPOST('modelmailselected', 'int');
  285. $formmail->param['id'] = $object->id;
  286. $formmail->param['returnurl'] = $_SERVER["PHP_SELF"].'?id='.$object->id;
  287. $formmail->param['fileinit'] = array($file);
  288. // Show form
  289. print $formmail->get_form();
  290. print dol_get_fiche_end();
  291. }