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>';
508 $allowaddtarget = (
$object->status == $object::STATUS_DRAFT);
509 if (
GETPOST(
'allowaddtarget')) {
512 if (!$allowaddtarget) {
513 $newcardbutton .= dolGetButtonTitle($langs->trans(
'New'),
'',
'fa fa-plus-circle', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&allowaddtarget=1',
'', $user->hasRight(
'mailing',
'creer'));
517 if ($allowaddtarget && $user->hasRight(
'mailing',
'creer')) {
518 print
load_fiche_titre($langs->trans(
"ToAddRecipientsChooseHere").
'...', ($user->admin ?
info_admin($langs->trans(
"YouCanAddYourOwnPredefindedListHere"), 1) :
''),
'');
520 print
'<div class="div-table-responsive">';
521 print
'<div class="tagtable centpercentwithout1imp liste_titre_bydiv borderbottom" id="tablelines">';
523 print
'<div class="tagtr liste_titre">';
524 print
'<div class="tagtd"></div>';
525 print
'<div class="tagtd">'.$langs->trans(
"RecipientSelectionModules").
'</div>';
526 print
'<div class="tagtd center maxwidth150">';
527 if (
$object->messtype !=
'sms') {
528 print $langs->trans(
"NbOfUniqueEMails");
530 print $langs->trans(
"NbOfUniquePhones");
533 print
'<div class="tagtd left"><div class="inline-block">'.$langs->trans(
"Filters").
'</div>';
534 if (
$object->messtype !=
'sms') {
535 print
' <div class="inline-block valignmiddle">'.$langs->trans(
"EvenUnsubscribe").
' ';
536 print
ajax_object_onoff($object,
'evenunsubscribe',
'evenunsubscribe',
'EvenUnsubscribe:switch_on:warning',
'EvenUnsubscribe', array(),
'small valignmiddle reposition',
'', 1);
540 print
'<div class="tagtd"> </div>';
545 foreach ($modulesdir as $dir) {
546 $modulenames = array();
550 dol_syslog(
"Scan directory ".$dir.
" for modules");
551 $handle = @opendir($dir);
552 if (is_resource($handle)) {
553 while (($file = readdir($handle)) !==
false) {
554 if (substr($file, 0, 1) !=
'.' && substr($file, 0, 3) !=
'CVS') {
556 if (preg_match(
"/(.*)\.modules\.php$/i", $file, $reg)) {
557 if ($reg[1] ==
'example') {
560 $modulenames[] = $reg[1];
571 foreach ($modulenames as $modulename) {
573 $file = $dir.$modulename.
".modules.php";
574 $classname =
"mailing_".$modulename;
577 $obj =
new $classname(
$db);
578 '@phan-var-force MailingTargets $obj';
581 $qualified = (is_null($obj->enabled) ? 1 : (int)
dol_eval((
string) $obj->enabled, 1));
584 foreach ($obj->require_module as $key) {
585 if (empty(
$conf->$key->enabled) || (empty($user->admin) && $obj->require_admin)) {
594 if ($allowaddtarget) {
595 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">';
596 print
'<input type="hidden" name="token" value="'.newToken().
'">';
597 print
'<input type="hidden" name="action" value="add">';
598 print
'<input type="hidden" name="page_y" value="'.newToken().
'">';
600 print
'<div class="oddeven trforbreakperms trforbreaknobg impair tagtr">';
603 print
'<div class="tagtd paddingleftlarge marginleftonly paddingrightlarge marginrightonly valignmiddle center">';
604 if (empty($obj->picto)) {
605 $obj->picto =
'generic';
607 print
img_object($langs->trans(
"EmailingTargetSelector").
': '.get_class($obj), $obj->picto,
'class="valignmiddle width25 size15x"');
609 print
'<div class="tagtd valignmiddle">';
610 print $obj->getDesc();
616 $obj->evenunsubscribe =
$object->evenunsubscribe;
618 $nbofrecipient = $obj->getNbOfRecipients(
'');
623 print
'<div class="tagtd center valignmiddle">';
624 if ($nbofrecipient ===
'' || $nbofrecipient >= 0) {
625 if ($nbofrecipient !==
'') {
626 print
'<span class="badge badge-info">'.$nbofrecipient.
'</span>';
629 print $langs->trans(
"Error").
' '.
img_error($obj->error);
633 print
'<div class="tagtd left valignmiddle">';
634 if ($allowaddtarget) {
637 $filter = $obj->formFilter();
644 print $langs->trans(
"None");
649 print
'<div class="tagtd right valignmiddle">';
650 if ($allowaddtarget) {
651 print
'<input type="submit" class="button button-add small reposition" name="button_'.$modulename.
'" value="'.$langs->trans(
"Add").
'">';
653 print
'<input type="submit" class="button small disabled" disabled="disabled" name="button_'.$modulename.
'" value="'.$langs->trans(
"Add").
'">';
659 if ($allowaddtarget) {
668 $parameters = array();
669 $hookmanager->executeHooks(
'formObjectOptions', $parameters, $object, $action);
670 print $hookmanager->resPrint;
677 if ($sqlmessage && $user->admin) {
678 print
info_admin($langs->trans(
"SQLUsedForExport").
':<br> '.$sqlmessage, 0, 0,
'1',
'',
'TechnicalInformation');
688 $sql =
"SELECT mc.rowid, mc.lastname, mc.firstname, mc.email, mc.other, mc.statut as status, mc.date_envoi, mc.tms,";
689 $sql .=
" mc.source_url, mc.source_id, mc.source_type, mc.error_text,";
690 $sql .=
" COUNT(mu.rowid) as nb";
691 $sql .=
" FROM ".MAIN_DB_PREFIX.
"mailing_cibles as mc";
692 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"mailing_unsubscribe as mu ON mu.email = mc.email";
693 $sql .=
" WHERE mc.fk_mailing=".((int)
$object->id);
694 $asearchcriteriahasbeenset = 0;
695 if ($search_lastname) {
697 $asearchcriteriahasbeenset++;
699 if ($search_firstname) {
701 $asearchcriteriahasbeenset++;
705 $asearchcriteriahasbeenset++;
709 $asearchcriteriahasbeenset++;
711 if ($search_dest_status !=
'' && (
int) $search_dest_status >= -1) {
712 $sql .=
" AND mc.statut = ".((int) $search_dest_status);
713 $asearchcriteriahasbeenset++;
715 $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';
716 $sql .=
$db->order($sortfield, $sortorder);
720 $nbtotalofrecords =
'';
722 $result =
$db->query($sql);
723 $nbtotalofrecords =
$db->num_rows($result);
724 if (($page * $limit) > (int) $nbtotalofrecords) {
730 if (empty($asearchcriteriahasbeenset)) {
731 if ($nbtotalofrecords !=
$object->nbemail) {
732 dol_syslog(
"We found a difference in nb of record in target table and the property ->nbemail, we fix ->nbemail");
734 $resultrefresh =
$object->refreshNbOfTargets();
735 if ($resultrefresh < 0) {
743 $sql .=
$db->plimit($limit + 1, $offset);
745 $resql =
$db->query($sql);
747 $num =
$db->num_rows($resql);
749 $param =
"&id=".$object->id;
751 if ($limit > 0 && $limit !=
$conf->liste_limit) {
752 $param .=
'&limit='.((int) $limit);
754 if ($search_lastname) {
755 $param .=
"&search_lastname=".urlencode($search_lastname);
757 if ($search_firstname) {
758 $param .=
"&search_firstname=".urlencode($search_firstname);
761 $param .=
"&search_email=".urlencode($search_email);
764 $param .=
"&search_other=".urlencode($search_other);
767 print
'<form method="POST" action="'.dolBuildUrl($_SERVER[
"PHP_SELF"]).
'">';
768 print
'<input type="hidden" name="token" value="'.newToken().
'">';
769 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
770 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
771 print
'<input type="hidden" name="page" value="'.$page.
'">';
772 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
773 print
'<input type="hidden" name="page_y" value="">';
775 $morehtmlcenter =
'';
776 $arrayofmassactions = array();
777 if ($permissiontocreate) {
778 $arrayofmassactions[
'reset_target'] =
img_picto(
'',
'refresh',
'class="pictofixedwidth"').$langs->trans(
"ResetMailingTargetMassaction");
780 $massactionbutton = $form->selectMassAction(
'', $arrayofmassactions);
781 $morehtmlcenter .= $massactionbutton .
'<br>';
783 if (
$object->status == $object::STATUS_DRAFT) {
784 $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>';
787 $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> ';
791 print
"\n<!-- List of selected targets -->\n";
792 print
'<form method="POST" action="'.dolBuildUrl($_SERVER[
"PHP_SELF"]).
'">';
793 print
'<input type="hidden" name="token" value="'.newToken().
'">';
794 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
795 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
796 print
'<input type="hidden" name="page" value="'.$page.
'">';
797 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
798 print
'<input type="hidden" name="limit" value="'.$limit.
'">';
799 print
'<input type="hidden" name="page_y" value="">';
802 print_barre_liste($langs->trans(
"MailSelectedRecipients"), $page, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder, $morehtmlcenter, $num, $nbtotalofrecords,
'generic', 0, $newcardbutton,
'', $limit, 0, 0, 1, $morehtmlrightbeforearrow);
804 if ($massaction ==
'reset_target') {
806 print $form->formconfirm($_SERVER[
"PHP_SELF"].
"?id=".
$object->id, $langs->trans(
"ConfirmResetMailingTargetMassaction"), $langs->trans(
"ConfirmResetMailingTargetMassactionQuestion"),
"confirm_reset_target",
null,
'', 0, 0, 500, 1);
809 $varpage = empty($contextpage) ? $_SERVER[
"PHP_SELF"] : $contextpage;
810 $htmlofselectarray = $form->multiSelectArrayWithCheckbox(
'selectedfields', $arrayfields, $varpage,
$conf->main_checkbox_left_column ?
'left' :
'');
811 $selectedfields = ($mode !=
'kanban' ? $htmlofselectarray :
'');
812 $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons(
'checkforselect', 1) :
'');
814 print
'<div class="div-table-responsive">';
815 print
'<table class="noborder centpercent">';
818 print
'<tr class="liste_titre_filter">';
821 if (
$conf->main_checkbox_left_column) {
822 print
'<td class="liste_titre maxwidthsearch">';
823 $searchpicto = $form->showFilterButtons(
'left');
828 print
'<td class="liste_titre">';
829 print
'<input class="flat maxwidth75" type="text" name="search_email" value="'.dol_escape_htmltag($search_email).
'">';
832 print
'<td class="liste_titre">';
833 print
'<input class="flat maxwidth50" type="text" name="search_lastname" value="'.dol_escape_htmltag($search_lastname).
'">';
836 print
'<td class="liste_titre">';
837 print
'<input class="flat maxwidth50" type="text" name="search_firstname" value="'.dol_escape_htmltag($search_firstname).
'">';
840 print
'<td class="liste_titre">';
841 print
'<input class="flat maxwidth100" type="text" name="search_other" value="'.dol_escape_htmltag($search_other).
'">';
844 print
'<td class="liste_titre">';
849 print
'<td class="liste_titre">';
854 print
'<td class="liste_titre">';
859 print
'<td class="liste_titre center parentonrightofpage">';
860 print $formmailing->selectDestinariesStatus($search_dest_status,
'search_dest_status', 1,
'width100 onrightofpage');
864 if (!
$conf->main_checkbox_left_column) {
865 print
'<td class="liste_titre maxwidthsearch">';
866 $searchpicto = $form->showFilterButtons();
874 $param .=
"&page=".urlencode((
string) ($page));
877 print
'<tr class="liste_titre">';
879 if (
$conf->main_checkbox_left_column) {
880 print
getTitleFieldOfList($selectedfields, 0, $_SERVER[
"PHP_SELF"],
'',
'',
'',
'', $sortfield, $sortorder,
'center maxwidthsearch ').
"\n";
884 print_liste_field_titre(
"Lastname", $_SERVER[
"PHP_SELF"],
"mc.lastname",
'', $param,
"", $sortfield, $sortorder);
885 print_liste_field_titre(
"Firstname", $_SERVER[
"PHP_SELF"],
"mc.firstname",
'', $param,
"", $sortfield, $sortorder);
886 print_liste_field_titre(
"OtherInformations", $_SERVER[
"PHP_SELF"],
'',
"", $param,
"", $sortfield, $sortorder);
887 print_liste_field_titre(
"Source", $_SERVER[
"PHP_SELF"],
'',
"", $param,
'', $sortfield, $sortorder,
'center ');
889 print_liste_field_titre(
"DateLastModification", $_SERVER[
"PHP_SELF"],
"mc.tms",
'', $param,
'', $sortfield, $sortorder,
'center ');
891 print_liste_field_titre(
"DateSending", $_SERVER[
"PHP_SELF"],
"mc.date_envoi",
'', $param,
'', $sortfield, $sortorder,
'center ');
892 print_liste_field_titre(
"Status", $_SERVER[
"PHP_SELF"],
"mc.statut",
'', $param,
'', $sortfield, $sortorder,
'center ');
894 if (!
$conf->main_checkbox_left_column) {
895 print
getTitleFieldOfList($selectedfields, 0, $_SERVER[
"PHP_SELF"],
'',
'',
'',
'', $sortfield, $sortorder,
'center maxwidthsearch ').
"\n";
903 include_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent.class.php';
904 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
905 include_once DOL_DOCUMENT_ROOT.
'/societe/class/societe.class.php';
906 include_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
907 include_once DOL_DOCUMENT_ROOT.
'/eventorganization/class/conferenceorboothattendee.class.php';
910 $objectstaticuser =
new User(
$db);
915 while ($i < min($num, $limit)) {
916 $obj =
$db->fetch_object($resql);
918 print
'<tr class="oddeven">';
921 if (
$conf->main_checkbox_left_column) {
922 print
'<td class="center nowraponall">';
923 print
'<!-- ID mailing_cibles = '.$obj->rowid.
' -->';
924 if ($massactionbutton || $massaction) {
926 if (in_array($obj->rowid, $arrayofselected)) {
929 print
'<input id="cb'.$obj->rowid.
'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->rowid.
'"'.($selected ?
' checked="checked"' :
'').
'>';
931 if ($obj->status == $object::STATUS_DRAFT) {
932 if ($user->hasRight(
'mailing',
'creer')) {
933 print
'<a class="reposition marginleftonly" href="'.$_SERVER[
'PHP_SELF'].
'?action=delete&token='.newToken().
'&rowid='.((int) $obj->rowid).$param.
'">'.
img_delete($langs->trans(
"RemoveRecipient")).
'</a>';
943 print
'<td class="tdoverflowmax150">';
944 print
img_picto($obj->email,
'email',
'class="paddingright"');
946 print
img_warning($langs->trans(
"EmailOptedOut"),
'warning',
'pictofixedwidth');
951 print
'<td class="tdoverflowmax150" title="'.dolPrintHTMLForAttribute($obj->lastname).
'">'.
dolPrintHTML($obj->lastname).
'</td>';
953 print
'<td class="tdoverflowmax150" title="'.dolPrintHTMLForAttribute($obj->firstname).
'">'.
dolPrintHTML($obj->firstname).
'</td>';
955 print
'<td class="tdoverflowmax300" title="'.dolPrintHTMLForAttribute($obj->other).
'"><span class="small">'.
dolPrintHTML($obj->other).
'</small></td>';
957 print
'<td class="center tdoverflowmax150">';
958 if (empty($obj->source_id) || empty($obj->source_type)) {
959 print empty($obj->source_url) ?
'' : $obj->source_url;
961 if ($obj->source_type ==
'member') {
962 $objectstaticmember->fetch($obj->source_id);
963 print $objectstaticmember->getNomUrl(1);
964 } elseif ($obj->source_type ==
'user') {
965 $objectstaticuser->fetch($obj->source_id);
966 print $objectstaticuser->getNomUrl(1);
967 } elseif ($obj->source_type ==
'thirdparty') {
968 $objectstaticcompany->fetch($obj->source_id);
969 print $objectstaticcompany->getNomUrl(1);
970 } elseif ($obj->source_type ==
'contact') {
971 $objectstaticcontact->fetch($obj->source_id);
972 print $objectstaticcontact->getNomUrl(1);
973 } elseif ($obj->source_type ==
'eventorganizationattendee') {
974 $objectstaticeventorganization->fetch($obj->source_id);
975 print $objectstaticeventorganization->getNomUrl(1);
977 print $obj->source_url;
983 print
'<td class="center nowraponall">';
988 print
'<td class="center nowraponall">';
989 if ($obj->status != $object::STATUS_DRAFT) {
996 print
'<td class="nowrap center">';
997 if ($obj->status == $object::STATUS_DRAFT) {
998 print $object::libStatutDest((
int) $obj->status, 2,
'');
1000 print $object::libStatutDest((
int) $obj->status, 2, $obj->error_text);
1005 if (!
$conf->main_checkbox_left_column) {
1006 print
'<td class="center nowraponall">';
1007 print
'<!-- ID mailing_cibles = '.$obj->rowid.
' -->';
1008 if ($obj->status == $object::STATUS_DRAFT) {
1009 if ($user->hasRight(
'mailing',
'creer')) {
1010 print
'<a class="reposition marginleftonly" href="'.$_SERVER[
'PHP_SELF'].
'?action=delete&token='.newToken().
'&rowid='.((int) $obj->rowid).$param.
'">'.
img_delete($langs->trans(
"RemoveRecipient")).
'</a>';
1024 if (
$object->status < $object::STATUS_SENTPARTIALY) {
1025 print
'<tr><td colspan="9">';
1026 print
'<span class="opacitymedium">'.$langs->trans(
"NoTargetYet").
'</span>';
1029 print
'<tr><td colspan="9">';
1030 print
'<span class="opacitymedium">'.$langs->trans(
"NoRecordFound").
'</span>';
1034 print
"</table><br>";
1044 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.
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.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='', $textonpictotooltip='')
Show information in HTML for admin users or standard users.
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.
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.
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.
dol_print_email($email, $contactid=0, $socid=0, $addlink=0, $max=0, $showinvalid=1, $withpicto=0, $morecss='paddingrightonly')
Show EMail link formatted for HTML output.
getTitleFieldOfList($name, $thead=0, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $disablesortlink=0, $tooltip='', $forcenowrapcolumntitle=0)
Get title line of an array.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
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.
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.