30require
'../../main.inc.php';
31require_once DOL_DOCUMENT_ROOT.
'/core/modules/mailings/modules_mailings.php';
32require_once DOL_DOCUMENT_ROOT.
'/comm/mailing/class/mailing.class.php';
33require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formmailing.class.php';
34require_once DOL_DOCUMENT_ROOT.
'/core/lib/emailing.lib.php';
35require_once DOL_DOCUMENT_ROOT.
'/core/class/CMailFile.class.php';
36require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
37require_once DOL_DOCUMENT_ROOT.
'/core/lib/ajax.lib.php';
49$langs->loadLangs(array(
"mails",
"admin"));
51$action =
GETPOST(
'action',
'aZ09');
52$toselect =
GETPOST(
'toselect',
'array');
53$massaction =
GETPOST(
'massaction',
'alpha');
58$sortfield =
GETPOST(
'sortfield',
'aZ09comma');
59$sortorder =
GETPOST(
'sortorder',
'aZ09comma');
61if (empty($page) || $page == -1) {
64$offset = $limit * $page;
68 $sortfield =
"mc.statut,email";
71 $sortorder =
"DESC,ASC";
76$search_lastname =
GETPOST(
"search_lastname",
'alphanohtml');
77$search_firstname =
GETPOST(
"search_firstname",
'alphanohtml');
78$search_email =
GETPOST(
"search_email",
'alphanohtml');
79$search_other =
GETPOST(
"search_other",
'alphanohtml');
80$search_dest_status =
GETPOST(
'search_dest_status',
'int');
89$hookmanager->initHooks(array(
'ciblescard',
'globalcard'));
95$listofmethods = array();
97$listofmethods[
'mail'] =
'PHP mail function';
99$listofmethods[
'smtps'] =
'SMTP/SMTPS socket library';
100if (version_compare(phpversion(),
'7.0',
'>=')) {
101 $listofmethods[
'swiftmailer'] =
'Swift Mailer socket library';
105if (!$user->hasRight(
'mailing',
'lire') || (!
getDolGlobalString(
'EXTERNAL_USERS_ARE_AUTHORIZED') && $user->socid > 0)) {
108if (empty($action) && empty(
$object->id)) {
112$permissiontoread = $user->hasRight(
'mailing',
'lire');
113$permissiontocreate = $user->hasRight(
'mailing',
'creer');
114$permissiontovalidatesend = $user->hasRight(
'mailing',
'valider');
115$permissiontodelete = $user->hasRight(
'mailing',
'supprimer');
121if (
GETPOST(
'cancel',
'alpha')) {
125if (!
GETPOST(
'confirmmassaction',
'alpha')) {
129if ($action ==
'add' && $permissiontocreate) {
130 $module =
GETPOST(
"module",
'alpha');
134 foreach ($modulesdir as $dir) {
137 dol_syslog(
"Scan directory ".$dir.
" for modules");
140 $file = $dir.
"/".$module.
".modules.php";
141 $classname =
"mailing_".$module;
143 if (file_exists($file)) {
147 dol_syslog(
"Call add_to_target() on class ".$classname.
" evenunsubscribe=".
$object->evenunsubscribe);
150 if (class_exists($classname)) {
151 $obj =
new $classname($db);
152 '@phan-var-force MailingTargets $obj';
153 $obj->evenunsubscribe =
$object->evenunsubscribe;
155 $result = $obj->add_to_target($id);
157 $sqlmessage = $obj->sql;
166 if (
$object->status == $object::STATUS_SENTCOMPLETELY) {
167 $object->setStatut($object::STATUS_SENTPARTIALY);
176 if ($result < 0 && is_object($obj)) {
177 setEventMessages($langs->trans(
"Error").($obj->error ?
' '.$obj->error :
''), null,
'errors');
181if (
GETPOSTINT(
'clearlist') && $permissiontocreate) {
184 $obj->clear_target($id);
191if (
GETPOSTINT(
'exportcsv') && $permissiontoread) {
192 $completefilename =
'targets_emailing'.$object->id.
'_'.
dol_print_date(
dol_now(),
'dayhourlog').
'.csv';
193 header(
'Content-Type: text/csv');
194 header(
'Content-Disposition: attachment;filename='.$completefilename);
197 $sql =
"SELECT mc.rowid, mc.lastname, mc.firstname, mc.email, mc.other, mc.statut as status, mc.date_envoi, mc.tms,";
198 $sql .=
" mc.source_id, mc.source_type, mc.error_text";
199 $sql .=
" FROM ".MAIN_DB_PREFIX.
"mailing_cibles as mc";
200 $sql .=
" WHERE mc.fk_mailing = ".((int)
$object->id);
201 $sql .= $db->order($sortfield, $sortorder);
203 $resql = $db->query($sql);
205 $num = $db->num_rows($resql);
208 while ($obj = $db->fetch_object($resql)) {
209 print $obj->rowid.$sep;
210 print
'"'.$obj->lastname.
'"'.$sep;
211 print
'"'.$obj->firstname.
'"'.$sep;
212 print $obj->email.$sep;
213 print $obj->other.$sep;
214 print $obj->tms.$sep;
215 print $obj->source_type.$sep;
216 print $obj->source_id.$sep;
217 print $obj->date_envoi.$sep;
218 print $obj->status.$sep;
219 print
'"'.$obj->error_text.
'"'.$sep;
230if ($action ==
'delete' && $permissiontocreate) {
232 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"mailing_cibles WHERE rowid = ".((int) $rowid);
233 $sql .=
" AND fk_mailing = ".((int)
$object->id);
234 $resql = $db->query($sql);
238 $obj->update_nb($id);
242 header(
"Location: list.php");
250if ($action ==
"confirm_reset_target" && $permissiontocreate) {
255 foreach ($toselect as $toselectid) {
256 $result =
$object->resetTargetErrorStatus($user, $toselectid);
261 } elseif ($result > 0) {
278if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
279 $search_lastname =
'';
280 $search_firstname =
'';
283 $search_dest_status =
'';
288if (($action ==
'settitle' || $action ==
'setemail_from' || $action ==
'setreplyto' || $action ==
'setemail_errorsto' || $action ==
'setevenunsubscribe') && $permissiontocreate) {
291 if ($action ==
'settitle') {
293 } elseif ($action ==
'setemail_from') {
294 $object->email_from = trim(
GETPOST(
'email_from',
'alphawithlgt'));
295 } elseif ($action ==
'setemail_replyto') {
296 $object->email_replyto = trim(
GETPOST(
'email_replyto',
'alphawithlgt'));
297 } elseif ($action ==
'setemail_errorsto') {
298 $object->email_errorsto = trim(
GETPOST(
'email_errorsto',
'alphawithlgt'));
299 } elseif ($action ==
'settitle' && empty(
$object->title)) {
300 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"MailTitle"));
301 } elseif ($action ==
'setfrom' && empty(
$object->email_from)) {
302 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"MailFrom"));
303 } elseif ($action ==
'setevenunsubscribe') {
308 $result =
$object->update($user);
310 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
325$form =
new Form($db);
328$help_url =
'EN:Module_EMailing|FR:Module_Mailing|ES:Módulo_Mailing';
329llxHeader(
'', $langs->trans(
"Mailing"), $help_url);
331$arrayofselected = is_array($toselect) ? $toselect : array();
341 $linkback =
'<a href="'.DOL_URL_ROOT.
'/comm/mailing/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
343 $morehtmlref =
'<div class="refidno">';
345 $morehtmlref .= $form->editfieldkey(
"",
'title',
$object->title, $object, 0,
'string',
'', 0, 1);
346 $morehtmlref .= $form->editfieldval(
"",
'title',
$object->title, $object, 0,
'string',
'',
null,
null,
'', 1);
347 $morehtmlref .=
'</div>';
349 $morehtmlstatus =
'';
351 if (
$object->status == $object::STATUS_SENTPARTIALY ||
$object->status == $object::STATUS_SENTCOMPLETELY) {
352 $nbtry =
$object->countNbOfTargets(
'alreadysent');
353 $nbko =
$object->countNbOfTargets(
'alreadysentko');
354 $nbok = ($nbtry - $nbko);
356 $morehtmlstatus .=
' ('.$nbtry.
'/'.
$object->nbemail;
358 $morehtmlstatus .=
' - '.$nbko.
' '.$langs->trans(
"Error");
360 $morehtmlstatus .=
') ';
363 dol_banner_tab($object,
'id', $linkback, 1,
'rowid',
'ref', $morehtmlref,
'', 0,
'', $morehtmlstatus);
365 print
'<div class="fichecenter">';
366 print
'<div class="fichehalfleft">';
367 print
'<div class="underbanner clearboth"></div>';
369 print
'<table class="border centpercent tableforfield">'.
"\n";
372 print
'<tr><td class="titlefield">';
373 print $langs->trans(
"MailFrom").
'</td><td>';
375 foreach ($emailarray as $email => $name) {
376 if ($name && $name != $email) {
380 $langs->load(
"errors");
381 print
img_warning($langs->trans(
"ErrorBadEMail", $email));
391 if (
$object->messtype !=
'sms') {
392 print
'<tr><td>'.$langs->trans(
"MailErrorsTo").
'</td><td>';
394 foreach ($emailarray as $email => $name) {
395 if ($name != $email) {
399 $langs->load(
"errors");
400 print
img_warning($langs->trans(
"ErrorBadEMail", $email));
402 $langs->load(
"errors");
403 print
img_warning($langs->trans(
"ErrorBadMXDomain", $email));
413 if (
$object->messtype !=
'sms') {
415 print $form->editfieldkey(
"MailReply",
'email_replyto',
$object->email_replyto, $object, (
int) ($user->hasRight(
'mailing',
'creer') &&
$object->status < $object::STATUS_SENTCOMPLETELY),
'string');
417 print $form->editfieldval(
"MailReply",
'email_replyto',
$object->email_replyto, $object, $user->hasRight(
'mailing',
'creer') &&
$object->status < $object::STATUS_SENTCOMPLETELY,
'string');
419 if ($action !=
'editemail_replyto') {
421 $langs->load(
"errors");
422 print
img_warning($langs->trans(
"ErrorBadEMail", $email));
424 $langs->load(
"errors");
425 print
img_warning($langs->trans(
"ErrorBadMXDomain", $email));
435 print
'<div class="fichehalfright">';
436 print
'<div class="underbanner clearboth"></div>';
438 print
'<table class="border centpercent tableforfield">';
442 print $langs->trans(
"TotalNbOfDistinctRecipients");
445 if (is_numeric($nbemail)) {
449 $htmltooltip .= $langs->trans(
'LimitSendingEmailing',
getDolGlobalString(
'MAILING_LIMIT_SENDBYWEB'));
451 $htmltooltip .= $langs->trans(
'SendingFromWebInterfaceIsNotAllowed');
454 if (empty($nbemail)) {
455 $nbemail .=
' '.img_warning($langs->trans(
'ToAddRecipientsChooseHere'));
458 print $form->textwithpicto($nbemail, $htmltooltip, 1,
'info');
466 print $langs->trans(
"MAIN_MAIL_SENDMODE");
468 if (
$object->messtype !=
'sms') {
474 $text = $listofmethods[
'mail'];
479 print
' <span class="opacitymedium">('.getDolGlobalString(
'MAIN_MAIL_SMTP_SERVER_EMAILING',
getDolGlobalString(
'MAIN_MAIL_SMTP_SERVER')).
')</span>';
482 print
' <span class="opacitymedium">('.getDolGlobalString(
'MAIN_MAIL_SMTP_SERVER').
')</span>';
486 print
' <span class="opacitymedium">('.getDolGlobalString(
'MAIN_MAIL_SMTP_SERVER').
')</span>';
491 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
497 print
'<div class="clearboth"></div>';
505 $allowaddtarget = (
$object->status == $object::STATUS_DRAFT);
506 if (
GETPOST(
'allowaddtarget')) {
509 if (!$allowaddtarget) {
510 $newcardbutton .=
dolGetButtonTitle($langs->trans(
'New'),
'',
'fa fa-plus-circle', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&allowaddtarget=1',
'', $user->hasRight(
'mailing',
'creer'));
514 if ($allowaddtarget && $user->hasRight(
'mailing',
'creer')) {
515 print
load_fiche_titre($langs->trans(
"ToAddRecipientsChooseHere").
'...', ($user->admin ?
info_admin($langs->trans(
"YouCanAddYourOwnPredefindedListHere"), 1) :
''),
'');
517 print
'<div class="div-table-responsive">';
518 print
'<div class="tagtable centpercentwithout1imp liste_titre_bydiv borderbottom" id="tablelines">';
520 print
'<div class="tagtr liste_titre">';
521 print
'<div class="tagtd"></div>';
522 print
'<div class="tagtd">'.$langs->trans(
"RecipientSelectionModules").
'</div>';
523 print
'<div class="tagtd center maxwidth150">';
524 if (
$object->messtype !=
'sms') {
525 print $langs->trans(
"NbOfUniqueEMails");
527 print $langs->trans(
"NbOfUniquePhones");
530 print
'<div class="tagtd left"><div class="inline-block">'.$langs->trans(
"Filters").
'</div>';
531 if (
$object->messtype !=
'sms') {
532 print
' <div class="inline-block valignmiddle">'.$langs->trans(
"EvenUnsubscribe").
' ';
533 print
ajax_object_onoff($object,
'evenunsubscribe',
'evenunsubscribe',
'EvenUnsubscribe:switch_on:warning',
'EvenUnsubscribe', array(),
'small valignmiddle reposition',
'', 1);
537 print
'<div class="tagtd"> </div>';
542 foreach ($modulesdir as $dir) {
543 $modulenames = array();
547 dol_syslog(
"Scan directory ".$dir.
" for modules");
548 $handle = @opendir($dir);
549 if (is_resource($handle)) {
550 while (($file = readdir($handle)) !==
false) {
551 if (substr($file, 0, 1) !=
'.' && substr($file, 0, 3) !=
'CVS') {
553 if (preg_match(
"/(.*)\.modules\.php$/i", $file, $reg)) {
554 if ($reg[1] ==
'example') {
557 $modulenames[] = $reg[1];
570 foreach ($modulenames as $modulename) {
572 $file = $dir.$modulename.
".modules.php";
573 $classname =
"mailing_".$modulename;
576 $obj =
new $classname($db);
577 '@phan-var-force MailingTargets $obj';
580 $qualified = (is_null($obj->enabled) ? 1 : (int)
dol_eval((
string) $obj->enabled, 1));
583 foreach ($obj->require_module as $key) {
584 if (empty(
$conf->$key->enabled) || (empty($user->admin) && $obj->require_admin)) {
593 if ($allowaddtarget) {
594 print
'<form class="oddeven trforbreakperms trforbreaknobg impair tagtr" name="'.$modulename.
'" action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&module='.$modulename.
'" method="POST" enctype="multipart/form-data">';
595 print
'<input type="hidden" name="token" value="'.newToken().
'">';
596 print
'<input type="hidden" name="action" value="add">';
597 print
'<input type="hidden" name="page_y" value="'.newToken().
'">';
599 print
'<div class="oddeven trforbreakperms trforbreaknobg impair tagtr">';
602 print
'<div class="tagtd paddingleftlarge marginleftonly paddingrightlarge marginrightonly valignmiddle center">';
603 if (empty($obj->picto)) {
604 $obj->picto =
'generic';
606 print
img_object($langs->trans(
"EmailingTargetSelector").
': '.get_class($obj), $obj->picto,
'class="valignmiddle width25 size15x"');
608 print
'<div class="tagtd valignmiddle">';
609 print $obj->getDesc();
615 $obj->evenunsubscribe =
$object->evenunsubscribe;
617 $nbofrecipient = $obj->getNbOfRecipients(
'');
622 print
'<div class="tagtd center valignmiddle">';
623 if ($nbofrecipient ===
'' || $nbofrecipient >= 0) {
624 print $nbofrecipient;
626 print $langs->trans(
"Error").
' '.
img_error($obj->error);
630 print
'<div class="tagtd left valignmiddle">';
631 if ($allowaddtarget) {
633 $filter = $obj->formFilter();
640 print $langs->trans(
"None");
645 print
'<div class="tagtd right valignmiddle">';
646 if ($allowaddtarget) {
647 print
'<input type="submit" class="button button-add small reposition" name="button_'.$modulename.
'" value="'.$langs->trans(
"Add").
'">';
649 print
'<input type="submit" class="button small disabled" disabled="disabled" name="button_'.$modulename.
'" value="'.$langs->trans(
"Add").
'">';
655 if ($allowaddtarget) {
664 $parameters = array();
665 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $object, $action);
666 print $hookmanager->resPrint;
673 if ($sqlmessage && $user->admin) {
674 print
info_admin($langs->trans(
"SQLUsedForExport").
':<br> '.$sqlmessage, 0, 0,
'1',
'',
'TechnicalInformation');
684 $sql =
"SELECT mc.rowid, mc.lastname, mc.firstname, mc.email, mc.other, mc.statut as status, mc.date_envoi, mc.tms,";
685 $sql .=
" mc.source_url, mc.source_id, mc.source_type, mc.error_text,";
686 $sql .=
" COUNT(mu.rowid) as nb";
687 $sql .=
" FROM ".MAIN_DB_PREFIX.
"mailing_cibles as mc";
688 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"mailing_unsubscribe as mu ON mu.email = mc.email";
689 $sql .=
" WHERE mc.fk_mailing=".((int)
$object->id);
690 $asearchcriteriahasbeenset = 0;
691 if ($search_lastname) {
693 $asearchcriteriahasbeenset++;
695 if ($search_firstname) {
697 $asearchcriteriahasbeenset++;
701 $asearchcriteriahasbeenset++;
705 $asearchcriteriahasbeenset++;
707 if ($search_dest_status !=
'' && (
int) $search_dest_status >= -1) {
708 $sql .=
" AND mc.statut = ".((int) $search_dest_status);
709 $asearchcriteriahasbeenset++;
711 $sql .=
' GROUP BY mc.rowid, mc.lastname, mc.firstname, mc.email, mc.other, mc.statut, mc.date_envoi, mc.tms, mc.source_url, mc.source_id, mc.source_type, mc.error_text';
712 $sql .= $db->order($sortfield, $sortorder);
716 $nbtotalofrecords =
'';
718 $result = $db->query($sql);
719 $nbtotalofrecords = $db->num_rows($result);
720 if (($page * $limit) > $nbtotalofrecords) {
726 if (empty($asearchcriteriahasbeenset)) {
727 if ($nbtotalofrecords !=
$object->nbemail) {
728 dol_syslog(
"We found a difference in nb of record in target table and the property ->nbemail, we fix ->nbemail");
730 $resultrefresh =
$object->refreshNbOfTargets();
731 if ($resultrefresh < 0) {
739 $sql .= $db->plimit($limit + 1, $offset);
741 $resql = $db->query($sql);
743 $num = $db->num_rows($resql);
745 $param =
"&id=".$object->id;
747 if ($limit > 0 && $limit !=
$conf->liste_limit) {
748 $param .=
'&limit='.((int) $limit);
750 if ($search_lastname) {
751 $param .=
"&search_lastname=".urlencode($search_lastname);
753 if ($search_firstname) {
754 $param .=
"&search_firstname=".urlencode($search_firstname);
757 $param .=
"&search_email=".urlencode($search_email);
760 $param .=
"&search_other=".urlencode($search_other);
763 print
'<form method="POST" action="'.$_SERVER[
"PHP_SELF"].
'">';
764 print
'<input type="hidden" name="token" value="'.newToken().
'">';
765 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
766 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
767 print
'<input type="hidden" name="page" value="'.$page.
'">';
768 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
769 print
'<input type="hidden" name="page_y" value="">';
771 $morehtmlcenter =
'';
772 $arrayofmassactions = array();
773 if ($permissiontocreate) {
774 $arrayofmassactions[
'reset_target'] =
img_picto(
'',
'refresh',
'class="pictofixedwidth"').$langs->trans(
"ResetMailingTargetMassaction");
776 $massactionbutton = $form->selectMassAction(
'', $arrayofmassactions);
777 $morehtmlcenter .= $massactionbutton .
'<br>';
779 if (
$object->status == $object::STATUS_DRAFT) {
780 $morehtmlcenter =
'<span class="opacitymedium hideonsmartphone">'.$langs->trans(
"ToClearAllRecipientsClickHere").
'</span> <a href="'.$_SERVER[
"PHP_SELF"].
'?clearlist=1&id='.
$object->id.
'" class="button reposition smallpaddingimp">'.$langs->trans(
"TargetsReset").
'</a>';
782 $morehtmlcenter .=
' <a class="reposition" href="'.$_SERVER[
"PHP_SELF"].
'?action=exportcsv&token='.
newToken().
'&exportcsv=1&id='.
$object->id.
'">'.
img_picto(
'',
'download',
'class="pictofixedwidth"').$langs->trans(
"Download").
'</a>';
786 print
"\n<!-- List of selected targets -->\n";
787 print
'<form method="POST" action="'.$_SERVER[
"PHP_SELF"].
'">';
788 print
'<input type="hidden" name="token" value="'.newToken().
'">';
789 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
790 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
791 print
'<input type="hidden" name="page" value="'.$page.
'">';
792 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
793 print
'<input type="hidden" name="limit" value="'.$limit.
'">';
794 print
'<input type="hidden" name="page_y" value="">';
797 print_barre_liste($langs->trans(
"MailSelectedRecipients"), $page, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder, $morehtmlcenter, $num, $nbtotalofrecords,
'generic', 0, $newcardbutton,
'', $limit, 0, 0, 1);
799 if ($massaction ==
'reset_target') {
801 print $form->formconfirm($_SERVER[
"PHP_SELF"].
"?id=".
$object->id, $langs->trans(
"ConfirmResetMailingTargetMassaction"), $langs->trans(
"ConfirmResetMailingTargetMassactionQuestion"),
"confirm_reset_target",
null,
'', 0, 0, 500, 1);
804 $varpage = empty($contextpage) ? $_SERVER[
"PHP_SELF"] : $contextpage;
805 $htmlofselectarray = $form->multiSelectArrayWithCheckbox(
'selectedfields', $arrayfields, $varpage,
$conf->main_checkbox_left_column ?
'left' :
'');
806 $selectedfields = ($mode !=
'kanban' ? $htmlofselectarray :
'');
807 $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons(
'checkforselect', 1) :
'');
809 print
'<div class="div-table-responsive">';
810 print
'<table class="noborder centpercent">';
813 print
'<tr class="liste_titre_filter">';
816 if (
$conf->main_checkbox_left_column) {
817 print
'<td class="liste_titre maxwidthsearch">';
818 $searchpicto = $form->showFilterButtons(
'left');
823 print
'<td class="liste_titre">';
824 print
'<input class="flat maxwidth75" type="text" name="search_email" value="'.dol_escape_htmltag($search_email).
'">';
827 print
'<td class="liste_titre">';
828 print
'<input class="flat maxwidth50" type="text" name="search_lastname" value="'.dol_escape_htmltag($search_lastname).
'">';
831 print
'<td class="liste_titre">';
832 print
'<input class="flat maxwidth50" type="text" name="search_firstname" value="'.dol_escape_htmltag($search_firstname).
'">';
835 print
'<td class="liste_titre">';
836 print
'<input class="flat maxwidth100" type="text" name="search_other" value="'.dol_escape_htmltag($search_other).
'">';
839 print
'<td class="liste_titre">';
844 print
'<td class="liste_titre">';
849 print
'<td class="liste_titre">';
854 print
'<td class="liste_titre center parentonrightofpage">';
855 print $formmailing->selectDestinariesStatus($search_dest_status,
'search_dest_status', 1,
'width100 onrightofpage');
859 if (!
$conf->main_checkbox_left_column) {
860 print
'<td class="liste_titre maxwidthsearch">';
861 $searchpicto = $form->showFilterButtons();
869 $param .=
"&page=".urlencode((
string) ($page));
872 print
'<tr class="liste_titre">';
874 if (
$conf->main_checkbox_left_column) {
875 print
getTitleFieldOfList($selectedfields, 0, $_SERVER[
"PHP_SELF"],
'',
'',
'',
'', $sortfield, $sortorder,
'center maxwidthsearch ').
"\n";
879 print_liste_field_titre(
"Lastname", $_SERVER[
"PHP_SELF"],
"mc.lastname",
'', $param,
"", $sortfield, $sortorder);
880 print_liste_field_titre(
"Firstname", $_SERVER[
"PHP_SELF"],
"mc.firstname",
'', $param,
"", $sortfield, $sortorder);
881 print_liste_field_titre(
"OtherInformations", $_SERVER[
"PHP_SELF"],
'',
"", $param,
"", $sortfield, $sortorder);
882 print_liste_field_titre(
"Source", $_SERVER[
"PHP_SELF"],
'',
"", $param,
'', $sortfield, $sortorder,
'center ');
884 print_liste_field_titre(
"DateLastModification", $_SERVER[
"PHP_SELF"],
"mc.tms",
'', $param,
'', $sortfield, $sortorder,
'center ');
886 print_liste_field_titre(
"DateSending", $_SERVER[
"PHP_SELF"],
"mc.date_envoi",
'', $param,
'', $sortfield, $sortorder,
'center ');
887 print_liste_field_titre(
"Status", $_SERVER[
"PHP_SELF"],
"mc.statut",
'', $param,
'', $sortfield, $sortorder,
'center ');
889 if (!
$conf->main_checkbox_left_column) {
890 print
getTitleFieldOfList($selectedfields, 0, $_SERVER[
"PHP_SELF"],
'',
'',
'',
'', $sortfield, $sortorder,
'center maxwidthsearch ').
"\n";
898 include_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent.class.php';
899 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
900 include_once DOL_DOCUMENT_ROOT.
'/societe/class/societe.class.php';
901 include_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
902 include_once DOL_DOCUMENT_ROOT.
'/eventorganization/class/conferenceorboothattendee.class.php';
904 $objectstaticmember =
new Adherent($db);
905 $objectstaticuser =
new User($db);
906 $objectstaticcompany =
new Societe($db);
907 $objectstaticcontact =
new Contact($db);
910 while ($i < min($num, $limit)) {
911 $obj = $db->fetch_object($resql);
913 print
'<tr class="oddeven">';
916 if (
$conf->main_checkbox_left_column) {
917 print
'<td class="center nowraponall">';
918 print
'<!-- ID mailing_cibles = '.$obj->rowid.
' -->';
919 if ($massactionbutton || $massaction) {
921 if (in_array($obj->rowid, $arrayofselected)) {
924 print
'<input id="cb'.$obj->rowid.
'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->rowid.
'"'.($selected ?
' checked="checked"' :
'').
'>';
926 if ($obj->status == $object::STATUS_DRAFT) {
927 if ($user->hasRight(
'mailing',
'creer')) {
928 print
'<a class="reposition marginleftonly" href="'.$_SERVER[
'PHP_SELF'].
'?action=delete&token='.
newToken().
'&rowid='.((int) $obj->rowid).$param.
'">'.
img_delete($langs->trans(
"RemoveRecipient")).
'</a>';
938 print
'<td class="tdoverflowmax150">';
939 print
img_picto($obj->email,
'email',
'class="paddingright"');
941 print
img_warning($langs->trans(
"EmailOptedOut"),
'warning',
'pictofixedwidth');
946 print
'<td class="tdoverflowmax150" title="'.dolPrintHTMLForAttribute($obj->lastname).
'">'.
dolPrintHTML($obj->lastname).
'</td>';
948 print
'<td class="tdoverflowmax150" title="'.dolPrintHTMLForAttribute($obj->firstname).
'">'.
dolPrintHTML($obj->firstname).
'</td>';
950 print
'<td class="tdoverflowmax300" title="'.dolPrintHTMLForAttribute($obj->other).
'"><span class="small">'.
dolPrintHTML($obj->other).
'</small></td>';
952 print
'<td class="center tdoverflowmax150">';
953 if (empty($obj->source_id) || empty($obj->source_type)) {
954 print empty($obj->source_url) ?
'' : $obj->source_url;
956 if ($obj->source_type ==
'member') {
957 $objectstaticmember->fetch($obj->source_id);
958 print $objectstaticmember->getNomUrl(1);
959 } elseif ($obj->source_type ==
'user') {
960 $objectstaticuser->fetch($obj->source_id);
961 print $objectstaticuser->getNomUrl(1);
962 } elseif ($obj->source_type ==
'thirdparty') {
963 $objectstaticcompany->fetch($obj->source_id);
964 print $objectstaticcompany->getNomUrl(1);
965 } elseif ($obj->source_type ==
'contact') {
966 $objectstaticcontact->fetch($obj->source_id);
967 print $objectstaticcontact->getNomUrl(1);
968 } elseif ($obj->source_type ==
'eventorganizationattendee') {
969 $objectstaticeventorganization->fetch($obj->source_id);
970 print $objectstaticeventorganization->getNomUrl(1);
972 print $obj->source_url;
978 print
'<td class="center nowraponall">';
979 print
dol_print_date($db->jdate($obj->tms),
'dayhour',
'tzuserrel');
983 print
'<td class="center nowraponall">';
984 if ($obj->status != $object::STATUS_DRAFT) {
986 print
dol_print_date($db->jdate($obj->date_envoi),
'dayhour',
'tzuserrel');
991 print
'<td class="nowrap center">';
992 if ($obj->status == $object::STATUS_DRAFT) {
993 print $object::libStatutDest((
int) $obj->status, 2,
'');
995 print $object::libStatutDest((
int) $obj->status, 2, $obj->error_text);
1000 if (!
$conf->main_checkbox_left_column) {
1001 print
'<td class="center nowraponall">';
1002 print
'<!-- ID mailing_cibles = '.$obj->rowid.
' -->';
1003 if ($obj->status == $object::STATUS_DRAFT) {
1004 if ($user->hasRight(
'mailing',
'creer')) {
1005 print
'<a class="reposition marginleftonly" href="'.$_SERVER[
'PHP_SELF'].
'?action=delete&token='.
newToken().
'&rowid='.((int) $obj->rowid).$param.
'">'.
img_delete($langs->trans(
"RemoveRecipient")).
'</a>';
1019 if (
$object->status < $object::STATUS_SENTPARTIALY) {
1020 print
'<tr><td colspan="9">';
1021 print
'<span class="opacitymedium">'.$langs->trans(
"NoTargetYet").
'</span>';
1024 print
'<tr><td colspan="9">';
1025 print
'<span class="opacitymedium">'.$langs->trans(
"NoRecordFound").
'</span>';
1029 print
"</table><br>";
1039 print
"\n<!-- End list of selected targets -->\n";
$id
Support class for third parties, contacts, members, users or resources.
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
ajax_object_onoff($object, $code, $field, $text_on, $text_off, $input=array(), $morecss='', $htmlname='', $forcenojs=0, $moreparam='')
On/off button to change a property status of an object This uses the ajax service objectonoff....
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Class to manage members of a foundation.
static getValidAddress($address, $format, $encode=0, $maxnumberofemail=0)
Return a formatted address string for SMTP protocol.
static getArrayAddress($address)
Return a formatted array of address string for SMTP protocol.
Class for ConferenceOrBoothAttendee.
Class to manage emailings module.
Parent class of emailing target selectors modules.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage Dolibarr users.
emailing_prepare_head(Mailing $object)
Prepare array with list of tabs.
dolGetModulesDirs($subdir='')
Return list of directories that contain modules.
isValidMailDomain($mail)
Return true if email has a domain name that can be resolved to MX type.
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
print_liste_field_titre($name, $file="", $field="", $begin="", $param="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
print_barre_liste($title, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $selectlimitsuffix=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
img_delete($titlealt='default', $other='class="pictodelete"', $morecss='')
Show delete logo.
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0, $morecssdiv='')
Show tabs of a record.
dolPrintHTML($s, $allowiframe=0)
Return a string (that can be on several lines) ready to be output on a HTML page.
dolGetButtonTitle($label, $helpText='', $iconClass='fa fa-file', $url='', $id='', $status=1, $params=array())
Function dolGetButtonTitle : this kind of buttons are used in title in list.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
dol_eval($s, $returnvalue=1, $hideerrors=1, $onlysimplestring='1')
Replace eval function to add more security.
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $allowothertags=array())
Show a picto called object_picto (generic function)
natural_search($fields, $value, $mode=0, $nofirstand=0)
Generate natural SQL search string for a criteria (this criteria can be tested on one or several fiel...
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
newToken()
Return the value of token currently saved into session with name 'newtoken'.
dol_print_email($email, $cid=0, $socid=0, $addlink=0, $max=64, $showinvalid=1, $withpicto=0, $morecss='paddingrightonly')
Show EMail link formatted for HTML output.
getTitleFieldOfList($name, $thead=0, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $disablesortlink=0, $tooltip='', $forcenowrapcolumntitle=0)
Get title line of an array.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
img_error($titlealt='default')
Show error logo.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
isValidEmail($address, $acceptsupervisorkey=0, $acceptuserkey=0)
Return true if email syntax is ok.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='')
Show information in HTML for admin users or standard users.
get_exdir($num, $level, $alpha, $withoutslash, $object, $modulepart='')
Return a path to have a the directory according to object where files are stored.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.