27require
'../main.inc.php';
28require_once DOL_DOCUMENT_ROOT.
'/core/lib/admin.lib.php';
29require_once DOL_DOCUMENT_ROOT.
'/core/lib/agenda.lib.php';
30require_once DOL_DOCUMENT_ROOT.
'/core/class/events.class.php';
32include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formcompany.class.php';
33include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
34include_once DOL_DOCUMENT_ROOT.
'/emailcollector/class/emailcollector.class.php';
35include_once DOL_DOCUMENT_ROOT.
'/emailcollector/class/emailcollectorfilter.class.php';
36include_once DOL_DOCUMENT_ROOT.
'/emailcollector/class/emailcollectoraction.class.php';
37include_once DOL_DOCUMENT_ROOT.
'/emailcollector/lib/emailcollector.lib.php';
39use Webklex\PHPIMAP\ClientManager;
40use Webklex\PHPIMAP\Exceptions\ConnectionFailedException;
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');
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);
152 setEventMessages($emailcollectorfilter->error, $emailcollectorfilter->errors,
'errors');
156if ($action ==
'deletefilter') {
158 $emailcollectorfilter->fetch(
GETPOSTINT(
'filterid'));
159 if ($emailcollectorfilter->id > 0) {
160 $result = $emailcollectorfilter->delete($user);
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);
195 setEventMessages($emailcollectoroperation->error, $emailcollectoroperation->errors,
'errors');
200if ($action ==
'updateoperation') {
202 $emailcollectoroperation->fetch(
GETPOSTINT(
'rowidoperation2'));
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);
219 setEventMessages($emailcollectoroperation->error, $emailcollectoroperation->errors,
'errors');
223if ($action ==
'deleteoperation') {
225 $emailcollectoroperation->fetch(
GETPOSTINT(
'operationid'));
226 if ($emailcollectoroperation->id > 0) {
227 $result = $emailcollectoroperation->delete($user);
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,
'', 0, 0,
'',
'',
'',
'mod-admin page-emailcollector_card');
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();
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 =
$object->getConnectStringIMAP();
394 $connectstringsource =
'';
395 $connectstringtarget =
'';
398 if ($action ==
'scan') {
400 require_once DOL_DOCUMENT_ROOT.
'/includes/webklex/php-imap/vendor/autoload.php';
402 if (
$object->acces_type == 1) {
403 dol_syslog(
"Scan IMAP with authentication mode = OAUTH2");
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(
'/-.*$/',
'', strtoupper($keyforsupportedoauth2array));
417 $keyforsupportedoauth2array =
'OAUTH_'.$keyforsupportedoauth2array.
'_NAME';
419 if (!empty($supportedoauth2array)) {
420 $nameofservice = ucfirst(strtolower(empty($supportedoauth2array[$keyforsupportedoauth2array][
'callbackfile']) ?
'Unknown' : $supportedoauth2array[$keyforsupportedoauth2array][
'callbackfile']));
421 $nameofservice .= ($keyforprovider ?
'-'.$keyforprovider :
'');
422 $OAUTH_SERVICENAME = $nameofservice;
424 $OAUTH_SERVICENAME =
'Unknown';
427 $keyforparamtenant =
'OAUTH_'.strtoupper(empty($supportedoauth2array[$keyforsupportedoauth2array][
'callbackfile']) ?
'Unknown' : $supportedoauth2array[$keyforsupportedoauth2array][
'callbackfile']).($keyforprovider ?
'-'.$keyforprovider :
'').
'_TENANT';
429 require_once DOL_DOCUMENT_ROOT.
'/includes/OAuth/bootstrap.php';
435 $storage =
new DoliStorage($db, $conf, $keyforprovider,
getDolGlobalString($keyforparamtenant));
438 $tokenobj = $storage->retrieveAccessToken($OAUTH_SERVICENAME);
446 if (is_object($tokenobj) && $expire) {
447 $credentials =
new Credentials(
452 $serviceFactory = new \OAuth\ServiceFactory();
453 $oauthname = explode(
'-', $OAUTH_SERVICENAME);
456 $apiService = $serviceFactory->createService($oauthname[0], $credentials, $storage, array());
459 $refreshtoken = $tokenobj->getRefreshToken();
463 $tokenobj = $apiService->refreshAccessToken($tokenobj);
465 throw new Exception(
"Failed to refresh access token: ".$e->getMessage());
468 $tokenobj->setRefreshToken($refreshtoken);
469 $storage->storeAccessToken($OAUTH_SERVICENAME, $tokenobj);
472 $tokenobj = $storage->retrieveAccessToken($OAUTH_SERVICENAME);
473 if (is_object($tokenobj)) {
474 $token = $tokenobj->getAccessToken();
477 $morehtml .=
"Token not found";
481 $morehtml .= $e->getMessage();
486 $morehtml .=
'Error: Login is empty. Must be email owner when using MAIN_IMAP_USE_PHPIMAP and OAuth.';
489 $cm =
new ClientManager();
490 $client = $cm->make([
493 'encryption' =>
'ssl',
494 'validate_cert' =>
true,
495 'protocol' =>
'imap',
497 'password' => $token,
498 'authentication' =>
"oauth",
501 dol_syslog(
"Scan IMAP with authentication mode = PASS");
504 $cm =
new ClientManager();
505 $client = $cm->make([
508 'encryption' =>
'ssl',
509 'validate_cert' =>
true,
510 'protocol' =>
'imap',
512 'password' =>
$object->password,
513 'authentication' =>
"login",
533 $f = $client->getFolders(
false,
$object->source_directory);
536 if ($folder instanceof Webklex\PHPIMAP\Folder) {
537 $nbemail = $folder->examine()[
"exists"];
544 $morehtml .= $nbemail;
545 }
catch (ConnectionFailedException $e) {
546 $morehtml .=
'ConnectionFailedException '.$e->getMessage();
550 if (function_exists(
'imap_open')) {
554 $connectstringsource = $connectstringserver.$object->getEncodedUtf7($sourcedir);
558 $connectstringtarget = $connectstringserver.$object->getEncodedUtf7($targetdir);
564 dol_syslog(
"imap_open connectstring=".$connectstringsource.
" login=".
$object->login.
" password=".
$object->password.
" timeoutconnect=".$timeoutconnect.
" timeoutread=".$timeoutread);
566 $result1 = imap_timeout(IMAP_OPENTIMEOUT, $timeoutconnect);
567 $result2 = imap_timeout(IMAP_READTIMEOUT, $timeoutread);
568 $result3 = imap_timeout(IMAP_WRITETIMEOUT, 5);
569 $result4 = imap_timeout(IMAP_CLOSETIMEOUT, 5);
571 dol_syslog(
"result1=".$result1.
" result2=".$result2.
" result3=".$result3.
" result4=".$result4);
573 $connection = imap_open($connectstringsource,
$object->login,
$object->password);
577 $morehtml .= $e->getMessage();
581 $morehtml .=
'Failed to open IMAP connection '.$connectstringsource;
582 if (function_exists(
'imap_last_error')) {
583 $morehtml .=
'<br>'.imap_last_error();
588 dol_syslog(
"Imap connected. Now we call imap_num_msg()");
589 $morehtml .= imap_num_msg($connection);
594 imap_close($connection);
597 $morehtml .=
'IMAP functions not available on your PHP. ';
602 $morehtml = $form->textwithpicto($langs->trans(
"NbOfEmailsInInbox"),
'Connect string = '.$connectstringserver.
'<br>Option MAIN_IMAP_USE_PHPIMAP = '.
getDolGlobalInt(
'MAIN_IMAP_USE_PHPIMAP')).
': '.($morehtml !==
'' ? $morehtml :
'?');
603 $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>';
605 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref.
'<div class="refidno">'.$morehtml.
'</div>',
'', 0,
'',
'', 0,
'');
607 print
'<div class="fichecenter">';
608 print
'<div class="fichehalfleft">';
609 print
'<div class="underbanner clearboth"></div>';
610 print
'<table class="border centpercent tableforfield">'.
"\n";
613 if (
$object->acces_type == 0) {
615 unset(
$object->fields[
'oauth_service']);
617 if (
$object->acces_type == 1) {
619 unset(
$object->fields[
'password']);
624 include DOL_DOCUMENT_ROOT.
'/core/tpl/commonfields_view.tpl.php';
627 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
632 print
'<form method="POST" action="'.$_SERVER[
"PHP_SELF"].
'">';
633 print
'<input type="hidden" name="token" value="'.newToken().
'">';
634 print
'<input type="hidden" name="action" value="updatefiltersactions">';
635 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
636 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
639 print
'<div class="div-table-responsive-no-min">';
640 print
'<table id="tablelineoffilters" class="noborder nobordertop noshadow">';
641 print
'<tr class="liste_titre nodrag nodrop">';
642 print
'<td>'.img_picto(
'',
'filter',
'class="pictofixedwidth opacitymedium"').$form->textwithpicto($langs->trans(
"Filters"), $langs->trans(
"EmailCollectorFilterDesc")).
'</td><td></td><td></td>';
645 print
'<tr class="oddeven nodrag nodrop">';
647 $arrayoftypes = array(
648 'from' => array(
'label' =>
'MailFrom',
'data-placeholder' => $langs->trans(
'SearchString')),
649 'to' => array(
'label' =>
'MailTo',
'data-placeholder' => $langs->trans(
'SearchString')),
650 'cc' => array(
'label' =>
'Cc',
'data-placeholder' => $langs->trans(
'SearchString')),
651 'bcc' => array(
'label' =>
'Bcc',
'data-placeholder' => $langs->trans(
'SearchString')),
652 'replyto' => array(
'label' =>
'ReplyTo',
'data-placeholder' => $langs->trans(
'SearchString')),
653 'subject' => array(
'label' =>
'Subject',
'data-placeholder' => $langs->trans(
'SearchString')),
654 'body' => array(
'label' =>
'Body',
'data-placeholder' => $langs->trans(
'SearchString')),
659 'seen' => array(
'label' =>
'AlreadyRead',
'data-noparam' => 1),
660 'unseen' => array(
'label' =>
'NotRead',
'data-noparam' => 1),
661 'unanswered' => array(
'label' =>
'Unanswered',
'data-noparam' => 1),
662 'answered' => array(
'label' =>
'Answered',
'data-noparam' => 1),
663 'smaller' => array(
'label' => $langs->trans(
"Size").
' ('.$langs->trans(
"SmallerThan").
")",
'data-placeholder' => $langs->trans(
'NumberOfBytes')),
664 'larger' => array(
'label' => $langs->trans(
"Size").
' ('.$langs->trans(
"LargerThan").
")",
'data-placeholder' => $langs->trans(
'NumberOfBytes')),
666 'withtrackingid' => array(
'label' =>
'WithDolTrackingID',
'data-noparam' => 1),
667 'withouttrackingid' => array(
'label' =>
'WithoutDolTrackingID',
'data-noparam' => 1),
668 'withtrackingidinmsgid' => array(
'label' =>
'WithDolTrackingIDInMsgId',
'data-noparam' => 1),
669 'withouttrackingidinmsgid' => array(
'label' =>
'WithoutDolTrackingIDInMsgId',
'data-noparam' => 1),
671 'isnotanswer' => array(
'label' =>
'IsNotAnAnswer',
'data-noparam' => 1),
672 'isanswer' => array(
'label' =>
'IsAnAnswer',
'data-noparam' => 1)
674 print $form->selectarray(
'filtertype', $arrayoftypes,
'', 1, 0, 0,
'', 1, 0, 0,
'',
'maxwidth300', 1,
'', 2);
678 print
'jQuery("#filtertype").change(function() {
679 console.log("We change a filter");
680 if (jQuery("#filtertype option:selected").attr("data-noparam")) {
681 jQuery("#rulevalue").attr("placeholder", "");
682 jQuery("#rulevalue").text("");
683 jQuery("#rulevalue").prop("disabled", true);
684 jQuery("#rulevaluehelp").addClass("unvisible");
686 jQuery("#rulevalue").prop("disabled", false);
687 jQuery("#rulevaluehelp").removeClass("unvisible");
689 jQuery("#rulevalue").attr("placeholder", (jQuery("#filtertype option:selected").attr("data-placeholder")));
697 print
'</script>'.
"\n";
699 print
'</td><td class="nowraponall">';
700 print
'<div class="nowraponall">';
701 print
'<input type="text" name="rulevalue" id="rulevalue" class="inline-block valignmiddle">';
702 print
'<div class="inline-block valignmiddle unvisible" id="rulevaluehelp">';
703 print
img_warning($langs->trans(
"FilterSearchImapHelp"),
'',
'pictowarning classfortooltip');
707 print
'<td class="right"><input type="submit" name="addfilter" id="addfilter" class="flat button smallpaddingimp" value="'.$langs->trans(
"Add").
'"></td>';
710 foreach (
$object->filters as $rulefilter) {
712 $rulefilterobj->fetch($rulefilter[
'id']);
714 print
'<tr class="oddeven">';
715 print
'<td title="'.dol_escape_htmltag($langs->trans(
"Filter").
': '.$rulefilter[
'type']).
'">';
716 print $langs->trans($arrayoftypes[$rulefilter[
'type']][
'label']);
718 print
'<td>'.$rulefilter[
'rulevalue'].
'</td>';
719 print
'<td class="right">';
720 print
' <a href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=deletefilter&token='.urlencode(
newToken()).
'&filterid='.$rulefilter[
'id'].
'">'.
img_delete().
'</a>';
729 print
'<div class="clearboth"></div><br><br>';
732 print
'<div class="div-table-responsive-no-min">';
733 print
'<table id="tablelines" class="noborder noshadow">';
734 print
'<tr class="liste_titre nodrag nodrop">';
735 print
'<td>'.img_picto(
'',
'technic',
'class="pictofixedwidth"').$form->textwithpicto($langs->trans(
"EmailcollectorOperations"), $langs->trans(
"EmailcollectorOperationsDesc")).
'</td>';
737 $htmltext = $langs->transnoentitiesnoconv(
"OperationParamDesc");
738 print $form->textwithpicto($langs->trans(
"Parameters"), $htmltext, 1,
'help',
'', 0, 2,
'operationparamtt');
744 $arrayoftypes = array(
745 'loadthirdparty' => $langs->trans(
'LoadThirdPartyFromName', $langs->transnoentities(
"ThirdPartyName").
'/'.$langs->transnoentities(
"AliasNameShort").
'/'.$langs->transnoentities(
"Email").
'/'.$langs->transnoentities(
"ID")),
746 'loadandcreatethirdparty' => $langs->trans(
'LoadThirdPartyFromNameOrCreate', $langs->transnoentities(
"ThirdPartyName").
'/'.$langs->transnoentities(
"AliasNameShort").
'/'.$langs->transnoentities(
"Email").
'/'.$langs->transnoentities(
"ID")),
747 'recordjoinpiece' =>
'AttachJoinedDocumentsToObject',
748 'recordevent' =>
'RecordEvent'
750 $arrayoftypesnocondition = $arrayoftypes;
751 if (isModEnabled(
'project')) {
752 $arrayoftypes[
'project'] =
'CreateLeadAndThirdParty';
754 $arrayoftypesnocondition[
'project'] =
'CreateLeadAndThirdParty';
755 if (isModEnabled(
'ticket')) {
756 $arrayoftypes[
'ticket'] =
'CreateTicketAndThirdParty';
758 $arrayoftypesnocondition[
'ticket'] =
'CreateTicketAndThirdParty';
759 if (isModEnabled(
'recruitment')) {
760 $arrayoftypes[
'candidature'] =
'CreateCandidature';
762 $arrayoftypesnocondition[
'candidature'] =
'CreateCandidature';
765 $parameters = array(
'arrayoftypes' => $arrayoftypes);
766 $res = $hookmanager->executeHooks(
'addMoreActionsEmailCollector', $parameters, $object, $action);
769 $arrayoftypes = $hookmanager->resArray;
771 foreach ($hookmanager->resArray as $k => $desc) {
772 $arrayoftypes[$k] = $desc;
777 print
'<tr class="oddeven nodrag nodrop">';
779 print $form->selectarray(
'operationtype', $arrayoftypes,
'', 1, 0, 0,
'', 1, 0, 0,
'',
'minwidth150 maxwidth250', 1);
781 print
'<textarea class="centpercent" name="operationparam" rows="3"></textarea>';
785 print
'<td class="right"><input type="submit" name="addoperation" id="addoperation" class="flat button smallpaddingimp" value="'.$langs->trans(
"Add").
'"></td>';
788 $nboflines = count(
$object->actions);
789 $table_element_line =
'emailcollector_emailcollectoraction';
790 $fk_element =
'position';
792 foreach (
$object->actions as $ruleaction) {
794 $ruleactionobj->fetch($ruleaction[
'id']);
796 print
'<tr class="drag drop oddeven" id="row-'.$ruleaction[
'id'].
'">';
797 print
'<td title="'.dol_escape_htmltag($langs->trans(
"Operation").
': '.$ruleaction[
'type']).
'">';
798 print
'<!-- type of action: '.$ruleaction[
'type'].
' -->';
799 if (array_key_exists($ruleaction[
'type'], $arrayoftypes)) {
800 print $langs->trans($arrayoftypes[$ruleaction[
'type']]);
802 if (array_key_exists($ruleaction[
'type'], $arrayoftypesnocondition)) {
803 print
'<span class="opacitymedium">'.$langs->trans($arrayoftypesnocondition[$ruleaction[
'type']]).
' - '.$langs->trans(
"Disabled").
'</span>';
807 if (in_array($ruleaction[
'type'], array(
'recordevent'))) {
808 print $form->textwithpicto(
'', $langs->transnoentitiesnoconv(
'IfTrackingIDFoundEventWillBeLinked'));
809 } elseif (in_array($ruleaction[
'type'], array(
'loadthirdparty',
'loadandcreatethirdparty'))) {
810 print $form->textwithpicto(
'', $langs->transnoentitiesnoconv(
'EmailCollectorLoadThirdPartyHelp'));
813 print
'<td class="wordbreak minwidth300 small">';
814 if ($action ==
'editoperation' && $ruleaction[
'id'] == $operationid) {
816 print
'<textarea class="centpercent" name="operationparam2" rows="3">';
819 print
'<input type="hidden" name="rowidoperation2" value="'.$ruleaction[
'id'].
'">';
820 print
'<input type="submit" class="button small button-save" name="saveoperation2" value="'.$langs->trans(
"Save").
'">';
821 print
'<input type="submit" class="button small button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
827 print
'<td class="center linecolmove tdlineupdown">';
829 print
'<a class="lineupdown" href="'.$_SERVER[
'PHP_SELF'].
'?action=up&rowid='.$ruleaction[
'id'].
'">'.
img_up(
'default', 0,
'imgupforline').
'</a>';
831 if ($i < count(
$object->actions) - 1) {
832 print
'<a class="lineupdown" href="'.$_SERVER[
'PHP_SELF'].
'?action=down&rowid='.$ruleaction[
'id'].
'">'.
img_down(
'default', 0,
'imgdownforline').
'</a>';
836 print
'<td class="right nowraponall">';
837 print
'<a class="editfielda marginrightonly" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=editoperation&token='.
newToken().
'&operationid='.$ruleaction[
'id'].
'">'.
img_edit().
'</a>';
838 print
' <a href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=deleteoperation&token='.
newToken().
'&operationid='.$ruleaction[
'id'].
'">'.
img_delete().
'</a>';
848 if (!empty($conf->use_javascript_ajax)) {
849 $urltorefreshaftermove = DOL_URL_ROOT.
'/admin/emailcollector_card.php?id='.$id;
850 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
859 print
'<div class="clearboth"></div><br>';
864 if ($action !=
'presend' && $action !=
'editline') {
865 print
'<div class="tabsAction">'.
"\n";
866 $parameters = array();
867 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
872 if (empty($reshook)) {
874 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>';
877 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>';
880 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>';
882 if (count(
$object->actions) > 0) {
883 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>';
885 print
'<div class="inline-block divButAction"><a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->trans(
"NoOperations")).
'">'.$langs->trans(
"CollectNow").
'</a></div>';
888 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>';
893 if (!empty($debuginfo)) {
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
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.
load_fiche_titre($title, $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.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
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)
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.
if(!function_exists( 'dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
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.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='')
Show information in HTML for admin users or standard users.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify 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.