29require
'../../main.inc.php';
30require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formmailing.class.php';
31require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formcompany.class.php';
32require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formother.class.php';
33require_once DOL_DOCUMENT_ROOT.
'/core/lib/emailing.lib.php';
34require_once DOL_DOCUMENT_ROOT.
'/core/modules/mailings/advthirdparties.modules.php';
35require_once DOL_DOCUMENT_ROOT.
'/comm/mailing/class/advtargetemailing.class.php';
36require_once DOL_DOCUMENT_ROOT.
'/comm/mailing/class/html.formadvtargetemailing.class.php';
37require_once DOL_DOCUMENT_ROOT.
'/comm/mailing/class/mailing.class.php';
38require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
39require_once DOL_DOCUMENT_ROOT.
'/core/class/CMailFile.class.php';
40require_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');
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);
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);
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)) {
206 $array_query[$key] =
GETPOST($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)) {
235 $array_query[$key] =
GETPOST($key);
240 $result = $advTarget->query_thirdparty($array_query);
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);
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 $query_temlate_id =
'';
274 if (!empty($template_id)) {
275 $query_temlate_id =
'&template_id='.$template_id;
278 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$id.$query_temlate_id);
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);
391 } elseif ($action ==
'savefilter') {
392 $result = $advTarget->update($user);
397 $template_id = $advTarget->id;
401if ($action ==
'deletefilter' && $permissiontoadd) {
402 $result = $advTarget->delete($user);
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");
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>';
625 if (
$object->status == 0 && $user->hasRight(
'mailing',
'creer')) {
633 @phan-var-force FormAdvTargetEmailing $formadvtargetemaling
634 @phan-var-force AdvanceTargetingMailing $advTarget
635 @phan-var-force array<string,string|int|string[]> $array_query
639 $(document).ready(function() {
642 $(":button[name=addcontact]").click(function() {
643 $(":hidden[name=action]").val("add");
644 $("#find_customer").submit();
647 $(":button[name=loadfilter]").click(function() {
648 $(":hidden[name=action]").val("loadfilter");
649 $("#find_customer").submit();
652 $(":button[name=deletefilter]").click(function() {
653 $(":hidden[name=action]").val("deletefilter");
654 $("#find_customer").submit();
657 $(":button[name=savefilter]").click(function() {
658 $(":hidden[name=action]").val("savefilter");
659 $("#find_customer").submit();
662 $(":button[name=createfilter]").click(function() {
663 $(":hidden[name=action]").val("createfilter");
664 $("#find_customer").submit();
672 print
'<form name="find_customer" id="find_customer" action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$id.
'" method="POST">'.
"\n";
673 print
'<input type="hidden" name="token" value="'.newToken().
'">'.
"\n";
674 print
'<input type="hidden" name="action" value="">'.
"\n";
675 print
'<table class="border centpercent">'.
"\n";
677 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
'AdvTgtNameTemplate').
'</td><td class="valignmiddle">';
678 if (!empty($template_id)) {
679 $default_template = $template_id;
681 $default_template = $advTarget->id;
683 print $formadvtargetemaling->selectAdvtargetemailingTemplate(
'template_id', $default_template, $langs->trans(
"SelectAPredefinedFilter"), $advTarget->type_element,
'minwidth100 valignmiddle');
684 print
'<input type="button" name="loadfilter" id="loadfilter" value="'.$langs->trans(
'AdvTgtLoadFilter').
'" class="button smallpaddingimp"/>';
685 print
'<input type="button" name="deletefilter" id="deletefilter" value="'.$langs->trans(
'AdvTgtDeleteFilter').
'" class="button smallpaddingimp"/>';
686 print
'<input type="button" name="savefilter" id="savefilter" value="'.$langs->trans(
'AdvTgtSaveFilter').
'" class="button smallpaddingimp"/>';
687 print
'</td><td>'.
"\n";
688 print
'</td></tr>'.
"\n";
690 print
'<tr><td>'.$langs->trans(
'AdvTgtOrCreateNewFilter').
'</td><td>';
691 print
'<input type="text" name="template_name" id="template_name" value=""/>';
692 print
'<input type="button" name="createfilter" id="createfilter" value="'.$langs->trans(
'AdvTgtCreateFilter').
'" class="button smallpaddingimp"/>';
693 print
'</td><td>'.
"\n";
694 print
'</td></tr>'.
"\n";
696 print
'<tr><td colspan="3"><hr></td></tr>';
699 print
'<td colspan="3" class="center">'.
"\n";
700 print
'<input type="button" name="addcontact" id="addcontact" value="'.$langs->trans(
'AdvTgtAddContact').
'" class="button"/>'.
"\n";
704 print
'<tr><td>'.$langs->trans(
'AdvTgtTypeOfIncude').
'</td><td>';
705 print $form->selectarray(
'type_of_target', $advTarget->select_target_type, $array_query[
'type_of_target']);
706 print
'</td><td>'.
"\n";
707 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtTypeOfIncudeHelp"), 1,
'help');
708 print
'</td></tr>'.
"\n";
711 print
'<tr><td>'.$langs->trans(
'ThirdPartyName');
712 if (!empty($array_query[
'cust_name'])) {
713 print
img_picto($langs->trans(
'AdvTgtUse'),
'ok.png@advtargetemailing');
715 print
'</td><td><input type="text" name="cust_name" value="'.$array_query[
'cust_name'].
'"/></td><td>'.
"\n";
716 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtSearchTextHelp"), 1,
'help');
717 print
'</td></tr>'.
"\n";
720 print
'<tr><td>'.$langs->trans(
'CustomerCode');
721 if (!empty($array_query[
'cust_code'])) {
722 print
img_picto($langs->trans(
'AdvTgtUse'),
'ok.png@advtargetemailing');
723 $cust_code_str = (string) $array_query[
'cust_code'];
725 $cust_code_str =
null;
727 print
'</td><td><input type="text" name="cust_code"'.($cust_code_str !=
null ?
' value="'.$cust_code_str :
'').
'"/></td><td>'.
"\n";
728 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtSearchTextHelp"), 1,
'help');
729 print
'</td></tr>'.
"\n";
732 print
'<tr><td>'.$langs->trans(
'Address');
733 if (!empty($array_query[
'cust_adress'])) {
734 print
img_picto($langs->trans(
'AdvTgtUse'),
'ok.png@advtargetemailing');
736 print
'</td><td><input type="text" name="cust_adress" value="'.$array_query[
'cust_adress'].
'"/></td><td>'.
"\n";
737 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtSearchTextHelp"), 1,
'help');
738 print
'</td></tr>'.
"\n";
741 print
'<tr><td>'.$langs->trans(
'Zip');
742 if (!empty($array_query[
'cust_zip'])) {
743 print
img_picto($langs->trans(
'AdvTgtUse'),
'ok.png@advtargetemailing');
745 print
'</td><td><input type="text" name="cust_zip" value="'.$array_query[
'cust_zip'].
'"/></td><td>'.
"\n";
746 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtSearchTextHelp"), 1,
'help');
747 print
'</td></tr>'.
"\n";
750 print
'<tr><td>'.$langs->trans(
'Town');
751 if (!empty($array_query[
'cust_city'])) {
752 print
img_picto($langs->trans(
'AdvTgtUse'),
'ok.png@advtargetemailing');
754 print
'</td><td><input type="text" name="cust_city" value="'.$array_query[
'cust_city'].
'"/></td><td>'.
"\n";
755 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtSearchTextHelp"), 1,
'help');
756 print
'</td></tr>'.
"\n";
759 print
'<tr><td>'.$langs->trans(
'State');
760 if (!empty($array_query[
'cust_state'])) {
761 print
img_picto($langs->trans(
'AdvTgtUse'),
'ok.png@advtargetemailing');
763 print
'</td><td>'.
"\n";
764 print $formadvtargetemaling->multiselectState(
'cust_state', $array_query[
'cust_state']);
765 print
'</td><td>'.
"\n";
766 print
'</td></tr>'.
"\n";
769 print
'<tr><td>'.$langs->trans(
"Country");
770 if (!empty($array_query[
'cust_country'])) {
771 print
img_picto($langs->trans(
'AdvTgtUse'),
'ok.png@advtargetemailing');
773 print
'</td><td>'.
"\n";
774 print $formadvtargetemaling->multiselectCountry(
'cust_country', $array_query[
'cust_country']);
775 print
'</td><td>'.
"\n";
776 print
'</td></tr>'.
"\n";
779 print
'<tr><td>'.$langs->trans(
'Status').
' '.$langs->trans(
'ThirdParty');
780 if (!empty($array_query[
'cust_status'])) {
781 print
img_picto($langs->trans(
'AdvTgtUse'),
'ok.png@advtargetemailing');
784 print $formadvtargetemaling->advMultiselectarray(
787 '0' => $langs->trans(
'ActivityCeased'),
788 '1' => $langs->trans(
'InActivity')
790 $array_query[
'cust_status']
792 print
'</td><td>'.
"\n";
793 print
'</td></tr>'.
"\n";
796 print
'<tr><td>'.$langs->trans(
"ParentCompany");
797 if (!empty($array_query[
'cust_mothercompany'])) {
798 print
img_picto($langs->trans(
'AdvTgtUse'),
'ok.png@advtargetemailing');
800 print
'</td><td>'.
"\n";
801 print
'<input type="text" name="cust_mothercompany" value="'.$array_query[
'cust_mothercompany'].
'"/>';
802 print
'</td><td>'.
"\n";
803 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtSearchTextHelp"), 1,
'help');
804 print
'</td></tr>'.
"\n";
807 $selected = $array_query[
'cust_typecust'];
808 print
'<tr><td>'.$langs->trans(
'ProspectCustomer').
' '.$langs->trans(
'ThirdParty');
809 if (!empty($array_query[
'cust_typecust'])) {
810 print
img_picto($langs->trans(
'AdvTgtUse'),
'ok.png@advtargetemailing');
813 $options_array = array(
814 2 => $langs->trans(
'Prospect'),
815 3 => $langs->trans(
'ProspectCustomer'),
816 1 => $langs->trans(
'Customer'),
817 0 => $langs->trans(
'NorProspectNorCustomer')
819 print $formadvtargetemaling->advMultiselectarray(
'cust_typecust', $options_array, $selected);
820 print
'</td><td>'.
"\n";
821 print
'</td></tr>'.
"\n";
824 print
'<tr><td>'.$langs->trans(
'ProspectLevel');
825 if (!empty($array_query[
'cust_prospect_status'])) {
826 print
img_picto($langs->trans(
'AdvTgtUse'),
'ok.png@advtargetemailing');
829 print $formadvtargetemaling->multiselectProspectionStatus($array_query[
'cust_prospect_status'],
'cust_prospect_status');
830 print
'</td><td>'.
"\n";
831 print
'</td></tr>'.
"\n";
834 print
'<tr><td>'.$langs->trans(
'StatusProsp');
835 if (!empty($array_query[
'cust_comm_status'])) {
836 print
img_picto($langs->trans(
'AdvTgtUse'),
'ok.png@advtargetemailing');
839 print $formadvtargetemaling->advMultiselectarray(
'cust_comm_status', $advTarget->type_statuscommprospect, $array_query[
'cust_comm_status']);
840 print
'</td><td>'.
"\n";
841 print
'</td></tr>'.
"\n";
844 print
'<tr><td>'.$langs->trans(
"ThirdPartyType");
845 if (!empty($array_query[
'cust_typeent'])) {
846 print
img_picto($langs->trans(
'AdvTgtUse'),
'ok.png@advtargetemailing');
848 print
'</td><td>'.
"\n";
849 print $formadvtargetemaling->advMultiselectarray(
'cust_typeent', $formcompany->typent_array(0,
" AND id <> 0"), $array_query[
'cust_typeent']);
850 print
'</td><td>'.
"\n";
851 print
'</td></tr>'.
"\n";
854 print
'<td>'.$langs->trans(
"Staff");
855 if (!empty($array_query[
'cust_effectif_id'])) {
856 print
img_picto($langs->trans(
'AdvTgtUse'),
'ok.png@advtargetemailing');
859 print $formadvtargetemaling->advMultiselectarray(
"cust_effectif_id", $formcompany->effectif_array(0,
" AND id <> 0"), $array_query[
'cust_effectif_id']);
860 print
'</td><td>'.
"\n";
861 print
'</td></tr>'.
"\n";
864 print
'<tr><td>'.$langs->trans(
"SalesRepresentatives");
865 if (!empty($array_query[
'cust_saleman'])) {
866 print
img_picto($langs->trans(
'AdvTgtUse'),
'ok.png@advtargetemailing');
868 print
'</td><td>'.
"\n";
869 print $formadvtargetemaling->multiselectselectSalesRepresentatives(
'cust_saleman', $array_query[
'cust_saleman'], $user);
870 print
'</td><td>'.
"\n";
871 print
'</td></tr>'.
"\n";
875 print
'<tr><td>'.$langs->trans(
"DefaultLang");
876 if (!empty($array_query[
'cust_language'])) {
877 print
img_picto($langs->trans(
'AdvTgtUse'),
'ok.png@advtargetemailing');
879 print
'</td><td>'.
"\n";
880 print $formadvtargetemaling->multiselectselectLanguage(
'cust_language', $array_query[
'cust_language']);
881 print
'</td><td>'.
"\n";
882 print
'</td></tr>'.
"\n";
885 if (isModEnabled(
'category') && $user->hasRight(
'categorie',
'lire')) {
887 print
'<tr><td>'.$langs->trans(
"CustomersCategoryShort");
888 print
'</td><td>'.
"\n";
889 print $form->selectCategories(Categorie::TYPE_CUSTOMER,
'cust_categ', $object);
890 print
'</td><td>'.
"\n";
891 print
'</td></tr>'.
"\n";
897 $elementtype = $socstatic->table_element;
899 require_once DOL_DOCUMENT_ROOT .
'/core/class/extrafields.class.php';
901 $extrafields->fetch_name_optionals_label($elementtype);
902 foreach ($extrafields->attributes[$elementtype][
'label'] as $key => $val) {
903 if ($key !=
'ts_nameextra' && $key !=
'ts_payeur') {
904 if (isset($extrafields->attributes[$elementtype][
'langfile'][$key])) {
905 $langs->load($extrafields->attributes[$elementtype][
'langfile'][$key]);
907 print
'<tr><td>'.$langs->trans($extrafields->attributes[$elementtype][
'label'][$key]);
908 if (!empty($array_query[
'options_'.$key]) || (is_array($array_query[
'options_'.$key]) && count($array_query[
'options_'.$key]) > 0)) {
909 print
img_picto($langs->trans(
'AdvTgtUse'),
'ok.png@advtargetemailing');
912 if (($extrafields->attributes[$elementtype][
'type'][$key] ==
'varchar') || ($extrafields->attributes[$elementtype][
'type'][$key] ==
'text')) {
913 print
'<input type="text" name="options_'.$key.
'"/></td><td>'.
"\n";
914 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtSearchTextHelp"), 1,
'help');
915 } elseif (($extrafields->attributes[$elementtype][
'type'][$key] ==
'int') || ($extrafields->attributes[$elementtype][
'type'][$key] ==
'double')) {
916 print $langs->trans(
"AdvTgtMinVal").
'<input type="text" name="options'.$key.
'_min"/>';
917 print $langs->trans(
"AdvTgtMaxVal").
'<input type="text" name="options'.$key.
'_max"/>';
918 print
'</td><td>'.
"\n";
919 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtSearchIntHelp"), 1,
'help');
920 } elseif (($extrafields->attributes[$elementtype][
'type'][$key] ==
'date') || ($extrafields->attributes[$elementtype][
'type'][$key] ==
'datetime')) {
921 print
'<table class="nobordernopadding"><tr>';
922 print
'<td>'.$langs->trans(
"AdvTgtStartDt").
'</td><td>';
923 print $form->selectDate(
'',
'options_'.$key.
'_st_dt', 0, 0, 1);
924 print
'</td><td>'.$langs->trans(
"AdvTgtEndDt").
'</td><td>';
925 print $form->selectDate(
'',
'options_'.$key.
'_end_dt', 0, 0, 1);
926 print
'</td></tr></table>';
928 print
'</td><td>'.
"\n";
929 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtSearchDtHelp"), 1,
'help');
930 } elseif (($extrafields->attributes[$elementtype][
'type'][$key] ==
'boolean')) {
931 print $form->selectarray(
935 '1' => $langs->trans(
'Yes'),
936 '0' => $langs->trans(
'No')
938 $array_query[
'options_'.$key]
940 print
'</td><td>'.
"\n";
941 } elseif ($extrafields->attributes[$elementtype][
'type'][$key] ==
'select') {
942 print $formadvtargetemaling->advMultiselectarray(
'options_'.$key, $extrafields->attributes[$elementtype][
'param'][$key][
'options'], $array_query[
'options_'.$key]);
943 print
'</td><td>'.
"\n";
944 } elseif ($extrafields->attributes[$elementtype][
'type'][$key] ==
'sellist') {
945 print $formadvtargetemaling->advMultiselectarraySelllist(
'options_'.$key, $extrafields->attributes[$elementtype][
'param'][$key][
'options'], $array_query[
'options_'.$key]);
946 print
'</td><td>'.
"\n";
948 print
'<table class="nobordernopadding"><tr>';
949 print
'<td></td><td>';
950 if (is_array($array_query[
'options_'.$key])) {
951 print $extrafields->showInputField($key, implode(
',', $array_query[
'options_'.$key]),
'',
'',
'',
'', 0,
'societe', 1);
953 print $extrafields->showInputField($key, $array_query[
'options_'.$key],
'',
'',
'',
'', 0,
'societe', 1);
955 print
'</td></tr></table>';
957 print
'</td><td>'.
"\n";
959 print
'</td></tr>'.
"\n";
964 $action_search =
'query';
966 $parameters = array(
'advtarget' => 1);
967 if (!empty($advTarget->id)) {
968 $parameters = array(
'array_query' => $advTarget->filtervalue);
971 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $std_soc, $action_search);
972 print $hookmanager->resPrint;
976 print
'<tr><td>'.$langs->trans(
'Status').
' '.$langs->trans(
'Contact');
977 if (!empty($array_query[
'contact_status'])) {
978 print
img_picto($langs->trans(
'AdvTgtUse'),
'ok.png@advtargetemailing');
981 print $formadvtargetemaling->advMultiselectarray(
984 '0' => $langs->trans(
'ActivityCeased'),
985 '1' => $langs->trans(
'InActivity')
987 $array_query[
'contact_status']
989 print
'</td><td>'.
"\n";
990 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtContactHelp"), 1,
'help');
991 print
'</td></tr>'.
"\n";
994 print
'<tr><td>'.$langs->trans(
"UserTitle");
995 if (!empty($array_query[
'contact_civility'])) {
996 print
img_picto($langs->trans(
'AdvTgtUse'),
'ok.png@advtargetemailing');
999 print $formadvtargetemaling->multiselectCivility(
'contact_civility', $array_query[
'contact_civility']);
1003 print
'<tr><td>'.$langs->trans(
'Contact').
' '.$langs->trans(
'Lastname');
1004 if (!empty($array_query[
'contact_lastname'])) {
1005 print
img_picto($langs->trans(
'AdvTgtUse'),
'ok.png@advtargetemailing');
1007 print
'</td><td><input type="text" name="contact_lastname" value="'.$array_query[
'contact_lastname'].
'"/></td><td>'.
"\n";
1008 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtSearchTextHelp"), 1,
'help');
1009 print
'</td></tr>'.
"\n";
1010 print
'<tr><td>'.$langs->trans(
'Contact').
' '.$langs->trans(
'Firstname');
1011 if (!empty($array_query[
'contact_firstname'])) {
1012 print
img_picto($langs->trans(
'AdvTgtUse'),
'ok.png@advtargetemailing');
1014 print
'</td><td><input type="text" name="contact_firstname" value="'.$array_query[
'contact_firstname'].
'"/></td><td>'.
"\n";
1015 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtSearchTextHelp"), 1,
'help');
1016 print
'</td></tr>'.
"\n";
1019 print
'<tr><td>'.$langs->trans(
'Contact').
' '.$langs->trans(
"Country");
1020 if (!empty($array_query[
'contact_country'])) {
1021 print
img_picto($langs->trans(
'AdvTgtUse'),
'ok.png@advtargetemailing');
1023 print
'</td><td>'.
"\n";
1024 print $formadvtargetemaling->multiselectCountry(
'contact_country', $array_query[
'contact_country']);
1025 print
'</td><td>'.
"\n";
1026 print
'</td></tr>'.
"\n";
1029 print
'<tr><td>'.$langs->trans(
'Contact').
' '.$langs->trans(
"No_Email");
1030 if (!empty($array_query[
'contact_no_email'])) {
1031 print
img_picto($langs->trans(
'AdvTgtUse'),
'ok.png@advtargetemailing');
1033 print
'</td><td>'.
"\n";
1034 print $form->selectarray(
1038 '1' => $langs->trans(
'Yes'),
1039 '0' => $langs->trans(
'No')
1041 $array_query[
'contact_no_email']
1043 print
'</td><td>'.
"\n";
1044 print
'</td></tr>'.
"\n";
1047 print
'<tr><td>'.$langs->trans(
'Contact').
' '.$langs->trans(
"DateCreation");
1048 if (!empty($array_query[
'contact_create_st_dt'])) {
1049 print
img_picto($langs->trans(
'AdvTgtUse'),
'ok.png@advtargetemailing');
1051 print
'</td><td>'.
"\n";
1052 print
'<table class="nobordernopadding"><tr>';
1053 print
'<td>'.$langs->trans(
"AdvTgtStartDt").
'</td><td>';
1054 print $form->selectDate($array_query[
'contact_create_st_dt'],
'contact_create_st_dt', 0, 0, 1,
'find_customer', 1, 1);
1055 print
'</td><td>'.$langs->trans(
"AdvTgtEndDt").
'</td><td>';
1056 print $form->selectDate($array_query[
'contact_create_end_dt'],
'contact_create_end_dt', 0, 0, 1,
'find_customer', 1, 1);
1057 print
'</td></tr></table>';
1058 print
'</td><td>'.
"\n";
1059 print
'</td></tr>'.
"\n";
1062 print
'<tr><td>'.$langs->trans(
'Contact').
' '.$langs->trans(
"DateLastModification");
1063 if (!empty($array_query[
'contact_update_st_dt'])) {
1064 print
img_picto($langs->trans(
'AdvTgtUse'),
'ok.png@advtargetemailing');
1066 print
'</td><td>'.
"\n";
1067 print
'<table class="nobordernopadding"><tr>';
1068 print
'<td>'.$langs->trans(
"AdvTgtStartDt").
'</td><td>';
1069 print $form->selectDate($array_query[
'contact_update_st_dt'],
'contact_update_st_dt', 0, 0, 1,
'find_customer', 1, 1);
1070 print
'</td><td>'.$langs->trans(
"AdvTgtEndDt").
'</td><td>';
1071 print $form->selectDate($array_query[
'contact_update_end_dt'],
'contact_update_end_dt', 0, 0, 1,
'find_customer', 1, 1);
1072 print
'</td></tr></table>';
1073 print
'</td><td>'.
"\n";
1074 print
'</td></tr>'.
"\n";
1076 if (isModEnabled(
'category') && $user->hasRight(
'categorie',
'lire')) {
1078 print
'<tr><td>'.$langs->trans(
"ContactCategoriesShort");
1079 print
'</td><td>'.
"\n";
1080 print $form->selectCategories(Categorie::TYPE_CONTACT,
'contact_categ', $object);
1081 print
'</td><td>'.
"\n";
1082 print
'</td></tr>'.
"\n";
1087 $contactstatic =
new Contact($db);
1088 $elementtype = $contactstatic->table_element;
1092 $extrafields->fetch_name_optionals_label($elementtype);
1093 if (!empty($extrafields->attributes[$elementtype][
'type'])) {
1094 foreach ($extrafields->attributes[$elementtype][
'type'] as $key => &$value) {
1095 if ($value ==
'radio') {
1100 if (!empty($extrafields->attributes[$elementtype][
'label'])) {
1101 foreach ($extrafields->attributes[$elementtype][
'label'] as $key => $val) {
1102 print
'<tr><td>'.$extrafields->attributes[$elementtype][
'label'][$key];
1103 if ($array_query[
'options_'.$key.
'_cnct'] !=
'' || (is_array($array_query[
'options_'.$key.
'_cnct']) && count($array_query[
'options_'.$key.
'_cnct']) > 0)) {
1104 print
img_picto($langs->trans(
'AdvTgtUse'),
'ok.png@advtargetemailing');
1107 if (($extrafields->attributes[$elementtype][
'type'][$key] ==
'varchar') || ($extrafields->attributes[$elementtype][
'type'][$key] ==
'text')) {
1108 print
'<input type="text" name="options_'.$key.
'_cnct"/></td><td>'.
"\n";
1109 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtSearchTextHelp"), 1,
'help');
1110 } elseif (($extrafields->attributes[$elementtype][
'type'][$key] ==
'int') || ($extrafields->attributes[$elementtype][
'type'][$key] ==
'double')) {
1111 print $langs->trans(
"AdvTgtMinVal").
'<input type="text" name="options_'.$key.
'_min_cnct"/>';
1112 print $langs->trans(
"AdvTgtMaxVal").
'<input type="text" name="options_'.$key.
'_max_cnct"/>';
1113 print
'</td><td>'.
"\n";
1114 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtSearchIntHelp"), 1,
'help');
1115 } elseif (($extrafields->attributes[$elementtype][
'type'][$key] ==
'date') || ($extrafields->attributes[$elementtype][
'type'][$key] ==
'datetime')) {
1116 print
'<table class="nobordernopadding"><tr>';
1117 print
'<td>'.$langs->trans(
"AdvTgtStartDt").
'</td><td>';
1118 print $form->selectDate(
'',
'options_'.$key.
'_st_dt_cnct', 0, 0, 1);
1119 print
'</td><td>'.$langs->trans(
"AdvTgtEndDt").
'</td><td>';
1120 print $form->selectDate(
'',
'options_'.$key.
'_end_dt_cnct', 0, 0, 1);
1121 print
'</td></tr></table>';
1122 print
'</td><td>'.
"\n";
1123 print $form->textwithpicto(
'', $langs->trans(
"AdvTgtSearchDtHelp"), 1,
'help');
1124 } elseif (($extrafields->attributes[$elementtype][
'type'][$key] ==
'boolean')) {
1125 print $form->selectarray(
1126 'options_'.$key.
'_cnct',
1129 '1' => $langs->trans(
'Yes'),
1130 '0' => $langs->trans(
'No')
1132 $array_query[
'options_'.$key.
'_cnct']
1134 print
'</td><td>'.
"\n";
1135 } elseif ($extrafields->attributes[$elementtype][
'type'][$key] ==
'select') {
1136 print $formadvtargetemaling->advMultiselectarray(
'options_'.$key.
'_cnct', $extrafields->attributes[$elementtype][
'param'][$key][
'options'], $array_query[
'options_'.$key.
'_cnct']);
1137 print
'</td><td>'.
"\n";
1138 } elseif ($extrafields->attributes[$elementtype][
'type'][$key] ==
'sellist') {
1139 print $formadvtargetemaling->advMultiselectarraySelllist(
'options_'.$key.
'_cnct', $extrafields->attributes[$elementtype][
'param'][$key][
'options'], $array_query[
'options_'.$key.
'_cnct']);
1140 print
'</td><td>'.
"\n";
1142 if (is_array($array_query[
'options_'.$key.
'_cnct'])) {
1143 print $extrafields->showInputField($key, implode(
',', $array_query[
'options_'.$key.
'_cnct']),
'',
'_cnct',
'',
'', 0,
'socpeople', 1);
1145 print $extrafields->showInputField($key, $array_query[
'options_'.$key.
'_cnct'],
'',
'_cnct',
'',
'', 0,
'socpeople', 1);
1147 print
'</td><td>'.
"\n";
1149 print
'</td></tr>'.
"\n";
1154 print
'</table>'.
"\n";
1156 print
'<center><input type="button" name="addcontact" id="addcontact" value="'.$langs->trans(
'AdvTgtAddContact').
'" class="butAction"/></center>'.
"\n";
1158 print
'</form>'.
"\n";
1163 print
'<form action="'.$_SERVER[
'PHP_SELF'].
'?action=clear&id='.
$object->id.
'" method="POST">';
1164 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1166 print
'<table class="noborder centpercent">';
1167 print
'<tr class="liste_titre">';
1168 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( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $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...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
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, $morecssdiv='')
Show tabs of a record.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
if(!function_exists( 'dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
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.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
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.
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.