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') {
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';
410 $keyforsupportedoauth2array = $object->oauth_service;
411 if (preg_match(
'/^.*-/', $keyforsupportedoauth2array)) {
412 $keyforprovider = preg_replace(
'/^.*-/',
'', $keyforsupportedoauth2array);
414 $keyforprovider =
'';
416 $keyforsupportedoauth2array = preg_replace(
'/-.*$/',
'', $keyforsupportedoauth2array);
417 $keyforsupportedoauth2array =
'OAUTH_'.$keyforsupportedoauth2array.
'_NAME';
419 $OAUTH_SERVICENAME = (empty($supportedoauth2array[$keyforsupportedoauth2array][
'name']) ?
'Unknown' : $supportedoauth2array[$keyforsupportedoauth2array][
'name'].($keyforprovider ?
'-'.$keyforprovider :
''));
421 require_once DOL_DOCUMENT_ROOT.
'/includes/OAuth/bootstrap.php';
427 $storage =
new DoliStorage($db, $conf, $keyforprovider);
430 $tokenobj = $storage->retrieveAccessToken($OAUTH_SERVICENAME);
438 if (is_object($tokenobj) && $expire) {
439 $credentials =
new Credentials(
444 $serviceFactory = new \OAuth\ServiceFactory();
445 $oauthname = explode(
'-', $OAUTH_SERVICENAME);
448 $apiService = $serviceFactory->createService($oauthname[0], $credentials, $storage, array());
451 $refreshtoken = $tokenobj->getRefreshToken();
455 $tokenobj = $apiService->refreshAccessToken($tokenobj);
457 throw new Exception(
"Failed to refresh access token: ".$e->getMessage());
460 $tokenobj->setRefreshToken($refreshtoken);
461 $storage->storeAccessToken($OAUTH_SERVICENAME, $tokenobj);
463 $tokenobj = $storage->retrieveAccessToken($OAUTH_SERVICENAME);
464 if (is_object($tokenobj)) {
465 $token = $tokenobj->getAccessToken();
468 $morehtml .=
"Token not found";
472 $morehtml .= $e->getMessage();
475 if (empty($object->login)) {
477 $morehtml .=
'Error: Login is empty. Must be email owner when using MAIN_IMAP_USE_PHPIMAP and OAuth.';
480 $cm =
new ClientManager();
481 $client = $cm->make([
482 'host' => $object->host,
483 'port' => $object->port,
484 'encryption' =>
'ssl',
485 'validate_cert' =>
true,
486 'protocol' =>
'imap',
487 'username' => $object->login,
488 'password' => $token,
489 'authentication' =>
"oauth",
493 $cm =
new ClientManager();
494 $client = $cm->make([
495 'host' => $object->host,
496 'port' => $object->port,
497 'encryption' =>
'ssl',
498 'validate_cert' =>
true,
499 'protocol' =>
'imap',
500 'username' => $object->login,
501 'password' => $object->password,
502 'authentication' =>
"login",
519 $f = $client->getFolders(
false, $object->source_directory);
520 $nbemail = $f[0]->examine()[
"exists"];
521 $morehtml .= $nbemail;
522 }
catch (ConnectionFailedException $e) {
523 $morehtml .=
'ConnectionFailedException '.$e->getMessage();
527 if (function_exists(
'imap_open')) {
531 $connectstringsource = $connectstringserver.$object->getEncodedUtf7($sourcedir);
535 $connectstringtarget = $connectstringserver.$object->getEncodedUtf7($targetdir);
538 $timeoutconnect = !
getDolGlobalString(
'MAIN_USE_CONNECT_TIMEOUT') ? 5 : $conf->global->MAIN_USE_CONNECT_TIMEOUT;
539 $timeoutread = !
getDolGlobalString(
'MAIN_USE_RESPONSE_TIMEOUT') ? 20 : $conf->global->MAIN_USE_RESPONSE_TIMEOUT;
541 dol_syslog(
"imap_open connectstring=".$connectstringsource.
" login=".$object->login.
" password=".$object->password.
" timeoutconnect=".$timeoutconnect.
" timeoutread=".$timeoutread);
543 $result1 = imap_timeout(IMAP_OPENTIMEOUT, $timeoutconnect);
544 $result2 = imap_timeout(IMAP_READTIMEOUT, $timeoutread);
545 $result3 = imap_timeout(IMAP_WRITETIMEOUT, 5);
546 $result4 = imap_timeout(IMAP_CLOSETIMEOUT, 5);
548 dol_syslog(
"result1=".$result1.
" result2=".$result2.
" result3=".$result3.
" result4=".$result4);
550 $connection = imap_open($connectstringsource, $object->login, $object->password);
554 $morehtml .= $e->getMessage();
558 $morehtml .=
'Failed to open IMAP connection '.$connectstringsource;
559 if (function_exists(
'imap_last_error')) {
560 $morehtml .=
'<br>'.imap_last_error();
565 dol_syslog(
"Imap connected. Now we call imap_num_msg()");
566 $morehtml .= imap_num_msg($connection);
571 imap_close($connection);
574 $morehtml .=
'IMAP functions not available on your PHP. ';
579 $morehtml = $form->textwithpicto($langs->trans(
"NbOfEmailsInInbox"),
'Connect string = '.$connectstringserver.
'<br>Option MAIN_IMAP_USE_PHPIMAP = '.
getDolGlobalInt(
'MAIN_IMAP_USE_PHPIMAP')).
': '.($morehtml !==
'' ? $morehtml :
'?');
580 $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>';
582 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref.
'<div class="refidno">'.$morehtml.
'</div>',
'', 0,
'',
'', 0,
'');
584 print
'<div class="fichecenter">';
585 print
'<div class="fichehalfleft">';
586 print
'<div class="underbanner clearboth"></div>';
587 print
'<table class="border centpercent tableforfield">'.
"\n";
591 include DOL_DOCUMENT_ROOT.
'/core/tpl/commonfields_view.tpl.php';
594 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
599 print
'<form method="POST" action="'.$_SERVER[
"PHP_SELF"].
'">';
600 print
'<input type="hidden" name="token" value="'.newToken().
'">';
601 print
'<input type="hidden" name="action" value="updatefiltersactions">';
602 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
603 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
606 print
'<div class="div-table-responsive-no-min">';
607 print
'<table id="tablelineoffilters" class="noborder nobordertop noshadow">';
608 print
'<tr class="liste_titre nodrag nodrop">';
609 print
'<td>'.img_picto(
'',
'filter',
'class="pictofixedwidth opacitymedium"').$form->textwithpicto($langs->trans(
"Filters"), $langs->trans(
"EmailCollectorFilterDesc")).
'</td><td></td><td></td>';
612 print
'<tr class="oddeven nodrag nodrop">';
614 $arrayoftypes = array(
615 'from'=>array(
'label'=>
'MailFrom',
'data-placeholder'=>$langs->trans(
'SearchString')),
616 'to'=>array(
'label'=>
'MailTo',
'data-placeholder'=>$langs->trans(
'SearchString')),
617 'cc'=>array(
'label'=>
'Cc',
'data-placeholder'=>$langs->trans(
'SearchString')),
618 'bcc'=>array(
'label'=>
'Bcc',
'data-placeholder'=>$langs->trans(
'SearchString')),
619 'replyto'=>array(
'label'=>
'ReplyTo',
'data-placeholder'=>$langs->trans(
'SearchString')),
620 'subject'=>array(
'label'=>
'Subject',
'data-placeholder'=>$langs->trans(
'SearchString')),
621 'body'=>array(
'label'=>
'Body',
'data-placeholder'=>$langs->trans(
'SearchString')),
626 'seen'=>array(
'label'=>
'AlreadyRead',
'data-noparam'=>1),
627 'unseen'=>array(
'label'=>
'NotRead',
'data-noparam'=>1),
628 'unanswered'=>array(
'label'=>
'Unanswered',
'data-noparam'=>1),
629 'answered'=>array(
'label'=>
'Answered',
'data-noparam'=>1),
630 'smaller'=>array(
'label'=>$langs->trans(
"Size").
' ('.$langs->trans(
"SmallerThan").
")",
'data-placeholder'=>$langs->trans(
'NumberOfBytes')),
631 'larger'=>array(
'label'=>$langs->trans(
"Size").
' ('.$langs->trans(
"LargerThan").
")",
'data-placeholder'=>$langs->trans(
'NumberOfBytes')),
633 'withtrackingid'=>array(
'label'=>
'WithDolTrackingID',
'data-noparam'=>1),
634 'withouttrackingid'=>array(
'label'=>
'WithoutDolTrackingID',
'data-noparam'=>1),
635 'withtrackingidinmsgid'=>array(
'label'=>
'WithDolTrackingIDInMsgId',
'data-noparam'=>1),
636 'withouttrackingidinmsgid'=>array(
'label'=>
'WithoutDolTrackingIDInMsgId',
'data-noparam'=>1),
638 'isnotanswer'=>array(
'label'=>
'IsNotAnAnswer',
'data-noparam'=>1),
639 'isanswer'=>array(
'label'=>
'IsAnAnswer',
'data-noparam'=>1)
641 print $form->selectarray(
'filtertype', $arrayoftypes,
'', 1, 0, 0,
'', 1, 0, 0,
'',
'maxwidth300', 1,
'', 2);
645 print
'jQuery("#filtertype").change(function() {
646 console.log("We change a filter");
647 if (jQuery("#filtertype option:selected").attr("data-noparam")) {
648 jQuery("#rulevalue").attr("placeholder", "");
649 jQuery("#rulevalue").text("");
650 jQuery("#rulevalue").prop("disabled", true);
651 jQuery("#rulevaluehelp").addClass("unvisible");
653 jQuery("#rulevalue").prop("disabled", false);
654 jQuery("#rulevaluehelp").removeClass("unvisible");
656 jQuery("#rulevalue").attr("placeholder", (jQuery("#filtertype option:selected").attr("data-placeholder")));
664 print
'</script>'.
"\n";
666 print
'</td><td class="nowraponall">';
667 print
'<div class="nowraponall">';
668 print
'<input type="text" name="rulevalue" id="rulevalue" class="inline-block valignmiddle">';
669 print
'<div class="inline-block valignmiddle unvisible" id="rulevaluehelp">';
670 print
img_warning($langs->trans(
"FilterSearchImapHelp"),
'',
'pictowarning classfortooltip');
674 print
'<td class="right"><input type="submit" name="addfilter" id="addfilter" class="flat button smallpaddingimp" value="'.$langs->trans(
"Add").
'"></td>';
677 foreach ($object->filters as $rulefilter) {
679 $rulefilterobj->fetch($rulefilter[
'id']);
681 print
'<tr class="oddeven">';
682 print
'<td title="'.dol_escape_htmltag($langs->trans(
"Filter").
': '.$rulefilter[
'type']).
'">';
683 print $langs->trans($arrayoftypes[$rulefilter[
'type']][
'label']);
685 print
'<td>'.$rulefilter[
'rulevalue'].
'</td>';
686 print
'<td class="right">';
687 print
' <a href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=deletefilter&token='.urlencode(newToken()).
'&filterid='.$rulefilter[
'id'].
'">'.
img_delete().
'</a>';
696 print
'<div class="clearboth"></div><br><br>';
699 print
'<div class="div-table-responsive-no-min">';
700 print
'<table id="tablelines" class="noborder noshadow">';
701 print
'<tr class="liste_titre nodrag nodrop">';
702 print
'<td>'.img_picto(
'',
'technic',
'class="pictofixedwidth"').$form->textwithpicto($langs->trans(
"EmailcollectorOperations"), $langs->trans(
"EmailcollectorOperationsDesc")).
'</td>';
704 $htmltext = $langs->transnoentitiesnoconv(
"OperationParamDesc");
705 print $form->textwithpicto($langs->trans(
"Parameters"), $htmltext, 1,
'help',
'', 0, 2,
'operationparamtt');
711 $arrayoftypes = array(
712 'loadthirdparty' => $langs->trans(
'LoadThirdPartyFromName', $langs->transnoentities(
"ThirdPartyName").
'/'.$langs->transnoentities(
"AliasNameShort").
'/'.$langs->transnoentities(
"Email").
'/'.$langs->transnoentities(
"ID")),
713 'loadandcreatethirdparty' => $langs->trans(
'LoadThirdPartyFromNameOrCreate', $langs->transnoentities(
"ThirdPartyName").
'/'.$langs->transnoentities(
"AliasNameShort").
'/'.$langs->transnoentities(
"Email").
'/'.$langs->transnoentities(
"ID")),
714 'recordjoinpiece' =>
'AttachJoinedDocumentsToObject',
715 'recordevent' =>
'RecordEvent'
717 $arrayoftypesnocondition = $arrayoftypes;
718 if (isModEnabled(
'project')) {
719 $arrayoftypes[
'project'] =
'CreateLeadAndThirdParty';
721 $arrayoftypesnocondition[
'project'] =
'CreateLeadAndThirdParty';
722 if (isModEnabled(
'ticket')) {
723 $arrayoftypes[
'ticket'] =
'CreateTicketAndThirdParty';
725 $arrayoftypesnocondition[
'ticket'] =
'CreateTicketAndThirdParty';
726 if (isModEnabled(
'recruitment')) {
727 $arrayoftypes[
'candidature'] =
'CreateCandidature';
729 $arrayoftypesnocondition[
'candidature'] =
'CreateCandidature';
732 $parameters = array(
'arrayoftypes' => $arrayoftypes);
733 $res = $hookmanager->executeHooks(
'addMoreActionsEmailCollector', $parameters, $object, $action);
736 $arrayoftypes = $hookmanager->resArray;
738 foreach ($hookmanager->resArray as $k => $desc) {
739 $arrayoftypes[$k] = $desc;
744 print
'<tr class="oddeven nodrag nodrop">';
746 print $form->selectarray(
'operationtype', $arrayoftypes,
'', 1, 0, 0,
'', 1, 0, 0,
'',
'minwidth150 maxwidth300', 1);
748 print
'<textarea class="centpercent" name="operationparam" rows="3"></textarea>';
752 print
'<td class="right"><input type="submit" name="addoperation" id="addoperation" class="flat button smallpaddingimp" value="'.$langs->trans(
"Add").
'"></td>';
755 $nboflines = count($object->actions);
756 $table_element_line =
'emailcollector_emailcollectoraction';
757 $fk_element =
'position';
759 foreach ($object->actions as $ruleaction) {
761 $ruleactionobj->fetch($ruleaction[
'id']);
763 print
'<tr class="drag drop oddeven" id="row-'.$ruleaction[
'id'].
'">';
764 print
'<td title="'.dol_escape_htmltag($langs->trans(
"Operation").
': '.$ruleaction[
'type']).
'">';
765 print
'<!-- type of action: '.$ruleaction[
'type'].
' -->';
766 if (array_key_exists($ruleaction[
'type'], $arrayoftypes)) {
767 print $langs->trans($arrayoftypes[$ruleaction[
'type']]);
769 if (array_key_exists($ruleaction[
'type'], $arrayoftypesnocondition)) {
770 print
'<span class="opacitymedium">'.$langs->trans($arrayoftypesnocondition[$ruleaction[
'type']]).
' - '.$langs->trans(
"Disabled").
'</span>';
774 if (in_array($ruleaction[
'type'], array(
'recordevent'))) {
775 print $form->textwithpicto(
'', $langs->transnoentitiesnoconv(
'IfTrackingIDFoundEventWillBeLinked'));
776 } elseif (in_array($ruleaction[
'type'], array(
'loadthirdparty',
'loadandcreatethirdparty'))) {
777 print $form->textwithpicto(
'', $langs->transnoentitiesnoconv(
'EmailCollectorLoadThirdPartyHelp'));
780 print
'<td class="wordbreak minwidth300 small">';
781 if ($action ==
'editoperation' && $ruleaction[
'id'] == $operationid) {
783 print
'<textarea class="centpercent" name="operationparam2" rows="3">';
786 print
'<input type="hidden" name="rowidoperation2" value="'.$ruleaction[
'id'].
'">';
787 print
'<input type="submit" class="button small button-save" name="saveoperation2" value="'.$langs->trans(
"Save").
'">';
788 print
'<input type="submit" class="button small button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
794 print
'<td class="center linecolmove tdlineupdown">';
796 print
'<a class="lineupdown" href="'.$_SERVER[
'PHP_SELF'].
'?action=up&rowid='.$ruleaction[
'id'].
'">'.
img_up(
'default', 0,
'imgupforline').
'</a>';
798 if ($i < count($object->actions) - 1) {
799 print
'<a class="lineupdown" href="'.$_SERVER[
'PHP_SELF'].
'?action=down&rowid='.$ruleaction[
'id'].
'">'.
img_down(
'default', 0,
'imgdownforline').
'</a>';
803 print
'<td class="right nowraponall">';
804 print
'<a class="editfielda marginrightonly" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=editoperation&token='.newToken().
'&operationid='.$ruleaction[
'id'].
'">'.
img_edit().
'</a>';
805 print
' <a href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=deleteoperation&token='.newToken().
'&operationid='.$ruleaction[
'id'].
'">'.
img_delete().
'</a>';
815 if (!empty($conf->use_javascript_ajax)) {
816 $urltorefreshaftermove = DOL_URL_ROOT.
'/admin/emailcollector_card.php?id='.$id;
817 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
826 print
'<div class="clearboth"></div><br>';
831 if ($action !=
'presend' && $action !=
'editline') {
832 print
'<div class="tabsAction">'.
"\n";
833 $parameters = array();
834 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
839 if (empty($reshook)) {
841 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>';
844 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>';
847 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>';
849 if (count($object->actions) > 0) {
850 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>';
852 print
'<div class="inline-block divButAction"><a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->trans(
"NoOperations")).
'">'.$langs->trans(
"CollectNow").
'</a></div>';
855 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>';
860 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 a 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...
getSupportedOauth2Array()
Return array of tabs to used on pages to setup cron module.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.