26require
'../main.inc.php';
27require_once DOL_DOCUMENT_ROOT.
'/core/lib/admin.lib.php';
28require_once DOL_DOCUMENT_ROOT.
'/core/lib/agenda.lib.php';
29require_once DOL_DOCUMENT_ROOT.
'/core/class/events.class.php';
31include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formcompany.class.php';
32include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
33include_once DOL_DOCUMENT_ROOT.
'/emailcollector/class/emailcollector.class.php';
34include_once DOL_DOCUMENT_ROOT.
'/emailcollector/class/emailcollectorfilter.class.php';
35include_once DOL_DOCUMENT_ROOT.
'/emailcollector/class/emailcollectoraction.class.php';
36include_once DOL_DOCUMENT_ROOT.
'/emailcollector/lib/emailcollector.lib.php';
38use Webklex\PHPIMAP\ClientManager;
39use Webklex\PHPIMAP\Exceptions\ConnectionFailedException;
40use Webklex\PHPIMAP\Exceptions\InvalidWhereQueryCriteriaException;
43use OAuth\Common\Storage\DoliStorage;
44use OAuth\Common\Consumer\Credentials;
49if (!isModEnabled(
'emailcollector')) {
54$langs->loadLangs(array(
"admin",
"mails",
"other"));
59$action =
GETPOST(
'action',
'aZ09');
60$confirm =
GETPOST(
'confirm',
'alpha');
61$cancel =
GETPOST(
'cancel',
'aZ09');
62$contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'emailcollectorcard';
63$backtopage =
GETPOST(
'backtopage',
'alpha');
65$operationid =
GETPOST(
'operationid',
'int');
70$diroutputmassaction = $conf->emailcollector->dir_output.
'/temp/massgeneration/'.$user->id;
71$hookmanager->initHooks(array(
'emailcollectorcard'));
74$extrafields->fetch_name_optionals_label($object->table_element);
76$search_array_options = $extrafields->getOptionalsFromPost($object->table_element,
'',
'search_');
79$search_all =
GETPOST(
"search_all",
'alpha');
81foreach ($object->fields as $key => $val) {
82 if (
GETPOST(
'search_'.$key,
'alpha')) {
83 $search[$key] =
GETPOST(
'search_'.$key,
'alpha');
88 $action =
'updateoperation';
90if (empty($action) && empty($id) && empty($ref)) {
95include DOL_DOCUMENT_ROOT.
'/core/actions_fetchobject.inc.php';
103$permissionnote = $user->admin;
104$permissiondellink = $user->admin;
105$permissiontoadd = $user->admin;
115$parameters = array();
116$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
122if (empty($reshook)) {
123 $permissiontoadd = 1;
124 $permissiontodelete = 1;
125 if (empty($backtopage)) {
126 $backtopage = DOL_URL_ROOT.
'/admin/emailcollector_card.php?id='.($id > 0 ? $id :
'__ID__');
128 $backurlforlist = DOL_URL_ROOT.
'/admin/emailcollector_list.php';
131 include DOL_DOCUMENT_ROOT.
'/core/actions_addupdatedelete.inc.php';
134 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
137 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
140if (
GETPOST(
'addfilter',
'alpha')) {
142 $emailcollectorfilter->type =
GETPOST(
'filtertype',
'aZ09');
143 $emailcollectorfilter->rulevalue =
GETPOST(
'rulevalue',
'alpha');
144 $emailcollectorfilter->fk_emailcollector = $object->id;
145 $emailcollectorfilter->status = 1;
147 $result = $emailcollectorfilter->create($user);
150 $object->fetchFilters();
152 setEventMessages($emailcollectorfilter->error, $emailcollectorfilter->errors,
'errors');
156if ($action ==
'deletefilter') {
158 $emailcollectorfilter->fetch(
GETPOST(
'filterid',
'int'));
159 if ($emailcollectorfilter->id > 0) {
160 $result = $emailcollectorfilter->delete($user);
162 $object->fetchFilters();
164 setEventMessages($emailcollectorfilter->error, $emailcollectorfilter->errors,
'errors');
169if (
GETPOST(
'addoperation',
'alpha')) {
171 $emailcollectoroperation->type =
GETPOST(
'operationtype',
'aZ09');
172 $emailcollectoroperation->actionparam =
GETPOST(
'operationparam',
'restricthtml');
173 $emailcollectoroperation->fk_emailcollector = $object->id;
174 $emailcollectoroperation->status = 1;
175 $emailcollectoroperation->position = 50;
177 if ($emailcollectoroperation->type ==
'-1') {
179 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Operation")),
null,
'errors');
182 if (in_array($emailcollectoroperation->type, array(
'loadthirdparty',
'loadandcreatethirdparty'))
183 && empty($emailcollectoroperation->actionparam)) {
185 setEventMessages($langs->trans(
"ErrorAParameterIsRequiredForThisOperation"),
null,
'errors');
189 $result = $emailcollectoroperation->create($user);
192 $object->fetchActions();
195 setEventMessages($emailcollectoroperation->error, $emailcollectoroperation->errors,
'errors');
200if ($action ==
'updateoperation') {
202 $emailcollectoroperation->fetch(
GETPOST(
'rowidoperation2',
'int'));
204 $emailcollectoroperation->actionparam =
GETPOST(
'operationparam2',
'alphawithlgt');
206 if (in_array($emailcollectoroperation->type, array(
'loadthirdparty',
'loadandcreatethirdparty'))
207 && empty($emailcollectoroperation->actionparam)) {
209 setEventMessages($langs->trans(
"ErrorAParameterIsRequiredForThisOperation"),
null,
'errors');
213 $result = $emailcollectoroperation->update($user);
216 $object->fetchActions();
219 setEventMessages($emailcollectoroperation->error, $emailcollectoroperation->errors,
'errors');
223if ($action ==
'deleteoperation') {
225 $emailcollectoroperation->fetch(
GETPOST(
'operationid',
'int'));
226 if ($emailcollectoroperation->id > 0) {
227 $result = $emailcollectoroperation->delete($user);
229 $object->fetchActions();
231 setEventMessages($emailcollectoroperation->error, $emailcollectoroperation->errors,
'errors');
236if ($action ==
'collecttest') {
239 $res = $object->doCollectOneCollector(1);
241 $debuginfo = $object->debuginfo;
244 $debuginfo = $object->debuginfo;
251if ($action ==
'confirm_collect') {
254 $res = $object->doCollectOneCollector(0);
256 $debuginfo = $object->debuginfo;
259 $debuginfo = $object->debuginfo;
272$form =
new Form($db);
275$help_url =
"EN:Module_EMail_Collector|FR:Module_Collecteur_de_courrier_électronique|ES:Module_EMail_Collector";
277llxHeader(
'',
'EmailCollector', $help_url);
280if ($action ==
'create') {
281 print
load_fiche_titre($langs->trans(
"NewEmailCollector", $langs->transnoentitiesnoconv(
"EmailCollector")));
283 print
'<form method="POST" action="'.$_SERVER[
"PHP_SELF"].
'">';
284 print
'<input type="hidden" name="token" value="'.newToken().
'">';
285 print
'<input type="hidden" name="action" value="add">';
286 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
290 print
'<table class="border centpercent tableforfield">'.
"\n";
295 include DOL_DOCUMENT_ROOT.
'/core/tpl/commonfields_add.tpl.php';
298 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_add.tpl.php';
300 print
'</table>'.
"\n";
304 print $form->buttonsSaveCancel(
"Create");
310if (($id || $ref) && $action ==
'edit') {
313 print
'<form method="POST" action="'.$_SERVER[
"PHP_SELF"].
'">';
314 print
'<input type="hidden" name="token" value="'.newToken().
'">';
315 print
'<input type="hidden" name="action" value="update">';
316 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
317 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
321 print
'<table class="border centpercent tableforfield">'.
"\n";
324 include DOL_DOCUMENT_ROOT.
'/core/tpl/commonfields_edit.tpl.php';
327 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_edit.tpl.php';
333 print $form->buttonsSaveCancel();
339if ($object->id > 0 && (empty($action) || ($action !=
'edit' && $action !=
'create'))) {
340 $res = $object->fetch_optionals();
342 $object->fetchFilters();
343 $object->fetchActions();
346 print
dol_get_fiche_head($head,
'card', $langs->trans(
"EmailCollector"), -1,
'email');
351 if ($action ==
'delete') {
352 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'DeleteEmailCollector'), $langs->trans(
'ConfirmDeleteEmailCollector'),
'confirm_delete',
'', 0, 1);
356 if ($action ==
'clone') {
358 $formquestion = array();
359 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneEmailCollector', $object->ref),
'confirm_clone', $formquestion,
'yes', 1);
363 if ($action ==
'collect') {
364 $formquestion = array();
365 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'EmailCollectorConfirmCollectTitle'), $langs->trans(
'EmailCollectorConfirmCollect'),
'confirm_collect', $formquestion, 0, 1, 220);
369 $parameters = array(
'formConfirm' => $formconfirm);
370 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters, $object, $action);
371 if (empty($reshook)) {
372 $formconfirm .= $hookmanager->resPrint;
373 } elseif ($reshook > 0) {
374 $formconfirm = $hookmanager->resPrint;
382 $linkback =
'<a href="'.DOL_URL_ROOT.
'/admin/emailcollector_list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
384 $morehtmlref =
'<div class="refidno">';
385 $morehtmlref .=
'</div>';
389 $sourcedir = $object->source_directory;
390 $targetdir = ($object->target_directory ? $object->target_directory :
'');
393 $connectstringserver =
'';
394 $connectstringsource =
'';
395 $connectstringtarget =
'';
398 $connectstringserver = $object->getConnectStringIMAP();
400 if ($action ==
'scan') {
401 if (!empty($conf->global->MAIN_IMAP_USE_PHPIMAP)) {
402 require_once DOL_DOCUMENT_ROOT.
'/includes/webklex/php-imap/vendor/autoload.php';
404 if ($object->acces_type == 1) {
406 require_once DOL_DOCUMENT_ROOT.
'/core/lib/oauth.lib.php';
407 $keyforsupportedoauth2array = $object->oauth_service;
408 if (preg_match(
'/^.*-/', $keyforsupportedoauth2array)) {
409 $keyforprovider = preg_replace(
'/^.*-/',
'', $keyforsupportedoauth2array);
411 $keyforprovider =
'';
413 $keyforsupportedoauth2array = preg_replace(
'/-.*$/',
'', $keyforsupportedoauth2array);
414 $keyforsupportedoauth2array =
'OAUTH_'.$keyforsupportedoauth2array.
'_NAME';
416 $OAUTH_SERVICENAME = (empty($supportedoauth2array[$keyforsupportedoauth2array][
'name']) ?
'Unknown' : $supportedoauth2array[$keyforsupportedoauth2array][
'name'].($keyforprovider ?
'-'.$keyforprovider :
''));
418 require_once DOL_DOCUMENT_ROOT.
'/includes/OAuth/bootstrap.php';
424 $storage =
new DoliStorage($db, $conf, $keyforprovider);
427 $tokenobj = $storage->retrieveAccessToken($OAUTH_SERVICENAME);
435 if (is_object($tokenobj) && $expire) {
436 $credentials =
new Credentials(
441 $serviceFactory = new \OAuth\ServiceFactory();
442 $oauthname = explode(
'-', $OAUTH_SERVICENAME);
445 $apiService = $serviceFactory->createService($oauthname[0], $credentials, $storage, array());
448 $refreshtoken = $tokenobj->getRefreshToken();
452 $tokenobj = $apiService->refreshAccessToken($tokenobj);
454 throw new Exception(
"Failed to refresh access token: ".$e->getMessage());
457 $tokenobj->setRefreshToken($refreshtoken);
458 $storage->storeAccessToken($OAUTH_SERVICENAME, $tokenobj);
460 $tokenobj = $storage->retrieveAccessToken($OAUTH_SERVICENAME);
461 if (is_object($tokenobj)) {
462 $token = $tokenobj->getAccessToken();
465 $morehtml .=
"Token not found";
469 $morehtml .= $e->getMessage();
472 if (empty($object->login)) {
474 $morehtml .=
'Error: Login is empty. Must be email owner when using MAIN_IMAP_USE_PHPIMAP and OAuth.';
477 $cm =
new ClientManager();
478 $client = $cm->make([
479 'host' => $object->host,
480 'port' => $object->port,
481 'encryption' =>
'ssl',
482 'validate_cert' =>
true,
483 'protocol' =>
'imap',
484 'username' => $object->login,
485 'password' => $token,
486 'authentication' =>
"oauth",
490 $cm =
new ClientManager();
491 $client = $cm->make([
492 'host' => $object->host,
493 'port' => $object->port,
494 'encryption' =>
'ssl',
495 'validate_cert' =>
true,
496 'protocol' =>
'imap',
497 'username' => $object->login,
498 'password' => $object->password,
499 'authentication' =>
"login",
516 $f = $client->getFolders(
false, $object->source_directory);
517 $nbemail = $f[0]->examine()[
"exists"];
518 $morehtml .= $nbemail;
519 }
catch (ConnectionFailedException $e) {
520 $morehtml .=
'ConnectionFailedException '.$e->getMessage();
524 if (function_exists(
'imap_open')) {
528 $connectstringsource = $connectstringserver.$object->getEncodedUtf7($sourcedir);
532 $connectstringtarget = $connectstringserver.$object->getEncodedUtf7($targetdir);
535 $timeoutconnect = empty($conf->global->MAIN_USE_CONNECT_TIMEOUT) ? 5 : $conf->global->MAIN_USE_CONNECT_TIMEOUT;
536 $timeoutread = empty($conf->global->MAIN_USE_RESPONSE_TIMEOUT) ? 20 : $conf->global->MAIN_USE_RESPONSE_TIMEOUT;
538 dol_syslog(
"imap_open connectstring=".$connectstringsource.
" login=".$object->login.
" password=".$object->password.
" timeoutconnect=".$timeoutconnect.
" timeoutread=".$timeoutread);
540 $result1 = imap_timeout(IMAP_OPENTIMEOUT, $timeoutconnect);
541 $result2 = imap_timeout(IMAP_READTIMEOUT, $timeoutread);
542 $result3 = imap_timeout(IMAP_WRITETIMEOUT, 5);
543 $result4 = imap_timeout(IMAP_CLOSETIMEOUT, 5);
545 dol_syslog(
"result1=".$result1.
" result2=".$result2.
" result3=".$result3.
" result4=".$result4);
547 $connection = imap_open($connectstringsource, $object->login, $object->password);
551 $morehtml .= $e->getMessage();
555 $morehtml .=
'Failed to open IMAP connection '.$connectstringsource;
556 if (function_exists(
'imap_last_error')) {
557 $morehtml .=
'<br>'.imap_last_error();
562 dol_syslog(
"Imap connected. Now we call imap_num_msg()");
563 $morehtml .= imap_num_msg($connection);
568 imap_close($connection);
571 $morehtml .=
'IMAP functions not available on your PHP. ';
576 $morehtml = $form->textwithpicto($langs->trans(
"NbOfEmailsInInbox"),
'Connect string = '.$connectstringserver.
'<br>Option MAIN_IMAP_USE_PHPIMAP = '.
getDolGlobalInt(
'MAIN_IMAP_USE_PHPIMAP')).
': '.($morehtml !==
'' ? $morehtml :
'?');
577 $morehtml .=
'<a class="flat paddingleft marginleftonly" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=scan&token='.newToken().
'">'.
img_picto(
'',
'refresh',
'class="paddingrightonly"').$langs->trans(
"Refresh").
'</a>';
579 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref.
'<div class="refidno">'.$morehtml.
'</div>',
'', 0,
'',
'', 0,
'');
581 print
'<div class="fichecenter">';
582 print
'<div class="fichehalfleft">';
583 print
'<div class="underbanner clearboth"></div>';
584 print
'<table class="border centpercent tableforfield">'.
"\n";
588 include DOL_DOCUMENT_ROOT.
'/core/tpl/commonfields_view.tpl.php';
591 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
596 print
'<form method="POST" action="'.$_SERVER[
"PHP_SELF"].
'">';
597 print
'<input type="hidden" name="token" value="'.newToken().
'">';
598 print
'<input type="hidden" name="action" value="updatefiltersactions">';
599 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
600 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
603 print
'<div class="div-table-responsive-no-min">';
604 print
'<table id="tablelineoffilters" class="noborder nobordertop noshadow">';
605 print
'<tr class="liste_titre nodrag nodrop">';
606 print
'<td>'.img_picto(
'',
'filter',
'class="pictofixedwidth opacitymedium"').$form->textwithpicto($langs->trans(
"Filters"), $langs->trans(
"EmailCollectorFilterDesc")).
'</td><td></td><td></td>';
609 print
'<tr class="oddeven nodrag nodrop">';
611 $arrayoftypes = array(
612 'from'=>array(
'label'=>
'MailFrom',
'data-placeholder'=>$langs->trans(
'SearchString')),
613 'to'=>array(
'label'=>
'MailTo',
'data-placeholder'=>$langs->trans(
'SearchString')),
614 'cc'=>array(
'label'=>
'Cc',
'data-placeholder'=>$langs->trans(
'SearchString')),
615 'bcc'=>array(
'label'=>
'Bcc',
'data-placeholder'=>$langs->trans(
'SearchString')),
616 'replyto'=>array(
'label'=>
'ReplyTo',
'data-placeholder'=>$langs->trans(
'SearchString')),
617 'subject'=>array(
'label'=>
'Subject',
'data-placeholder'=>$langs->trans(
'SearchString')),
618 'body'=>array(
'label'=>
'Body',
'data-placeholder'=>$langs->trans(
'SearchString')),
623 'seen'=>array(
'label'=>
'AlreadyRead',
'data-noparam'=>1),
624 'unseen'=>array(
'label'=>
'NotRead',
'data-noparam'=>1),
625 'unanswered'=>array(
'label'=>
'Unanswered',
'data-noparam'=>1),
626 'answered'=>array(
'label'=>
'Answered',
'data-noparam'=>1),
627 'smaller'=>array(
'label'=>$langs->trans(
"Size").
' ('.$langs->trans(
"SmallerThan").
")",
'data-placeholder'=>$langs->trans(
'NumberOfBytes')),
628 'larger'=>array(
'label'=>$langs->trans(
"Size").
' ('.$langs->trans(
"LargerThan").
")",
'data-placeholder'=>$langs->trans(
'NumberOfBytes')),
630 'withtrackingid'=>array(
'label'=>
'WithDolTrackingID',
'data-noparam'=>1),
631 'withouttrackingid'=>array(
'label'=>
'WithoutDolTrackingID',
'data-noparam'=>1),
632 'withtrackingidinmsgid'=>array(
'label'=>
'WithDolTrackingIDInMsgId',
'data-noparam'=>1),
633 'withouttrackingidinmsgid'=>array(
'label'=>
'WithoutDolTrackingIDInMsgId',
'data-noparam'=>1),
635 'isnotanswer'=>array(
'label'=>
'IsNotAnAnswer',
'data-noparam'=>1),
636 'isanswer'=>array(
'label'=>
'IsAnAnswer',
'data-noparam'=>1)
638 print $form->selectarray(
'filtertype', $arrayoftypes,
'', 1, 0, 0,
'', 1, 0, 0,
'',
'maxwidth300', 1,
'', 2);
642 print
'jQuery("#filtertype").change(function() {
643 console.log("We change a filter");
644 if (jQuery("#filtertype option:selected").attr("data-noparam")) {
645 jQuery("#rulevalue").attr("placeholder", "");
646 jQuery("#rulevalue").text("");
647 jQuery("#rulevalue").prop("disabled", true);
648 jQuery("#rulevaluehelp").addClass("unvisible");
650 jQuery("#rulevalue").prop("disabled", false);
651 jQuery("#rulevaluehelp").removeClass("unvisible");
653 jQuery("#rulevalue").attr("placeholder", (jQuery("#filtertype option:selected").attr("data-placeholder")));
661 print
'</script>'.
"\n";
663 print
'</td><td class="nowraponall">';
664 print
'<div class="nowraponall">';
665 print
'<input type="text" name="rulevalue" id="rulevalue" class="inline-block valignmiddle">';
666 print
'<div class="inline-block valignmiddle unvisible" id="rulevaluehelp">';
667 print
img_warning($langs->trans(
"FilterSearchImapHelp"),
'',
'pictowarning classfortooltip');
671 print
'<td class="right"><input type="submit" name="addfilter" id="addfilter" class="flat button smallpaddingimp" value="'.$langs->trans(
"Add").
'"></td>';
674 foreach ($object->filters as $rulefilter) {
676 $rulefilterobj->fetch($rulefilter[
'id']);
678 print
'<tr class="oddeven">';
679 print
'<td title="'.dol_escape_htmltag($langs->trans(
"Filter").
': '.$rulefilter[
'type']).
'">';
680 print $langs->trans($arrayoftypes[$rulefilter[
'type']][
'label']);
682 print
'<td>'.$rulefilter[
'rulevalue'].
'</td>';
683 print
'<td class="right">';
684 print
' <a href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=deletefilter&token='.urlencode(newToken()).
'&filterid='.$rulefilter[
'id'].
'">'.
img_delete().
'</a>';
693 print
'<div class="clearboth"></div><br><br>';
696 print
'<div class="div-table-responsive-no-min">';
697 print
'<table id="tablelines" class="noborder noshadow">';
698 print
'<tr class="liste_titre nodrag nodrop">';
699 print
'<td>'.img_picto(
'',
'technic',
'class="pictofixedwidth"').$form->textwithpicto($langs->trans(
"EmailcollectorOperations"), $langs->trans(
"EmailcollectorOperationsDesc")).
'</td>';
701 $htmltext = $langs->transnoentitiesnoconv(
"OperationParamDesc");
702 print $form->textwithpicto($langs->trans(
"Parameters"), $htmltext, 1,
'help',
'', 0, 2,
'operationparamtt');
708 $arrayoftypes = array(
709 'loadthirdparty' => $langs->trans(
'LoadThirdPartyFromName', $langs->transnoentities(
"ThirdPartyName").
'/'.$langs->transnoentities(
"AliasNameShort").
'/'.$langs->transnoentities(
"Email").
'/'.$langs->transnoentities(
"ID")),
710 'loadandcreatethirdparty' => $langs->trans(
'LoadThirdPartyFromNameOrCreate', $langs->transnoentities(
"ThirdPartyName").
'/'.$langs->transnoentities(
"AliasNameShort").
'/'.$langs->transnoentities(
"Email").
'/'.$langs->transnoentities(
"ID")),
711 'recordjoinpiece' =>
'AttachJoinedDocumentsToObject',
712 'recordevent' =>
'RecordEvent'
714 $arrayoftypesnocondition = $arrayoftypes;
715 if (isModEnabled(
'project')) {
716 $arrayoftypes[
'project'] =
'CreateLeadAndThirdParty';
718 $arrayoftypesnocondition[
'project'] =
'CreateLeadAndThirdParty';
719 if (isModEnabled(
'ticket')) {
720 $arrayoftypes[
'ticket'] =
'CreateTicketAndThirdParty';
722 $arrayoftypesnocondition[
'ticket'] =
'CreateTicketAndThirdParty';
723 if (isModEnabled(
'recruitment')) {
724 $arrayoftypes[
'candidature'] =
'CreateCandidature';
726 $arrayoftypesnocondition[
'candidature'] =
'CreateCandidature';
729 $parameters = array(
'arrayoftypes' => $arrayoftypes);
730 $res = $hookmanager->executeHooks(
'addMoreActionsEmailCollector', $parameters, $object, $action);
733 $arrayoftypes = $hookmanager->resArray;
735 foreach ($hookmanager->resArray as $k => $desc) {
736 $arrayoftypes[$k] = $desc;
741 print
'<tr class="oddeven nodrag nodrop">';
743 print $form->selectarray(
'operationtype', $arrayoftypes,
'', 1, 0, 0,
'', 1, 0, 0,
'',
'minwidth150 maxwidth300', 1);
745 print
'<textarea class="centpercent" name="operationparam" rows="3"></textarea>';
749 print
'<td class="right"><input type="submit" name="addoperation" id="addoperation" class="flat button smallpaddingimp" value="'.$langs->trans(
"Add").
'"></td>';
752 $nboflines = count($object->actions);
753 $table_element_line =
'emailcollector_emailcollectoraction';
754 $fk_element =
'position';
756 foreach ($object->actions as $ruleaction) {
758 $ruleactionobj->fetch($ruleaction[
'id']);
760 print
'<tr class="drag drop oddeven" id="row-'.$ruleaction[
'id'].
'">';
761 print
'<td title="'.dol_escape_htmltag($langs->trans(
"Operation").
': '.$ruleaction[
'type']).
'">';
762 print
'<!-- type of action: '.$ruleaction[
'type'].
' -->';
763 if (array_key_exists($ruleaction[
'type'], $arrayoftypes)) {
764 print $langs->trans($arrayoftypes[$ruleaction[
'type']]);
766 if (array_key_exists($ruleaction[
'type'], $arrayoftypesnocondition)) {
767 print
'<span class="opacitymedium">'.$langs->trans($arrayoftypesnocondition[$ruleaction[
'type']]).
' - '.$langs->trans(
"Disabled").
'</span>';
771 if (in_array($ruleaction[
'type'], array(
'recordevent'))) {
772 print $form->textwithpicto(
'', $langs->transnoentitiesnoconv(
'IfTrackingIDFoundEventWillBeLinked'));
773 } elseif (in_array($ruleaction[
'type'], array(
'loadthirdparty',
'loadandcreatethirdparty'))) {
774 print $form->textwithpicto(
'', $langs->transnoentitiesnoconv(
'EmailCollectorLoadThirdPartyHelp'));
777 print
'<td class="wordbreak minwidth300 small">';
778 if ($action ==
'editoperation' && $ruleaction[
'id'] == $operationid) {
780 print
'<textarea class="centpercent" name="operationparam2" rows="3">';
783 print
'<input type="hidden" name="rowidoperation2" value="'.$ruleaction[
'id'].
'">';
784 print
'<input type="submit" class="button small button-save" name="saveoperation2" value="'.$langs->trans(
"Save").
'">';
785 print
'<input type="submit" class="button small button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
791 print
'<td class="center linecolmove tdlineupdown">';
793 print
'<a class="lineupdown" href="'.$_SERVER[
'PHP_SELF'].
'?action=up&rowid='.$ruleaction[
'id'].
'">'.
img_up(
'default', 0,
'imgupforline').
'</a>';
795 if ($i < count($object->actions) - 1) {
796 print
'<a class="lineupdown" href="'.$_SERVER[
'PHP_SELF'].
'?action=down&rowid='.$ruleaction[
'id'].
'">'.
img_down(
'default', 0,
'imgdownforline').
'</a>';
800 print
'<td class="right nowraponall">';
801 print
'<a class="editfielda marginrightonly" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=editoperation&token='.newToken().
'&operationid='.$ruleaction[
'id'].
'">'.
img_edit().
'</a>';
802 print
' <a href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=deleteoperation&token='.newToken().
'&operationid='.$ruleaction[
'id'].
'">'.
img_delete().
'</a>';
812 if (!empty($conf->use_javascript_ajax)) {
813 $urltorefreshaftermove = DOL_URL_ROOT.
'/admin/emailcollector_card.php?id='.$id;
814 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
823 print
'<div class="clearboth"></div><br>';
828 if ($action !=
'presend' && $action !=
'editline') {
829 print
'<div class="tabsAction">'.
"\n";
830 $parameters = array();
831 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
836 if (empty($reshook)) {
838 print
'<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=edit&token='.newToken().
'">'.$langs->trans(
"Edit").
'</a></div>';
841 print
'<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'&action=clone&token='.newToken().
'&object=order">'.$langs->trans(
"ToClone").
'</a></div>';
844 print
'<div class="inline-block divButAction"><a class="butAction reposition" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=collecttest&token='.newToken().
'">'.$langs->trans(
"TestCollectNow").
'</a></div>';
846 if (count($object->actions) > 0) {
847 print
'<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=collect&token='.newToken().
'">'.$langs->trans(
"CollectNow").
'</a></div>';
849 print
'<div class="inline-block divButAction"><a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->trans(
"NoOperations")).
'">'.$langs->trans(
"CollectNow").
'</a></div>';
852 print
'<div class="inline-block divButAction"><a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=delete&token='.urlencode(newToken()).
'">'.$langs->trans(
'Delete').
'</a></div>';
857 if (!empty($debuginfo)) {
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader()
Empty header.
Class for EmailCollectorAction.
Class for EmailCollectorFilter.
Class for EmailCollector.
emailcollectorPrepareHead($object)
Prepare array of tabs for EmailCollector.
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.
load_fiche_titre($titre, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
img_delete($titlealt='default', $other='class="pictodelete"', $morecss='')
Show delete logo.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
dol_nl2br($stringtoencode, $nl2brmode=0, $forxml=false)
Replace CRLF in string with a HTML BR tag.
img_down($titlealt='default', $selected=0, $moreclass='')
Show down arrow logo.
getDolGlobalInt($key, $default=0)
Return dolibarr global constant int value.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
if(!function_exists( 'dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='')
Show information for admin users or standard users.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
img_edit($titlealt='default', $float=0, $other='')
Show logo editer/modifier fiche.
img_up($titlealt='default', $selected=0, $moreclass='')
Show top arrow logo.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.