27 require
'../../main.inc.php';
28 require_once DOL_DOCUMENT_ROOT.
'/core/modules/mailings/modules_mailings.php';
29 require_once DOL_DOCUMENT_ROOT.
'/comm/mailing/class/mailing.class.php';
30 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formmailing.class.php';
31 require_once DOL_DOCUMENT_ROOT.
'/core/lib/emailing.lib.php';
32 require_once DOL_DOCUMENT_ROOT.
'/core/class/CMailFile.class.php';
33 require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
36 $langs->load(
"mails");
39 if (!$user->rights->mailing->lire || $user->socid > 0)
accessforbidden();
43 $limit =
GETPOST(
'limit',
'int') ?
GETPOST(
'limit',
'int') : $conf->liste_limit;
44 $sortfield =
GETPOST(
'sortfield',
'aZ09comma');
45 $sortorder =
GETPOST(
'sortorder',
'aZ09comma');
47 if (empty($page) || $page == -1) { $page = 0; }
48 $offset = $limit * $page;
49 $pageprev = $page - 1;
50 $pagenext = $page + 1;
51 if (!$sortfield) $sortfield =
"mc.statut,email";
52 if (!$sortorder) $sortorder =
"DESC,ASC";
55 $rowid =
GETPOST(
'rowid',
'int');
56 $action =
GETPOST(
'action',
'aZ09');
57 $search_lastname =
GETPOST(
"search_lastname",
'alphanohtml');
58 $search_firstname =
GETPOST(
"search_firstname",
'alphanohtml');
59 $search_email =
GETPOST(
"search_email",
'alphanohtml');
60 $search_other =
GETPOST(
"search_other",
'alphanohtml');
61 $search_dest_status =
GETPOST(
'search_dest_status',
'alphanohtml');
67 $result = $object->fetch($id);
76 $module =
GETPOST(
"module",
'alpha');
79 foreach ($modulesdir as $dir)
83 dol_syslog(
"Scan directory ".$dir.
" for modules");
86 $file = $dir.
"/".$module.
".modules.php";
87 $classname =
"mailing_".$module;
89 if (file_exists($file))
94 $obj =
new $classname($db);
95 dol_syslog(
"Call add_to_target on class ".$classname);
96 $result = $obj->add_to_target($id);
103 header(
"Location: ".
$_SERVER[
'PHP_SELF'].
"?id=".$id);
112 setEventMessages($langs->trans(
"Error").($obj->error ?
' '.$obj->error :
''), null,
'errors');
116 if (
GETPOST(
'clearlist',
'int'))
120 $obj->clear_target($id);
127 if (
GETPOST(
'exportcsv',
'int'))
129 $completefilename =
'targets_emailing'.$object->id.
'_'.
dol_print_date(
dol_now(),
'dayhourlog').
'.csv';
130 header(
'Content-Type: text/csv');
131 header(
'Content-Disposition: attachment;filename='.$completefilename);
134 $sql =
"SELECT mc.rowid, mc.lastname, mc.firstname, mc.email, mc.other, mc.statut as status, mc.date_envoi, mc.tms,";
135 $sql .=
" mc.source_id, mc.source_type, mc.error_text";
136 $sql .=
" FROM ".MAIN_DB_PREFIX.
"mailing_cibles as mc";
137 $sql .=
" WHERE mc.fk_mailing=".$object->id;
138 $sql .= $db->order($sortfield, $sortorder);
140 $resql = $db->query($sql);
143 $num = $db->num_rows(
$resql);
146 while ($obj = $db->fetch_object(
$resql))
148 print $obj->rowid.$sep;
149 print '"'.$obj->lastname.
'"'.$sep;
150 print '"'.$obj->firstname.
'"'.$sep;
151 print $obj->email.$sep;
152 print $obj->other.$sep;
153 print $obj->tms.$sep;
154 print $obj->source_type.$sep;
155 print $obj->source_id.$sep;
156 print $obj->date_envoi.$sep;
157 print $obj->status.$sep;
158 print '"'.$obj->error_text.
'"'.$sep;
169 if ($action ==
'delete')
172 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"mailing_cibles WHERE rowid=".$rowid;
173 $resql = $db->query($sql);
179 $obj->update_nb($id);
183 header(
"Location: list.php");
192 if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha'))
194 $search_lastname =
'';
195 $search_firstname =
'';
198 $search_dest_status =
'';
207 llxHeader(
'', $langs->trans(
"Mailing"),
'EN:Module_EMailing|FR:Module_Mailing|ES:Módulo_Mailing');
209 $form =
new Form($db);
212 if ($object->fetch($id) >= 0)
218 $linkback =
'<a href="'.DOL_URL_ROOT.
'/comm/mailing/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
222 if ($object->statut == 2 || $object->statut == 3)
224 $nbtry = $object->countNbOfTargets(
'alreadysent');
225 $nbko = $object->countNbOfTargets(
'alreadysentko');
226 $nbok = ($nbtry - $nbko);
228 $morehtmlright .=
' ('.$nbtry.
'/'.$object->nbemail;
229 if ($nbko) $morehtmlright .=
' - '.$nbko.
' '.$langs->trans(
"Error");
230 $morehtmlright .=
') ';
233 dol_banner_tab($object,
'id', $linkback, 1,
'rowid',
'ref',
'',
'', 0,
'', $morehtmlright);
235 print '<div class="fichecenter">';
236 print '<div class="underbanner clearboth"></div>';
238 print '<table class="border centpercent tableforfield">';
240 print '<tr><td class="titlefield">'.$langs->trans(
"MailTitle").
'</td><td colspan="3">'.$object->title.
'</td></tr>';
242 print '<tr><td>'.$langs->trans(
"MailFrom").
'</td><td colspan="3">';
244 foreach ($emailarray as $email => $name) {
245 if ($name && $name != $email) {
249 $langs->load(
"errors");
261 print '<tr><td>'.$langs->trans(
"MailErrorsTo").
'</td><td colspan="3">';
263 foreach ($emailarray as $email => $name) {
264 if ($name != $email) {
268 $langs->load(
"errors");
279 print $langs->trans(
"TotalNbOfDistinctRecipients");
280 print '</td><td colspan="3">';
281 $nbemail = ($object->nbemail ? $object->nbemail : 0);
282 if (is_numeric($nbemail))
285 if ((!empty($conf->global->MAILING_LIMIT_SENDBYWEB) && $conf->global->MAILING_LIMIT_SENDBYWEB < $nbemail) && ($object->statut == 1 || ($object->statut == 2 && $nbtry < $nbemail)))
287 if ($conf->global->MAILING_LIMIT_SENDBYWEB > 0)
289 $text .= $langs->trans(
'LimitSendingEmailing', $conf->global->MAILING_LIMIT_SENDBYWEB);
291 $text .= $langs->trans(
'SendingFromWebInterfaceIsNotAllowed');
294 if (empty($nbemail)) $nbemail .=
' '.img_warning(
'').
' <font class="warning">'.$langs->trans(
"NoTargetYet").
'</font>';
297 print $form->textwithpicto($nbemail, $text, 1,
'warning');
313 $allowaddtarget = ($object->statut == 0);
316 if ($allowaddtarget && $user->rights->mailing->creer)
318 print load_fiche_titre($langs->trans(
"ToAddRecipientsChooseHere"), ($user->admin ?
info_admin($langs->trans(
"YouCanAddYourOwnPredefindedListHere"), 1) :
''),
'generic');
321 print '<div class="tagtable centpercent liste_titre_bydiv borderbottom" id="tablelines">';
324 print
'<div class="tagtr liste_titre">';
326 print
'<div class="tagtd">'.$langs->trans(
"RecipientSelectionModules").
'</div>';
328 print
'<div class="tagtd" align="center">'.$langs->trans(
"NbOfUniqueEMails").
'</div>';
330 print
'<div class="tagtd left">'.$langs->trans(
"Filter").
'</div>';
332 print
'<div class="tagtd"> </div>';
338 foreach ($modulesdir as $dir)
340 $modulenames = array();
344 dol_syslog(
"Scan directory ".$dir.
" for modules");
345 $handle = @opendir($dir);
346 if (is_resource($handle))
348 while (($file = readdir($handle)) !==
false)
350 if (substr($file, 0, 1) <>
'.' && substr($file, 0, 3) <>
'CVS')
352 if (preg_match(
"/(.*)\.modules\.php$/i", $file, $reg))
354 if ($reg[1] ==
'example')
continue;
355 $modulenames[] = $reg[1];
368 foreach ($modulenames as $modulename)
371 $file = $dir.$modulename.
".modules.php";
372 $classname =
"mailing_".$modulename;
375 $obj =
new $classname($db);
378 $qualified = (isset($obj->enabled) ? $obj->enabled : 1);
379 foreach ($obj->require_module as $key)
381 if (!$conf->$key->enabled || (!$user->admin && $obj->require_admin))
396 print
'<form '.$bctag[$var].
' name="'.$modulename.
'" action="'.
$_SERVER[
'PHP_SELF'].
'?action=add&id='.$object->id.
'&module='.$modulename.
'" method="POST" enctype="multipart/form-data">';
397 print
'<input type="hidden" name="token" value="'.newToken().
'">';
399 print
'<div '.$bctag[$var].
'>';
402 print
'<div class="tagtd">';
403 if (empty($obj->picto)) $obj->picto =
'generic';
404 print
img_object($langs->trans(
"EmailingTargetSelector").
': '.get_class($obj), $obj->picto,
'class="valignmiddle pictomodule"');
406 print $obj->getDesc();
410 $nbofrecipient = $obj->getNbOfRecipients(
'');
416 print
'<div class="tagtd center">';
417 if ($nbofrecipient >= 0)
419 print $nbofrecipient;
421 print $langs->trans(
"Error").
' '.
img_error($obj->error);
425 print
'<div class="tagtd left">';
429 $filter = $obj->formFilter();
434 if ($filter) print $filter;
435 else print $langs->trans(
"None");
439 print
'<div class="tagtd right">';
442 print
'<input type="submit" class="button" name="button_'.$modulename.
'" value="'.$langs->trans(
"Add").
'">';
444 print
'<input type="submit" class="button disabled" disabled="disabled" name="button_'.$modulename.
'" value="'.$langs->trans(
"Add").
'">';
450 if ($allowaddtarget) print
'</form>';
462 $sql =
"SELECT mc.rowid, mc.lastname, mc.firstname, mc.email, mc.other, mc.statut, mc.date_envoi, mc.tms,";
463 $sql .=
" mc.source_url, mc.source_id, mc.source_type, mc.error_text";
464 $sql .=
" FROM ".MAIN_DB_PREFIX.
"mailing_cibles as mc";
465 $sql .=
" WHERE mc.fk_mailing=".$object->id;
466 $asearchcriteriahasbeenset = 0;
467 if ($search_lastname) {
469 $asearchcriteriahasbeenset++;
471 if ($search_firstname) {
473 $asearchcriteriahasbeenset++;
477 $asearchcriteriahasbeenset++;
481 $asearchcriteriahasbeenset++;
483 if ($search_dest_status !=
'' && $search_dest_status >= -1) {
484 $sql .=
" AND mc.statut=".$db->escape($search_dest_status).
" ";
485 $asearchcriteriahasbeenset++;
487 $sql .= $db->order($sortfield, $sortorder);
490 $nbtotalofrecords =
'';
491 if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST))
493 $result = $db->query($sql);
494 $nbtotalofrecords = $db->num_rows($result);
495 if (($page * $limit) > $nbtotalofrecords) {
501 if (empty($asearchcriteriahasbeenset)) {
502 if ($nbtotalofrecords != $object->nbemail) {
503 dol_syslog(
"We found a difference in nb of record in target table and the property ->nbemail, we fix ->nbemail");
505 $resultrefresh = $object->refreshNbOfTargets();
506 if ($resultrefresh < 0) {
514 $sql .= $db->plimit($limit + 1, $offset);
516 $resql = $db->query($sql);
519 $num = $db->num_rows(
$resql);
521 $param =
"&id=".$object->id;
523 if ($limit > 0 && $limit != $conf->liste_limit) $param .=
'&limit='.urlencode($limit);
524 if ($search_lastname) $param .=
"&search_lastname=".urlencode($search_lastname);
525 if ($search_firstname) $param .=
"&search_firstname=".urlencode($search_firstname);
526 if ($search_email) $param .=
"&search_email=".urlencode($search_email);
527 if ($search_other) $param .=
"&search_other=".urlencode($search_other);
529 print
'<form method="POST" action="'.$_SERVER[
"PHP_SELF"].
'">';
530 print
'<input type="hidden" name="token" value="'.newToken().
'">';
531 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
532 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
533 print
'<input type="hidden" name="page" value="'.$page.
'">';
534 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
536 $morehtmlcenter =
'';
537 if ($allowaddtarget) {
538 $morehtmlcenter =
'<span class="opacitymedium">'.$langs->trans(
"ToClearAllRecipientsClickHere").
'</span> <a href="'.
$_SERVER[
"PHP_SELF"].
'?clearlist=1&id='.$object->id.
'" class="button reposition">'.$langs->trans(
"TargetsReset").
'</a>';
540 $morehtmlcenter .=
' <a class="reposition" href="'.$_SERVER[
"PHP_SELF"].
'?exportcsv=1&id='.$object->id.
'">'.$langs->trans(
"Download").
'</a>';
542 print_barre_liste($langs->trans(
"MailSelectedRecipients"), $page,
$_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder, $morehtmlcenter, $num, $nbtotalofrecords,
'generic', 0,
'',
'', $limit);
546 print
"\n<!-- Liste destinataires selectionnes -->\n";
547 print
'<form method="POST" action="'.$_SERVER[
"PHP_SELF"].
'">';
548 print
'<input type="hidden" name="token" value="'.newToken().
'">';
549 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
550 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
551 print
'<input type="hidden" name="page" value="'.$page.
'">';
552 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
553 print
'<input type="hidden" name="limit" value="'.$limit.
'">';
555 print
'<div class="div-table-responsive">';
556 print
'<table class="noborder centpercent">';
559 print
'<tr class="liste_titre_filter">';
561 print
'<td class="liste_titre">';
562 print
'<input class="flat maxwidth75" type="text" name="search_email" value="'.dol_escape_htmltag($search_email).
'">';
565 print
'<td class="liste_titre">';
566 print
'<input class="flat maxwidth50" type="text" name="search_lastname" value="'.dol_escape_htmltag($search_lastname).
'">';
569 print
'<td class="liste_titre">';
570 print
'<input class="flat maxwidth50" type="text" name="search_firstname" value="'.dol_escape_htmltag($search_firstname).
'">';
573 print
'<td class="liste_titre">';
574 print
'<input class="flat maxwidth100" type="text" name="search_other" value="'.dol_escape_htmltag($search_other).
'">';
577 print
'<td class="liste_titre">';
582 print
'<td class="liste_titre">';
587 print
'<td class="liste_titre">';
592 print
'<td class="liste_titre right">';
593 print $formmailing->selectDestinariesStatus($search_dest_status,
'search_dest_status', 1);
596 print
'<td class="liste_titre maxwidthsearch">';
597 $searchpicto = $form->showFilterAndCheckAddButtons($massactionbutton ? 1 : 0,
'checkforselect', 1);
602 if ($page) $param .=
"&page=".urlencode($page);
604 print
'<tr class="liste_titre">';
606 print_liste_field_titre(
"Lastname", $_SERVER[
"PHP_SELF"],
"mc.lastname", $param,
"",
"", $sortfield, $sortorder);
607 print_liste_field_titre(
"Firstname", $_SERVER[
"PHP_SELF"],
"mc.firstname", $param,
"",
"", $sortfield, $sortorder);
608 print_liste_field_titre(
"OtherInformations", $_SERVER[
"PHP_SELF"],
"", $param,
"",
"", $sortfield, $sortorder);
609 print_liste_field_titre(
"Source", $_SERVER[
"PHP_SELF"],
"", $param,
"",
'align="center"', $sortfield, $sortorder);
611 print_liste_field_titre(
"DateLastModification", $_SERVER[
"PHP_SELF"],
"mc.tms", $param,
"",
'align="center"', $sortfield, $sortorder);
613 print_liste_field_titre(
"DateSending", $_SERVER[
"PHP_SELF"],
"mc.date_envoi", $param,
'',
'align="center"', $sortfield, $sortorder);
614 print_liste_field_titre(
"Status", $_SERVER[
"PHP_SELF"],
"mc.statut", $param,
'',
'class="right"', $sortfield, $sortorder);
622 include_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent.class.php';
623 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
624 include_once DOL_DOCUMENT_ROOT.
'/societe/class/societe.class.php';
625 include_once DOL_DOCUMENT_ROOT.
'/contact/class/contact.class.php';
626 $objectstaticmember =
new Adherent($db);
627 $objectstaticuser =
new User($db);
628 $objectstaticcompany =
new Societe($db);
629 $objectstaticcontact =
new Contact($db);
631 while ($i < min($num, $limit))
633 $obj = $db->fetch_object(
$resql);
635 print
'<tr class="oddeven">';
636 print
'<td>'.$obj->email.
'</td>';
637 print
'<td>'.$obj->lastname.
'</td>';
638 print
'<td>'.$obj->firstname.
'</td>';
639 print
'<td>'.$obj->other.
'</td>';
640 print
'<td class="center">';
641 if (empty($obj->source_id) || empty($obj->source_type))
643 print empty($obj->source_url) ?
'' : $obj->source_url;
645 if ($obj->source_type ==
'member')
647 $objectstaticmember->fetch($obj->source_id);
648 print $objectstaticmember->getNomUrl(1);
649 } elseif ($obj->source_type ==
'user')
651 $objectstaticuser->fetch($obj->source_id);
652 print $objectstaticuser->getNomUrl(1);
653 } elseif ($obj->source_type ==
'thirdparty')
655 $objectstaticcompany->fetch($obj->source_id);
656 print $objectstaticcompany->getNomUrl(1);
657 } elseif ($obj->source_type ==
'contact')
659 $objectstaticcontact->fetch($obj->source_id);
660 print $objectstaticcontact->getNomUrl(1);
662 print $obj->source_url;
668 print
'<td class="center">';
673 if ($obj->statut == 0)
676 print
'<td align="center"> </td>';
678 print
'<td class="nowrap right">';
679 print $object::libStatutDest($obj->statut, 2,
'');
683 print
'<td class="center">'.$obj->date_envoi.
'</td>';
685 print
'<td class="nowrap right">';
686 print $object::libStatutDest($obj->statut, 2, $obj->error_text);
691 print
'<td class="right">';
692 if ($obj->statut == 0)
694 if ($user->rights->mailing->creer && $allowaddtarget) {
695 print
'<a class="reposition" href="'.$_SERVER[
'PHP_SELF'].
'?action=delete&token='.
newToken().
'&rowid='.$obj->rowid.$param.
'">'.
img_delete($langs->trans(
"RemoveRecipient")).
'</a>';
708 if ($object->statut < 2)
710 print
'<tr><td colspan="9" class="opacitymedium">';
711 print $langs->trans(
"NoTargetYet");
715 print
"</table><br>";
725 print
"\n<!-- Fin liste destinataires selectionnes -->\n";
GETPOST($paramname, $check= 'alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
getArrayAddress($address)
Return a formatted array of address string for SMTP protocol.
dolGetModulesDirs($subdir= '')
Return list of modules directories.
dol_now($mode= 'auto')
Return date for now.
Class to manage Dolibarr users.
img_warning($titlealt= 'default', $moreatt= '', $morecss= 'pictowarning')
Show warning logo.
setEventMessages($mesg, $mesgs, $style= 'mesgs', $messagekey= '')
Set event messages in dol_events session object.
img_error($titlealt= 'default')
Show error logo.
print_barre_liste($titre, $page, $file, $options= '', $sortfield= '', $sortorder= '', $morehtmlcenter= '', $num=-1, $totalnboflines= '', $picto= 'generic', $pictoisfullpath=0, $morehtmlright= '', $morecss= '', $limit=-1, $hideselectlimit=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow= '')
Print a title with navigation controls for pagination.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname.
Class to manage third parties objects (customers, suppliers, prospects...)
print_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
emailing_prepare_head(Mailing $object)
Prepare array with list of tabs.
load_fiche_titre($titre, $morehtmlright= '', $picto= 'generic', $pictoisfullpath=0, $id= '', $morecssontable= '', $morehtmlcenter= '')
Load a title with picto.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename= '', $restricttologhandler= '', $logcontext=null)
Write log message into outputs.
Class to manage members of a foundation.
img_object($titlealt, $picto, $moreatt= '', $pictoisfullpath=false, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
accessforbidden($message= '', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program Calling this function terminate execution ...
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...
Class to manage emailings module.
print $_SERVER["PHP_SELF"]
Edit parameters.
dol_get_fiche_head($links=array(), $active= '', $title= '', $notab=0, $picto= '', $pictoisfullpath=0, $morehtmlright= '', $morecss= '', $limittoshow=0, $moretabssuffix= '')
Show tabs of a record.
print
Draft customers invoices.
dol_print_date($time, $format= '', $tzoutput= 'auto', $outputlangs= '', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
if(!empty($conf->facture->enabled)&&$user->rights->facture->lire) if((!empty($conf->fournisseur->enabled)&&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)||!empty($conf->supplier_invoice->enabled))&&$user->rights->fournisseur->facture->lire) if(!empty($conf->don->enabled)&&$user->rights->don->lire) if(!empty($conf->tax->enabled)&&$user->rights->tax->charges->lire) if(!empty($conf->facture->enabled)&&!empty($conf->commande->enabled)&&$user->rights->commande->lire &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) if(!empty($conf->facture->enabled)&&$user->rights->facture->lire) if((!empty($conf->fournisseur->enabled)&&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)||!empty($conf->supplier_invoice->enabled))&&$user->rights->fournisseur->facture->lire) $resql
Social contributions to pay.
dol_print_error($db= '', $error= '', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_print_email($email, $cid=0, $socid=0, $addlink=0, $max=64, $showinvalid=1, $withpicto=0)
Show EMail link formatted for HTML output.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
dol_banner_tab($object, $paramid, $morehtml= '', $shownav=1, $fieldid= 'rowid', $fieldref= 'ref', $morehtmlref= '', $moreparam= '', $nodbprefix=0, $morehtmlleft= '', $morehtmlstatus= '', $onlybanner=0, $morehtmlright= '')
Show tab footer of a card.
img_delete($titlealt= 'default', $other= 'class="pictodelete"', $morecss= '')
Show delete logo.
isValidEmail($address, $acceptsupervisorkey=0)
Return true if email syntax is ok.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin= '1', $morecss= '', $textfordropdown= '')
Show information for admin users or standard users.
Parent class of emailing target selectors modules.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $keepmoretags= '', $escapeonlyhtmltags=0)
Returns text escaped for inclusion in HTML alt or title tags, or into values of HTML input fields...