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) {
131 $module =
GETPOST(
"module",
'alpha');
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);
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;
231if ($action ==
'delete' && $permissiontocreate) {
233 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"mailing_cibles WHERE rowid = ".((int) $rowid);
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 ==
'setemail_replyto' || $action ==
'setemail_errorsto' || $action ==
'setevenunsubscribe') && $permissiontocreate) {
292 if ($action ==
'settitle') {
294 } elseif ($action ==
'setemail_from') {
295 $object->email_from = trim(
GETPOST(
'email_from',
'alphawithlgt'));
296 } elseif ($action ==
'setemail_replyto') {
297 $object->email_replyto = trim(
GETPOST(
'email_replyto',
'alphawithlgt'));
298 } elseif ($action ==
'setemail_errorsto') {
299 $object->email_errorsto = trim(
GETPOST(
'email_errorsto',
'alphawithlgt'));
300 } elseif ($action ==
'setevenunsubscribe') {
303 if ($action ==
'settitle' && empty(
$object->title)) {
304 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"MailTitle"));
306 if ($action ==
'setemail_from' && empty(
$object->email_from)) {
307 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"MailFrom"));
311 $result =
$object->update($user);
313 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
331$help_url =
'EN:Module_EMailing|FR:Module_Mailing|ES:Módulo_Mailing';
332llxHeader(
'', $langs->trans(
"Mailing"), $help_url);
334$arrayofselected = is_array($toselect) ? $toselect : array();
344 $linkback =
'<a href="'.DOL_URL_ROOT.
'/comm/mailing/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
346 $morehtmlref =
'<div class="refidno">';
348 $morehtmlref .= $form->editfieldkey(
"",
'title',
$object->title, $object, 0,
'string',
'', 0, 1);
349 $morehtmlref .= $form->editfieldval(
"",
'title',
$object->title, $object, 0,
'string',
'',
null,
null,
'', 1);
350 $morehtmlref .=
'</div>';
352 $morehtmlstatus =
'';
354 if (
$object->status == $object::STATUS_SENTPARTIALY ||
$object->status == $object::STATUS_SENTCOMPLETELY) {
355 $nbtry =
$object->countNbOfTargets(
'alreadysent');
356 $nbko =
$object->countNbOfTargets(
'alreadysentko');
357 $nbok = ($nbtry - $nbko);
359 $morehtmlstatus .=
' ('.$nbtry.
'/'.
$object->nbemail;
361 $morehtmlstatus .=
' - '.$nbko.
' '.$langs->trans(
"Error");
363 $morehtmlstatus .=
') ';
366 dol_banner_tab($object,
'id', $linkback, 1,
'rowid',
'ref', $morehtmlref,
'', 0,
'', $morehtmlstatus);
368 print
'<div class="fichecenter">';
369 print
'<div class="fichehalfleft">';
370 print
'<div class="underbanner clearboth"></div>';
372 print
'<table class="border centpercent tableforfield">'.
"\n";
375 print
'<tr><td class="titlefield">';
376 print $langs->trans(
"MailFrom").
'</td><td>';
378 foreach ($emailarray as $email => $name) {
379 if ($name && $name != $email) {
383 $langs->load(
"errors");
384 print
img_warning($langs->trans(
"ErrorBadEMail", $email));
394 if (
$object->messtype !=
'sms') {
395 print
'<tr><td>'.$langs->trans(
"MailErrorsTo").
'</td><td>';
397 foreach ($emailarray as $email => $name) {
398 if ($name != $email) {
402 $langs->load(
"errors");
403 print
img_warning($langs->trans(
"ErrorBadEMail", $email));
405 $langs->load(
"errors");
406 print
img_warning($langs->trans(
"ErrorBadMXDomain", $email));
416 if (
$object->messtype !=
'sms') {
418 print $form->editfieldkey(
"MailReply",
'email_replyto',
$object->email_replyto, $object, (
int) ($user->hasRight(
'mailing',
'creer') &&
$object->status < $object::STATUS_SENTCOMPLETELY),
'string');
420 print $form->editfieldval(
"MailReply",
'email_replyto',
$object->email_replyto, $object, $user->hasRight(
'mailing',
'creer') &&
$object->status < $object::STATUS_SENTCOMPLETELY,
'string');
422 if ($action !=
'editemail_replyto') {
424 $langs->load(
"errors");
425 print
img_warning($langs->trans(
"ErrorBadEMail", $email));
427 $langs->load(
"errors");
428 print
img_warning($langs->trans(
"ErrorBadMXDomain", $email));
438 print
'<div class="fichehalfright">';
439 print
'<div class="underbanner clearboth"></div>';
441 print
'<table class="border centpercent tableforfield">';
445 print $langs->trans(
"TotalNbOfDistinctRecipients");
448 if (is_numeric($nbemail)) {
452 $htmltooltip .= $langs->trans(
'LimitSendingEmailing',
getDolGlobalString(
'MAILING_LIMIT_SENDBYWEB'));
454 $htmltooltip .= $langs->trans(
'SendingFromWebInterfaceIsNotAllowed');
457 if (empty($nbemail)) {
458 $nbemail .=
' '.img_warning($langs->trans(
'ToAddRecipientsChooseHere'));
461 print $form->textwithpicto($nbemail, $htmltooltip, 1,
'info');
469 print $langs->trans(
"MAIN_MAIL_SENDMODE");
471 if (
$object->messtype !=
'sms') {
477 $text = $listofmethods[
'mail'];
482 print
' <span class="opacitymedium">('.getDolGlobalString(
'MAIN_MAIL_SMTP_SERVER_EMAILING',
getDolGlobalString(
'MAIN_MAIL_SMTP_SERVER')).
')</span>';
485 print
' <span class="opacitymedium">('.getDolGlobalString(
'MAIN_MAIL_SMTP_SERVER').
')</span>';
489 print
' <span class="opacitymedium">('.getDolGlobalString(
'MAIN_MAIL_SMTP_SERVER').
')</span>';
494 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
500 print
'<div class="clearboth"></div>';
506 $allowaddtarget = (
$object->status == $object::STATUS_DRAFT);
507 if (
GETPOST(
'allowaddtarget')) {
510 if (!$allowaddtarget) {
511 $newcardbutton .=
dolGetButtonTitle($langs->trans(
'New'),
'',
'fa fa-plus-circle', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&allowaddtarget=1',
'', $user->hasRight(
'mailing',
'creer'));
515 if ($allowaddtarget && $user->hasRight(
'mailing',
'creer')) {
516 print
'<div class="info">';
517 print $langs->trans(
"ToAddRecipientsChooseHere").
'...';
521 print
'<div class="div-table-responsive">';
522 print
'<div class="tagtable centpercentwithout1imp liste_titre_bydiv borderbottom" id="tablelines">';
524 print
'<div class="tagtr liste_titre">';
525 print
'<div class="tagtd"></div>';
526 print
'<div class="tagtd">'.$langs->trans(
"RecipientSelectionModules");
527 print ($user->admin ?
info_admin($langs->trans(
"YouCanAddYourOwnPredefindedListHere"), 1) :
'');
529 print
'<div class="tagtd center maxwidth150">';
530 if (
$object->messtype !=
'sms') {
531 print $langs->trans(
"NbOfUniqueEMails");
533 print $langs->trans(
"NbOfUniquePhones");
536 print
'<div class="tagtd left"><div class="inline-block">'.$langs->trans(
"Filters").
'</div>';
537 if (
$object->messtype !=
'sms') {
538 print
' <div class="inline-block valignmiddle">'.$langs->trans(
"EvenUnsubscribe").
' ';
539 print
ajax_object_onoff($object,
'evenunsubscribe',
'evenunsubscribe',
'EvenUnsubscribe:switch_on:warning',
'EvenUnsubscribe', array(),
'small valignmiddle reposition',
'', 1,
'allowaddtarget=1');
543 print
'<div class="tagtd"> </div>';
548 foreach ($modulesdir as $dir) {
549 $modulenames = array();
553 dol_syslog(
"Scan directory ".$dir.
" for modules");
554 $handle = @opendir($dir);
555 if (is_resource($handle)) {
556 while (($file = readdir($handle)) !==
false) {
557 if (substr($file, 0, 1) !=
'.' && substr($file, 0, 3) !=
'CVS') {
559 if (preg_match(
"/(.*)\.modules\.php$/i", $file, $reg)) {
560 if ($reg[1] ==
'example') {
563 $modulenames[] = $reg[1];
574 foreach ($modulenames as $modulename) {
576 $file = $dir.$modulename.
".modules.php";
577 $classname =
"mailing_".$modulename;
580 $obj =
new $classname(
$db);
581 '@phan-var-force MailingTargets $obj';
584 $qualified = (is_null($obj->enabled) ? 1 : (int)
dol_eval((
string) $obj->enabled, 1));
587 foreach ($obj->require_module as $key) {
588 if (empty(
$conf->$key->enabled) || (empty($user->admin) && $obj->require_admin)) {
597 if ($allowaddtarget) {
598 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">';
599 print
'<input type="hidden" name="token" value="'.newToken().
'">';
600 print
'<input type="hidden" name="action" value="add">';
601 print
'<input type="hidden" name="page_y" value="'.newToken().
'">';
604 print
'<div class="oddeven trforbreakperms trforbreaknobg impair tagtr">';
607 print
'<div class="tagtd paddingleftlarge marginleftonly paddingrightlarge marginrightonly valignmiddle center">';
608 if (empty($obj->picto)) {
609 $obj->picto =
'generic';
611 print
img_object($langs->trans(
"EmailingTargetSelector").
': '.get_class($obj), $obj->picto,
'class="valignmiddle width25 size15x"');
613 print
'<div class="tagtd valignmiddle">';
614 print $obj->getDesc();
620 $obj->evenunsubscribe =
$object->evenunsubscribe;
622 $nbofrecipient = $obj->getNbOfRecipients(
'');
627 print
'<div class="tagtd center valignmiddle">';
628 if ($nbofrecipient ===
'' || $nbofrecipient >= 0) {
629 if ($nbofrecipient !==
'') {
630 print
'<span class="badge badge-info">'.$nbofrecipient.
'</span>';
633 print $langs->trans(
"Error").
' '.
img_error($obj->error);
637 print
'<div class="tagtd left valignmiddle">';
638 if ($allowaddtarget) {
641 $filter = $obj->formFilter();
648 print $langs->trans(
"None");
653 print
'<div class="tagtd right valignmiddle">';
654 if ($allowaddtarget) {
655 print
'<input type="submit" class="button button-add small reposition" name="button_'.$modulename.
'" value="'.$langs->trans(
"Add").
'">';
657 print
'<input type="submit" class="button small disabled" disabled="disabled" name="button_'.$modulename.
'" value="'.$langs->trans(
"Add").
'">';
663 if ($allowaddtarget) {
672 $parameters = array();
673 $hookmanager->executeHooks(
'formObjectOptions', $parameters, $object, $action);
674 print $hookmanager->resPrint;
681 if ($sqlmessage && $user->admin) {
682 print
info_admin($langs->trans(
"SQLUsedForExport").
':<br> '.$sqlmessage, 0, 0,
'1',
'',
'TechnicalInformation');
692 $sql =
"SELECT mc.rowid, mc.lastname, mc.firstname, mc.email, mc.other, mc.statut as status, mc.date_envoi, mc.tms,";
693 $sql .=
" mc.source_url, mc.source_id, mc.source_type, mc.error_text,";
694 $sql .=
" COUNT(mu.rowid) as nb";
695 $sql .=
" FROM ".MAIN_DB_PREFIX.
"mailing_cibles as mc";
696 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"mailing_unsubscribe as mu ON mu.email = mc.email";
697 $sql .=
" WHERE mc.fk_mailing=".((int)
$object->id);
698 $asearchcriteriahasbeenset = 0;
699 if ($search_lastname) {
701 $asearchcriteriahasbeenset++;
703 if ($search_firstname) {
705 $asearchcriteriahasbeenset++;
709 $asearchcriteriahasbeenset++;
713 $asearchcriteriahasbeenset++;
715 if ($search_dest_status !=
'' && (
int) $search_dest_status >= -1) {
716 $sql .=
" AND mc.statut = ".((int) $search_dest_status);
717 $asearchcriteriahasbeenset++;
719 $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';
720 $sql .=
$db->order($sortfield, $sortorder);
724 $nbtotalofrecords =
'';
726 $result =
$db->query($sql);
727 $nbtotalofrecords =
$db->num_rows($result);
728 if (($page * $limit) > (int) $nbtotalofrecords) {
734 if (empty($asearchcriteriahasbeenset)) {
735 if ($nbtotalofrecords !=
$object->nbemail) {
736 dol_syslog(
"We found a difference in nb of record in target table and the property ->nbemail, we fix ->nbemail");
738 $resultrefresh =
$object->refreshNbOfTargets();
739 if ($resultrefresh < 0) {
747 $sql .=
$db->plimit($limit + 1, $offset);
749 $resql =
$db->query($sql);
751 $num =
$db->num_rows($resql);
753 $param =
"&id=".$object->id;
755 if ($limit > 0 && $limit !=
$conf->liste_limit) {
756 $param .=
'&limit='.((int) $limit);
758 if ($search_lastname) {
759 $param .=
"&search_lastname=".urlencode($search_lastname);
761 if ($search_firstname) {
762 $param .=
"&search_firstname=".urlencode($search_firstname);
765 $param .=
"&search_email=".urlencode($search_email);
768 $param .=
"&search_other=".urlencode($search_other);
771 print
'<form method="POST" action="'.dolBuildUrl($_SERVER[
"PHP_SELF"]).
'">';
772 print
'<input type="hidden" name="token" value="'.newToken().
'">';
773 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
774 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
775 print
'<input type="hidden" name="page" value="'.$page.
'">';
776 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
777 print
'<input type="hidden" name="page_y" value="">';
779 $morehtmlcenter =
'';
780 $arrayofmassactions = array();
781 if ($permissiontocreate) {
782 $arrayofmassactions[
'reset_target'] =
img_picto(
'',
'refresh',
'class="pictofixedwidth"').$langs->trans(
"ResetMailingTargetMassaction");
784 $massactionbutton = $form->selectMassAction(
'', $arrayofmassactions);
785 $morehtmlcenter .= $massactionbutton .
'<br>';
787 if (
$object->status == $object::STATUS_DRAFT) {
788 $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>';
791 $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> ';
795 print
"\n<!-- List of selected targets -->\n";
796 print
'<form method="POST" action="'.dolBuildUrl($_SERVER[
"PHP_SELF"]).
'">';
797 print
'<input type="hidden" name="token" value="'.newToken().
'">';
798 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
799 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
800 print
'<input type="hidden" name="page" value="'.$page.
'">';
801 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
802 print
'<input type="hidden" name="limit" value="'.$limit.
'">';
803 print
'<input type="hidden" name="page_y" value="">';
806 print_barre_liste($langs->trans(
"MailSelectedRecipients"), $page, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder, $morehtmlcenter, $num, $nbtotalofrecords,
'generic', 0, $newcardbutton,
'', $limit, 0, 0, 1, $morehtmlrightbeforearrow);
808 if ($massaction ==
'reset_target') {
810 print $form->formconfirm($_SERVER[
"PHP_SELF"].
"?id=".
$object->id, $langs->trans(
"ConfirmResetMailingTargetMassaction"), $langs->trans(
"ConfirmResetMailingTargetMassactionQuestion"),
"confirm_reset_target",
null,
'', 0, 0, 500, 1);
813 $varpage = empty($contextpage) ? $_SERVER[
"PHP_SELF"] : $contextpage;
814 $htmlofselectarray = $form->multiSelectArrayWithCheckbox(
'selectedfields', $arrayfields, $varpage,
$conf->main_checkbox_left_column ?
'left' :
'');
815 $selectedfields = ($mode !=
'kanban' ? $htmlofselectarray :
'');
816 $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons(
'checkforselect', 1) :
'');
818 print
'<div class="div-table-responsive">';
819 print
'<table class="noborder centpercent">';
822 print
'<tr class="liste_titre_filter">';
825 if (
$conf->main_checkbox_left_column) {
826 print
'<td class="liste_titre maxwidthsearch">';
827 $searchpicto = $form->showFilterButtons(
'left');
832 print
'<td class="liste_titre">';
833 print
'<input class="flat maxwidth75" type="text" name="search_email" value="'.dol_escape_htmltag($search_email).
'">';
836 print
'<td class="liste_titre">';
837 print
'<input class="flat maxwidth50" type="text" name="search_lastname" value="'.dol_escape_htmltag($search_lastname).
'">';
840 print
'<td class="liste_titre">';
841 print
'<input class="flat maxwidth50" type="text" name="search_firstname" value="'.dol_escape_htmltag($search_firstname).
'">';
844 print
'<td class="liste_titre">';
845 print
'<input class="flat maxwidth100" type="text" name="search_other" value="'.dol_escape_htmltag($search_other).
'">';
848 print
'<td class="liste_titre">';
853 print
'<td class="liste_titre">';
858 print
'<td class="liste_titre">';
863 print
'<td class="liste_titre center parentonrightofpage">';
864 print $formmailing->selectDestinariesStatus($search_dest_status,
'search_dest_status', 1,
'width100 onrightofpage');
868 if (!
$conf->main_checkbox_left_column) {
869 print
'<td class="liste_titre maxwidthsearch">';
870 $searchpicto = $form->showFilterButtons();
878 $param .=
"&page=".urlencode((
string) ($page));
881 print
'<tr class="liste_titre">';
883 if (
$conf->main_checkbox_left_column) {
884 print
getTitleFieldOfList($selectedfields, 0, $_SERVER[
"PHP_SELF"],
'',
'',
'',
'', $sortfield, $sortorder,
'center maxwidthsearch ').
"\n";
888 print_liste_field_titre(
"Lastname", $_SERVER[
"PHP_SELF"],
"mc.lastname",
'', $param,
"", $sortfield, $sortorder);
889 print_liste_field_titre(
"Firstname", $_SERVER[
"PHP_SELF"],
"mc.firstname",
'', $param,
"", $sortfield, $sortorder);
890 print_liste_field_titre(
"OtherInformations", $_SERVER[
"PHP_SELF"],
'',
"", $param,
"", $sortfield, $sortorder);
891 print_liste_field_titre(
"Source", $_SERVER[
"PHP_SELF"],
'',
"", $param,
'', $sortfield, $sortorder,
'center ');
893 print_liste_field_titre(
"DateLastModification", $_SERVER[
"PHP_SELF"],
"mc.tms",
'', $param,
'', $sortfield, $sortorder,
'center ');
895 print_liste_field_titre(
"DateSending", $_SERVER[
"PHP_SELF"],
"mc.date_envoi",
'', $param,
'', $sortfield, $sortorder,
'center ');
896 print_liste_field_titre(
"Status", $_SERVER[
"PHP_SELF"],
"mc.statut",
'', $param,
'', $sortfield, $sortorder,
'center ');
898 if (!
$conf->main_checkbox_left_column) {
899 print
getTitleFieldOfList($selectedfields, 0, $_SERVER[
"PHP_SELF"],
'',
'',
'',
'', $sortfield, $sortorder,
'center maxwidthsearch ').
"\n";
907 include_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent.class.php';
908 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
909 include_once DOL_DOCUMENT_ROOT.
'/societe/class/societe.class.php';
910 include_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
911 include_once DOL_DOCUMENT_ROOT.
'/eventorganization/class/conferenceorboothattendee.class.php';
914 $objectstaticuser =
new User(
$db);
919 while ($i < min($num, $limit)) {
920 $obj =
$db->fetch_object($resql);
922 print
'<tr class="oddeven">';
925 if (
$conf->main_checkbox_left_column) {
926 print
'<td class="center nowraponall">';
927 print
'<!-- ID mailing_cibles = '.$obj->rowid.
' -->';
928 if ($massactionbutton || $massaction) {
930 if (in_array($obj->rowid, $arrayofselected)) {
933 print
'<input id="cb'.$obj->rowid.
'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->rowid.
'"'.($selected ?
' checked="checked"' :
'').
'>';
935 if ($obj->status == $object::STATUS_DRAFT) {
936 if ($user->hasRight(
'mailing',
'creer')) {
937 print
'<a class="reposition marginleftonly" href="'.$_SERVER[
'PHP_SELF'].
'?action=delete&token='.
newToken().
'&rowid='.((int) $obj->rowid).$param.
'">'.
img_delete($langs->trans(
"RemoveRecipient")).
'</a>';
947 print
'<td class="tdoverflowmax150">';
948 print
img_picto($obj->email,
'email',
'class="paddingright"');
950 print
img_warning($langs->trans(
"EmailOptedOut"),
'warning',
'pictofixedwidth');
955 print
'<td class="tdoverflowmax150" title="'.dolPrintHTMLForAttribute($obj->lastname).
'">'.
dolPrintHTML($obj->lastname).
'</td>';
957 print
'<td class="tdoverflowmax150" title="'.dolPrintHTMLForAttribute($obj->firstname).
'">'.
dolPrintHTML($obj->firstname).
'</td>';
959 print
'<td class="tdoverflowmax300" title="'.dolPrintHTMLForAttribute($obj->other).
'"><span class="small">'.
dolPrintHTML($obj->other).
'</small></td>';
961 print
'<td class="center tdoverflowmax150">';
962 if (empty($obj->source_id) || empty($obj->source_type)) {
963 print empty($obj->source_url) ?
'' : $obj->source_url;
965 if ($obj->source_type ==
'member') {
966 $objectstaticmember->fetch($obj->source_id);
967 print $objectstaticmember->getNomUrl(1);
968 } elseif ($obj->source_type ==
'user') {
969 $objectstaticuser->fetch($obj->source_id);
970 print $objectstaticuser->getNomUrl(1);
971 } elseif ($obj->source_type ==
'thirdparty') {
972 $objectstaticcompany->fetch($obj->source_id);
973 print $objectstaticcompany->getNomUrl(1);
974 } elseif ($obj->source_type ==
'contact') {
975 $objectstaticcontact->fetch($obj->source_id);
976 print $objectstaticcontact->getNomUrl(1);
977 } elseif ($obj->source_type ==
'eventorganizationattendee') {
978 $objectstaticeventorganization->fetch($obj->source_id);
979 print $objectstaticeventorganization->getNomUrl(1);
981 print $obj->source_url;
987 print
'<td class="center nowraponall">';
992 print
'<td class="center nowraponall">';
993 if ($obj->status != $object::STATUS_DRAFT) {
1000 print
'<td class="nowrap center">';
1001 if ($obj->status == $object::STATUS_DRAFT) {
1002 print $object::libStatutDest((
int) $obj->status, 2,
'');
1004 print $object::libStatutDest((
int) $obj->status, 2, $obj->error_text);
1009 if (!
$conf->main_checkbox_left_column) {
1010 print
'<td class="center nowraponall">';
1011 print
'<!-- ID mailing_cibles = '.$obj->rowid.
' -->';
1012 if ($obj->status == $object::STATUS_DRAFT) {
1013 if ($user->hasRight(
'mailing',
'creer')) {
1014 print
'<a class="reposition marginleftonly" href="'.$_SERVER[
'PHP_SELF'].
'?action=delete&token='.
newToken().
'&rowid='.((int) $obj->rowid).$param.
'">'.
img_delete($langs->trans(
"RemoveRecipient")).
'</a>';
1028 if (
$object->status < $object::STATUS_SENTPARTIALY) {
1029 print
'<tr><td colspan="9">';
1030 print
'<span class="opacitymedium">'.$langs->trans(
"NoTargetYet").
'</span>';
1033 print
'<tr><td colspan="9">';
1034 print
'<span class="opacitymedium">'.$langs->trans(
"NoRecordFound").
'</span>';
1038 print
"</table><br>";
1048 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.
dolPrintHTML($s, $allowiframe=0, $moreallowedtags=array())
Return a string (that can be on several lines) ready to be output on a HTML page.
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.
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'.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0, $nodefault=0)
Return value of a param into GET or POST supervariable.
getTitleFieldOfList($name, $thead=0, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $disablesortlink=0, $tooltip='', $forcenowrapcolumntitle=0)
Get title line of an array.
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).
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...
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.
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.
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.