Fix trackid must contains an id of instance
This commit is contained in:
parent
3b193a8a7b
commit
5d596fe584
@ -381,7 +381,7 @@ class CMailFile
|
||||
//$this->message = new Swift_SignedMessage();
|
||||
// Adding a trackid header to a message
|
||||
$headers = $this->message->getHeaders();
|
||||
$headers->addTextHeader('X-Dolibarr-TRACKID', $trackid);
|
||||
$headers->addTextHeader('X-Dolibarr-TRACKID', $trackid . '@' . $host);
|
||||
$headerID = time() . '.swiftmailer-dolibarr-' . $trackid . '@' . $host;
|
||||
$msgid = $headers->get('Message-ID');
|
||||
$msgid->setId($headerID);
|
||||
@ -1011,9 +1011,9 @@ class CMailFile
|
||||
if ($trackid)
|
||||
{
|
||||
// References is kept in response and Message-ID is returned into In-Reply-To:
|
||||
$out.= 'Message-ID: <' . time() . '.phpmail-dolibarr-'.$trackid.'@' . $host . ">" . $this->eol2; // Uppercase seems replaced by phpmail
|
||||
$out.= 'References: <' . time() . '.phpmail-dolibarr-'.$trackid.'@' . $host . ">" . $this->eol2;
|
||||
$out.= 'X-Dolibarr-TRACKID: '.$trackid. $this->eol2;
|
||||
$out.= 'Message-ID: <' . time() . '.phpmail-dolibarr-'. $trackid . '@' . $host . ">" . $this->eol2; // Uppercase seems replaced by phpmail
|
||||
$out.= 'References: <' . time() . '.phpmail-dolibarr-'. $trackid . '@' . $host . ">" . $this->eol2;
|
||||
$out.= 'X-Dolibarr-TRACKID: ' . $trackid . '@' . $host. $this->eol2;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@ -1310,7 +1310,7 @@ class SMTPs
|
||||
// References is kept in response and Message-ID is returned into In-Reply-To:
|
||||
$_header .= 'Message-ID: <' . time() . '.SMTPs-dolibarr-'.$trackid.'@' . $host . ">\r\n";
|
||||
$_header .= 'References: <' . time() . '.SMTPs-dolibarr-'.$trackid.'@' . $host . ">\r\n";
|
||||
$_header .= 'X-Dolibarr-TRACKID: ' . $trackid . "\r\n";
|
||||
$_header .= 'X-Dolibarr-TRACKID: ' . $trackid . '@' . $host . "\r\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@ -610,9 +610,9 @@ if (! function_exists('dol_getprefix'))
|
||||
{
|
||||
/**
|
||||
* Return a prefix to use for this Dolibarr instance, for session/cookie names or email id.
|
||||
* This prefix is valid in a web context only and is unique for instance and avoid conflict
|
||||
* between multi-instances, even when having two instances with one root dir or two instances
|
||||
* in virtual servers.
|
||||
* The prefix for session is unique in a web context only and is unique for instance and avoid conflict
|
||||
* between multi-instances, even when having two instances with one root dir or two instances in virtual servers.
|
||||
* The prefix for email is unique if MAIL_PREFIX_FOR_EMAIL_ID is set to a value, otherwise value may be same than other instance.
|
||||
*
|
||||
* @param string $mode '' (prefix for session name) or 'email' (prefix for email id)
|
||||
* @return string A calculated prefix
|
||||
@ -621,11 +621,15 @@ if (! function_exists('dol_getprefix'))
|
||||
{
|
||||
global $conf;
|
||||
|
||||
// If MAIL_PREFIX_FOR_EMAIL_ID is set and prefix is for email
|
||||
if ($mode == 'email' && ! empty($conf->global->MAIL_PREFIX_FOR_EMAIL_ID))
|
||||
// If prefix is for email
|
||||
if ($mode == 'email')
|
||||
{
|
||||
if ($conf->global->MAIL_PREFIX_FOR_EMAIL_ID != 'SERVER_NAME') return $conf->global->MAIL_PREFIX_FOR_EMAIL_ID;
|
||||
else if (isset($_SERVER["SERVER_NAME"])) return $_SERVER["SERVER_NAME"];
|
||||
if (! empty($conf->global->MAIL_PREFIX_FOR_EMAIL_ID)) // If MAIL_PREFIX_FOR_EMAIL_ID is set (a value initialized with a random value is recommended)
|
||||
{
|
||||
if ($conf->global->MAIL_PREFIX_FOR_EMAIL_ID != 'SERVER_NAME') return $conf->global->MAIL_PREFIX_FOR_EMAIL_ID;
|
||||
else if (isset($_SERVER["SERVER_NAME"])) return $_SERVER["SERVER_NAME"];
|
||||
}
|
||||
return dol_hash(DOL_DOCUMENT_ROOT.DOL_URL_ROOT);
|
||||
}
|
||||
|
||||
if (isset($_SERVER["SERVER_NAME"]) && isset($_SERVER["DOCUMENT_ROOT"]))
|
||||
@ -634,7 +638,7 @@ if (! function_exists('dol_getprefix'))
|
||||
// Use this for a "readable" cookie name
|
||||
//return dol_sanitizeFileName($_SERVER["SERVER_NAME"].$_SERVER["DOCUMENT_ROOT"].DOL_DOCUMENT_ROOT.DOL_URL_ROOT);
|
||||
}
|
||||
else return dol_hash(DOL_DOCUMENT_ROOT.DOL_URL_ROOT);
|
||||
return dol_hash(DOL_DOCUMENT_ROOT.DOL_URL_ROOT);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -745,13 +745,13 @@ class EmailCollector extends CommonObject
|
||||
$sourcestring='';
|
||||
$sourcefield='';
|
||||
$regexstring='';
|
||||
$transformationstring='';
|
||||
//$transformationstring='';
|
||||
$regforregex=array();
|
||||
if (preg_match('/^REGEX:([a-zA-Z0-9]+):(.*):([^:])$/', $valueforproperty, $regforregex))
|
||||
{
|
||||
$sourcefield=$regforregex[0];
|
||||
$regexstring=$regforregex[1];
|
||||
$transofrmationstring=$regforregex[2];
|
||||
//$transofrmationstring=$regforregex[2];
|
||||
}
|
||||
elseif (preg_match('/^REGEX:([a-zA-Z0-9]+):(.*)$/', $valueforproperty, $regforregex))
|
||||
{
|
||||
@ -759,7 +759,7 @@ class EmailCollector extends CommonObject
|
||||
$regexstring=$regforregex[1];
|
||||
}
|
||||
|
||||
if (! empty($sourcestring) && ! empty($regexstring))
|
||||
if (! empty($sourcefield) && ! empty($regexstring))
|
||||
{
|
||||
if (strtolower($sourcefield) == 'body') $sourcestring=$messagetext;
|
||||
elseif (strtolower($sourcefield) == 'subject') $sourcestring=$subject;
|
||||
@ -902,14 +902,28 @@ class EmailCollector extends CommonObject
|
||||
$headers = array_combine($matches[1], $matches[2]);
|
||||
//var_dump($headers);
|
||||
|
||||
// $conf->global->MAIL_PREFIX_FOR_EMAIL_ID must be defined
|
||||
$host=dol_getprefix('email');
|
||||
|
||||
// If there is a filter on trackid
|
||||
//var_dump($host);exit;
|
||||
if ($searchfilterdoltrackid > 0)
|
||||
{
|
||||
if (empty($headers['X-Dolibarr-TRACKID'])) continue;
|
||||
//if (empty($headers['X-Dolibarr-TRACKID'])) continue;
|
||||
if (empty($headers['References']) || ! preg_match('/@'.preg_quote($host,'/').'/', $headers['References']))
|
||||
{
|
||||
$nbemailprocessed++;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if ($searchfilternodoltrackid > 0)
|
||||
{
|
||||
if (! empty($headers['X-Dolibarr-TRACKID'])) continue;
|
||||
if (! empty($headers['References']) && preg_match('/@'.preg_quote($host,'/').'/', $headers['References']))
|
||||
{
|
||||
$nbemailprocessed++;
|
||||
continue;
|
||||
}
|
||||
//if (! empty($headers['X-Dolibarr-TRACKID']) continue;
|
||||
}
|
||||
|
||||
$thirdpartystatic=new Societe($this->db);
|
||||
@ -967,10 +981,11 @@ class EmailCollector extends CommonObject
|
||||
|
||||
$contactid = 0; $thirdpartyid = 0; $projectid = 0;
|
||||
|
||||
// Analyze TrackId
|
||||
// Analyze TrackId in field References
|
||||
// For example: References: <1542377954.SMTPs-dolibarr-thi649@8f6014fde11ec6cdec9a822234fc557e>
|
||||
$trackid = '';
|
||||
$reg=array();
|
||||
if (! empty($headers['X-Dolibarr-TRACKID']) && preg_match('/:\s*([a-z]+)([0-9]+)$/', $headers['X-Dolibarr-TRACKID'], $reg))
|
||||
if (! empty($headers['References']) && preg_match('/dolibarr-([a-z]+)([0-9]+)@'.preg_quote($host,'/').'/', $headers['References'], $reg))
|
||||
{
|
||||
$trackid = $reg[0].$reg[1];
|
||||
|
||||
@ -1002,17 +1017,20 @@ class EmailCollector extends CommonObject
|
||||
$objectemail = new User($this->db);
|
||||
}
|
||||
|
||||
$result = $objectemail->fetch($objectid);
|
||||
if ($result > 0)
|
||||
if (is_object($objectemail))
|
||||
{
|
||||
$fk_element_id = $objectemail->id;
|
||||
$fk_element_type = $objectemail->element;
|
||||
// Fix fk_element_type
|
||||
if ($fk_element_type == 'facture') $fk_element_type = 'invoice';
|
||||
$result = $objectemail->fetch($objectid);
|
||||
if ($result > 0)
|
||||
{
|
||||
$fk_element_id = $objectemail->id;
|
||||
$fk_element_type = $objectemail->element;
|
||||
// Fix fk_element_type
|
||||
if ($fk_element_type == 'facture') $fk_element_type = 'invoice';
|
||||
|
||||
$thirdpartyid = $objectemail->fk_soc;
|
||||
$contactid = $objectemail->fk_socpeople;
|
||||
$projectid = isset($objectemail->fk_project)?$objectemail->fk_project:$objectemail->fk_projet;
|
||||
$thirdpartyid = $objectemail->fk_soc;
|
||||
$contactid = $objectemail->fk_socpeople;
|
||||
$projectid = isset($objectemail->fk_project)?$objectemail->fk_project:$objectemail->fk_projet;
|
||||
}
|
||||
}
|
||||
|
||||
// Project
|
||||
@ -1087,14 +1105,115 @@ class EmailCollector extends CommonObject
|
||||
if (empty($operation['status'])) continue;
|
||||
|
||||
// Make Operation
|
||||
dol_syslog("Execute action ".$operation['type']." actionparam=".$operation['actionparam'].' thirdpartystatic->id='.$thirdpartystatic->id.' contactstatic->id='.$contactstatic->id.' projectstatic->id='.$projectstatic->id);
|
||||
|
||||
// Search and create thirdparty
|
||||
if ($operation['type'] == 'searchandcreatethirdparty')
|
||||
if ($operation['type'] == 'loadthirdparty' && $operation['type'] == 'loadandcreatethirdparty')
|
||||
{
|
||||
if (empty($operation['actionparam']))
|
||||
{
|
||||
$errorforactions++;
|
||||
$this->errors = "Action loadthirdparty or loadandcreatethirdparty has empty parameter. Must be 'VALUE:xxx' or 'REGEX:(body|subject):regex' to extract";
|
||||
}
|
||||
else
|
||||
{
|
||||
$actionparam = $operation['actionparam'];
|
||||
$nametouseforthirdparty='';
|
||||
|
||||
// $this->actionparam = 'VALUE:aaa' or 'REGEX:BODY:....'
|
||||
$arrayvaluetouse = dolExplodeIntoArray($actionparam, ';', '=');
|
||||
foreach($arrayvaluetouse as $propertytooverwrite => $valueforproperty)
|
||||
{
|
||||
$tmpclass=''; $tmpproperty='';
|
||||
$tmparray=explode('.', $propertytooverwrite);
|
||||
if (count($tmparray) == 2)
|
||||
{
|
||||
$tmpclass=$tmparray[0];
|
||||
$tmpproperty=$tmparray[1];
|
||||
}
|
||||
else
|
||||
{
|
||||
$tmpproperty=$tmparray[0];
|
||||
}
|
||||
//if ($tmpclass && ($tmpclass != $object->element)) continue; // Property is for another type of object
|
||||
|
||||
$sourcestring='';
|
||||
$sourcefield='';
|
||||
$regexstring='';
|
||||
$regforregex=array();
|
||||
if (preg_match('/^REGEX:([a-zA-Z0-9]+):(.*)$/', $valueforproperty, $regforregex))
|
||||
{
|
||||
$sourcefield=$regforregex[0];
|
||||
$regexstring=$regforregex[1];
|
||||
}
|
||||
|
||||
if (! empty($sourcefield) && ! empty($regexstring))
|
||||
{
|
||||
if (strtolower($sourcefield) == 'body') $sourcestring=$messagetext;
|
||||
elseif (strtolower($sourcefield) == 'subject') $sourcestring=$subject;
|
||||
|
||||
$regforval=array();
|
||||
if (preg_match('/'.preg_quote($regexstring, '/').'/', $sourcestring, $regforval))
|
||||
{
|
||||
// Overwrite param $tmpproperty
|
||||
$nametouseforthirdparty = $regforval[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
// Nothing can be done for this param
|
||||
}
|
||||
}
|
||||
elseif (preg_match('/^VALUE:(.*)$/', $valueforproperty, $reg))
|
||||
{
|
||||
$nametouseforthirdparty = $reg[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
$errorforactions++;
|
||||
$this->error = 'Bad syntax for description of action parameters: '.$actionparam;
|
||||
$this->errors[] = $this->error;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (! $errorforactions && $nametouseforthirdparty)
|
||||
{
|
||||
$result = $thirdpartystatic->fetch(0, $nametouseforthirdparty);
|
||||
if ($result < 0)
|
||||
{
|
||||
$errorforactions++;
|
||||
$this->error = 'Error when getting thirdparty with name '.$nametouseforthirdparty.' (may be 2 record exists with same name ?)';
|
||||
$this->errors[] = $this->error;
|
||||
break;
|
||||
}
|
||||
elseif ($result == 0)
|
||||
{
|
||||
if ($operation['type'] == 'loadandcreatethirdparty')
|
||||
{
|
||||
// Create thirdparty
|
||||
$thirdpartystatic->name = $nametouseforthirdparty;
|
||||
|
||||
// Overwrite values with values extracted from source email
|
||||
$errorforthisaction = $this->overwritePropertiesOfObject($thirdpartystatic, $operation['actionparam'], $messagetext, $subject);
|
||||
|
||||
if ($errorforthisaction)
|
||||
{
|
||||
$errorforactions++;
|
||||
}
|
||||
else
|
||||
{
|
||||
$result = $thirdpartystatic->create($user);
|
||||
if ($result <= 0)
|
||||
{
|
||||
$errorforactions++;
|
||||
$this->error = $thirdpartystatic->error;
|
||||
$this->errors = $thirdpartystatic->errors;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Create event
|
||||
elseif ($operation['type'] == 'recordevent')
|
||||
|
||||
@ -159,7 +159,7 @@ class EmailCollectorFilter extends CommonObject
|
||||
$this->errors[]=$langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Type"));
|
||||
return -1;
|
||||
}
|
||||
if (! in_array($this->type, array('seen','unseen')) && empty($this->rulevalue))
|
||||
if (! in_array($this->type, array('seen','unseen','withtrackingid','withouttrackingid')) && empty($this->rulevalue))
|
||||
{
|
||||
$langs->load("errors");
|
||||
$this->errors[]=$langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("StringToFilter"));
|
||||
|
||||
@ -1833,7 +1833,7 @@ EmailCollectorConfirmCollectTitle=Email collect confirmation
|
||||
EmailCollectorConfirmCollect=Do you want to run the collect for this collector now ?
|
||||
NoNewEmailToProcess=No new email (matching filters) to process
|
||||
NothingProcessed=Nothing done
|
||||
XEmailsDoneYActionsDone=%s emails analyzed, %s emails successfuly processed (for %s record/actions done) by collector
|
||||
XEmailsDoneYActionsDone=%s emails qualified, %s emails successfuly processed (for %s record/actions done) by collector
|
||||
RecordEvent=Record email event
|
||||
CreateLeadAndThirdParty=Create lead (and thirdparty if necessary)
|
||||
CodeLastResult=Result code of last collect
|
||||
|
||||
Loading…
Reference in New Issue
Block a user