diff --git a/htdocs/admin/mails.php b/htdocs/admin/mails.php index ec3faca6625ce97f46555331048e6e82288dd068..e29bea1a2e6d04d00ec186c69a5bd697253f70cd 100644 --- a/htdocs/admin/mails.php +++ b/htdocs/admin/mails.php @@ -132,7 +132,7 @@ if (! empty($_POST['removedfile']) || ! empty($_POST['removedfilehtml'])) if (($action == 'send' || $action == 'sendhtml') && ! GETPOST('addfile') && ! GETPOST('addfilehtml') && ! GETPOST('removedfile') && ! GETPOST('cancel')) { $error=0; - + $email_from=''; if (! empty($_POST["fromname"])) $email_from=$_POST["fromname"].' '; if (! empty($_POST["frommail"])) $email_from.='<'.$_POST["frommail"].'>'; @@ -144,12 +144,12 @@ if (($action == 'send' || $action == 'sendhtml') && ! GETPOST('addfile') && ! GE $subject = $_POST['subject']; $body = $_POST['message']; $deliveryreceipt= $_POST["deliveryreceipt"]; - + //Check if we have to decode HTML if (!empty($conf->global->FCKEDITOR_ENABLE_MAILING) && dol_textishtml(dol_html_entity_decode($body, ENT_COMPAT | ENT_HTML401))) { $body=dol_html_entity_decode($body, ENT_COMPAT | ENT_HTML401); } - + // Create form object include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php'; $formmail = new FormMail($db); @@ -693,7 +693,7 @@ else $formmail->clear_attached_files(); } - $formmail->show_form(($action == 'testhtml'?'addfilehtml':'addfile'),($action == 'testhtml'?'removefilehtml':'removefile')); + print $formmail->get_form(($action == 'testhtml'?'addfilehtml':'addfile'),($action == 'testhtml'?'removefilehtml':'removefile')); print '<br>'; } diff --git a/htdocs/comm/mailing/fiche.php b/htdocs/comm/mailing/fiche.php index 8217727e2026d045bc28a8586d40f231cc11fd62..bc833b1895578598b539e2e7a031b319caea6eb8 100644 --- a/htdocs/comm/mailing/fiche.php +++ b/htdocs/comm/mailing/fiche.php @@ -947,7 +947,7 @@ else $formmail->param["mailid"]=$object->id; $formmail->param["returnurl"]=$_SERVER['PHP_SELF']."?id=".$object->id; - $formmail->show_form(); + print $formmail->get_form(); print '<br>'; } diff --git a/htdocs/comm/propal.php b/htdocs/comm/propal.php index a8dd4ab2a9e3ef50e13ffcf990068775f1852d75..4ad74c01af3820c6196a5123da2320fb0fa780f2 100644 --- a/htdocs/comm/propal.php +++ b/htdocs/comm/propal.php @@ -2149,14 +2149,14 @@ else { print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=modif">'.$langs->trans('Modify').'</a></div>'; } - + // ReOpen if (($object->statut == 2 || $object->statut == 3) && $user->rights->propal->cloturer) { print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=reopen'.(empty($conf->global->MAIN_JUMP_TAG)?'':'#reopen').'"'; print '>'.$langs->trans('ReOpen').'</a></div>'; } - + // Send if ($object->statut == 1 || $object->statut == 2) { @@ -2166,7 +2166,7 @@ else } else print '<div class="inline-block divButAction"><a class="butActionRefused" href="#">'.$langs->trans('SendByMail').'</a></div>'; } - + // Create an order if (! empty($conf->commande->enabled) && $object->statut == 2) { @@ -2175,18 +2175,18 @@ else print '<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.'/commande/fiche.php?action=create&origin='.$object->element.'&originid='.$object->id.'&socid='.$object->socid.'">'.$langs->trans("AddOrder").'</a></div>'; } } - + // Create contract if ($conf->contrat->enabled && $object->statut == 2) { $langs->load("contracts"); - + if ($user->rights->contrat->creer) { print '<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.'/contrat/fiche.php?action=create&origin='.$object->element.'&originid='.$object->id.'&socid='.$object->socid.'">'.$langs->trans('AddContract').'</a></div>'; } } - + // Create an invoice and classify billed if ($object->statut == 2) { @@ -2194,37 +2194,37 @@ else { print '<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.'/compta/facture.php?action=create&origin='.$object->element.'&originid='.$object->id.'&socid='.$object->socid.'">'.$langs->trans("AddBill").'</a></div>'; } - + $arraypropal=$object->getInvoiceArrayList(); if (is_array($arraypropal) && count($arraypropal) > 0) { print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=classifybilled&socid='.$object->socid.'">'.$langs->trans("ClassifyBilled").'</a></div>'; } } - + // Close if ($object->statut == 1 && $user->rights->propal->cloturer) { print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=statut'.(empty($conf->global->MAIN_JUMP_TAG)?'':'#close').'"'; print '>'.$langs->trans('Close').'</a></div>'; } - + // Clone if ($user->rights->propal->creer) { print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&socid='.$object->socid.'&action=clone&object='.$object->element.'">'.$langs->trans("ToClone").'</a></div>'; } - + // Delete if ($user->rights->propal->supprimer) { print '<div class="inline-block divButAction"><a class="butActionDelete" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete"'; print '>'.$langs->trans('Delete').'</a></div>'; } - + } } - + print '</div>'; } print "<br>\n"; @@ -2374,7 +2374,7 @@ else $formmail->add_attached_files($file,basename($file),dol_mimetype($file)); } - $formmail->show_form(); + print $formmail->get_form(); print '<br>'; } diff --git a/htdocs/commande/fiche.php b/htdocs/commande/fiche.php index 760324d23e8c17654ada17026a21e1d6f6e9c85d..480fdb9584168a14602058bb2df623094f23333a 100644 --- a/htdocs/commande/fiche.php +++ b/htdocs/commande/fiche.php @@ -2676,7 +2676,7 @@ else } // Show form - $formmail->show_form(); + print $formmail->get_form(); print '<br>'; } diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php index c900b0d7ebb56f05240381afc98d6ac9b838efe2..de05b11a64cf325834b2d5594f6f529f8f51f73a 100644 --- a/htdocs/compta/facture.php +++ b/htdocs/compta/facture.php @@ -3914,8 +3914,8 @@ else if ($id > 0 || ! empty($ref)) { $liste[$key]=$value; } - $formmail->withto=GETPOST('sendto')?GETPOST('sendto'):$liste; - $formmail->withtocc=$liste; + $formmail->withto=GETPOST('sendto')?GETPOST('sendto'):$liste; // List suggested for send to + $formmail->withtocc=$liste; // List suggested for CC $formmail->withtoccc=$conf->global->MAIN_EMAIL_USECCC; if(empty($object->ref_client)) { @@ -3972,7 +3972,7 @@ else if ($id > 0 || ! empty($ref)) $formmail->add_attached_files($file,basename($file),dol_mimetype($file)); } - $formmail->show_form(); + print $formmail->get_form(); print '<br>'; } diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index 53adade47ab81418cf44bc4e1e3489828f065f2f..cf15d3f13fcdc109f0aa7bdf3078d53755edfc16 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -90,7 +90,7 @@ class Facture extends CommonInvoice var $close_code; //! Commentaire si mis a paye sans paiement complet var $close_note; - //! 1 if invoice paid COMPLETELY, 0 otherwise (do not use it anymore, use statut and close_code + //! 1 if invoice paid COMPLETELY, 0 otherwise (do not use it anymore, use statut and close_code) var $paye; //! id of source invoice if replacement invoice or credit note var $fk_facture_source; diff --git a/htdocs/compta/facture/impayees.php b/htdocs/compta/facture/impayees.php index dd374eb1a6f7e6e5e206ae0e38981447f77b1ffc..36cc7944105fff49c75755f43a74480c5f89f9e8 100644 --- a/htdocs/compta/facture/impayees.php +++ b/htdocs/compta/facture/impayees.php @@ -37,6 +37,7 @@ $langs->load("bills"); $id = (GETPOST('facid','int') ? GETPOST('facid','int') : GETPOST('id','int')); $action = GETPOST('action','alpha'); $option = GETPOST('option'); +$mode=GETPOST('mode'); // Security check if ($user->societe_id) $socid=$user->societe_id; @@ -45,11 +46,157 @@ $result = restrictedArea($user,'facture',$id,''); $diroutputpdf=$conf->facture->dir_output . '/unpaid/temp'; if (! $user->rights->societe->client->voir || $socid) $diroutputpdf.='/private/'.$user->id; // If user has no permission to see all, output dir is specific to user +$resultmasssend=''; + /* * Action */ +// Send remind email +if ($action == 'presend' && GETPOST('cancel')) $action=''; + +if ($action == 'presend' && GETPOST('sendmail')) +{ + if (!isset($user->email)) + { + $error++; + setEventMessage("NoSenderEmailDefined"); + } + + $countToSend = count($_POST['toSend']); + if (empty($countToSend)) + { + $error++; + setEventMessage("InvoiceNotChecked","warnings"); + } + + if (! $error) + { + $compteEmailEnvoi = 0; + $nbignored = 0; + + for ($i = 0; $i < $countToSend; $i++) + { + $object = new Facture($db); + $result = $object->fetch($_POST['toSend'][$i]); + + if ($result > 0) // Invoice was found + { + if ($object->statut != 1) continue; // Payment done or started or canceled + + // Read PDF + $filename=dol_sanitizeFileName($object->ref); + $filedir=$conf->facture->dir_output . '/' . dol_sanitizeFileName($object->ref); + $file = $filedir . '/' . $filename.'.pdf'; // TODO What if ODT ? + + if (dol_is_file($file)) + { + $object->fetch_thirdparty(); + $sendto = $object->thirdparty->email; + + if (empty($sendto)) $nbignored++; + + if (dol_strlen($sendto)) + { + $langs->load("commercial"); + $from = $user->getFullName($langs) . ' <' . $user->email .'>'; + $replyto = $from; + $message = $conf->global->RELANCES_MASSE_TEXTE_EMAIL; + $subject = $conf->global->RELANCES_MASSE_OBJET_EMAIL; + + $substitutionarray= + make_substitutions($message, $substitutionarray); + + $actiontypecode='AC_FAC'; + $actionmsg=$langs->transnoentities('MailSentBy').' '.$from.' '.$langs->transnoentities('To').' '.$sendto.".\n"; + if ($message) + { + $actionmsg.=$langs->transnoentities('MailTopic').": ".$subject."\n"; + $actionmsg.=$langs->transnoentities('TextUsedInTheMessageBody').":\n"; + $actionmsg.=$message; + } + // Create form object + include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php'); + $formmail = new FormMail($db); + $formmail->clear_attached_files(); + $formmail->add_attached_files($file, $object->ref.'.pdf', 'application/pdf'); + $attachedfiles=$formmail->get_attached_files(); + $filepath = $attachedfiles['paths']; + $filename = $attachedfiles['names']; + $mimetype = $attachedfiles['mimes']; + + // Send mail + require_once(DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php'); + $mailfile = new CMailFile($subject,$sendto,$from,$message,$filepath,$mimetype,$filename,$sendtocc,'',$deliveryreceipt,-1); + if ($mailfile->error) + { + $resultmasssend.='<div class="error">'.$mailfile->error.'</div>'; + } + else + { + $result=$mailfile->sendfile(); + if ($result) + { + $resultmasssend.=$langs->trans('MailSuccessfulySent',$mailfile->getValidAddress($from,2),$mailfile->getValidAddress($sendto,2)); // Must not contain " + + $error=0; + + // Initialisation donnees + $object->sendtoid = 0; + $object->actiontypecode = $actiontypecode; + $object->actionmsg = $actionmsg; // Long text + $object->actionmsg2 = $actionmsg2; // Short text + $object->fk_element = $object->id; + $object->elementtype = $object->element; + + // Appel des triggers + include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); + $interface=new Interfaces($db); + $result=$interface->run_triggers('BILL_SENTBYMAIL',$object,$user,$langs,$conf); + if ($result < 0) { $error++; $this->errors=$interface->errors; } + // Fin appel triggers + + if ($error) + { + dol_print_error($db); + } + $compteEmailEnvoi ++; + + } + else + { + $langs->load("other"); + $resultmasssend.='<div class="error">'; + if ($mailfile->error) + { + $resultmasssend.=$langs->trans('ErrorFailedToSendMail',$from,$sendto); + $resultmasssend.='<br>'.$mailfile->error; + } + else + { + $resultmasssend.='No mail sent. Feature is disabled by option MAIN_DISABLE_ALL_MAILS'; + } + $resultmasssend.='</div>'; + } + } + } + } + else + { + $langs->load("other"); + print $resultmasssend='<div class="error">'.$langs->trans('ErrorCantReadFile',$file).'</div>'; + dol_syslog('Failed to read file: '.$file); + break ; + } + } + } + + setEventMessage($compteEmailEnvoi. '/'.$countToSend.' '.$langs->trans("RemindSent")); + } +} + + if ($action == "builddoc" && $user->rights->facture->lire && ! GETPOST('button_search')) { if (is_array($_POST['toGenerate'])) @@ -61,9 +208,12 @@ if ($action == "builddoc" && $user->rights->facture->lire && ! GETPOST('button_s // liste les fichiers $files = array(); $factures_bak = $factures ; - foreach($_POST['toGenerate'] as $basename){ - foreach($factures as $facture){ - if(strstr($facture["name"],$basename)){ + foreach($_POST['toGenerate'] as $basename) + { + foreach($factures as $facture) + { + if(strstr($facture["name"],$basename)) + { $files[] = $conf->facture->dir_output.'/'.$basename.'/'.$facture["name"]; } } @@ -121,12 +271,12 @@ if ($action == "builddoc" && $user->rights->facture->lire && ! GETPOST('button_s } else { - $mesg='<div class="error">'.$langs->trans('NoPDFAvailableForChecked').'</div>'; + setEventMessage($langs->trans('NoPDFAvailableForChecked'),'errors'); } } else { - $mesg='<div class="error">'.$langs->trans('InvoiceNotChecked').'</div>' ; + setEventMessage($langs->trans('InvoiceNotChecked'), 'warnings'); } } @@ -167,6 +317,12 @@ $(document).ready(function() { $("#checknone").click(function() { $(".checkformerge").attr('checked', false); }); + $("#checkallsend").click(function() { + $(".checkforsend").attr('checked', true); + }); + $("#checknonesend").click(function() { + $(".checkforsend").attr('checked', false); + }); }); </script> <?php @@ -268,6 +424,7 @@ if ($resql) print '<form id="form_generate_pdf" method="POST" action="'.$_SERVER["PHP_SELF"].'?sortfield='. $sortfield .'&sortorder='. $sortorder .'">'; print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; + print '<input type="hidden" name="mode" value="'.$mode.'">'; if ($late) print '<input type="hidden" name="late" value="'.dol_escape_htmltag($late).'">'; $i = 0; @@ -283,7 +440,14 @@ if ($resql) print_liste_field_titre($langs->trans("Received"),$_SERVER["PHP_SELF"],"am","",$param,'align="right"',$sortfield,$sortorder); print_liste_field_titre($langs->trans("Rest"),$_SERVER["PHP_SELF"],"am","",$param,'align="right"',$sortfield,$sortorder); print_liste_field_titre($langs->trans("Status"),$_SERVER["PHP_SELF"],"fk_statut,paye,am","",$param,'align="right"',$sortfield,$sortorder); - print_liste_field_titre($langs->trans("Merge"),$_SERVER["PHP_SELF"],"","",$param,'align="center"',$sortfield,$sortorder); + if (empty($mode)) + { + print_liste_field_titre($langs->trans("PDFMerge"),$_SERVER["PHP_SELF"],"","",$param,'align="center"',$sortfield,$sortorder); + } + else + { + print_liste_field_titre($langs->trans("Remind"),$_SERVER["PHP_SELF"],"","",$param,'align="center"',$sortfield,$sortorder); + } print "</tr>\n"; // Lignes des champs de filtre @@ -302,9 +466,18 @@ if ($resql) print '<td class="liste_titre" align="right">'; print '<input type="image" class="liste_titre" name="button_search" src="'.img_picto($langs->trans("Search"),'search.png','','',1).'" value="'.dol_escape_htmltag($langs->trans("Search")).'" title="'.dol_escape_htmltag($langs->trans("Search")).'">'; print '</td>'; - print '<td class="liste_titre" align="center">'; - if ($conf->use_javascript_ajax) print '<a href="#" id="checkall">'.$langs->trans("All").'</a> / <a href="#" id="checknone">'.$langs->trans("None").'</a>'; - print '</td>'; + if (empty($mode)) + { + print '<td class="liste_titre" align="center">'; + if ($conf->use_javascript_ajax) print '<a href="#" id="checkall">'.$langs->trans("All").'</a> / <a href="#" id="checknone">'.$langs->trans("None").'</a>'; + print '</td>'; + } + else + { + print '<td class="liste_titre" align="center">'; + if ($conf->use_javascript_ajax) print '<a href="#" id="checkallsend">'.$langs->trans("All").'</a> / <a href="#" id="checknonesend">'.$langs->trans("None").'</a>'; + print '</td>'; + } print "</tr>\n"; if ($num > 0) @@ -384,13 +557,23 @@ if ($resql) print $facturestatic->LibStatut($objp->paye,$objp->fk_statut,5,$objp->am); print '</td>'; - // Checkbox - print '<td align="center">'; - if (! empty($formfile->numoffiles)) - print '<input id="cb'.$objp->facid.'" class="flat checkformerge" type="checkbox" name="toGenerate[]" value="'.$objp->facnumber.'">'; + if (empty($mode)) + { + // Checkbox to merge + print '<td align="center">'; + if (! empty($formfile->numoffiles)) + print '<input id="cb'.$objp->facid.'" class="flat checkformerge" type="checkbox" name="toGenerate[]" value="'.$objp->facnumber.'">'; + else + print ' '; + print '</td>' ; + } else - print ' '; - print '</td>' ; + { + // Checkbox to send remind + print '<td align="center">'; + print '<input class="flat checkforsend" type="checkbox" name="toSend[]" value="'.$objp->facid.'">'; + print '</td>' ; + } print "</tr>\n"; $total_ht+=$objp->total_ht; @@ -415,17 +598,85 @@ if ($resql) print "</table>"; - /* - * Show list of available documents - */ - $filedir=$diroutputpdf; - $genallowed=$user->rights->facture->lire; - $delallowed=$user->rights->facture->lire; - - print '<br>'; - print '<input type="hidden" name="option" value="'.$option.'">'; - // We disable multilang because we concat already existing pdf. - $formfile->show_documents('unpaid','',$filedir,$urlsource,$genallowed,$delallowed,'',1,1,0,48,1,$param,$langs->trans("PDFMerge"),$langs->trans("PDFMerge")); + + if (empty($mode)) + { + /* + * Show list of available documents + */ + $filedir=$diroutputpdf; + $genallowed=$user->rights->facture->lire; + $delallowed=$user->rights->facture->lire; + + print '<br>'; + print '<input type="hidden" name="option" value="'.$option.'">'; + // We disable multilang because we concat already existing pdf. + $formfile->show_documents('unpaid','',$filedir,$urlsource,$genallowed,$delallowed,'',1,1,0,48,1,$param,$langs->trans("PDFMerge"),$langs->trans("PDFMerge")); + } + else + { + $langs->load("mails"); + + if ($action != 'presend') + { + print '<div class="tabsAction">'; + print '<a href="'.$_SERVER["PHP_SELF"].'?mode=sendremind&action=presend" class="butAction" name="buttonsendremind" value="'.dol_escape_htmltag($langs->trans("SendRemind")).'">'.$langs->trans("SendRemind").'</a>'; + print '</div>'; + } + else + { + include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php'; + $formmail = new FormMail($db); + + print '<br>'; + print_fiche_titre($langs->trans("SendRemind"),'','').'<br>'; + + $topicmail="MailTopicSendRemindUnpaidInvoices"; + $modelmail="facture_relance"; + + // Cree l'objet formulaire mail + include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php'; + $formmail = new FormMail($db); + $formmail->fromtype = 'user'; + $formmail->fromid = $user->id; + $formmail->fromname = $user->getFullName($langs); + $formmail->frommail = $user->email; + $formmail->withfrom=1; + $liste=array(); + $formmail->withto=''; + $formmail->withtocc=1; + $formmail->withtoccc=$conf->global->MAIN_EMAIL_USECCC; + $formmail->withtopic=$langs->transnoentities($topicmail, '__FACREF__', '__REFCLIENT__'); + $formmail->withfile=$langs->trans("EachInvoiceWillBeAttachedToEmail"); + $formmail->withbody=1; + $formmail->withdeliveryreceipt=1; + $formmail->withcancel=1; + // Tableau des substitutions + //$formmail->substit['__FACREF__']=''; + $formmail->substit['__SIGNATURE__']=$user->signature; + //$formmail->substit['__REFCLIENT__']=''; + $formmail->substit['__PERSONALIZED__']=''; + $formmail->substit['__CONTACTCIVNAME__']=''; + + // Tableau des parametres complementaires du post + $formmail->param['action']=$action; + $formmail->param['models']=$modelmail; + $formmail->param['facid']=$object->id; + $formmail->param['returnurl']=$_SERVER["PHP_SELF"].'?id='.$object->id; + + print $formmail->get_form(); + + + } + + if ($resultmasssend) + { + print '<br><strong>'.$langs->trans("ResultOfMassSending").':</strong><br>'."\n"; + print $resultmasssend; + print '<br>'; + } + } + print '</form>'; $db->free($resql); diff --git a/htdocs/core/class/html.formmail.class.php b/htdocs/core/class/html.formmail.class.php index c39c5f0527780e9c6e6ad00a3489cb2f6053955f..7746d178e676b21f9c22e9d4e09c5547f638ccc9 100644 --- a/htdocs/core/class/html.formmail.class.php +++ b/htdocs/core/class/html.formmail.class.php @@ -503,39 +503,47 @@ class FormMail { $out.= '<tr>'; $out.= '<td width="180">'.$langs->trans("MailFile").'</td>'; + $out.= '<td>'; - // TODO Trick to have param removedfile containing nb of image to delete. But this does not works without javascript - $out.= '<input type="hidden" class="removedfilehidden" name="removedfile" value="">'."\n"; - $out.= '<script type="text/javascript" language="javascript">'; - $out.= 'jQuery(document).ready(function () {'; - $out.= ' jQuery(".removedfile").click(function() {'; - $out.= ' jQuery(".removedfilehidden").val(jQuery(this).val());'; - $out.= ' });'; - $out.= '})'; - $out.= '</script>'."\n"; - if (count($listofpaths)) + if (is_numeric($this->withfile)) { - foreach($listofpaths as $key => $val) - { - $out.= '<div id="attachfile_'.$key.'">'; - $out.= img_mime($listofnames[$key]).' '.$listofnames[$key]; - if (! $this->withfilereadonly) - { - $out.= ' <input type="image" style="border: 0px;" src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/delete.png" value="'.($key+1).'" class="removedfile" id="removedfile_'.$key.'" name="removedfile_'.$key.'" />'; - //$out.= ' <a href="'.$_SERVER["PHP_SELF"].'?removedfile='.($key+1).' id="removedfile_'.$key.'">'.img_delete($langs->trans("Delete").'</a>'; - } - $out.= '<br></div>'; - } + // TODO Trick to have param removedfile containing nb of image to delete. But this does not works without javascript + $out.= '<input type="hidden" class="removedfilehidden" name="removedfile" value="">'."\n"; + $out.= '<script type="text/javascript" language="javascript">'; + $out.= 'jQuery(document).ready(function () {'; + $out.= ' jQuery(".removedfile").click(function() {'; + $out.= ' jQuery(".removedfilehidden").val(jQuery(this).val());'; + $out.= ' });'; + $out.= '})'; + $out.= '</script>'."\n"; + if (count($listofpaths)) + { + foreach($listofpaths as $key => $val) + { + $out.= '<div id="attachfile_'.$key.'">'; + $out.= img_mime($listofnames[$key]).' '.$listofnames[$key]; + if (! $this->withfilereadonly) + { + $out.= ' <input type="image" style="border: 0px;" src="'.DOL_URL_ROOT.'/theme/'.$conf->theme.'/img/delete.png" value="'.($key+1).'" class="removedfile" id="removedfile_'.$key.'" name="removedfile_'.$key.'" />'; + //$out.= ' <a href="'.$_SERVER["PHP_SELF"].'?removedfile='.($key+1).' id="removedfile_'.$key.'">'.img_delete($langs->trans("Delete").'</a>'; + } + $out.= '<br></div>'; + } + } + else + { + $out.= $langs->trans("NoAttachedFiles").'<br>'; + } + if ($this->withfile == 2) // Can add other files + { + $out.= '<input type="file" class="flat" id="addedfile" name="addedfile" value="'.$langs->trans("Upload").'" />'; + $out.= ' '; + $out.= '<input type="submit" class="button" id="'.$addfileaction.'" name="'.$addfileaction.'" value="'.$langs->trans("MailingAddFile").'" />'; + } } else { - $out.= $langs->trans("NoAttachedFiles").'<br>'; - } - if ($this->withfile == 2) // Can add other files - { - $out.= '<input type="file" class="flat" id="addedfile" name="addedfile" value="'.$langs->trans("Upload").'" />'; - $out.= ' '; - $out.= '<input type="submit" class="button" id="'.$addfileaction.'" name="'.$addfileaction.'" value="'.$langs->trans("MailingAddFile").'" />'; + $out.=$this->withfile; } $out.= "</td></tr>\n"; } diff --git a/htdocs/expedition/fiche.php b/htdocs/expedition/fiche.php index 0a5d3d0cfcf5438689fd9102e27aadce18f28967..c04c4966efe9a86fa3a6bd1f67875329219be4a1 100644 --- a/htdocs/expedition/fiche.php +++ b/htdocs/expedition/fiche.php @@ -1542,7 +1542,7 @@ else if ($id || $ref) } // Show form - $formmail->show_form(); + print $formmail->get_form(); print '<br>'; } diff --git a/htdocs/fichinter/fiche.php b/htdocs/fichinter/fiche.php index e40d2b44daab3536a7a8ec2a62b94d756108c28d..15e08bad60494b08180247adcb8771ae4daf7279 100644 --- a/htdocs/fichinter/fiche.php +++ b/htdocs/fichinter/fiche.php @@ -1709,7 +1709,7 @@ else if ($id > 0 || ! empty($ref)) $formmail->add_attached_files($file,basename($file),dol_mimetype($file)); } - $formmail->show_form(); + print $formmail->get_form(); print '<br>'; } diff --git a/htdocs/fourn/commande/fiche.php b/htdocs/fourn/commande/fiche.php index ffa72ecf9ac2b13b85b8ff05f701b7d830ca3009..8da53a67477471eed95d35c2200b2c008e1d34e1 100644 --- a/htdocs/fourn/commande/fiche.php +++ b/htdocs/fourn/commande/fiche.php @@ -1634,13 +1634,13 @@ elseif (! empty($object->id)) } print '<td align="right" class="nowrap">'.price($line->total_ht).'</td>'; - + if (is_object($hookmanager)) { $parameters=array('line'=>$line,'num'=>$num,'i'=>$i); $reshook=$hookmanager->executeHooks('printObjectLine',$parameters,$object,$action); } - + if ($object->statut == 0 && $user->rights->fournisseur->commande->creer) { print '<td align="center"><a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=edit_line&rowid='.$line->id.'#'.$line->id.'">'; @@ -2132,7 +2132,7 @@ elseif (! empty($object->id)) } // Show form - $formmail->show_form(); + print $formmail->get_form(); print '<br>'; } diff --git a/htdocs/fourn/facture/fiche.php b/htdocs/fourn/facture/fiche.php index 3722ceaac5114c601f16c442f867defe507321d0..6d095e48b93520a3fd54f05f9220242395a3c0de 100644 --- a/htdocs/fourn/facture/fiche.php +++ b/htdocs/fourn/facture/fiche.php @@ -1996,13 +1996,13 @@ else print '<td align="right" class="nowrap">'.price($object->lines[$i]->total_ht).'</td>'; print '<td align="right" class="nowrap">'.price($object->lines[$i]->total_ttc).'</td>'; - + if (is_object($hookmanager)) { $parameters=array('line'=>$object->lines[$i],'num'=>$num,'i'=>$i); $reshook=$hookmanager->executeHooks('printObjectLine',$parameters,$object,$action); } - + print '<td align="center" width="16">'; if ($object->statut == 0) print '<a href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=edit_line&etat=0&lineid='.$object->lines[$i]->rowid.'">'.img_edit().'</a>'; else print ' '; @@ -2370,7 +2370,7 @@ else } // Show form - $formmail->show_form(); + print $formmail->get_form(); print '<br>'; } diff --git a/htdocs/langs/en_US/mails.lang b/htdocs/langs/en_US/mails.lang index c16827bbdee510736f380987185411e67184e1d6..88d499ac7e0161068debbfd7cd2722522e3e395e 100644 --- a/htdocs/langs/en_US/mails.lang +++ b/htdocs/langs/en_US/mails.lang @@ -79,6 +79,10 @@ MailtoEMail=Hyper link to email ActivateCheckRead=Allow to use the "Unsubcribe" link ActivateCheckReadKey=Key use to encrypt URL use for "Read Receipt" and "Unsubcribe" feature EMailSentToNRecipients=EMail sent to %s recipients. +EachInvoiceWillBeAttachedToEmail=A document using default invoice document template will be created and attached to each email. +MailTopicSendRemindUnpaidInvoices=Remind of invoice %s (%s) +SendRemind=Send remind by EMails +RemindSent=%S remind(s) sent # Libelle des modules de liste de destinataires mailing MailingModuleDescContactCompanies=Contacts/addresses of all third parties (customer, prospect, supplier, ...) diff --git a/htdocs/societe/soc.php b/htdocs/societe/soc.php index e415c808c5f9b9aed6833e1d9648b83d215e3053..5731ce0196a14e06931cfa4271d0997920b84349 100644 --- a/htdocs/societe/soc.php +++ b/htdocs/societe/soc.php @@ -1932,7 +1932,7 @@ else $formmail->add_attached_files($file,basename($file),dol_mimetype($file)); } - $formmail->show_form(); + print $formmail->get_form(); print '<br>'; }