30require
'../../main.inc.php';
31require_once DOL_DOCUMENT_ROOT.
'/core/modules/mailings/modules_mailings.php';
32require_once DOL_DOCUMENT_ROOT.
'/comm/mailing/class/mailing.class.php';
33require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formmailing.class.php';
34require_once DOL_DOCUMENT_ROOT.
'/core/lib/emailing.lib.php';
35require_once DOL_DOCUMENT_ROOT.
'/core/class/CMailFile.class.php';
36require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
37require_once DOL_DOCUMENT_ROOT.
'/core/lib/ajax.lib.php';
41@phan-var-force array{0:string,1:string} $bctag From main.inc
53$langs->loadLangs(array(
"mails",
"admin"));
55$action =
GETPOST(
'action',
'aZ09');
56$toselect =
GETPOST(
'toselect',
'array');
57$massaction =
GETPOST(
'massaction',
'alpha');
62$sortfield =
GETPOST(
'sortfield',
'aZ09comma');
63$sortorder =
GETPOST(
'sortorder',
'aZ09comma');
65if (empty($page) || $page == -1) {
68$offset = $limit * $page;
72 $sortfield =
"mc.statut,email";
75 $sortorder =
"DESC,ASC";
80$search_lastname =
GETPOST(
"search_lastname",
'alphanohtml');
81$search_firstname =
GETPOST(
"search_firstname",
'alphanohtml');
82$search_email =
GETPOST(
"search_email",
'alphanohtml');
83$search_other =
GETPOST(
"search_other",
'alphanohtml');
84$search_dest_status =
GETPOST(
'search_dest_status',
'int');
93$hookmanager->initHooks(array(
'ciblescard',
'globalcard'));
99$listofmethods = array();
101$listofmethods[
'mail'] =
'PHP mail function';
103$listofmethods[
'smtps'] =
'SMTP/SMTPS socket library';
104if (version_compare(phpversion(),
'7.0',
'>=')) {
105 $listofmethods[
'swiftmailer'] =
'Swift Mailer socket library';
109if (!$user->hasRight(
'mailing',
'lire') || (!
getDolGlobalString(
'EXTERNAL_USERS_ARE_AUTHORIZED') && $user->socid > 0)) {
112if (empty($action) && empty(
$object->id)) {
116$permissiontoread = $user->hasRight(
'maling',
'lire');
117$permissiontocreate = $user->hasRight(
'mailing',
'creer');
118$permissiontovalidatesend = $user->hasRight(
'mailing',
'valider');
119$permissiontodelete = $user->hasRight(
'mailing',
'supprimer');
125if (
GETPOST(
'cancel',
'alpha')) {
129if (!
GETPOST(
'confirmmassaction',
'alpha')) {
133if ($action ==
'add' && $permissiontocreate) {
134 $module =
GETPOST(
"module",
'alpha');
138 foreach ($modulesdir as $dir) {
141 dol_syslog(
"Scan directory ".$dir.
" for modules");
144 $file = $dir.
"/".$module.
".modules.php";
145 $classname =
"mailing_".$module;
147 if (file_exists($file)) {
151 dol_syslog(
"Call add_to_target() on class ".$classname.
" evenunsubscribe=".
$object->evenunsubscribe);
154 if (class_exists($classname)) {
155 $obj =
new $classname($db);
156 '@phan-var-force MailingTargets $obj';
157 $obj->evenunsubscribe =
$object->evenunsubscribe;
159 $result = $obj->add_to_target($id);
161 $sqlmessage = $obj->sql;
170 if (
$object->status == $object::STATUS_SENTCOMPLETELY) {
171 $object->setStatut($object::STATUS_SENTPARTIALY);
180 if ($result < 0 && is_object($obj)) {
181 setEventMessages($langs->trans(
"Error").($obj->error ?
' '.$obj->error :
''), null,
'errors');
185if (
GETPOSTINT(
'clearlist') && $permissiontocreate) {
188 $obj->clear_target($id);
195if (
GETPOSTINT(
'exportcsv') && $permissiontoread) {
196 $completefilename =
'targets_emailing'.$object->id.
'_'.
dol_print_date(
dol_now(),
'dayhourlog').
'.csv';
197 header(
'Content-Type: text/csv');
198 header(
'Content-Disposition: attachment;filename='.$completefilename);
201 $sql =
"SELECT mc.rowid, mc.lastname, mc.firstname, mc.email, mc.other, mc.statut as status, mc.date_envoi, mc.tms,";
202 $sql .=
" mc.source_id, mc.source_type, mc.error_text";
203 $sql .=
" FROM ".MAIN_DB_PREFIX.
"mailing_cibles as mc";
204 $sql .=
" WHERE mc.fk_mailing = ".((int)
$object->id);
205 $sql .= $db->order($sortfield, $sortorder);
207 $resql = $db->query($sql);
209 $num = $db->num_rows($resql);
212 while ($obj = $db->fetch_object($resql)) {
213 print $obj->rowid.$sep;
214 print
'"'.$obj->lastname.
'"'.$sep;
215 print
'"'.$obj->firstname.
'"'.$sep;
216 print $obj->email.$sep;
217 print $obj->other.$sep;
218 print $obj->tms.$sep;
219 print $obj->source_type.$sep;
220 print $obj->source_id.$sep;
221 print $obj->date_envoi.$sep;
222 print $obj->status.$sep;
223 print
'"'.$obj->error_text.
'"'.$sep;
234if ($action ==
'delete' && $permissiontocreate) {
236 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"mailing_cibles WHERE rowid = ".((int) $rowid);
237 $resql = $db->query($sql);
241 $obj->update_nb($id);
245 header(
"Location: list.php");
253if ($action ==
"confirm_reset_target" && $permissiontocreate) {
258 foreach ($toselect as $toselectid) {
259 $result =
$object->resetTargetErrorStatus($user, $toselectid);
264 } elseif ($result > 0) {
281if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
282 $search_lastname =
'';
283 $search_firstname =
'';
286 $search_dest_status =
'';
291if (($action ==
'settitle' || $action ==
'setemail_from' || $action ==
'setreplyto' || $action ==
'setemail_errorsto' || $action ==
'setevenunsubscribe') && $permissiontocreate) {
294 if ($action ==
'settitle') {
296 } elseif ($action ==
'setemail_from') {
297 $object->email_from = trim(
GETPOST(
'email_from',
'alphawithlgt'));
298 } elseif ($action ==
'setemail_replyto') {
299 $object->email_replyto = trim(
GETPOST(
'email_replyto',
'alphawithlgt'));
300 } elseif ($action ==
'setemail_errorsto') {
301 $object->email_errorsto = trim(
GETPOST(
'email_errorsto',
'alphawithlgt'));
302 } elseif ($action ==
'settitle' && empty(
$object->title)) {
303 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"MailTitle"));
304 } elseif ($action ==
'setfrom' && empty(
$object->email_from)) {
305 $mesg = $langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"MailFrom"));
306 } elseif ($action ==
'setevenunsubscribe') {
311 $result =
$object->update($user);
313 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
328llxHeader(
'', $langs->trans(
"Mailing"),
'EN:Module_EMailing|FR:Module_Mailing|ES:Módulo_Mailing');
330$form =
new Form($db);
332$arrayofselected = is_array($toselect) ? $toselect : array();
342 $linkback =
'<a href="'.DOL_URL_ROOT.
'/comm/mailing/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
344 $morehtmlref =
'<div class="refidno">';
346 $morehtmlref .= $form->editfieldkey(
"",
'title',
$object->title, $object, 0,
'string',
'', 0, 1);
347 $morehtmlref .= $form->editfieldval(
"",
'title',
$object->title, $object, 0,
'string',
'',
null,
null,
'', 1);
348 $morehtmlref .=
'</div>';
350 $morehtmlstatus =
'';
352 if (
$object->status == $object::STATUS_SENTPARTIALY ||
$object->status == $object::STATUS_SENTCOMPLETELY) {
353 $nbtry =
$object->countNbOfTargets(
'alreadysent');
354 $nbko =
$object->countNbOfTargets(
'alreadysentko');
355 $nbok = ($nbtry - $nbko);
357 $morehtmlstatus .=
' ('.$nbtry.
'/'.
$object->nbemail;
359 $morehtmlstatus .=
' - '.$nbko.
' '.$langs->trans(
"Error");
361 $morehtmlstatus .=
') ';
364 dol_banner_tab($object,
'id', $linkback, 1,
'rowid',
'ref', $morehtmlref,
'', 0,
'', $morehtmlstatus);
366 print
'<div class="fichecenter">';
367 print
'<div class="fichehalfleft">';
368 print
'<div class="underbanner clearboth"></div>';
370 print
'<table class="border centpercent tableforfield">';
373 print
'<tr><td class="titlefield">'.$langs->trans(
"MailFrom").
'</td><td>';
375 foreach ($emailarray as $email => $name) {
376 if ($name && $name != $email) {
380 $langs->load(
"errors");
381 print
img_warning($langs->trans(
"ErrorBadEMail", $email));
391 if (
$object->messtype !=
'sms') {
392 print
'<tr><td>'.$langs->trans(
"MailErrorsTo").
'</td><td>';
394 foreach ($emailarray as $email => $name) {
395 if ($name != $email) {
399 $langs->load(
"errors");
400 print
img_warning($langs->trans(
"ErrorBadEMail", $email));
402 $langs->load(
"errors");
403 print
img_warning($langs->trans(
"ErrorBadMXDomain", $email));
413 if (
$object->messtype !=
'sms') {
415 print $form->editfieldkey(
"MailReply",
'email_replyto',
$object->email_replyto, $object, $user->hasRight(
'mailing',
'creer') &&
$object->status < $object::STATUS_SENTCOMPLETELY,
'string');
417 print $form->editfieldval(
"MailReply",
'email_replyto',
$object->email_replyto, $object, $user->hasRight(
'mailing',
'creer') &&
$object->status < $object::STATUS_SENTCOMPLETELY,
'string');
419 if ($action !=
'editemail_replyto') {
421 $langs->load(
"errors");
422 print
img_warning($langs->trans(
"ErrorBadEMail", $email));
424 $langs->load(
"errors");
425 print
img_warning($langs->trans(
"ErrorBadMXDomain", $email));
435 print
'<div class="fichehalfright">';
436 print
'<div class="underbanner clearboth"></div>';
438 print
'<table class="border centpercent tableforfield">';
442 print $langs->trans(
"TotalNbOfDistinctRecipients");
445 if (is_numeric($nbemail)) {
449 $text .= $langs->trans(
'LimitSendingEmailing',
getDolGlobalString(
'MAILING_LIMIT_SENDBYWEB'));
451 $text .= $langs->trans(
'SendingFromWebInterfaceIsNotAllowed');
454 if (empty($nbemail)) {
455 $nbemail .=
' '.img_warning($langs->trans(
'ToAddRecipientsChooseHere'));
459 print $form->textwithpicto($nbemail, $text, 1,
'warning');
467 print $langs->trans(
"MAIN_MAIL_SENDMODE");
469 if (
$object->messtype !=
'sms') {
475 $text = $listofmethods[
'mail'];
480 print
' <span class="opacitymedium">('.getDolGlobalString(
'MAIN_MAIL_SMTP_SERVER_EMAILING',
getDolGlobalString(
'MAIN_MAIL_SMTP_SERVER')).
')</span>';
483 print
' <span class="opacitymedium">('.getDolGlobalString(
'MAIN_MAIL_SMTP_SERVER').
')</span>';
487 print
' <span class="opacitymedium">('.getDolGlobalString(
'MAIN_MAIL_SMTP_SERVER').
')</span>';
492 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
498 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
load_fiche_titre($langs->trans(
"ToAddRecipientsChooseHere"), ($user->admin ?
info_admin($langs->trans(
"YouCanAddYourOwnPredefindedListHere"), 1) :
''),
'generic');
518 print
'<div class="div-table-responsive">';
519 print
'<div class="tagtable centpercentwithout1imp liste_titre_bydiv borderbottom" id="tablelines">';
521 print
'<div class="tagtr liste_titre">';
522 print
'<div class="tagtd"></div>';
523 print
'<div class="tagtd">'.$langs->trans(
"RecipientSelectionModules").
'</div>';
524 print
'<div class="tagtd center maxwidth150">';
525 if (
$object->messtype !=
'sms') {
526 print $langs->trans(
"NbOfUniqueEMails");
528 print $langs->trans(
"NbOfUniquePhones");
531 print
'<div class="tagtd left"><div class="inline-block">'.$langs->trans(
"Filters").
'</div>';
532 if (
$object->messtype !=
'sms') {
533 print
' <div class=" inline-block">'.$langs->trans(
"EvenUnsubscribe").
' ';
534 print
ajax_object_onoff($object,
'evenunsubscribe',
'evenunsubscribe',
'EvenUnsubscribe:switch_on:warning',
'EvenUnsubscribe', array(),
'small valignmiddle',
'', 1);
538 print
'<div class="tagtd"> </div>';
543 foreach ($modulesdir as $dir) {
544 $modulenames = array();
548 dol_syslog(
"Scan directory ".$dir.
" for modules");
549 $handle = @opendir($dir);
550 if (is_resource($handle)) {
551 while (($file = readdir($handle)) !==
false) {
552 if (substr($file, 0, 1) !=
'.' && substr($file, 0, 3) !=
'CVS') {
554 if (preg_match(
"/(.*)\.modules\.php$/i", $file, $reg)) {
555 if ($reg[1] ==
'example') {
558 $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($obj->enabled, 1));
584 foreach ($obj->require_module as $key) {
585 if (empty(
$conf->$key->enabled) || (empty($user->admin) && $obj->require_admin)) {
596 if ($allowaddtarget) {
597 print
'<form '.$bctag[$var].
' name="'.$modulename.
'" action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&module='.$modulename.
'" method="POST" enctype="multipart/form-data">';
598 print
'<input type="hidden" name="token" value="'.newToken().
'">';
599 print
'<input type="hidden" name="action" value="add">';
600 print
'<input type="hidden" name="page_y" value="'.newToken().
'">';
602 print
'<div '.$bctag[$var].
'>';
605 print
'<div class="tagtd paddingleftimp marginleftonly paddingrightimp marginrightonly valignmiddle center">';
606 if (empty($obj->picto)) {
607 $obj->picto =
'generic';
609 print
img_object($langs->trans(
"EmailingTargetSelector").
': '.get_class($obj), $obj->picto,
'class="valignmiddle width25 size15x"');
611 print
'<div class="tagtd valignmiddle">';
612 print $obj->getDesc();
618 $obj->evenunsubscribe =
$object->evenunsubscribe;
620 $nbofrecipient = $obj->getNbOfRecipients(
'');
625 print
'<div class="tagtd center valignmiddle">';
626 if ($nbofrecipient ===
'' || $nbofrecipient >= 0) {
627 print $nbofrecipient;
629 print $langs->trans(
"Error").
' '.
img_error($obj->error);
633 print
'<div class="tagtd left valignmiddle">';
634 if ($allowaddtarget) {
636 $filter = $obj->formFilter();
643 print $langs->trans(
"None");
648 print
'<div class="tagtd right valignmiddle">';
649 if ($allowaddtarget) {
650 print
'<input type="submit" class="button button-add small reposition" name="button_'.$modulename.
'" value="'.$langs->trans(
"Add").
'">';
652 print
'<input type="submit" class="button small disabled" disabled="disabled" name="button_'.$modulename.
'" value="'.$langs->trans(
"Add").
'">';
658 if ($allowaddtarget) {
667 $parameters = array();
668 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $object, $action);
669 print $hookmanager->resPrint;
676 if ($sqlmessage && $user->admin) {
677 print
info_admin($langs->trans(
"SQLUsedForExport").
':<br> '.$sqlmessage, 0, 0,
'1',
'',
'TechnicalInformation');
685 $sql =
"SELECT mc.rowid, mc.lastname, mc.firstname, mc.email, mc.other, mc.statut as status, mc.date_envoi, mc.tms,";
686 $sql .=
" mc.source_url, mc.source_id, mc.source_type, mc.error_text,";
687 $sql .=
" COUNT(mu.rowid) as nb";
688 $sql .=
" FROM ".MAIN_DB_PREFIX.
"mailing_cibles as mc";
689 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"mailing_unsubscribe as mu ON mu.email = mc.email";
690 $sql .=
" WHERE mc.fk_mailing=".((int)
$object->id);
691 $asearchcriteriahasbeenset = 0;
692 if ($search_lastname) {
694 $asearchcriteriahasbeenset++;
696 if ($search_firstname) {
698 $asearchcriteriahasbeenset++;
702 $asearchcriteriahasbeenset++;
706 $asearchcriteriahasbeenset++;
708 if ($search_dest_status !=
'' && (
int) $search_dest_status >= -1) {
709 $sql .=
" AND mc.statut = ".((int) $search_dest_status);
710 $asearchcriteriahasbeenset++;
712 $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';
713 $sql .= $db->order($sortfield, $sortorder);
717 $nbtotalofrecords =
'';
719 $result = $db->query($sql);
720 $nbtotalofrecords = $db->num_rows($result);
721 if (($page * $limit) > $nbtotalofrecords) {
727 if (empty($asearchcriteriahasbeenset)) {
728 if ($nbtotalofrecords !=
$object->nbemail) {
729 dol_syslog(
"We found a difference in nb of record in target table and the property ->nbemail, we fix ->nbemail");
731 $resultrefresh =
$object->refreshNbOfTargets();
732 if ($resultrefresh < 0) {
740 $sql .= $db->plimit($limit + 1, $offset);
742 $resql = $db->query($sql);
744 $num = $db->num_rows($resql);
746 $param =
"&id=".$object->id;
748 if ($limit > 0 && $limit !=
$conf->liste_limit) {
749 $param .=
'&limit='.((int) $limit);
751 if ($search_lastname) {
752 $param .=
"&search_lastname=".urlencode($search_lastname);
754 if ($search_firstname) {
755 $param .=
"&search_firstname=".urlencode($search_firstname);
758 $param .=
"&search_email=".urlencode($search_email);
761 $param .=
"&search_other=".urlencode($search_other);
764 print
'<form method="POST" action="'.$_SERVER[
"PHP_SELF"].
'">';
765 print
'<input type="hidden" name="token" value="'.newToken().
'">';
766 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
767 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
768 print
'<input type="hidden" name="page" value="'.$page.
'">';
769 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
770 print
'<input type="hidden" name="page_y" value="">';
772 $morehtmlcenter =
'';
773 $arrayofmassactions = array();
774 if ($permissiontocreate) {
775 $arrayofmassactions[
'reset_target'] =
img_picto(
'',
'refresh',
'class="pictofixedwidth"').$langs->trans(
"ResetMailingTargetMassaction");
777 $massactionbutton = $form->selectMassAction(
'', $arrayofmassactions);
778 $morehtmlcenter .= $massactionbutton .
'<br>';
780 if (
$object->status == $object::STATUS_DRAFT) {
781 $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>';
783 $morehtmlcenter .=
' <a class="reposition" href="'.$_SERVER[
"PHP_SELF"].
'?action=exportcsv&token='.
newToken().
'&exportcsv=1&id='.
$object->id.
'">'.
img_picto(
'',
'download',
'class="pictofixedwidth"').$langs->trans(
"Download").
'</a>';
787 print
"\n<!-- Liste destinataires selectionnes -->\n";
788 print
'<form method="POST" action="'.$_SERVER[
"PHP_SELF"].
'">';
789 print
'<input type="hidden" name="token" value="'.newToken().
'">';
790 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
791 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
792 print
'<input type="hidden" name="page" value="'.$page.
'">';
793 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
794 print
'<input type="hidden" name="limit" value="'.$limit.
'">';
795 print
'<input type="hidden" name="page_y" value="">';
798 print_barre_liste($langs->trans(
"MailSelectedRecipients"), $page, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder, $morehtmlcenter, $num, $nbtotalofrecords,
'generic', 0, $newcardbutton,
'', $limit, 0, 0, 1);
800 if ($massaction ==
'reset_target') {
802 print $form->formconfirm($_SERVER[
"PHP_SELF"].
"?id=".
$object->id, $langs->trans(
"ConfirmResetMailingTargetMassaction"), $langs->trans(
"ConfirmResetMailingTargetMassactionQuestion"),
"confirm_reset_target",
null,
'', 0, 0, 500, 1);
805 $varpage = empty($contextpage) ? $_SERVER[
"PHP_SELF"] : $contextpage;
806 $htmlofselectarray = $form->multiSelectArrayWithCheckbox(
'selectedfields', $arrayfields, $varpage,
$conf->main_checkbox_left_column);
807 $selectedfields = ($mode !=
'kanban' ? $htmlofselectarray :
'');
808 $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons(
'checkforselect', 1) :
'');
810 print
'<div class="div-table-responsive">';
811 print
'<table class="noborder centpercent">';
814 print
'<tr class="liste_titre_filter">';
817 if (
$conf->main_checkbox_left_column) {
818 print
'<td class="liste_titre maxwidthsearch">';
819 $searchpicto = $form->showFilterButtons(
'left');
824 print
'<td class="liste_titre">';
825 print
'<input class="flat maxwidth75" type="text" name="search_email" value="'.dol_escape_htmltag($search_email).
'">';
828 print
'<td class="liste_titre">';
829 print
'<input class="flat maxwidth50" type="text" name="search_lastname" value="'.dol_escape_htmltag($search_lastname).
'">';
832 print
'<td class="liste_titre">';
833 print
'<input class="flat maxwidth50" type="text" name="search_firstname" value="'.dol_escape_htmltag($search_firstname).
'">';
836 print
'<td class="liste_titre">';
837 print
'<input class="flat maxwidth100" type="text" name="search_other" value="'.dol_escape_htmltag($search_other).
'">';
840 print
'<td class="liste_titre">';
845 print
'<td class="liste_titre">';
850 print
'<td class="liste_titre">';
855 print
'<td class="liste_titre center parentonrightofpage">';
856 print $formmailing->selectDestinariesStatus($search_dest_status,
'search_dest_status', 1,
'width100 onrightofpage');
860 if (empty(
$conf->main_checkbox_left_column)) {
861 print
'<td class="liste_titre maxwidthsearch">';
862 $searchpicto = $form->showFilterButtons();
870 $param .=
"&page=".urlencode((
string) ($page));
873 print
'<tr class="liste_titre">';
875 if (
$conf->main_checkbox_left_column) {
876 print
getTitleFieldOfList($selectedfields, 0, $_SERVER[
"PHP_SELF"],
'',
'',
'',
'', $sortfield, $sortorder,
'center maxwidthsearch ').
"\n";
877 $totalarray[
'nbfield']++;
880 print_liste_field_titre(
"Lastname", $_SERVER[
"PHP_SELF"],
"mc.lastname", $param,
"",
"", $sortfield, $sortorder);
881 print_liste_field_titre(
"Firstname", $_SERVER[
"PHP_SELF"],
"mc.firstname", $param,
"",
"", $sortfield, $sortorder);
882 print_liste_field_titre(
"OtherInformations", $_SERVER[
"PHP_SELF"],
"", $param,
"",
"", $sortfield, $sortorder);
883 print_liste_field_titre(
"Source", $_SERVER[
"PHP_SELF"],
"", $param,
"",
'', $sortfield, $sortorder,
'center ');
885 print_liste_field_titre(
"DateLastModification", $_SERVER[
"PHP_SELF"],
"mc.tms", $param,
"",
'', $sortfield, $sortorder,
'center ');
887 print_liste_field_titre(
"DateSending", $_SERVER[
"PHP_SELF"],
"mc.date_envoi", $param,
'',
'', $sortfield, $sortorder,
'center ');
888 print_liste_field_titre(
"Status", $_SERVER[
"PHP_SELF"],
"mc.statut", $param,
'',
'', $sortfield, $sortorder,
'center ');
890 if (!
$conf->main_checkbox_left_column) {
891 print
getTitleFieldOfList($selectedfields, 0, $_SERVER[
"PHP_SELF"],
'',
'',
'',
'', $sortfield, $sortorder,
'center maxwidthsearch ').
"\n";
892 $totalarray[
'nbfield']++;
899 include_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent.class.php';
900 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
901 include_once DOL_DOCUMENT_ROOT.
'/societe/class/societe.class.php';
902 include_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
903 include_once DOL_DOCUMENT_ROOT.
'/eventorganization/class/conferenceorboothattendee.class.php';
905 $objectstaticmember =
new Adherent($db);
906 $objectstaticuser =
new User($db);
907 $objectstaticcompany =
new Societe($db);
908 $objectstaticcontact =
new Contact($db);
911 while ($i < min($num, $limit)) {
912 $obj = $db->fetch_object($resql);
914 print
'<tr class="oddeven">';
918 print
'<td class="center">';
919 print
'<!-- ID mailing_cibles = '.$obj->rowid.
' -->';
920 if ($massactionbutton || $massaction) {
922 if (in_array($obj->rowid, $arrayofselected)) {
925 print
'<input id="cb'.$obj->rowid.
'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->rowid.
'"'.($selected ?
' checked="checked"' :
'').
'>';
927 if ($obj->status == $object::STATUS_DRAFT) {
928 if ($user->hasRight(
'mailing',
'creer')) {
929 print
'<a class="reposition" href="'.$_SERVER[
'PHP_SELF'].
'?action=delete&token='.
newToken().
'&rowid='.((int) $obj->rowid).$param.
'">'.
img_delete($langs->trans(
"RemoveRecipient")).
'</a>';
939 print
'<td class="tdoverflowmax150">';
940 print
img_picto($obj->email,
'email',
'class="paddingright"');
942 print
img_warning($langs->trans(
"EmailOptedOut"),
'warning',
'pictofixedwidth');
947 print
'<td class="tdoverflowmax150" title="'.dol_escape_htmltag($obj->lastname).
'">'.
dol_escape_htmltag($obj->lastname).
'</td>';
949 print
'<td class="tdoverflowmax150" title="'.dol_escape_htmltag($obj->firstname).
'">'.
dol_escape_htmltag($obj->firstname).
'</td>';
951 print
'<td class="tdoverflowmax300" title="'.dol_escape_htmltag($obj->other).
'"><span class="small">'.
dol_escape_htmltag($obj->other).
'</small></td>';
953 print
'<td class="center tdoverflowmax150">';
954 if (empty($obj->source_id) || empty($obj->source_type)) {
955 print empty($obj->source_url) ?
'' : $obj->source_url;
957 if ($obj->source_type ==
'member') {
958 $objectstaticmember->fetch($obj->source_id);
959 print $objectstaticmember->getNomUrl(1);
960 } elseif ($obj->source_type ==
'user') {
961 $objectstaticuser->fetch($obj->source_id);
962 print $objectstaticuser->getNomUrl(1);
963 } elseif ($obj->source_type ==
'thirdparty') {
964 $objectstaticcompany->fetch($obj->source_id);
965 print $objectstaticcompany->getNomUrl(1);
966 } elseif ($obj->source_type ==
'contact') {
967 $objectstaticcontact->fetch($obj->source_id);
968 print $objectstaticcontact->getNomUrl(1);
969 } elseif ($obj->source_type ==
'eventorganizationattendee') {
970 $objectstaticeventorganization->fetch($obj->source_id);
971 print $objectstaticeventorganization->getNomUrl(1);
973 print $obj->source_url;
979 print
'<td class="center nowraponall">';
984 print
'<td class="center nowraponall">';
985 if ($obj->status != $object::STATUS_DRAFT) {
987 print $obj->date_envoi;
992 print
'<td class="nowrap center">';
993 if ($obj->status == $object::STATUS_DRAFT) {
994 print $object::libStatutDest((
int) $obj->status, 2,
'');
996 print $object::libStatutDest((
int) $obj->status, 2, $obj->error_text);
1002 print
'<td class="center">';
1003 print
'<!-- ID mailing_cibles = '.$obj->rowid.
' -->';
1004 if ($obj->status == $object::STATUS_DRAFT) {
1005 if ($user->hasRight(
'mailing',
'creer')) {
1006 print
'<a class="reposition" href="'.$_SERVER[
'PHP_SELF'].
'?action=delete&token='.
newToken().
'&rowid='.((int) $obj->rowid).$param.
'">'.
img_delete($langs->trans(
"RemoveRecipient")).
'</a>';
1020 if (
$object->status < $object::STATUS_SENTPARTIALY) {
1021 print
'<tr><td colspan="9">';
1022 print
'<span class="opacitymedium">'.$langs->trans(
"NoTargetYet").
'</span>';
1025 print
'<tr><td colspan="9">';
1026 print
'<span class="opacitymedium">'.$langs->trans(
"NoRecordFound").
'</span>';
1030 print
"</table><br>";
1040 print
"\n<!-- Fin liste destinataires selectionnes -->\n";
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
ajax_object_onoff($object, $code, $field, $text_on, $text_off, $input=array(), $morecss='', $htmlname='', $forcenojs=0, $moreparam='')
On/off button to change a property status of an object This uses the ajax service objectonoff....
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.
dol_stringtotime($string, $gm=1)
Convert a string date into a GM Timestamps date Warning: YYYY-MM-DDTHH:MM:SS+02:00 (RFC3339) is not s...
emailing_prepare_head(Mailing $object)
Prepare array with list of tabs.
dolGetModulesDirs($subdir='')
Return list of directories that contain modules.
isValidMailDomain($mail)
Return true if email has a domain name that can be resolved to MX type.
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
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_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
img_delete($titlealt='default', $other='class="pictodelete"', $morecss='')
Show delete logo.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
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.
natural_search($fields, $value, $mode=0, $nofirstand=0)
Generate natural SQL search string for a criteria (this criteria can be tested on one or several fiel...
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
newToken()
Return the value of token currently saved into session with name 'newtoken'.
print_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
dol_print_email($email, $cid=0, $socid=0, $addlink=0, $max=64, $showinvalid=1, $withpicto=0, $morecss='paddingrightonly')
Show EMail link formatted for HTML output.
getTitleFieldOfList($name, $thead=0, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $disablesortlink=0, $tooltip='', $forcenowrapcolumntitle=0)
Get title line of an array.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
img_error($titlealt='default')
Show error logo.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
isValidEmail($address, $acceptsupervisorkey=0, $acceptuserkey=0)
Return true if email syntax is ok.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='')
Show information in HTML for admin users or standard users.
get_exdir($num, $level, $alpha, $withoutslash, $object, $modulepart='')
Return a path to have a the directory according to object where files are stored.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.