29require
'../../main.inc.php';
38require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formmailing.class.php';
39require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formcompany.class.php';
40require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formother.class.php';
41require_once DOL_DOCUMENT_ROOT.
'/core/lib/emailing.lib.php';
42require_once DOL_DOCUMENT_ROOT.
'/core/modules/mailings/advthirdparties.modules.php';
43require_once DOL_DOCUMENT_ROOT.
'/comm/mailing/class/advtargetemailing.class.php';
44require_once DOL_DOCUMENT_ROOT.
'/comm/mailing/class/html.formadvtargetemailing.class.php';
45require_once DOL_DOCUMENT_ROOT.
'/comm/mailing/class/mailing.class.php';
46require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
47require_once DOL_DOCUMENT_ROOT.
'/core/class/CMailFile.class.php';
48require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
51$langs->loadLangs(array(
'mails',
'admin',
'companies',
'categories'));
53$action =
GETPOST(
'action',
'aZ09');
54$toselect =
GETPOST(
'toselect',
'array:int');
58$sortfield =
GETPOST(
'sortfield',
'aZ09comma');
59$sortorder =
GETPOST(
'sortorder',
'aZ09comma');
61if (empty($page) || $page == -1) {
64$offset = $limit * $page;
76$search_nom =
GETPOST(
"search_nom");
77$search_prenom =
GETPOST(
"search_prenom");
78$search_email =
GETPOST(
"search_email");
82if (
GETPOST(
'button_removefilter_x',
'alpha')) {
87$array_query = array();
88'@phan-var-force array<string,int|string|string[]> $array_query';
95if ($template_id <= 0) {
96 $advTarget->fk_element =
$id;
97 $advTarget->type_element =
'mailing';
98 $result = $advTarget->fetch_by_mailing();
100 $result = $advTarget->fetch($template_id);
104 setEventMessages($advTarget->error, $advTarget->errors,
'errors');
106 if (!empty($advTarget->id)) {
107 $array_query = json_decode($advTarget->filtervalue,
true);
112$listofmethods = array();
114$listofmethods[
'mail'] =
'PHP mail function';
116$listofmethods[
'smtps'] =
'SMTP/SMTPS socket library';
117if (version_compare(phpversion(),
'7.0',
'>=')) {
118 $listofmethods[
'swiftmailer'] =
'Swift Mailer socket library';
122if (!$user->hasRight(
'mailing',
'lire') || (!
getDolGlobalString(
'EXTERNAL_USERS_ARE_AUTHORIZED') && $user->socid > 0)) {
125if (empty($action) && empty(
$object->id)) {
129$permissiontoread = $user->hasRight(
'mailing',
'lire');
130$permissiontoadd = $user->hasRight(
'mailing',
'creer');
131$permissiontovalidatesend = $user->hasRight(
'mailing',
'valider');
132$permissiontodelete = $user->hasRight(
'mailing',
'supprimer');
139if ($action ==
'loadfilter' && $permissiontoread) {
140 if (!empty($template_id)) {
141 $result = $advTarget->fetch($template_id);
143 setEventMessages($advTarget->error, $advTarget->errors,
'errors');
145 if (!empty($advTarget->id)) {
146 $array_query = json_decode($advTarget->filtervalue,
true);
152if ($action ==
'add' && $permissiontoadd) {
153 $user_contact_query =
false;
155 $array_query = array();
159 foreach ($_POST as $key => $value) {
161 if (preg_match(
"/^options_.*(?<!_cnct)$/", $key)) {
163 if (preg_match(
"/st_dt/", $key)) {
165 $dtarr = explode(
'_', $key);
166 if (!array_key_exists(
'options_'.$dtarr[1].
'_st_dt', $array_query)) {
167 $array_query[
'options_'.$dtarr[1].
'_st_dt'] =
dol_mktime(0, 0, 0,
GETPOSTINT(
'options_'.$dtarr[1].
'_st_dtmonth'),
GETPOSTINT(
'options_'.$dtarr[1].
'_st_dtday'),
GETPOSTINT(
'options_'.$dtarr[1].
'_st_dtyear'));
169 } elseif (preg_match(
"/end_dt/", $key)) {
172 $dtarr = explode(
'_', $key);
173 if (!array_key_exists(
'options_'.$dtarr[1].
'_end_dt', $array_query)) {
174 $array_query[
'options_'.$dtarr[1].
'_end_dt'] =
dol_mktime(0, 0, 0,
GETPOSTINT(
'options_'.$dtarr[1].
'_end_dtmonth'),
GETPOSTINT(
'options_'.$dtarr[1].
'_end_dtday'),
GETPOSTINT(
'options_'.$dtarr[1].
'_end_dtyear'));
177 $array_query[$key] =
GETPOST($key);
180 if (preg_match(
"/^options_.*_cnct/", $key)) {
181 $user_contact_query =
true;
183 if (preg_match(
"/st_dt/", $key)) {
185 $dtarr = explode(
'_', $key);
186 if (!array_key_exists(
'options_'.$dtarr[1].
'_st_dt_cnct', $array_query)) {
187 $array_query[
'options_'.$dtarr[1].
'_st_dt_cnct'] =
dol_mktime(0, 0, 0,
GETPOSTINT(
'options_'.$dtarr[1].
'_st_dtmonth_cnct'),
GETPOSTINT(
'options_'.$dtarr[1].
'_st_dtday_cnct'),
GETPOSTINT(
'options_'.$dtarr[1].
'_st_dtyear_cnct'));
189 } elseif (preg_match(
"/end_dt/", $key)) {
192 $dtarr = explode(
'_', $key);
193 if (!array_key_exists(
'options_'.$dtarr[1].
'_end_dt_cnct', $array_query)) {
194 $array_query[
'options_'.$dtarr[1].
'_end_dt_cnct'] =
dol_mktime(0, 0, 0,
GETPOSTINT(
'options_'.$dtarr[1].
'_end_dtmonth_cnct'),
GETPOSTINT(
'options_'.$dtarr[1].
'_end_dtday_cnct'),
GETPOSTINT(
'options_'.$dtarr[1].
'_end_dtyear_cnct'));
197 $array_query[$key] =
GETPOST($key);
201 if (preg_match(
"/^cust_/", $key)) {
202 $array_query[$key] =
GETPOST($key);
205 if (preg_match(
"/^contact_/", $key)) {
208 $specials_date_key = array(
209 'contact_update_st_dt',
210 'contact_update_end_dt',
211 'contact_create_st_dt',
212 'contact_create_end_dt'
214 foreach ($specials_date_key as $date_key) {
215 if ($key == $date_key) {
220 $array_query[$key] =
'';
225 if (!empty($array_query[$key])) {
226 $user_contact_query =
true;
230 if ($array_query[
'type_of_target'] == 2 || $array_query[
'type_of_target'] == 4) {
231 $user_contact_query =
true;
234 if (preg_match(
"/^type_of_target/", $key)) {
240 $result = $advTarget->query_thirdparty($array_query);
242 setEventMessages($advTarget->error, $advTarget->errors,
'errors');
248 if ($user_contact_query && ($array_query[
'type_of_target'] == 1 || $array_query[
'type_of_target'] == 2 || $array_query[
'type_of_target'] == 4)) {
249 $result = $advTarget->query_contact($array_query, 1);
251 setEventMessages($advTarget->error, $advTarget->errors,
'errors');
254 if (count($advTarget->contact_lines) == 0) {
255 $advTarget->contact_lines = array(
260 $advTarget->contact_lines = array();
263 $mailingadvthirdparties =
null;
264 if ((count($advTarget->thirdparty_lines) > 0) || (count($advTarget->contact_lines) > 0)) {
267 $result = $mailingadvthirdparties->add_to_target_spec($id, $advTarget->thirdparty_lines, $array_query[
'type_of_target'], $advTarget->contact_lines);
273 $get_param_template_id =
'';
274 if (!empty($template_id)) {
275 $get_param_template_id =
'&template_id='.$template_id;
277 setEventMessages($langs->trans(
"XTargetsAdded", $result),
null,
'mesgs');
278 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$id.$get_param_template_id);
282 setEventMessages($langs->trans(
"WarningNoEMailsAdded"),
null,
'warnings');
284 if ($result < 0 && is_object($mailingadvthirdparties)) {
285 setEventMessages($mailingadvthirdparties->error, $mailingadvthirdparties->errors,
'errors');
289if ($action ==
'clear' && $permissiontoadd) {
291 $mailingtargets->clear_target($id);
293 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
297if (($action ==
'savefilter' || $action ==
'createfilter') && $permissiontoadd) {
298 $template_name =
GETPOST(
'template_name');
301 if ($action ==
'createfilter' && empty($template_name) && $permissiontoadd) {
302 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'AdvTgtOrCreateNewFilter')),
null,
'errors');
307 $array_query = array();
310 foreach ($_POST as $key => $value) {
311 if (preg_match(
"/^options_.*(?<!_cnct)$/", $key)) {
313 if (preg_match(
"/st_dt/", $key)) {
315 $dtarr = explode(
'_', $key);
316 if (!array_key_exists(
'options_'.$dtarr[1].
'_st_dt', $array_query)) {
317 $array_query[
'options_'.$dtarr[1].
'_st_dt'] =
dol_mktime(0, 0, 0,
GETPOSTINT(
'options_'.$dtarr[1].
'_st_dtmonth'),
GETPOSTINT(
'options_'.$dtarr[1].
'_st_dtday'),
GETPOSTINT(
'options_'.$dtarr[1].
'_st_dtyear'));
319 } elseif (preg_match(
"/end_dt/", $key)) {
322 $dtarr = explode(
'_', $key);
323 if (!array_key_exists(
'options_'.$dtarr[1].
'_end_dt', $array_query)) {
324 $array_query[
'options_'.$dtarr[1].
'_end_dt'] =
dol_mktime(0, 0, 0,
GETPOSTINT(
'options_'.$dtarr[1].
'_end_dtmonth'),
GETPOSTINT(
'options_'.$dtarr[1].
'_end_dtday'),
GETPOSTINT(
'options_'.$dtarr[1].
'_end_dtyear'));
329 $array_query[$key] =
GETPOST($key);
332 if (preg_match(
"/^options_.*_cnct/", $key)) {
334 if (preg_match(
"/st_dt/", $key)) {
336 $dtarr = explode(
'_', $key);
337 if (!array_key_exists(
'options_'.$dtarr[1].
'_st_dt_cnct', $array_query)) {
338 $array_query[
'options_'.$dtarr[1].
'_st_dt_cnct'] =
dol_mktime(0, 0, 0,
GETPOSTINT(
'options_'.$dtarr[1].
'_st_dtmonth_cnct'),
GETPOSTINT(
'options_'.$dtarr[1].
'_st_dtday_cnct'),
GETPOSTINT(
'options_'.$dtarr[1].
'_st_dtyear_cnct'));
340 } elseif (preg_match(
"/end_dt/", $key)) {
343 $dtarr = explode(
'_', $key);
344 if (!array_key_exists(
'options_'.$dtarr[1].
'_end_dt_cnct', $array_query)) {
345 $array_query[
'options_'.$dtarr[1].
'_end_dt_cnct'] =
dol_mktime(0, 0, 0,
GETPOSTINT(
'options_'.$dtarr[1].
'_end_dtmonth_cnct'),
GETPOSTINT(
'options_'.$dtarr[1].
'_end_dtday_cnct'),
GETPOSTINT(
'options_'.$dtarr[1].
'_end_dtyear_cnct'));
350 $array_query[$key] =
GETPOST($key);
354 if (preg_match(
"/^cust_/", $key)) {
355 $array_query[$key] =
GETPOST($key);
358 if (preg_match(
"/^contact_/", $key)) {
359 $array_query[$key] =
GETPOST($key);
361 $specials_date_key = array(
362 'contact_update_st_dt',
363 'contact_update_end_dt',
364 'contact_create_st_dt',
365 'contact_create_end_dt'
367 foreach ($specials_date_key as $date_key) {
368 if ($key == $date_key) {
373 $array_query[$key] =
'';
379 if (preg_match(
"/^type_of_target/", $key)) {
380 $array_query[$key] =
GETPOST($key);
383 $advTarget->filtervalue = json_encode($array_query);
385 if ($action ==
'createfilter') {
386 $advTarget->name = $template_name;
387 $result = $advTarget->create($user);
389 setEventMessages($advTarget->error, $advTarget->errors,
'errors');
391 } elseif ($action ==
'savefilter') {
392 $result = $advTarget->update($user);
394 setEventMessages($advTarget->error, $advTarget->errors,
'errors');
397 $template_id = $advTarget->id;
401if ($action ==
'deletefilter' && $permissiontoadd) {
402 $result = $advTarget->delete($user);
404 setEventMessages($advTarget->error, $advTarget->errors,
'errors');
406 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
410if ($action ==
'delete' && $permissiontoadd) {
412 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"mailing_cibles WHERE rowid = ".((int) $rowid);
413 $sql .=
" AND fk_mailing = ".((int)
$object->id);
414 $resql = $db->query($sql);
418 $mailingtargets->update_nb($id);
420 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
423 header(
"Location: liste.php");
427 dol_print_error($db);
431if (
GETPOST(
"button_removefilter")) {
442$form =
new Form($db);
448$help_url =
'EN:Module_EMailing|FR:Module_Mailing|ES:Módulo_Mailing';
449llxHeader(
'', $langs->trans(
"MailAdvTargetRecipients"), $help_url);
451$arrayofselected = is_array($toselect) ? $toselect : array();
461 $linkback =
'<a href="'.DOL_URL_ROOT.
'/comm/mailing/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
463 $morehtmlref =
'<div class="refidno">';
465 $morehtmlref .= $form->editfieldkey(
"",
'title',
$object->title, $object, 0,
'string',
'', 0, 1);
466 $morehtmlref .= $form->editfieldval(
"",
'title',
$object->title, $object, 0,
'string',
'',
null,
null,
'', 1);
467 $morehtmlref .=
'</div>';
469 $morehtmlstatus =
'';
471 if (
$object->status == $object::STATUS_SENTPARTIALY ||
$object->status == $object::STATUS_SENTCOMPLETELY) {
472 $nbtry =
$object->countNbOfTargets(
'alreadysent');
473 $nbko =
$object->countNbOfTargets(
'alreadysentko');
474 $nbok = ($nbtry - $nbko);
476 $morehtmlstatus .=
' ('.$nbtry.
'/'.
$object->nbemail;
478 $morehtmlstatus .=
' - '.$nbko.
' '.$langs->trans(
"Error");
480 $morehtmlstatus .=
') ';
483 dol_banner_tab($object,
'id', $linkback, 1,
'rowid',
'ref', $morehtmlref,
'', 0,
'', $morehtmlstatus);
485 print
'<div class="fichecenter">';
486 print
'<div class="fichehalfleft">';
487 print
'<div class="underbanner clearboth"></div>';
489 print
'<table class="border centpercent tableforfield">'.
"\n";
492 print
'<tr><td class="titlefield">';
493 print $langs->trans(
"MailFrom").
'</td><td>';
495 foreach ($emailarray as $email => $name) {
496 if ($name && $name != $email) {
500 $langs->load(
"errors");
501 print img_warning($langs->trans(
"ErrorBadEMail", $email));
511 if (
$object->messtype !=
'sms') {
512 print
'<tr><td>'.$langs->trans(
"MailErrorsTo").
'</td><td>';
514 foreach ($emailarray as $email => $name) {
515 if ($name != $email) {
519 $langs->load(
"errors");
520 print img_warning($langs->trans(
"ErrorBadEMail", $email));
522 $langs->load(
"errors");
523 print img_warning($langs->trans(
"ErrorBadMXDomain", $email));
533 if (
$object->messtype !=
'sms') {
535 print $form->editfieldkey(
"MailReply",
'email_replyto',
$object->email_replyto, $object, (
int) ($user->hasRight(
'mailing',
'creer') &&
$object->status < $object::STATUS_SENTCOMPLETELY),
'string');
537 print $form->editfieldval(
"MailReply",
'email_replyto',
$object->email_replyto, $object, $user->hasRight(
'mailing',
'creer') &&
$object->status < $object::STATUS_SENTCOMPLETELY,
'string');
539 if ($action !=
'editemail_replyto') {
541 $langs->load(
"errors");
542 print img_warning($langs->trans(
"ErrorBadEMail", $email));
544 $langs->load(
"errors");
545 print img_warning($langs->trans(
"ErrorBadMXDomain", $email));
555 print
'<div class="fichehalfright">';
556 print
'<div class="underbanner clearboth"></div>';
558 print
'<table class="border centpercent tableforfield">';
562 print $langs->trans(
"TotalNbOfDistinctRecipients");
565 if (is_numeric($nbemail)) {
569 $htmltooltip .= $langs->trans(
'LimitSendingEmailing',
getDolGlobalString(
'MAILING_LIMIT_SENDBYWEB'));
571 $htmltooltip .= $langs->trans(
'SendingFromWebInterfaceIsNotAllowed');
574 if (empty($nbemail)) {
575 $nbemail .=
' '.img_warning($langs->trans(
'ToAddRecipientsChooseHere'));
578 print $form->textwithpicto($nbemail, $htmltooltip, 1,
'info');
586 print $langs->trans(
"MAIN_MAIL_SENDMODE");
588 if (
$object->messtype !=
'sms') {
594 $text = $listofmethods[
'mail'];
599 print
' <span class="opacitymedium">('.getDolGlobalString(
'MAIN_MAIL_SMTP_SERVER_EMAILING',
getDolGlobalString(
'MAIN_MAIL_SMTP_SERVER')).
')</span>';
602 print
' <span class="opacitymedium">('.getDolGlobalString(
'MAIN_MAIL_SMTP_SERVER').
')</span>';
606 print
' <span class="opacitymedium">('.getDolGlobalString(
'MAIN_MAIL_SMTP_SERVER').
')</span>';
611 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
617 print
'<div class="clearboth"></div>';
623 if (
$object->status < 2 && $user->hasRight(
'mailing',
'creer')) {
631 @phan-var-force FormAdvTargetEmailing $formadvtargetemaling
632 @phan-var-force AdvanceTargetingMailing $advTarget
633 @phan-var-force array<string,string|int|string[]> $array_query
640 $array_query += array(
641 'type_of_target' =>
'',
646 'cust_state' => array(),
647 'cust_country' => array(),
648 'cust_status' => array(),
649 'cust_mothercompany' =>
'',
650 'cust_typecust' => array(),
651 'cust_prospect_status' => array(),
652 'cust_comm_status' => array(),
653 'cust_typeent' => array(),
654 'cust_effectif_id' => array(),
655 'cust_saleman' => array(),
656 'cust_language' => array(),
657 'contact_status' => array(),
658 'contact_civility' =>
'',
659 'contact_lastname' =>
'',
660 'contact_firstname' =>
'',
661 'contact_country' => array(),
662 'contact_no_email' =>
'',
663 'contact_create_st_dt' =>
'',
664 'contact_create_end_dt' =>
'',
665 'contact_update_st_dt' =>
'',
666 'contact_update_end_dt' =>
'',
670 $(document).ready(function() {
673 $(":button[name=addcontact]").click(function() {
674 $(":hidden[name=action]").val("add");
675 $("#find_customer").submit();
678 $(":button[name=loadfilter]").click(function() {
679 $(":hidden[name=action]").val("loadfilter");
680 $("#find_customer").submit();
683 $(":button[name=deletefilter]").click(function() {
684 $(":hidden[name=action]").val("deletefilter");
685 $("#find_customer").submit();
688 $(":button[name=savefilter]").click(function() {
689 $(":hidden[name=action]").val("savefilter");
690 $("#find_customer").submit();
693 $(":button[name=createfilter]").click(function() {
694 $(":hidden[name=action]").val("createfilter");
695 $("#find_customer").submit();
701 print
'<div class="info">';
702 print $langs->trans(
"AdvTgtTitle").
'...';
705 print
'<form name="find_customer" id="find_customer" action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$id.
'" method="POST">'.
"\n";
706 print
'<input type="hidden" name="token" value="'.newToken().
'">'.
"\n";
707 print
'<input type="hidden" name="action" value="">'.
"\n";
708 print
'<table class="border centpercent">'.
"\n";
710 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
'AdvTgtNameTemplate').
'</td><td class="valignmiddle">';
711 if (!empty($template_id)) {
712 $default_template = $template_id;
714 $default_template = $advTarget->id;
716 print $formadvtargetemaling->selectAdvtargetemailingTemplate(
'template_id', $default_template, $langs->trans(
"SelectAPredefinedFilter"), $advTarget->type_element,
'minwidth100 valignmiddle');
717 print
'<input type="button" name="loadfilter" id="loadfilter" value="'.$langs->trans(
'AdvTgtLoadFilter').
'" class="button smallpaddingimp"/>';
718 print
'<input type="button" name="deletefilter" id="deletefilter" value="'.$langs->trans(
'AdvTgtDeleteFilter').
'" class="button smallpaddingimp"/>';
719 print
'<input type="button" name="savefilter" id="savefilter" value="'.$langs->trans(
'AdvTgtSaveFilter').
'" class="button smallpaddingimp"/>';
720 print
'</td><td>'.
"\n";
721 print
'</td></tr>'.
"\n";
723 print
'<tr><td>'.$langs->trans(
'AdvTgtOrCreateNewFilter').
'</td><td>';
724 print
'<input type="text" name="template_name" id="template_name" value=""/>';
725 print
'<input type="button" name="createfilter" id="createfilter" value="'.$langs->trans(
'AdvTgtCreateFilter').
'" class="button smallpaddingimp"/>';
726 print
'</td><td>'.
"\n";
727 print
'</td></tr>'.
"\n";
729 print
'<tr><td colspan="3"><hr></td></tr>';
732 print
'<td colspan="3" class="center">'.
"\n";
733 print
'<input type="button" name="addcontact" id="addcontact" value="'.$langs->trans(
'AdvTgtAddContact').
'" class="button"/>'.
"\n";
737 print
'<tr><td>'.$langs->trans(
'AdvTgtTypeOfIncude').
'</td><td>';
738 print $form->selectarray(
'type_of_target', $advTarget->select_target_type, $array_query[
'type_of_target']);
739 print
'</td><td>'.
"\n";
740 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtTypeOfIncudeHelp"), 1,
'help');
741 print
'</td></tr>'.
"\n";
744 print
'<tr><td>'.$langs->trans(
'ThirdPartyName');
745 if (!empty($array_query[
'cust_name'])) {
746 print img_picto($langs->trans(
'AdvTgtUse'),
'tick',
'class="marginleftonly"');
748 print
'</td><td><input type="text" name="cust_name" value="'.$array_query[
'cust_name'].
'"/></td><td>'.
"\n";
749 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtSearchTextHelp"), 1,
'help');
750 print
'</td></tr>'.
"\n";
753 print
'<tr><td>'.$langs->trans(
'CustomerCode');
754 if (!empty($array_query[
'cust_code'])) {
755 print img_picto($langs->trans(
'AdvTgtUse'),
'tick');
756 $cust_code_str = (string) $array_query[
'cust_code'];
758 $cust_code_str =
null;
760 print
'</td><td><input type="text" name="cust_code"'.($cust_code_str !=
null ?
' value="'.$cust_code_str :
'').
'"/></td><td>'.
"\n";
761 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtSearchTextHelp"), 1,
'help');
762 print
'</td></tr>'.
"\n";
765 print
'<tr><td>'.$langs->trans(
'Address');
766 if (!empty($array_query[
'cust_adress'])) {
767 print img_picto($langs->trans(
'AdvTgtUse'),
'tick');
769 print
'</td><td><input type="text" name="cust_adress" value="'.$array_query[
'cust_adress'].
'"/></td><td>'.
"\n";
770 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtSearchTextHelp"), 1,
'help');
771 print
'</td></tr>'.
"\n";
774 print
'<tr><td>'.$langs->trans(
'Zip');
775 if (!empty($array_query[
'cust_zip'])) {
776 print img_picto($langs->trans(
'AdvTgtUse'),
'tick');
778 print
'</td><td><input type="text" name="cust_zip" value="'.$array_query[
'cust_zip'].
'"/></td><td>'.
"\n";
779 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtSearchTextHelp"), 1,
'help');
780 print
'</td></tr>'.
"\n";
783 print
'<tr><td>'.$langs->trans(
'Town');
784 if (!empty($array_query[
'cust_city'])) {
785 print img_picto($langs->trans(
'AdvTgtUse'),
'tick');
787 print
'</td><td><input type="text" name="cust_city" value="'.$array_query[
'cust_city'].
'"/></td><td>'.
"\n";
788 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtSearchTextHelp"), 1,
'help');
789 print
'</td></tr>'.
"\n";
792 print
'<tr><td>'.$langs->trans(
'State');
793 if (!empty($array_query[
'cust_state'])) {
794 print img_picto($langs->trans(
'AdvTgtUse'),
'tick');
796 print
'</td><td>'.
"\n";
797 print $formadvtargetemaling->multiselectState(
'cust_state', $array_query[
'cust_state']);
798 print
'</td><td>'.
"\n";
799 print
'</td></tr>'.
"\n";
802 print
'<tr><td>'.$langs->trans(
"Country");
803 if (!empty($array_query[
'cust_country'])) {
804 print img_picto($langs->trans(
'AdvTgtUse'),
'tick');
806 print
'</td><td>'.
"\n";
807 print $formadvtargetemaling->multiselectCountry(
'cust_country', $array_query[
'cust_country']);
808 print
'</td><td>'.
"\n";
809 print
'</td></tr>'.
"\n";
812 print
'<tr><td>'.$langs->trans(
'Status').
' '.$langs->trans(
'ThirdParty');
813 if (!empty($array_query[
'cust_status'])) {
814 print img_picto($langs->trans(
'AdvTgtUse'),
'tick');
817 print $formadvtargetemaling->advMultiselectarray(
820 '0' => $langs->trans(
'ActivityCeased'),
821 '1' => $langs->trans(
'InActivity')
823 $array_query[
'cust_status']
825 print
'</td><td>'.
"\n";
826 print
'</td></tr>'.
"\n";
829 print
'<tr><td>'.$langs->trans(
"ParentCompany");
830 if (!empty($array_query[
'cust_mothercompany'])) {
831 print img_picto($langs->trans(
'AdvTgtUse'),
'tick');
833 print
'</td><td>'.
"\n";
834 print
'<input type="text" name="cust_mothercompany" value="'.$array_query[
'cust_mothercompany'].
'"/>';
835 print
'</td><td>'.
"\n";
836 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtSearchTextHelp"), 1,
'help');
837 print
'</td></tr>'.
"\n";
840 $selected = $array_query[
'cust_typecust'];
841 print
'<tr><td>'.$langs->trans(
'ProspectCustomer').
' '.$langs->trans(
'ThirdParty');
842 if (!empty($array_query[
'cust_typecust'])) {
843 print img_picto($langs->trans(
'AdvTgtUse'),
'tick');
846 $options_array = array(
847 2 => $langs->trans(
'Prospect'),
848 3 => $langs->trans(
'ProspectCustomer'),
849 1 => $langs->trans(
'Customer'),
850 0 => $langs->trans(
'NorProspectNorCustomer')
852 print $formadvtargetemaling->advMultiselectarray(
'cust_typecust', $options_array, $selected);
853 print
'</td><td>'.
"\n";
854 print
'</td></tr>'.
"\n";
857 print
'<tr><td>'.$langs->trans(
'ProspectLevel');
858 if (!empty($array_query[
'cust_prospect_status'])) {
859 print img_picto($langs->trans(
'AdvTgtUse'),
'tick');
862 print $formadvtargetemaling->multiselectProspectionStatus($array_query[
'cust_prospect_status'],
'cust_prospect_status');
863 print
'</td><td>'.
"\n";
864 print
'</td></tr>'.
"\n";
867 print
'<tr><td>'.$langs->trans(
'StatusProsp');
868 if (!empty($array_query[
'cust_comm_status'])) {
869 print img_picto($langs->trans(
'AdvTgtUse'),
'tick');
872 print $formadvtargetemaling->advMultiselectarray(
'cust_comm_status', $advTarget->type_statuscommprospect, $array_query[
'cust_comm_status']);
873 print
'</td><td>'.
"\n";
874 print
'</td></tr>'.
"\n";
877 print
'<tr><td>'.$langs->trans(
"ThirdPartyType");
878 if (!empty($array_query[
'cust_typeent'])) {
879 print img_picto($langs->trans(
'AdvTgtUse'),
'tick');
881 print
'</td><td>'.
"\n";
882 print $formadvtargetemaling->advMultiselectarray(
'cust_typeent', $formcompany->typent_array(0,
"(id:<>:0)"), $array_query[
'cust_typeent']);
883 print
'</td><td>'.
"\n";
884 print
'</td></tr>'.
"\n";
887 print
'<td>'.$langs->trans(
"Staff");
888 if (!empty($array_query[
'cust_effectif_id'])) {
889 print img_picto($langs->trans(
'AdvTgtUse'),
'tick');
892 print $formadvtargetemaling->advMultiselectarray(
"cust_effectif_id", $formcompany->effectif_array(0,
"(id:<>:0)"), $array_query[
'cust_effectif_id']);
893 print
'</td><td>'.
"\n";
894 print
'</td></tr>'.
"\n";
897 print
'<tr><td>'.$langs->trans(
"SalesRepresentatives");
898 if (!empty($array_query[
'cust_saleman'])) {
899 print img_picto($langs->trans(
'AdvTgtUse'),
'tick');
901 print
'</td><td>'.
"\n";
902 print $formadvtargetemaling->multiselectselectSalesRepresentatives(
'cust_saleman', $array_query[
'cust_saleman'], $user);
903 print
'</td><td>'.
"\n";
904 print
'</td></tr>'.
"\n";
908 print
'<tr><td>'.$langs->trans(
"DefaultLang");
909 if (!empty($array_query[
'cust_language'])) {
910 print img_picto($langs->trans(
'AdvTgtUse'),
'tick');
912 print
'</td><td>'.
"\n";
913 print $formadvtargetemaling->multiselectselectLanguage(
'cust_language', $array_query[
'cust_language']);
914 print
'</td><td>'.
"\n";
915 print
'</td></tr>'.
"\n";
918 if (
isModEnabled(
'category') && $user->hasRight(
'categorie',
'lire')) {
920 print
'<tr><td>'.$langs->trans(
"CustomersCategoryShort");
921 print
'</td><td>'.
"\n";
922 print $form->selectCategories(Categorie::TYPE_CUSTOMER,
'cust_categ', $object);
923 print
'</td><td>'.
"\n";
924 print
'</td></tr>'.
"\n";
930 $elementtype = $socstatic->table_element;
932 $extrafields->fetch_name_optionals_label($elementtype);
933 $extrafieldinfo = $extrafields->attributes[$elementtype] ?? [];
934 foreach ($extrafieldinfo[
'label'] as $key => $val) {
935 if ($key !=
'ts_nameextra' && $key !=
'ts_payeur') {
936 if (isset($extrafieldinfo[
'langfile'][$key])) {
937 $langs->load($extrafieldinfo[
'langfile'][$key]);
939 if (!isset($array_query[
'options_'.$key])) {
940 $array_query[
'options_'.$key] =
'';
942 print
'<tr><td>'.$langs->trans($extrafieldinfo[
'label'][$key]);
943 if (!empty($array_query[
'options_'.$key]) || (is_array($array_query[
'options_'.$key]) && count($array_query[
'options_'.$key]) > 0)) {
944 print img_picto($langs->trans(
'AdvTgtUse'),
'tick');
947 if (($extrafieldinfo[
'type'][$key] ==
'varchar') || ($extrafieldinfo[
'type'][$key] ==
'text')) {
948 print
'<input type="text" name="options_'.$key.
'"/></td><td>'.
"\n";
949 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtSearchTextHelp"), 1,
'help');
950 } elseif (($extrafieldinfo[
'type'][$key] ==
'int') || ($extrafieldinfo[
'type'][$key] ==
'double')) {
951 print $langs->trans(
"AdvTgtMinVal").
'<input type="text" name="options'.$key.
'_min"/>';
952 print $langs->trans(
"AdvTgtMaxVal").
'<input type="text" name="options'.$key.
'_max"/>';
953 print
'</td><td>'.
"\n";
954 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtSearchIntHelp"), 1,
'help');
955 } elseif (($extrafieldinfo[
'type'][$key] ==
'date') || ($extrafieldinfo[
'type'][$key] ==
'datetime')) {
956 print
'<table class="nobordernopadding"><tr>';
957 print
'<td>'.$langs->trans(
"AdvTgtStartDt").
'</td><td>';
958 print $form->selectDate(
'',
'options_'.$key.
'_st_dt', 0, 0, 1);
959 print
'</td><td>'.$langs->trans(
"AdvTgtEndDt").
'</td><td>';
960 print $form->selectDate(
'',
'options_'.$key.
'_end_dt', 0, 0, 1);
961 print
'</td></tr></table>';
963 print
'</td><td>'.
"\n";
964 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtSearchDtHelp"), 1,
'help');
965 } elseif (($extrafieldinfo[
'type'][$key] ==
'boolean')) {
966 print $form->selectarray(
970 '1' => $langs->trans(
'Yes'),
971 '0' => $langs->trans(
'No')
973 $array_query[
'options_'.$key]
975 print
'</td><td>'.
"\n";
976 } elseif ($extrafieldinfo[
'type'][$key] ==
'select') {
977 print $formadvtargetemaling->advMultiselectarray(
'options_'.$key, $extrafieldinfo[
'param'][$key][
'options'], $array_query[
'options_'.$key]);
978 print
'</td><td>'.
"\n";
979 } elseif ($extrafieldinfo[
'type'][$key] ==
'sellist') {
980 print $formadvtargetemaling->advMultiselectarraySelllist(
'options_'.$key, $extrafieldinfo[
'param'][$key][
'options'], $array_query[
'options_'.$key]);
981 print
'</td><td>'.
"\n";
983 print
'<table class="nobordernopadding"><tr>';
984 print
'<td></td><td>';
985 if (is_array($array_query[
'options_'.$key])) {
986 print $extrafields->showInputField($key, implode(
',', $array_query[
'options_'.$key]),
'',
'',
'',
'', 0,
'societe', 1);
988 print $extrafields->showInputField($key, $array_query[
'options_'.$key],
'',
'',
'',
'', 0,
'societe', 1);
990 print
'</td></tr></table>';
992 print
'</td><td>'.
"\n";
994 print
'</td></tr>'.
"\n";
999 $action_search =
'query';
1001 $parameters = array(
'advtarget' => 1);
1002 if (!empty($advTarget->id)) {
1003 $parameters = array(
'array_query' => $advTarget->filtervalue);
1006 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $std_soc, $action_search);
1007 print $hookmanager->resPrint;
1011 print
'<tr><td>'.$langs->trans(
'Status').
' '.$langs->trans(
'Contact');
1012 if (!empty($array_query[
'contact_status'])) {
1013 print img_picto($langs->trans(
'AdvTgtUse'),
'tick');
1016 print $formadvtargetemaling->advMultiselectarray(
1019 '0' => $langs->trans(
'ActivityCeased'),
1020 '1' => $langs->trans(
'InActivity')
1022 $array_query[
'contact_status']
1024 print
'</td><td>'.
"\n";
1025 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtContactHelp"), 1,
'help');
1026 print
'</td></tr>'.
"\n";
1029 print
'<tr><td>'.$langs->trans(
"UserTitle");
1030 if (!empty($array_query[
'contact_civility'])) {
1031 print img_picto($langs->trans(
'AdvTgtUse'),
'tick');
1034 print $formadvtargetemaling->multiselectCivility(
'contact_civility', $array_query[
'contact_civility']);
1038 print
'<tr><td>'.$langs->trans(
'Contact').
' '.$langs->trans(
'Lastname');
1039 if (!empty($array_query[
'contact_lastname'])) {
1040 print img_picto($langs->trans(
'AdvTgtUse'),
'tick');
1042 print
'</td><td><input type="text" name="contact_lastname" value="'.$array_query[
'contact_lastname'].
'"/></td><td>'.
"\n";
1043 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtSearchTextHelp"), 1,
'help');
1044 print
'</td></tr>'.
"\n";
1045 print
'<tr><td>'.$langs->trans(
'Contact').
' '.$langs->trans(
'Firstname');
1046 if (!empty($array_query[
'contact_firstname'])) {
1047 print img_picto($langs->trans(
'AdvTgtUse'),
'tick');
1049 print
'</td><td><input type="text" name="contact_firstname" value="'.$array_query[
'contact_firstname'].
'"/></td><td>'.
"\n";
1050 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtSearchTextHelp"), 1,
'help');
1051 print
'</td></tr>'.
"\n";
1054 print
'<tr><td>'.$langs->trans(
'Contact').
' '.$langs->trans(
"Country");
1055 if (!empty($array_query[
'contact_country'])) {
1056 print img_picto($langs->trans(
'AdvTgtUse'),
'tick');
1058 print
'</td><td>'.
"\n";
1059 print $formadvtargetemaling->multiselectCountry(
'contact_country', $array_query[
'contact_country']);
1060 print
'</td><td>'.
"\n";
1061 print
'</td></tr>'.
"\n";
1064 print
'<tr><td>'.$langs->trans(
'Contact').
' '.$langs->trans(
"No_Email");
1065 if (!empty($array_query[
'contact_no_email'])) {
1066 print img_picto($langs->trans(
'AdvTgtUse'),
'tick');
1068 print
'</td><td>'.
"\n";
1069 print $form->selectarray(
1073 '1' => $langs->trans(
'Yes'),
1074 '0' => $langs->trans(
'No')
1076 $array_query[
'contact_no_email']
1078 print
'</td><td>'.
"\n";
1079 print
'</td></tr>'.
"\n";
1082 print
'<tr><td>'.$langs->trans(
'Contact').
' '.$langs->trans(
"DateCreation");
1083 if (!empty($array_query[
'contact_create_st_dt'])) {
1084 print img_picto($langs->trans(
'AdvTgtUse'),
'tick');
1086 print
'</td><td>'.
"\n";
1087 print
'<table class="nobordernopadding"><tr>';
1088 print
'<td>'.$langs->trans(
"AdvTgtStartDt").
'</td><td>';
1089 print $form->selectDate($array_query[
'contact_create_st_dt'],
'contact_create_st_dt', 0, 0, 1,
'find_customer', 1, 1);
1090 print
'</td><td>'.$langs->trans(
"AdvTgtEndDt").
'</td><td>';
1091 print $form->selectDate($array_query[
'contact_create_end_dt'],
'contact_create_end_dt', 0, 0, 1,
'find_customer', 1, 1);
1092 print
'</td></tr></table>';
1093 print
'</td><td>'.
"\n";
1094 print
'</td></tr>'.
"\n";
1097 print
'<tr><td>'.$langs->trans(
'Contact').
' '.$langs->trans(
"DateLastModification");
1098 if (!empty($array_query[
'contact_update_st_dt'])) {
1099 print img_picto($langs->trans(
'AdvTgtUse'),
'tick');
1101 print
'</td><td>'.
"\n";
1102 print
'<table class="nobordernopadding"><tr>';
1103 print
'<td>'.$langs->trans(
"AdvTgtStartDt").
'</td><td>';
1104 print $form->selectDate($array_query[
'contact_update_st_dt'],
'contact_update_st_dt', 0, 0, 1,
'find_customer', 1, 1);
1105 print
'</td><td>'.$langs->trans(
"AdvTgtEndDt").
'</td><td>';
1106 print $form->selectDate($array_query[
'contact_update_end_dt'],
'contact_update_end_dt', 0, 0, 1,
'find_customer', 1, 1);
1107 print
'</td></tr></table>';
1108 print
'</td><td>'.
"\n";
1109 print
'</td></tr>'.
"\n";
1111 if (
isModEnabled(
'category') && $user->hasRight(
'categorie',
'lire')) {
1113 print
'<tr><td>'.$langs->trans(
"ContactCategoriesShort");
1114 print
'</td><td>'.
"\n";
1115 print $form->selectCategories(Categorie::TYPE_CONTACT,
'contact_categ', $object);
1116 print
'</td><td>'.
"\n";
1117 print
'</td></tr>'.
"\n";
1122 $contactstatic =
new Contact($db);
1123 $elementtype = $contactstatic->table_element;
1126 $extrafields->fetch_name_optionals_label($elementtype);
1127 $extrafieldinfo = $extrafields->attributes[$elementtype] ?? [];
1128 if (!empty($extrafieldinfo[
'type'])) {
1129 foreach ($extrafieldinfo[
'type'] as $key => &$value) {
1130 if ($value ==
'radio') {
1135 if (!empty($extrafieldinfo[
'label'])) {
1136 foreach ($extrafieldinfo[
'label'] as $key => $val) {
1137 if (!isset($array_query[
'options_'.$key.
'_cnct'])) {
1138 $array_query[
'options_'.$key.
'_cnct'] =
'';
1140 print
'<tr><td>'.$extrafieldinfo[
'label'][$key];
1141 if ($array_query[
'options_'.$key.
'_cnct'] !=
'' || (is_array($array_query[
'options_'.$key.
'_cnct']) && count($array_query[
'options_'.$key.
'_cnct']) > 0)) {
1142 print img_picto($langs->trans(
'AdvTgtUse'),
'tick');
1145 if (($extrafieldinfo[
'type'][$key] ==
'varchar') || ($extrafieldinfo[
'type'][$key] ==
'text')) {
1146 print
'<input type="text" name="options_'.$key.
'_cnct"/></td><td>'.
"\n";
1147 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtSearchTextHelp"), 1,
'help');
1148 } elseif (($extrafieldinfo[
'type'][$key] ==
'int') || ($extrafieldinfo[
'type'][$key] ==
'double')) {
1149 print $langs->trans(
"AdvTgtMinVal").
'<input type="text" name="options_'.$key.
'_min_cnct"/>';
1150 print $langs->trans(
"AdvTgtMaxVal").
'<input type="text" name="options_'.$key.
'_max_cnct"/>';
1151 print
'</td><td>'.
"\n";
1152 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtSearchIntHelp"), 1,
'help');
1153 } elseif (($extrafieldinfo[
'type'][$key] ==
'date') || ($extrafieldinfo[
'type'][$key] ==
'datetime')) {
1154 print
'<table class="nobordernopadding"><tr>';
1155 print
'<td>'.$langs->trans(
"AdvTgtStartDt").
'</td><td>';
1156 print $form->selectDate(
'',
'options_'.$key.
'_st_dt_cnct', 0, 0, 1);
1157 print
'</td><td>'.$langs->trans(
"AdvTgtEndDt").
'</td><td>';
1158 print $form->selectDate(
'',
'options_'.$key.
'_end_dt_cnct', 0, 0, 1);
1159 print
'</td></tr></table>';
1160 print
'</td><td>'.
"\n";
1161 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtSearchDtHelp"), 1,
'help');
1162 } elseif (($extrafieldinfo[
'type'][$key] ==
'boolean')) {
1163 print $form->selectarray(
1164 'options_'.$key.
'_cnct',
1167 '1' => $langs->trans(
'Yes'),
1168 '0' => $langs->trans(
'No')
1170 $array_query[
'options_'.$key.
'_cnct']
1172 print
'</td><td>'.
"\n";
1173 } elseif ($extrafieldinfo[
'type'][$key] ==
'select') {
1174 print $formadvtargetemaling->advMultiselectarray(
'options_'.$key.
'_cnct', $extrafieldinfo[
'param'][$key][
'options'], $array_query[
'options_'.$key.
'_cnct']);
1175 print
'</td><td>'.
"\n";
1176 } elseif ($extrafieldinfo[
'type'][$key] ==
'sellist') {
1177 print $formadvtargetemaling->advMultiselectarraySelllist(
'options_'.$key.
'_cnct', $extrafieldinfo[
'param'][$key][
'options'], $array_query[
'options_'.$key.
'_cnct']);
1178 print
'</td><td>'.
"\n";
1180 if (is_array($array_query[
'options_'.$key.
'_cnct'])) {
1181 print $extrafields->showInputField($key, implode(
',', $array_query[
'options_'.$key.
'_cnct']),
'',
'_cnct',
'',
'', 0,
'socpeople', 1);
1183 print $extrafields->showInputField($key, $array_query[
'options_'.$key.
'_cnct'],
'',
'_cnct',
'',
'', 0,
'socpeople', 1);
1185 print
'</td><td>'.
"\n";
1187 print
'</td></tr>'.
"\n";
1192 print
'</table>'.
"\n";
1194 print
'<center><input type="button" name="addcontact" id="addcontact" value="'.$langs->trans(
'AdvTgtAddContact').
'" class="butAction"/></center>'.
"\n";
1196 print
'</form>'.
"\n";
1201 print
'<form action="'.$_SERVER[
'PHP_SELF'].
'?action=clear&id='.
$object->id.
'" method="POST">';
1202 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1204 print
'<table class="noborder centpercent">';
1205 print
'<tr class="liste_titre">';
1206 print
'<td class="liste_titre right"><input type="submit" class="button" value="'.$langs->trans(
"TargetsReset").
'"></td>';
$id
Support class for third parties, contacts, members, users or resources.
if(! $sortfield) if(! $sortorder) $object
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 advanced emailing target selector.
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 to manage emailings module.
Parent class of emailing target selectors modules.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage a list of personalised recipients for mailing feature.
emailing_prepare_head(Mailing $object)
Prepare array with list of tabs.
isValidMailDomain($mail)
Return true if email has a domain name that can be resolved to MX type.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
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.
GETPOSTISARRAY($paramname, $method=0)
Return true if the parameter $paramname is submit from a POST OR GET as an array.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0, $nodefault=0)
Return value of a param into GET or POST supervariable.
GETPOSTINT($paramname, $method=0, $nodefault=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
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.
isModEnabled($module)
Is Dolibarr module enabled.
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.
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='', $morecssonpicto='widthpictotitle')
Load a title with picto.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.