30require
'../../main.inc.php';
38require_once DOL_DOCUMENT_ROOT.
'/core/modules/mailings/modules_mailings.php';
39require_once DOL_DOCUMENT_ROOT.
'/comm/mailing/class/mailing.class.php';
40require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formmailing.class.php';
41require_once DOL_DOCUMENT_ROOT.
'/core/lib/emailing.lib.php';
42require_once DOL_DOCUMENT_ROOT.
'/core/class/CMailFile.class.php';
43require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
44require_once DOL_DOCUMENT_ROOT.
'/core/lib/ajax.lib.php';
47$langs->loadLangs(array(
"mails",
"admin"));
49$action =
GETPOST(
'action',
'aZ09');
50$toselect =
GETPOST(
'toselect',
'array:int');
51$contextpage =
GETPOST(
'contextpage',
'aZ');
52$massaction =
GETPOST(
'massaction',
'alpha');
57$sortfield =
GETPOST(
'sortfield',
'aZ09comma');
58$sortorder =
GETPOST(
'sortorder',
'aZ09comma');
60if (empty($page) || $page == -1) {
63$offset = $limit * $page;
67 $sortfield =
"mc.statut,email";
70 $sortorder =
"DESC,ASC";
75$search_lastname =
GETPOST(
"search_lastname",
'alphanohtml');
76$search_firstname =
GETPOST(
"search_firstname",
'alphanohtml');
77$search_email =
GETPOST(
"search_email",
'alphanohtml');
78$search_other =
GETPOST(
"search_other",
'alphanohtml');
79$search_dest_status =
GETPOST(
'search_dest_status',
'int');
88$hookmanager->initHooks(array(
'ciblescard',
'globalcard'));
94$listofmethods = array();
96$listofmethods[
'mail'] =
'PHP mail function';
98$listofmethods[
'smtps'] =
'SMTP/SMTPS socket library';
99if (version_compare(phpversion(),
'7.0',
'>=')) {
100 $listofmethods[
'swiftmailer'] =
'Swift Mailer socket library';
104if (!$user->hasRight(
'mailing',
'lire') || (!
getDolGlobalString(
'EXTERNAL_USERS_ARE_AUTHORIZED') && $user->socid > 0)) {
107if (empty($action) && empty(
$object->id)) {
111$permissiontoread = $user->hasRight(
'mailing',
'lire');
112$permissiontocreate = $user->hasRight(
'mailing',
'creer');
113$permissiontovalidatesend = $user->hasRight(
'mailing',
'valider');
114$permissiontodelete = $user->hasRight(
'mailing',
'supprimer');
120if (
GETPOST(
'cancel',
'alpha')) {
124if (!
GETPOST(
'confirmmassaction',
'alpha')) {
128if ($action ==
'add' && $permissiontocreate) {
129 $module =
GETPOST(
"module",
'alpha');
133 foreach ($modulesdir as $dir) {
136 dol_syslog(
"Scan directory ".$dir.
" for modules");
139 $file = $dir.
"/".$module.
".modules.php";
140 $classname =
"mailing_".$module;
142 if (file_exists($file)) {
146 dol_syslog(
"Call add_to_target() on class ".$classname.
" evenunsubscribe=".
$object->evenunsubscribe);
149 if (class_exists($classname)) {
150 $obj =
new $classname($db);
151 '@phan-var-force MailingTargets $obj';
152 $obj->evenunsubscribe =
$object->evenunsubscribe;
154 $result = $obj->add_to_target($id);
156 $sqlmessage = $obj->sql;
165 if (
$object->status == $object::STATUS_SENTCOMPLETELY) {
166 $object->setStatut($object::STATUS_SENTPARTIALY);
175 if ($result < 0 && is_object($obj)) {
176 setEventMessages($langs->trans(
"Error").($obj->error ?
' '.$obj->error :
''), null,
'errors');
180if (
GETPOSTINT(
'clearlist') && $permissiontocreate) {
183 $obj->clear_target($id);
190if (
GETPOSTINT(
'exportcsv') && $permissiontoread) {
191 $completefilename =
'targets_emailing'.$object->id.
'_'.
dol_print_date(
dol_now(),
'dayhourlog').
'.csv';
192 header(
'Content-Type: text/csv');
193 header(
'Content-Disposition: attachment;filename='.$completefilename);
196 $sql =
"SELECT mc.rowid, mc.lastname, mc.firstname, mc.email, mc.other, mc.statut as status, mc.date_envoi, mc.tms,";
197 $sql .=
" mc.source_id, mc.source_type, mc.error_text";
198 $sql .=
" FROM ".MAIN_DB_PREFIX.
"mailing_cibles as mc";
199 $sql .=
" WHERE mc.fk_mailing = ".((int)
$object->id);
200 $sql .= $db->order($sortfield, $sortorder);
202 $resql = $db->query($sql);
204 $num = $db->num_rows($resql);
207 while ($obj = $db->fetch_object($resql)) {
208 print $obj->rowid.$sep;
209 print
'"'.$obj->lastname.
'"'.$sep;
210 print
'"'.$obj->firstname.
'"'.$sep;
211 print $obj->email.$sep;
212 print $obj->other.$sep;
213 print $obj->tms.$sep;
214 print $obj->source_type.$sep;
215 print $obj->source_id.$sep;
216 print $obj->date_envoi.$sep;
217 print $obj->status.$sep;
218 print
'"'.$obj->error_text.
'"'.$sep;
229if ($action ==
'delete' && $permissiontocreate) {
231 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"mailing_cibles WHERE rowid = ".((int) $rowid);
232 $sql .=
" AND fk_mailing = ".((int)
$object->id);
233 $resql = $db->query($sql);
237 $obj->update_nb($id);
241 header(
"Location: list.php");
249if ($action ==
"confirm_reset_target" && $permissiontocreate) {
254 foreach ($toselect as $toselectid) {
255 $result =
$object->resetTargetErrorStatus($user, $toselectid);
260 } elseif ($result > 0) {
277if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
278 $search_lastname =
'';
279 $search_firstname =
'';
282 $search_dest_status =
'';
287if (($action ==
'settitle' || $action ==
'setemail_from' || $action ==
'setreplyto' || $action ==
'setemail_errorsto' || $action ==
'setevenunsubscribe') && $permissiontocreate) {
290 if ($action ==
'settitle') {
292 } elseif ($action ==
'setemail_from') {
293 $object->email_from = trim(
GETPOST(
'email_from',
'alphawithlgt'));
294 } elseif ($action ==
'setemail_replyto') {
295 $object->email_replyto = trim(
GETPOST(
'email_replyto',
'alphawithlgt'));
296 } elseif ($action ==
'setemail_errorsto') {
297 $object->email_errorsto = trim(
GETPOST(
'email_errorsto',
'alphawithlgt'));
298 } elseif ($action ==
'settitle' && empty(
$object->title)) {
299 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"MailTitle"));
300 } elseif ($action ==
'setfrom' && empty(
$object->email_from)) {
301 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"MailFrom"));
302 } elseif ($action ==
'setevenunsubscribe') {
307 $result =
$object->update($user);
309 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
324$form =
new Form($db);
327$help_url =
'EN:Module_EMailing|FR:Module_Mailing|ES:Módulo_Mailing';
328llxHeader(
'', $langs->trans(
"Mailing"), $help_url);
330$arrayofselected = is_array($toselect) ? $toselect : array();
340 $linkback =
'<a href="'.DOL_URL_ROOT.
'/comm/mailing/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
342 $morehtmlref =
'<div class="refidno">';
344 $morehtmlref .= $form->editfieldkey(
"",
'title',
$object->title, $object, 0,
'string',
'', 0, 1);
345 $morehtmlref .= $form->editfieldval(
"",
'title',
$object->title, $object, 0,
'string',
'',
null,
null,
'', 1);
346 $morehtmlref .=
'</div>';
348 $morehtmlstatus =
'';
350 if (
$object->status == $object::STATUS_SENTPARTIALY ||
$object->status == $object::STATUS_SENTCOMPLETELY) {
351 $nbtry =
$object->countNbOfTargets(
'alreadysent');
352 $nbko =
$object->countNbOfTargets(
'alreadysentko');
353 $nbok = ($nbtry - $nbko);
355 $morehtmlstatus .=
' ('.$nbtry.
'/'.
$object->nbemail;
357 $morehtmlstatus .=
' - '.$nbko.
' '.$langs->trans(
"Error");
359 $morehtmlstatus .=
') ';
362 dol_banner_tab($object,
'id', $linkback, 1,
'rowid',
'ref', $morehtmlref,
'', 0,
'', $morehtmlstatus);
364 print
'<div class="fichecenter">';
365 print
'<div class="fichehalfleft">';
366 print
'<div class="underbanner clearboth"></div>';
368 print
'<table class="border centpercent tableforfield">'.
"\n";
371 print
'<tr><td class="titlefield">';
372 print $langs->trans(
"MailFrom").
'</td><td>';
374 foreach ($emailarray as $email => $name) {
375 if ($name && $name != $email) {
379 $langs->load(
"errors");
380 print
img_warning($langs->trans(
"ErrorBadEMail", $email));
390 if (
$object->messtype !=
'sms') {
391 print
'<tr><td>'.$langs->trans(
"MailErrorsTo").
'</td><td>';
393 foreach ($emailarray as $email => $name) {
394 if ($name != $email) {
398 $langs->load(
"errors");
399 print
img_warning($langs->trans(
"ErrorBadEMail", $email));
401 $langs->load(
"errors");
402 print
img_warning($langs->trans(
"ErrorBadMXDomain", $email));
412 if (
$object->messtype !=
'sms') {
414 print $form->editfieldkey(
"MailReply",
'email_replyto',
$object->email_replyto, $object, (
int) ($user->hasRight(
'mailing',
'creer') &&
$object->status < $object::STATUS_SENTCOMPLETELY),
'string');
416 print $form->editfieldval(
"MailReply",
'email_replyto',
$object->email_replyto, $object, $user->hasRight(
'mailing',
'creer') &&
$object->status < $object::STATUS_SENTCOMPLETELY,
'string');
418 if ($action !=
'editemail_replyto') {
420 $langs->load(
"errors");
421 print
img_warning($langs->trans(
"ErrorBadEMail", $email));
423 $langs->load(
"errors");
424 print
img_warning($langs->trans(
"ErrorBadMXDomain", $email));
434 print
'<div class="fichehalfright">';
435 print
'<div class="underbanner clearboth"></div>';
437 print
'<table class="border centpercent tableforfield">';
441 print $langs->trans(
"TotalNbOfDistinctRecipients");
444 if (is_numeric($nbemail)) {
448 $htmltooltip .= $langs->trans(
'LimitSendingEmailing',
getDolGlobalString(
'MAILING_LIMIT_SENDBYWEB'));
450 $htmltooltip .= $langs->trans(
'SendingFromWebInterfaceIsNotAllowed');
453 if (empty($nbemail)) {
454 $nbemail .=
' '.img_warning($langs->trans(
'ToAddRecipientsChooseHere'));
457 print $form->textwithpicto($nbemail, $htmltooltip, 1,
'info');
465 print $langs->trans(
"MAIN_MAIL_SENDMODE");
467 if (
$object->messtype !=
'sms') {
473 $text = $listofmethods[
'mail'];
478 print
' <span class="opacitymedium">('.getDolGlobalString(
'MAIN_MAIL_SMTP_SERVER_EMAILING',
getDolGlobalString(
'MAIN_MAIL_SMTP_SERVER')).
')</span>';
481 print
' <span class="opacitymedium">('.getDolGlobalString(
'MAIN_MAIL_SMTP_SERVER').
')</span>';
485 print
' <span class="opacitymedium">('.getDolGlobalString(
'MAIN_MAIL_SMTP_SERVER').
')</span>';
490 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
496 print
'<div class="clearboth"></div>';
504 $allowaddtarget = (
$object->status == $object::STATUS_DRAFT);
505 if (
GETPOST(
'allowaddtarget')) {
508 if (!$allowaddtarget) {
509 $newcardbutton .=
dolGetButtonTitle($langs->trans(
'New'),
'',
'fa fa-plus-circle', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&allowaddtarget=1',
'', $user->hasRight(
'mailing',
'creer'));
513 if ($allowaddtarget && $user->hasRight(
'mailing',
'creer')) {
514 print
load_fiche_titre($langs->trans(
"ToAddRecipientsChooseHere").
'...', ($user->admin ?
info_admin($langs->trans(
"YouCanAddYourOwnPredefindedListHere"), 1) :
''),
'');
516 print
'<div class="div-table-responsive">';
517 print
'<div class="tagtable centpercentwithout1imp liste_titre_bydiv borderbottom" id="tablelines">';
519 print
'<div class="tagtr liste_titre">';
520 print
'<div class="tagtd"></div>';
521 print
'<div class="tagtd">'.$langs->trans(
"RecipientSelectionModules").
'</div>';
522 print
'<div class="tagtd center maxwidth150">';
523 if (
$object->messtype !=
'sms') {
524 print $langs->trans(
"NbOfUniqueEMails");
526 print $langs->trans(
"NbOfUniquePhones");
529 print
'<div class="tagtd left"><div class="inline-block">'.$langs->trans(
"Filters").
'</div>';
530 if (
$object->messtype !=
'sms') {
531 print
' <div class="inline-block valignmiddle">'.$langs->trans(
"EvenUnsubscribe").
' ';
532 print
ajax_object_onoff($object,
'evenunsubscribe',
'evenunsubscribe',
'EvenUnsubscribe:switch_on:warning',
'EvenUnsubscribe', array(),
'small valignmiddle reposition',
'', 1);
536 print
'<div class="tagtd"> </div>';
541 foreach ($modulesdir as $dir) {
542 $modulenames = array();
546 dol_syslog(
"Scan directory ".$dir.
" for modules");
547 $handle = @opendir($dir);
548 if (is_resource($handle)) {
549 while (($file = readdir($handle)) !==
false) {
550 if (substr($file, 0, 1) !=
'.' && substr($file, 0, 3) !=
'CVS') {
552 if (preg_match(
"/(.*)\.modules\.php$/i", $file, $reg)) {
553 if ($reg[1] ==
'example') {
556 $modulenames[] = $reg[1];
569 foreach ($modulenames as $modulename) {
571 $file = $dir.$modulename.
".modules.php";
572 $classname =
"mailing_".$modulename;
575 $obj =
new $classname($db);
576 '@phan-var-force MailingTargets $obj';
579 $qualified = (is_null($obj->enabled) ? 1 : (int)
dol_eval((
string) $obj->enabled, 1));
582 foreach ($obj->require_module as $key) {
583 if (empty($conf->$key->enabled) || (empty($user->admin) && $obj->require_admin)) {
592 if ($allowaddtarget) {
593 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">';
594 print
'<input type="hidden" name="token" value="'.newToken().
'">';
595 print
'<input type="hidden" name="action" value="add">';
596 print
'<input type="hidden" name="page_y" value="'.newToken().
'">';
598 print
'<div class="oddeven trforbreakperms trforbreaknobg impair tagtr">';
601 print
'<div class="tagtd paddingleftlarge marginleftonly paddingrightlarge marginrightonly valignmiddle center">';
602 if (empty($obj->picto)) {
603 $obj->picto =
'generic';
605 print
img_object($langs->trans(
"EmailingTargetSelector").
': '.get_class($obj), $obj->picto,
'class="valignmiddle width25 size15x"');
607 print
'<div class="tagtd valignmiddle">';
608 print $obj->getDesc();
614 $obj->evenunsubscribe =
$object->evenunsubscribe;
616 $nbofrecipient = $obj->getNbOfRecipients(
'');
621 print
'<div class="tagtd center valignmiddle">';
622 if ($nbofrecipient ===
'' || $nbofrecipient >= 0) {
623 print $nbofrecipient;
625 print $langs->trans(
"Error").
' '.
img_error($obj->error);
629 print
'<div class="tagtd left valignmiddle">';
630 if ($allowaddtarget) {
632 $filter = $obj->formFilter();
639 print $langs->trans(
"None");
644 print
'<div class="tagtd right valignmiddle">';
645 if ($allowaddtarget) {
646 print
'<input type="submit" class="button button-add small reposition" name="button_'.$modulename.
'" value="'.$langs->trans(
"Add").
'">';
648 print
'<input type="submit" class="button small disabled" disabled="disabled" name="button_'.$modulename.
'" value="'.$langs->trans(
"Add").
'">';
654 if ($allowaddtarget) {
663 $parameters = array();
664 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $object, $action);
665 print $hookmanager->resPrint;
672 if ($sqlmessage && $user->admin) {
673 print
info_admin($langs->trans(
"SQLUsedForExport").
':<br> '.$sqlmessage, 0, 0,
'1',
'',
'TechnicalInformation');
683 $sql =
"SELECT mc.rowid, mc.lastname, mc.firstname, mc.email, mc.other, mc.statut as status, mc.date_envoi, mc.tms,";
684 $sql .=
" mc.source_url, mc.source_id, mc.source_type, mc.error_text,";
685 $sql .=
" COUNT(mu.rowid) as nb";
686 $sql .=
" FROM ".MAIN_DB_PREFIX.
"mailing_cibles as mc";
687 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"mailing_unsubscribe as mu ON mu.email = mc.email";
688 $sql .=
" WHERE mc.fk_mailing=".((int)
$object->id);
689 $asearchcriteriahasbeenset = 0;
690 if ($search_lastname) {
692 $asearchcriteriahasbeenset++;
694 if ($search_firstname) {
696 $asearchcriteriahasbeenset++;
700 $asearchcriteriahasbeenset++;
704 $asearchcriteriahasbeenset++;
706 if ($search_dest_status !=
'' && (
int) $search_dest_status >= -1) {
707 $sql .=
" AND mc.statut = ".((int) $search_dest_status);
708 $asearchcriteriahasbeenset++;
710 $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';
711 $sql .= $db->order($sortfield, $sortorder);
715 $nbtotalofrecords =
'';
717 $result = $db->query($sql);
718 $nbtotalofrecords = $db->num_rows($result);
719 if (($page * $limit) > (int) $nbtotalofrecords) {
725 if (empty($asearchcriteriahasbeenset)) {
726 if ($nbtotalofrecords !=
$object->nbemail) {
727 dol_syslog(
"We found a difference in nb of record in target table and the property ->nbemail, we fix ->nbemail");
729 $resultrefresh =
$object->refreshNbOfTargets();
730 if ($resultrefresh < 0) {
738 $sql .= $db->plimit($limit + 1, $offset);
740 $resql = $db->query($sql);
742 $num = $db->num_rows($resql);
744 $param =
"&id=".$object->id;
746 if ($limit > 0 && $limit != $conf->liste_limit) {
747 $param .=
'&limit='.((int) $limit);
749 if ($search_lastname) {
750 $param .=
"&search_lastname=".urlencode($search_lastname);
752 if ($search_firstname) {
753 $param .=
"&search_firstname=".urlencode($search_firstname);
756 $param .=
"&search_email=".urlencode($search_email);
759 $param .=
"&search_other=".urlencode($search_other);
762 print
'<form method="POST" action="'.dolBuildUrl($_SERVER[
"PHP_SELF"]).
'">';
763 print
'<input type="hidden" name="token" value="'.newToken().
'">';
764 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
765 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
766 print
'<input type="hidden" name="page" value="'.$page.
'">';
767 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
768 print
'<input type="hidden" name="page_y" value="">';
770 $morehtmlcenter =
'';
771 $arrayofmassactions = array();
772 if ($permissiontocreate) {
773 $arrayofmassactions[
'reset_target'] =
img_picto(
'',
'refresh',
'class="pictofixedwidth"').$langs->trans(
"ResetMailingTargetMassaction");
775 $massactionbutton = $form->selectMassAction(
'', $arrayofmassactions);
776 $morehtmlcenter .= $massactionbutton .
'<br>';
778 if (
$object->status == $object::STATUS_DRAFT) {
779 $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 $morehtmlright =
'<a class="reposition marginrightonly" 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="'.dolBuildUrl($_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, $morehtmlright);
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(! $sortfield) if(! $sortorder) $object
ajax_object_onoff($object, $code, $field, $text_on, $text_off, $input=array(), $morecss='', $htmlname='', $forcenojs=0, $moreparam='', $readonly=0)
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.
dol_now($mode='gmt')
Return date for now.
dol_print_email($email, $contactid=0, $socid=0, $addlink=0, $max=0, $showinvalid=2, $withpicto=0, $morecss='paddingrightonly')
Show EMail link formatted for HTML output.
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, $sqltoadd='')
Generate natural SQL search string for a criteria (this criteria can be tested on one or several fiel...
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
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.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false, $decorate=0)
Output date in a string format according to outputlangs (or langs if not defined).
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...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='', $morecssonpicto='widthpictotitle')
Load a title with picto.
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...
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.