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';
103$arrayfields = array();
106if (!$user->hasRight(
'mailing',
'lire') || (!
getDolGlobalString(
'EXTERNAL_USERS_ARE_AUTHORIZED') && $user->socid > 0)) {
109if (empty($action) && empty(
$object->id)) {
113$permissiontoread = $user->hasRight(
'mailing',
'lire');
114$permissiontocreate = $user->hasRight(
'mailing',
'creer');
115$permissiontovalidatesend = $user->hasRight(
'mailing',
'valider');
116$permissiontodelete = $user->hasRight(
'mailing',
'supprimer');
122if (
GETPOST(
'cancel',
'alpha')) {
126if (!
GETPOST(
'confirmmassaction',
'alpha')) {
130if ($action ==
'add' && $permissiontocreate) {
135 foreach ($modulesdir as $dir) {
138 dol_syslog(
"Scan directory ".$dir.
" for modules");
141 $file = $dir.
"/".
$module.
".modules.php";
142 $classname =
"mailing_".$module;
144 if (file_exists($file)) {
148 dol_syslog(
"Call add_to_target() on class ".$classname.
" evenunsubscribe=".
$object->evenunsubscribe);
151 if (class_exists($classname)) {
152 $obj =
new $classname($db);
153 '@phan-var-force MailingTargets $obj';
154 $obj->evenunsubscribe =
$object->evenunsubscribe;
156 $result = $obj->add_to_target($id);
158 $sqlmessage = $obj->sql;
167 if (
$object->status == $object::STATUS_SENTCOMPLETELY) {
168 $object->setStatut($object::STATUS_SENTPARTIALY);
171 setEventMessages($langs->trans(
"XTargetsAdded", $result),
null,
'mesgs');
175 setEventMessages($langs->trans(
"WarningNoEMailsAdded"),
null,
'warnings');
177 if ($result < 0 && is_object($obj)) {
178 setEventMessages($langs->trans(
"Error").($obj->error ?
' '.$obj->error :
''), null,
'errors');
182if (
GETPOSTINT(
'clearlist') && $permissiontocreate) {
185 $obj->clear_target($id);
192if (
GETPOSTINT(
'exportcsv') && $permissiontoread) {
193 $completefilename =
'targets_emailing'.$object->id.
'_'.
dol_print_date(
dol_now(),
'dayhourlog').
'.csv';
194 header(
'Content-Type: text/csv');
195 header(
'Content-Disposition: attachment;filename='.$completefilename);
198 $sql =
"SELECT mc.rowid, mc.lastname, mc.firstname, mc.email, mc.other, mc.statut as status, mc.date_envoi, mc.tms,";
199 $sql .=
" mc.source_id, mc.source_type, mc.error_text";
200 $sql .=
" FROM ".MAIN_DB_PREFIX.
"mailing_cibles as mc";
201 $sql .=
" WHERE mc.fk_mailing = ".((int)
$object->id);
202 $sql .= $db->order($sortfield, $sortorder);
204 $resql = $db->query($sql);
206 $num = $db->num_rows($resql);
209 while ($obj = $db->fetch_object($resql)) {
210 print $obj->rowid.$sep;
211 print
'"'.$obj->lastname.
'"'.$sep;
212 print
'"'.$obj->firstname.
'"'.$sep;
213 print $obj->email.$sep;
214 print $obj->other.$sep;
215 print $obj->tms.$sep;
216 print $obj->source_type.$sep;
217 print $obj->source_id.$sep;
218 print $obj->date_envoi.$sep;
219 print $obj->status.$sep;
220 print
'"'.$obj->error_text.
'"'.$sep;
226 dol_print_error($db);
231if ($action ==
'delete' && $permissiontocreate) {
233 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"mailing_cibles WHERE rowid = ".((int) $rowid);
234 $sql .=
" AND fk_mailing = ".((int)
$object->id);
235 $resql = $db->query($sql);
239 $obj->update_nb($id);
241 setEventMessages($langs->trans(
"RecordDeleted"),
null,
'mesgs');
243 header(
"Location: list.php");
247 dol_print_error($db);
251if ($action ==
"confirm_reset_target" && $permissiontocreate) {
256 foreach ($toselect as $toselectid) {
257 $result =
$object->resetTargetErrorStatus($user, $toselectid);
262 } elseif ($result > 0) {
270 setEventMessages($langs->trans(
"RecordsModified", $nbok),
null,
'mesgs');
279if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
280 $search_lastname =
'';
281 $search_firstname =
'';
284 $search_dest_status =
'';
289if (($action ==
'settitle' || $action ==
'setemail_from' || $action ==
'setemail_replyto' || $action ==
'setemail_errorsto' || $action ==
'setevenunsubscribe') && $permissiontocreate) {
293 if ($action ==
'settitle') {
295 } elseif ($action ==
'setemail_from') {
296 $object->email_from = trim(
GETPOST(
'email_from',
'alphawithlgt'));
297 } elseif ($action ==
'setemail_replyto') {
298 $object->email_replyto = trim(
GETPOST(
'email_replyto',
'alphawithlgt'));
299 } elseif ($action ==
'setemail_errorsto') {
300 $object->email_errorsto = trim(
GETPOST(
'email_errorsto',
'alphawithlgt'));
301 } elseif ($action ==
'setevenunsubscribe') {
304 if ($action ==
'settitle' && empty(
$object->title)) {
305 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"MailTitle"));
307 if ($action ==
'setemail_from' && empty(
$object->email_from)) {
308 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"MailFrom"));
312 $result =
$object->update($user);
314 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
320 setEventMessages($mesg, $mesgs,
'errors');
329$form =
new Form($db);
332$help_url =
'EN:Module_EMailing|FR:Module_Mailing|ES:Módulo_Mailing';
333llxHeader(
'', $langs->trans(
"Mailing"), $help_url);
335$arrayofselected = is_array($toselect) ? $toselect : array();
345 $linkback =
'<a href="'.DOL_URL_ROOT.
'/comm/mailing/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
347 $morehtmlref =
'<div class="refidno">';
349 $morehtmlref .= $form->editfieldkey(
"",
'title',
$object->title, $object, 0,
'string',
'', 0, 1);
350 $morehtmlref .= $form->editfieldval(
"",
'title',
$object->title, $object, 0,
'string',
'',
null,
null,
'', 1);
351 $morehtmlref .=
'</div>';
353 $morehtmlstatus =
'';
355 if (
$object->status == $object::STATUS_SENTPARTIALY ||
$object->status == $object::STATUS_SENTCOMPLETELY) {
356 $nbtry =
$object->countNbOfTargets(
'alreadysent');
357 $nbko =
$object->countNbOfTargets(
'alreadysentko');
358 $nbok = ($nbtry - $nbko);
360 $morehtmlstatus .=
' ('.$nbtry.
'/'.
$object->nbemail;
362 $morehtmlstatus .=
' - '.$nbko.
' '.$langs->trans(
"Error");
364 $morehtmlstatus .=
') ';
367 dol_banner_tab($object,
'id', $linkback, 1,
'rowid',
'ref', $morehtmlref,
'', 0,
'', $morehtmlstatus);
369 print
'<div class="fichecenter">';
370 print
'<div class="fichehalfleft">';
371 print
'<div class="underbanner clearboth"></div>';
373 print
'<table class="border centpercent tableforfield">'.
"\n";
376 print
'<tr><td class="titlefield">';
377 print $langs->trans(
"MailFrom").
'</td><td>';
379 foreach ($emailarray as $email => $name) {
380 if ($name && $name != $email) {
384 $langs->load(
"errors");
385 print img_warning($langs->trans(
"ErrorBadEMail", $email));
395 if (
$object->messtype !=
'sms') {
396 print
'<tr><td>'.$langs->trans(
"MailErrorsTo").
'</td><td>';
398 foreach ($emailarray as $email => $name) {
399 if ($name != $email) {
403 $langs->load(
"errors");
404 print img_warning($langs->trans(
"ErrorBadEMail", $email));
406 $langs->load(
"errors");
407 print img_warning($langs->trans(
"ErrorBadMXDomain", $email));
417 if (
$object->messtype !=
'sms') {
419 print $form->editfieldkey(
"MailReply",
'email_replyto',
$object->email_replyto, $object, (
int) ($user->hasRight(
'mailing',
'creer') &&
$object->status < $object::STATUS_SENTCOMPLETELY),
'string');
421 print $form->editfieldval(
"MailReply",
'email_replyto',
$object->email_replyto, $object, $user->hasRight(
'mailing',
'creer') &&
$object->status < $object::STATUS_SENTCOMPLETELY,
'string');
423 if ($action !=
'editemail_replyto') {
425 $langs->load(
"errors");
426 print img_warning($langs->trans(
"ErrorBadEMail", $email));
428 $langs->load(
"errors");
429 print img_warning($langs->trans(
"ErrorBadMXDomain", $email));
439 print
'<div class="fichehalfright">';
440 print
'<div class="underbanner clearboth"></div>';
442 print
'<table class="border centpercent tableforfield">';
446 print $langs->trans(
"TotalNbOfDistinctRecipients");
449 if (is_numeric($nbemail)) {
453 $htmltooltip .= $langs->trans(
'LimitSendingEmailing',
getDolGlobalString(
'MAILING_LIMIT_SENDBYWEB'));
455 $htmltooltip .= $langs->trans(
'SendingFromWebInterfaceIsNotAllowed');
458 if (empty($nbemail)) {
459 $nbemail .=
' '.img_warning($langs->trans(
'ToAddRecipientsChooseHere'));
462 print $form->textwithpicto($nbemail, $htmltooltip, 1,
'info');
470 print $langs->trans(
"MAIN_MAIL_SENDMODE");
472 if (
$object->messtype !=
'sms') {
478 $text = $listofmethods[
'mail'];
483 print
' <span class="opacitymedium">('.getDolGlobalString(
'MAIN_MAIL_SMTP_SERVER_EMAILING',
getDolGlobalString(
'MAIN_MAIL_SMTP_SERVER')).
')</span>';
486 print
' <span class="opacitymedium">('.getDolGlobalString(
'MAIN_MAIL_SMTP_SERVER').
')</span>';
490 print
' <span class="opacitymedium">('.getDolGlobalString(
'MAIN_MAIL_SMTP_SERVER').
')</span>';
495 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
501 print
'<div class="clearboth"></div>';
507 $allowaddtarget = (
$object->status == $object::STATUS_DRAFT);
508 if (
GETPOST(
'allowaddtarget')) {
511 if (!$allowaddtarget) {
512 $newcardbutton .=
dolGetButtonTitle($langs->trans(
'New'),
'',
'fa fa-plus-circle', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&allowaddtarget=1',
'', $user->hasRight(
'mailing',
'creer'));
516 if ($allowaddtarget && $user->hasRight(
'mailing',
'creer')) {
517 print
'<div class="info">';
518 print $langs->trans(
"ToAddRecipientsChooseHere").
'...';
522 print
'<div class="div-table-responsive">';
523 print
'<div class="tagtable centpercentwithout1imp liste_titre_bydiv borderbottom" id="tablelines">';
525 print
'<div class="tagtr liste_titre">';
526 print
'<div class="tagtd"></div>';
527 print
'<div class="tagtd">'.$langs->trans(
"RecipientSelectionModules");
528 print ($user->admin ?
info_admin($langs->trans(
"YouCanAddYourOwnPredefindedListHere"), 1) :
'');
530 print
'<div class="tagtd center maxwidth150">';
531 if (
$object->messtype !=
'sms') {
532 print $langs->trans(
"NbOfUniqueEMails");
534 print $langs->trans(
"NbOfUniquePhones");
537 print
'<div class="tagtd left"><div class="inline-block">'.$langs->trans(
"Filters").
'</div>';
538 if (
$object->messtype !=
'sms') {
539 print
' <div class="inline-block valignmiddle">';
540 print
'<span id="evenunsubscribe_text_'.$object->id.
'" class="linkobject" style="cursor: pointer;">'.$langs->trans(
"EvenUnsubscribe").
'</span> ';
541 print
ajax_object_onoff($object,
'evenunsubscribe',
'evenunsubscribe',
'EvenUnsubscribe:switch_on:warning',
'EvenUnsubscribe', array(),
'small valignmiddle reposition',
'', 1,
'allowaddtarget=1');
557 print
'<div class="tagtd"> </div>';
562 foreach ($modulesdir as $dir) {
563 $modulenames = array();
567 dol_syslog(
"Scan directory ".$dir.
" for modules");
568 $handle = @opendir($dir);
569 if (is_resource($handle)) {
570 while (($file = readdir($handle)) !==
false) {
573 if (preg_match(
"/(.*)\.modules\.php$/i", $file, $reg)) {
574 if ($reg[1] ==
'example') {
577 $modulenames[] = $reg[1];
588 foreach ($modulenames as $modulename) {
590 $file = $dir.$modulename.
".modules.php";
591 $classname =
"mailing_".$modulename;
594 $obj =
new $classname($db);
595 '@phan-var-force MailingTargets $obj';
598 $qualified = (is_null($obj->enabled) ? 1 : (int)
dol_eval((
string) $obj->enabled, 1));
601 foreach ($obj->require_module as $key) {
602 if (empty(
$conf->$key->enabled) || (empty($user->admin) && $obj->require_admin)) {
611 if ($allowaddtarget) {
612 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">';
613 print
'<input type="hidden" name="token" value="'.newToken().
'">';
614 print
'<input type="hidden" name="action" value="add">';
615 print
'<input type="hidden" name="page_y" value="'.newToken().
'">';
618 print
'<div class="oddeven trforbreakperms trforbreaknobg impair tagtr">';
621 print
'<div class="tagtd paddingleftlarge marginleftonly paddingrightlarge marginrightonly valignmiddle center">';
622 if (empty($obj->picto)) {
623 $obj->picto =
'generic';
625 print img_object($langs->trans(
"EmailingTargetSelector").
': '.get_class($obj), $obj->picto,
'class="valignmiddle width25 size15x"');
627 print
'<div class="tagtd valignmiddle">';
628 print $obj->getDesc();
634 $obj->evenunsubscribe =
$object->evenunsubscribe;
636 $nbofrecipient = $obj->getNbOfRecipients(
'');
641 print
'<div class="tagtd center valignmiddle">';
642 if ($nbofrecipient ===
'' || $nbofrecipient >= 0) {
643 if ($nbofrecipient !==
'') {
644 print
'<span class="badge badge-info">'.$nbofrecipient.
'</span>';
647 print $langs->trans(
"Error").
' '.img_error($obj->error);
651 print
'<div class="tagtd left valignmiddle">';
652 if ($allowaddtarget) {
655 $filter = $obj->formFilter();
662 print $langs->trans(
"None");
667 print
'<div class="tagtd right valignmiddle">';
668 if ($allowaddtarget) {
669 print
'<input type="submit" class="button button-add small reposition" name="button_'.$modulename.
'" value="'.$langs->trans(
"Add").
'">';
671 print
'<input type="submit" class="button small disabled" disabled="disabled" name="button_'.$modulename.
'" value="'.$langs->trans(
"Add").
'">';
677 if ($allowaddtarget) {
686 $parameters = array();
687 $hookmanager->executeHooks(
'formObjectOptions', $parameters, $object, $action);
688 print $hookmanager->resPrint;
695 if ($sqlmessage && $user->admin) {
696 print
info_admin($langs->trans(
"SQLUsedForExport").
':<br> '.$sqlmessage, 0, 0,
'1',
'',
'TechnicalInformation');
706 $sql =
"SELECT mc.rowid, mc.lastname, mc.firstname, mc.email, mc.other, mc.statut as status, mc.date_envoi, mc.tms,";
707 $sql .=
" mc.source_url, mc.source_id, mc.source_type, mc.error_text,";
708 $sql .=
" COUNT(mu.rowid) as nb";
709 $sql .=
" FROM ".MAIN_DB_PREFIX.
"mailing_cibles as mc";
710 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"mailing_unsubscribe as mu ON mu.email = mc.email";
711 $sql .=
" WHERE mc.fk_mailing=".((int)
$object->id);
712 $asearchcriteriahasbeenset = 0;
713 if ($search_lastname) {
715 $asearchcriteriahasbeenset++;
717 if ($search_firstname) {
719 $asearchcriteriahasbeenset++;
723 $asearchcriteriahasbeenset++;
727 $asearchcriteriahasbeenset++;
729 if ($search_dest_status !=
'' && (
int) $search_dest_status >= -1) {
730 $sql .=
" AND mc.statut = ".((int) $search_dest_status);
731 $asearchcriteriahasbeenset++;
733 $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';
734 $sql .= $db->order($sortfield, $sortorder);
738 $nbtotalofrecords =
'';
740 $result = $db->query($sql);
741 $nbtotalofrecords = $db->num_rows($result);
742 if (($page * $limit) > (int) $nbtotalofrecords) {
748 if (empty($asearchcriteriahasbeenset)) {
749 if ($nbtotalofrecords !=
$object->nbemail) {
750 dol_syslog(
"We found a difference in nb of record in target table and the property ->nbemail, we fix ->nbemail");
752 $resultrefresh =
$object->refreshNbOfTargets();
753 if ($resultrefresh < 0) {
761 $sql .= $db->plimit($limit + 1, $offset);
763 $resql = $db->query($sql);
765 $num = $db->num_rows($resql);
767 $param =
"&id=".$object->id;
769 if ($limit > 0 && $limit !=
$conf->liste_limit) {
770 $param .=
'&limit='.((int) $limit);
772 if ($search_lastname) {
773 $param .=
"&search_lastname=".urlencode($search_lastname);
775 if ($search_firstname) {
776 $param .=
"&search_firstname=".urlencode($search_firstname);
779 $param .=
"&search_email=".urlencode($search_email);
782 $param .=
"&search_other=".urlencode($search_other);
785 print
'<form method="POST" action="'.dolBuildUrl($_SERVER[
"PHP_SELF"]).
'">';
786 print
'<input type="hidden" name="token" value="'.newToken().
'">';
787 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
788 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
789 print
'<input type="hidden" name="page" value="'.$page.
'">';
790 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
791 print
'<input type="hidden" name="page_y" value="">';
793 $morehtmlcenter =
'';
794 $arrayofmassactions = array();
795 if ($permissiontocreate) {
796 $arrayofmassactions[
'reset_target'] = img_picto(
'',
'refresh',
'class="pictofixedwidth"').$langs->trans(
"ResetMailingTargetMassaction");
798 $massactionbutton = $form->selectMassAction(
'', $arrayofmassactions);
799 $morehtmlcenter .= $massactionbutton .
'<br>';
801 if (
$object->status == $object::STATUS_DRAFT) {
802 $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>';
805 $morehtmlrightbeforearrow =
'<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> ';
809 print
"\n<!-- List of selected targets -->\n";
810 print
'<form method="POST" action="'.dolBuildUrl($_SERVER[
"PHP_SELF"]).
'">';
811 print
'<input type="hidden" name="token" value="'.newToken().
'">';
812 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
813 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
814 print
'<input type="hidden" name="page" value="'.$page.
'">';
815 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
816 print
'<input type="hidden" name="limit" value="'.$limit.
'">';
817 print
'<input type="hidden" name="page_y" value="">';
820 print_barre_liste($langs->trans(
"MailSelectedRecipients"), $page, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder, $morehtmlcenter, $num, $nbtotalofrecords,
'generic', 0, $newcardbutton,
'', $limit, 0, 0, 1, $morehtmlrightbeforearrow);
822 if ($massaction ==
'reset_target') {
824 print $form->formconfirm($_SERVER[
"PHP_SELF"].
"?id=".
$object->id, $langs->trans(
"ConfirmResetMailingTargetMassaction"), $langs->trans(
"ConfirmResetMailingTargetMassactionQuestion"),
"confirm_reset_target",
null,
'', 0, 0, 500, 1);
827 $varpage = empty($contextpage) ? $_SERVER[
"PHP_SELF"] : $contextpage;
828 $htmlofselectarray = $form->multiSelectArrayWithCheckbox(
'selectedfields', $arrayfields, $varpage,
$conf->main_checkbox_left_column ?
'left' :
'');
829 $selectedfields = ($mode !=
'kanban' ? $htmlofselectarray :
'');
830 $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons(
'checkforselect', 1) :
'');
832 print
'<div class="div-table-responsive">';
833 print
'<table class="noborder centpercent">';
836 print
'<tr class="liste_titre_filter">';
839 if (
$conf->main_checkbox_left_column) {
840 print
'<td class="liste_titre maxwidthsearch">';
841 $searchpicto = $form->showFilterButtons(
'left');
846 print
'<td class="liste_titre">';
847 print
'<input class="flat maxwidth75" type="text" name="search_email" value="'.dol_escape_htmltag($search_email).
'">';
850 print
'<td class="liste_titre">';
851 print
'<input class="flat maxwidth50" type="text" name="search_lastname" value="'.dol_escape_htmltag($search_lastname).
'">';
854 print
'<td class="liste_titre">';
855 print
'<input class="flat maxwidth50" type="text" name="search_firstname" value="'.dol_escape_htmltag($search_firstname).
'">';
858 print
'<td class="liste_titre">';
859 print
'<input class="flat maxwidth100" type="text" name="search_other" value="'.dol_escape_htmltag($search_other).
'">';
862 print
'<td class="liste_titre">';
867 print
'<td class="liste_titre">';
872 print
'<td class="liste_titre">';
877 print
'<td class="liste_titre center parentonrightofpage">';
878 print $formmailing->selectDestinariesStatus($search_dest_status,
'search_dest_status', 1,
'width100 onrightofpage');
882 if (!
$conf->main_checkbox_left_column) {
883 print
'<td class="liste_titre maxwidthsearch">';
884 $searchpicto = $form->showFilterButtons();
892 $param .=
"&page=".urlencode((
string) ($page));
895 print
'<tr class="liste_titre">';
897 if (
$conf->main_checkbox_left_column) {
898 print
getTitleFieldOfList($selectedfields, 0, $_SERVER[
"PHP_SELF"],
'',
'',
'',
'', $sortfield, $sortorder,
'center maxwidthsearch ').
"\n";
899 $totalarray[
'nbfield']++;
902 print_liste_field_titre(
"Lastname", $_SERVER[
"PHP_SELF"],
"mc.lastname",
'', $param,
"", $sortfield, $sortorder);
903 print_liste_field_titre(
"Firstname", $_SERVER[
"PHP_SELF"],
"mc.firstname",
'', $param,
"", $sortfield, $sortorder);
904 print_liste_field_titre(
"OtherInformations", $_SERVER[
"PHP_SELF"],
'',
"", $param,
"", $sortfield, $sortorder);
905 print_liste_field_titre(
"Source", $_SERVER[
"PHP_SELF"],
'',
"", $param,
'', $sortfield, $sortorder,
'center ');
907 print_liste_field_titre(
"DateLastModification", $_SERVER[
"PHP_SELF"],
"mc.tms",
'', $param,
'', $sortfield, $sortorder,
'center ');
909 print_liste_field_titre(
"DateSending", $_SERVER[
"PHP_SELF"],
"mc.date_envoi",
'', $param,
'', $sortfield, $sortorder,
'center ');
910 print_liste_field_titre(
"Status", $_SERVER[
"PHP_SELF"],
"mc.statut",
'', $param,
'', $sortfield, $sortorder,
'center ');
912 if (!
$conf->main_checkbox_left_column) {
913 print
getTitleFieldOfList($selectedfields, 0, $_SERVER[
"PHP_SELF"],
'',
'',
'',
'', $sortfield, $sortorder,
'center maxwidthsearch ').
"\n";
914 $totalarray[
'nbfield']++;
921 include_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent.class.php';
922 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
923 include_once DOL_DOCUMENT_ROOT.
'/societe/class/societe.class.php';
924 include_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
925 include_once DOL_DOCUMENT_ROOT.
'/eventorganization/class/conferenceorboothattendee.class.php';
927 $objectstaticmember =
new Adherent($db);
928 $objectstaticuser =
new User($db);
929 $objectstaticcompany =
new Societe($db);
930 $objectstaticcontact =
new Contact($db);
933 while ($i < min($num, $limit)) {
934 $obj = $db->fetch_object($resql);
936 print
'<tr class="oddeven">';
939 if (
$conf->main_checkbox_left_column) {
940 print
'<td class="center nowraponall">';
941 print
'<!-- ID mailing_cibles = '.$obj->rowid.
' -->';
942 if ($massactionbutton || $massaction) {
944 if (in_array($obj->rowid, $arrayofselected)) {
947 print
'<input id="cb'.$obj->rowid.
'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->rowid.
'"'.($selected ?
' checked="checked"' :
'').
'>';
949 if ($obj->status == $object::STATUS_DRAFT) {
950 if ($user->hasRight(
'mailing',
'creer')) {
951 print
'<a class="reposition marginleftonly" href="'.$_SERVER[
'PHP_SELF'].
'?action=delete&token='.
newToken().
'&rowid='.((int) $obj->rowid).$param.
'">'.img_delete($langs->trans(
"RemoveRecipient")).
'</a>';
961 print
'<td class="tdoverflowmax150">';
962 print img_picto($obj->email,
'email',
'class="paddingright"');
964 print img_warning($langs->trans(
"EmailOptedOut"),
'warning',
'pictofixedwidth');
966 print dolPrintHTML($obj->email);
969 print
'<td class="tdoverflowmax150" title="'.dolPrintHTMLForAttribute($obj->lastname).
'">'.dolPrintHTML($obj->lastname).
'</td>';
971 print
'<td class="tdoverflowmax150" title="'.dolPrintHTMLForAttribute($obj->firstname).
'">'.dolPrintHTML($obj->firstname).
'</td>';
973 print
'<td class="tdoverflowmax300" title="'.dolPrintHTMLForAttribute($obj->other).
'"><span class="small">'.dolPrintHTML($obj->other).
'</small></td>';
975 print
'<td class="center tdoverflowmax150">';
976 if (empty($obj->source_id) || empty($obj->source_type)) {
977 print empty($obj->source_url) ?
'' : $obj->source_url;
979 if ($obj->source_type ==
'member') {
980 $objectstaticmember->fetch($obj->source_id);
981 print $objectstaticmember->getNomUrl(1);
982 } elseif ($obj->source_type ==
'user') {
983 $objectstaticuser->fetch($obj->source_id);
984 print $objectstaticuser->getNomUrl(1);
985 } elseif ($obj->source_type ==
'thirdparty') {
986 $objectstaticcompany->fetch($obj->source_id);
987 print $objectstaticcompany->getNomUrl(1);
988 } elseif ($obj->source_type ==
'contact') {
989 $objectstaticcontact->fetch($obj->source_id);
990 print $objectstaticcontact->getNomUrl(1);
991 } elseif ($obj->source_type ==
'eventorganizationattendee') {
992 $objectstaticeventorganization->fetch($obj->source_id);
993 print $objectstaticeventorganization->getNomUrl(1);
995 print $obj->source_url;
1001 print
'<td class="center nowraponall">';
1002 print
dol_print_date($db->jdate($obj->tms),
'dayhour',
'tzuserrel');
1006 print
'<td class="center nowraponall">';
1007 if ($obj->status != $object::STATUS_DRAFT) {
1009 print
dol_print_date($db->jdate($obj->date_envoi),
'dayhour',
'tzuserrel');
1014 print
'<td class="nowrap center">';
1015 if ($obj->status == $object::STATUS_DRAFT) {
1016 print $object::libStatutDest((
int) $obj->status, 2,
'');
1018 print $object::libStatutDest((
int) $obj->status, 2, $obj->error_text);
1023 if (!
$conf->main_checkbox_left_column) {
1024 print
'<td class="center nowraponall">';
1025 print
'<!-- ID mailing_cibles = '.$obj->rowid.
' -->';
1026 if ($obj->status == $object::STATUS_DRAFT) {
1027 if ($user->hasRight(
'mailing',
'creer')) {
1028 print
'<a class="reposition marginleftonly" href="'.$_SERVER[
'PHP_SELF'].
'?action=delete&token='.
newToken().
'&rowid='.((int) $obj->rowid).$param.
'">'.img_delete($langs->trans(
"RemoveRecipient")).
'</a>';
1042 if (
$object->status < $object::STATUS_SENTPARTIALY) {
1043 print
'<tr><td colspan="9">';
1044 print
'<span class="opacitymedium">'.$langs->trans(
"NoTargetYet").
'</span>';
1047 print
'<tr><td colspan="9">';
1048 print
'<span class="opacitymedium">'.$langs->trans(
"NoRecordFound").
'</span>';
1052 print
"</table><br>";
1059 dol_print_error($db);
1062 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.
if(! $sortfield) if(! $sortorder) $module
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.
dol_eval($s, $returnvalue=1, $hideerrors=1, $onlysimplestring='1')
Replace eval function to add more security.
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'.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0, $nodefault=0)
Return value of a param into GET or POST supervariable.
dol_substr($string, $start, $length=null, $stringencoding='', $trunconbytes=0)
Make a substring.
GETPOSTINT($paramname, $method=0, $nodefault=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
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).
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
isValidEmail($address, $acceptsupervisorkey=0, $acceptuserkey=0)
Return true if email syntax is ok.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
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.
print_liste_field_titre($name, $file="", $field="", $begin="", $param="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
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.
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.
getTitleFieldOfList($name, $thead=0, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $disablesortlink=0, $tooltip='', $forcenowrapcolumntitle=0)
Get title line of an array.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='', $textonpictotooltip='', $cssfordropdown='info_admin')
Show information in HTML for admin users or standard users.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.