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(
'/-.*$/',
'', $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());
449 '@phan-var-force OAuth\OAuth2\Service\AbstractService|OAuth\OAuth1\Service\AbstractService $apiService';
452 $refreshtoken = $tokenobj->getRefreshToken();
456 $tokenobj = $apiService->refreshAccessToken($tokenobj);
458 throw new Exception(
"Failed to refresh access token: ".$e->getMessage());
462 $tokenobj->setRefreshToken($refreshtoken);
463 $storage->storeAccessToken($OAUTH_SERVICENAME, $tokenobj);
466 $tokenobj = $storage->retrieveAccessToken($OAUTH_SERVICENAME);
467 if (is_object($tokenobj)) {
468 $token = $tokenobj->getAccessToken();
471 $morehtml .=
"Token not found";
475 $morehtml .= $e->getMessage();
480 $morehtml .=
'Error: Login is empty. Must be email owner when using MAIN_IMAP_USE_PHPIMAP and OAuth.';
483 $cm =
new ClientManager();
484 $client = $cm->make([
487 'encryption' =>
'ssl',
488 'validate_cert' =>
true,
489 'protocol' =>
'imap',
491 'password' => $token,
492 'authentication' =>
"oauth",
495 dol_syslog(
"Scan IMAP with authentication mode = PASS");
498 $cm =
new ClientManager();
499 $client = $cm->make([
502 'encryption' =>
'ssl',
503 'validate_cert' =>
true,
504 'protocol' =>
'imap',
506 'password' =>
$object->password,
507 'authentication' =>
"login",
527 $f = $client->getFolders(
false,
$object->source_directory);
530 if ($folder instanceof Webklex\PHPIMAP\Folder) {
531 $nbemail = $folder->examine()[
"exists"];
538 $morehtml .= $nbemail;
539 }
catch (ConnectionFailedException $e) {
540 $morehtml .=
'ConnectionFailedException '.$e->getMessage();
544 if (function_exists(
'imap_open')) {
548 $connectstringsource = $connectstringserver.$object->getEncodedUtf7($sourcedir);
552 $connectstringtarget = $connectstringserver.$object->getEncodedUtf7($targetdir);
558 dol_syslog(
"imap_open connectstring=".$connectstringsource.
" login=".
$object->login.
" password=".
$object->password.
" timeoutconnect=".$timeoutconnect.
" timeoutread=".$timeoutread);
560 $result1 = imap_timeout(IMAP_OPENTIMEOUT, $timeoutconnect);
561 $result2 = imap_timeout(IMAP_READTIMEOUT, $timeoutread);
562 $result3 = imap_timeout(IMAP_WRITETIMEOUT, 5);
563 $result4 = imap_timeout(IMAP_CLOSETIMEOUT, 5);
565 dol_syslog(
"result1=".$result1.
" result2=".$result2.
" result3=".$result3.
" result4=".$result4);
567 $connection = imap_open($connectstringsource,
$object->login,
$object->password);
571 $morehtml .= $e->getMessage();
575 $morehtml .=
'Failed to open IMAP connection '.$connectstringsource;
576 if (function_exists(
'imap_last_error')) {
577 $morehtml .=
'<br>'.imap_last_error();
582 dol_syslog(
"Imap connected. Now we call imap_num_msg()");
583 $morehtml .= imap_num_msg($connection);
588 imap_close($connection);
591 $morehtml .=
'IMAP functions not available on your PHP. ';
596 $morehtml = $form->textwithpicto($langs->trans(
"NbOfEmailsInInbox"),
'Connect string = '.$connectstringserver.
'<br>Option MAIN_IMAP_USE_PHPIMAP = '.
getDolGlobalInt(
'MAIN_IMAP_USE_PHPIMAP')).
': '.($morehtml !==
'' ? $morehtml :
'?');
597 $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>';
599 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref.
'<div class="refidno">'.$morehtml.
'</div>',
'', 0,
'',
'', 0,
'');
601 print
'<div class="fichecenter">';
602 print
'<div class="fichehalfleft">';
603 print
'<div class="underbanner clearboth"></div>';
604 print
'<table class="border centpercent tableforfield">'.
"\n";
607 if (
$object->acces_type == 0) {
609 unset(
$object->fields[
'oauth_service']);
611 if (
$object->acces_type == 1) {
613 unset(
$object->fields[
'password']);
618 include DOL_DOCUMENT_ROOT.
'/core/tpl/commonfields_view.tpl.php';
621 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
626 print
'<form method="POST" action="'.$_SERVER[
"PHP_SELF"].
'">';
627 print
'<input type="hidden" name="token" value="'.newToken().
'">';
628 print
'<input type="hidden" name="action" value="updatefiltersactions">';
629 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
630 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
633 print
'<div class="div-table-responsive-no-min">';
634 print
'<table id="tablelineoffilters" class="noborder nobordertop noshadow">';
635 print
'<tr class="liste_titre nodrag nodrop">';
636 print
'<td>'.img_picto(
'',
'filter',
'class="pictofixedwidth opacitymedium"').$form->textwithpicto($langs->trans(
"Filters"), $langs->trans(
"EmailCollectorFilterDesc")).
'</td><td></td><td></td>';
639 print
'<tr class="oddeven nodrag nodrop">';
641 $arrayoftypes = array(
642 'from' => array(
'label' =>
'MailFrom',
'data-placeholder' => $langs->trans(
'SearchString')),
643 'to' => array(
'label' =>
'MailTo',
'data-placeholder' => $langs->trans(
'SearchString')),
644 'cc' => array(
'label' =>
'Cc',
'data-placeholder' => $langs->trans(
'SearchString')),
645 'bcc' => array(
'label' =>
'Bcc',
'data-placeholder' => $langs->trans(
'SearchString')),
646 'replyto' => array(
'label' =>
'ReplyTo',
'data-placeholder' => $langs->trans(
'SearchString')),
647 'subject' => array(
'label' =>
'Subject',
'data-placeholder' => $langs->trans(
'SearchString')),
648 'body' => array(
'label' =>
'Body',
'data-placeholder' => $langs->trans(
'SearchString')),
653 'seen' => array(
'label' =>
'AlreadyRead',
'data-noparam' => 1),
654 'unseen' => array(
'label' =>
'NotRead',
'data-noparam' => 1),
655 'unanswered' => array(
'label' =>
'Unanswered',
'data-noparam' => 1),
656 'answered' => array(
'label' =>
'Answered',
'data-noparam' => 1),
657 'smaller' => array(
'label' => $langs->trans(
"Size").
' ('.$langs->trans(
"SmallerThan").
")",
'data-placeholder' => $langs->trans(
'NumberOfBytes')),
658 'larger' => array(
'label' => $langs->trans(
"Size").
' ('.$langs->trans(
"LargerThan").
")",
'data-placeholder' => $langs->trans(
'NumberOfBytes')),
660 'withtrackingid' => array(
'label' =>
'WithDolTrackingID',
'data-noparam' => 1),
661 'withouttrackingid' => array(
'label' =>
'WithoutDolTrackingID',
'data-noparam' => 1),
662 'withtrackingidinmsgid' => array(
'label' =>
'WithDolTrackingIDInMsgId',
'data-noparam' => 1),
663 'withouttrackingidinmsgid' => array(
'label' =>
'WithoutDolTrackingIDInMsgId',
'data-noparam' => 1),
665 'isnotanswer' => array(
'label' =>
'IsNotAnAnswer',
'data-noparam' => 1),
666 'isanswer' => array(
'label' =>
'IsAnAnswer',
'data-noparam' => 1)
668 print $form->selectarray(
'filtertype', $arrayoftypes,
'', 1, 0, 0,
'', 1, 0, 0,
'',
'maxwidth300', 1,
'', 2);
672 print
'jQuery("#filtertype").change(function() {
673 console.log("We change a filter");
674 if (jQuery("#filtertype option:selected").attr("data-noparam")) {
675 jQuery("#rulevalue").attr("placeholder", "");
676 jQuery("#rulevalue").text("");
677 jQuery("#rulevalue").prop("disabled", true);
678 jQuery("#rulevaluehelp").addClass("unvisible");
680 jQuery("#rulevalue").prop("disabled", false);
681 jQuery("#rulevaluehelp").removeClass("unvisible");
683 jQuery("#rulevalue").attr("placeholder", (jQuery("#filtertype option:selected").attr("data-placeholder")));
691 print
'</script>'.
"\n";
693 print
'</td><td class="nowraponall">';
694 print
'<div class="nowraponall">';
695 print
'<input type="text" name="rulevalue" id="rulevalue" class="inline-block valignmiddle">';
696 print
'<div class="inline-block valignmiddle unvisible" id="rulevaluehelp">';
697 print
img_warning($langs->trans(
"FilterSearchImapHelp"),
'',
'pictowarning classfortooltip');
701 print
'<td class="right"><input type="submit" name="addfilter" id="addfilter" class="flat button smallpaddingimp" value="'.$langs->trans(
"Add").
'"></td>';
704 foreach (
$object->filters as $rulefilter) {
706 $rulefilterobj->fetch($rulefilter[
'id']);
708 print
'<tr class="oddeven">';
709 print
'<td title="'.dol_escape_htmltag($langs->trans(
"Filter").
': '.$rulefilter[
'type']).
'">';
710 print $langs->trans($arrayoftypes[$rulefilter[
'type']][
'label']);
712 print
'<td>'.$rulefilter[
'rulevalue'].
'</td>';
713 print
'<td class="right">';
714 print
' <a href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=deletefilter&token='.urlencode(
newToken()).
'&filterid='.$rulefilter[
'id'].
'">'.
img_delete().
'</a>';
723 print
'<div class="clearboth"></div><br><br>';
726 print
'<div class="div-table-responsive-no-min">';
727 print
'<table id="tablelines" class="noborder noshadow">';
728 print
'<tr class="liste_titre nodrag nodrop">';
729 print
'<td>'.img_picto(
'',
'technic',
'class="pictofixedwidth"').$form->textwithpicto($langs->trans(
"EmailcollectorOperations"), $langs->trans(
"EmailcollectorOperationsDesc")).
'</td>';
731 $htmltext = $langs->transnoentitiesnoconv(
"OperationParamDesc");
732 print $form->textwithpicto($langs->trans(
"Parameters"), $htmltext, 1,
'help',
'', 0, 2,
'operationparamtt');
738 $arrayoftypes = array(
739 'loadthirdparty' => $langs->trans(
'LoadThirdPartyFromName', $langs->transnoentities(
"ThirdPartyName").
'/'.$langs->transnoentities(
"AliasNameShort").
'/'.$langs->transnoentities(
"Email").
'/'.$langs->transnoentities(
"ID")),
740 'loadandcreatethirdparty' => $langs->trans(
'LoadThirdPartyFromNameOrCreate', $langs->transnoentities(
"ThirdPartyName").
'/'.$langs->transnoentities(
"AliasNameShort").
'/'.$langs->transnoentities(
"Email").
'/'.$langs->transnoentities(
"ID")),
741 'recordjoinpiece' =>
'AttachJoinedDocumentsToObject',
742 'recordevent' =>
'RecordEvent'
744 $arrayoftypesnocondition = $arrayoftypes;
745 if (isModEnabled(
'project')) {
746 $arrayoftypes[
'project'] =
'CreateLeadAndThirdParty';
748 $arrayoftypesnocondition[
'project'] =
'CreateLeadAndThirdParty';
749 if (isModEnabled(
'ticket')) {
750 $arrayoftypes[
'ticket'] =
'CreateTicketAndThirdParty';
752 $arrayoftypesnocondition[
'ticket'] =
'CreateTicketAndThirdParty';
753 if (isModEnabled(
'recruitment')) {
754 $arrayoftypes[
'candidature'] =
'CreateCandidature';
756 $arrayoftypesnocondition[
'candidature'] =
'CreateCandidature';
759 $parameters = array(
'arrayoftypes' => $arrayoftypes);
760 $res = $hookmanager->executeHooks(
'addMoreActionsEmailCollector', $parameters, $object, $action);
763 $arrayoftypes = $hookmanager->resArray;
765 foreach ($hookmanager->resArray as $k => $desc) {
766 $arrayoftypes[$k] = $desc;
771 print
'<tr class="oddeven nodrag nodrop">';
773 print $form->selectarray(
'operationtype', $arrayoftypes,
'', 1, 0, 0,
'', 1, 0, 0,
'',
'minwidth150 maxwidth250', 1);
775 print
'<textarea class="centpercent" name="operationparam" rows="3"></textarea>';
779 print
'<td class="right"><input type="submit" name="addoperation" id="addoperation" class="flat button smallpaddingimp" value="'.$langs->trans(
"Add").
'"></td>';
782 $nboflines = count(
$object->actions);
783 $table_element_line =
'emailcollector_emailcollectoraction';
784 $fk_element =
'position';
786 foreach (
$object->actions as $ruleaction) {
788 $ruleactionobj->fetch($ruleaction[
'id']);
790 print
'<tr class="drag drop oddeven" id="row-'.$ruleaction[
'id'].
'">';
791 print
'<td title="'.dol_escape_htmltag($langs->trans(
"Operation").
': '.$ruleaction[
'type']).
'">';
792 print
'<!-- type of action: '.$ruleaction[
'type'].
' -->';
793 if (array_key_exists($ruleaction[
'type'], $arrayoftypes)) {
794 print $langs->trans($arrayoftypes[$ruleaction[
'type']]);
796 if (array_key_exists($ruleaction[
'type'], $arrayoftypesnocondition)) {
797 print
'<span class="opacitymedium">'.$langs->trans($arrayoftypesnocondition[$ruleaction[
'type']]).
' - '.$langs->trans(
"Disabled").
'</span>';
801 if (in_array($ruleaction[
'type'], array(
'recordevent'))) {
802 print $form->textwithpicto(
'', $langs->transnoentitiesnoconv(
'IfTrackingIDFoundEventWillBeLinked'));
803 } elseif (in_array($ruleaction[
'type'], array(
'loadthirdparty',
'loadandcreatethirdparty'))) {
804 print $form->textwithpicto(
'', $langs->transnoentitiesnoconv(
'EmailCollectorLoadThirdPartyHelp'));
807 print
'<td class="wordbreak minwidth300 small">';
808 if ($action ==
'editoperation' && $ruleaction[
'id'] == $operationid) {
810 print
'<textarea class="centpercent" name="operationparam2" rows="3">';
813 print
'<input type="hidden" name="rowidoperation2" value="'.$ruleaction[
'id'].
'">';
814 print
'<input type="submit" class="button small button-save" name="saveoperation2" value="'.$langs->trans(
"Save").
'">';
815 print
'<input type="submit" class="button small button-cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
821 print
'<td class="center linecolmove tdlineupdown">';
823 print
'<a class="lineupdown" href="'.$_SERVER[
'PHP_SELF'].
'?action=up&rowid='.$ruleaction[
'id'].
'">'.
img_up(
'default', 0,
'imgupforline').
'</a>';
825 if ($i < count(
$object->actions) - 1) {
826 print
'<a class="lineupdown" href="'.$_SERVER[
'PHP_SELF'].
'?action=down&rowid='.$ruleaction[
'id'].
'">'.
img_down(
'default', 0,
'imgdownforline').
'</a>';
830 print
'<td class="right nowraponall">';
831 print
'<a class="editfielda marginrightonly" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=editoperation&token='.
newToken().
'&operationid='.$ruleaction[
'id'].
'">'.
img_edit().
'</a>';
832 print
' <a href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=deleteoperation&token='.
newToken().
'&operationid='.$ruleaction[
'id'].
'">'.
img_delete().
'</a>';
842 if (!empty($conf->use_javascript_ajax)) {
843 $urltorefreshaftermove = DOL_URL_ROOT.
'/admin/emailcollector_card.php?id='.
$id;
844 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
853 print
'<div class="clearboth"></div><br>';
858 if ($action !=
'presend' && $action !=
'editline') {
859 print
'<div class="tabsAction">'.
"\n";
860 $parameters = array();
861 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
866 if (empty($reshook)) {
868 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>';
871 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>';
874 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>';
876 if (count(
$object->actions) > 0) {
877 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>';
879 print
'<div class="inline-block divButAction"><a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->trans(
"NoOperations")).
'">'.$langs->trans(
"CollectNow").
'</a></div>';
882 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>';
887 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($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
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 a 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.