Fix search on not with imapv2

This commit is contained in:
Laurent Destailleur 2023-04-12 16:01:07 +02:00
parent 0d8d2528b0
commit 949e288ce0

View File

@ -1096,6 +1096,8 @@ class EmailCollector extends CommonObject
$searchfilterisanswer = 0; $searchfilterisanswer = 0;
$searchfilterisnotanswer = 0; $searchfilterisnotanswer = 0;
$searchfilterreplyto = 0; $searchfilterreplyto = 0;
$searchfilterexcludebody = '';
$searchfilterexcludesubject = '';
$operationslog = ''; $operationslog = '';
$now = dol_now(); $now = dol_now();
@ -1285,10 +1287,20 @@ class EmailCollector extends CommonObject
array_push($criteria, array($not."CC" => $rule['rulevalue'])); array_push($criteria, array($not."CC" => $rule['rulevalue']));
} }
if ($rule['type'] == 'subject') { if ($rule['type'] == 'subject') {
array_push($criteria, array($not."SUBJECT" => $rule['rulevalue'])); if (strpos($rule['rulevalue'], '!') === 0) {
//array_push($criteria, array("NOT SUBJECT" => $rule['rulevalue']));
$searchfilterexcludesubject = preg_replace('/^!/', '', $rule['rulevalue']);
} else {
array_push($criteria, array("SUBJECT" => $rule['rulevalue']));
}
} }
if ($rule['type'] == 'body') { if ($rule['type'] == 'body') {
array_push($criteria, array($not."BODY" => $rule['rulevalue'])); if (strpos($rule['rulevalue'], '!') === 0) {
//array_push($criteria, array("NOT BODY" => $rule['rulevalue']));
$searchfilterexcludebody = preg_replace('/^!/', '', $rule['rulevalue']);
} else {
array_push($criteria, array("BODY" => $rule['rulevalue']));
}
} }
if ($rule['type'] == 'header') { if ($rule['type'] == 'header') {
array_push($criteria, array($not."HEADER" => $rule['rulevalue'])); array_push($criteria, array($not."HEADER" => $rule['rulevalue']));
@ -1406,10 +1418,20 @@ class EmailCollector extends CommonObject
$search .= ($search ? ' ' : '').$not.'CC'; $search .= ($search ? ' ' : '').$not.'CC';
} }
if ($rule['type'] == 'subject') { if ($rule['type'] == 'subject') {
$search .= ($search ? ' ' : '').$not.'SUBJECT "'.str_replace('"', '', $rule['rulevalue']).'"'; if (strpos($rule['rulevalue'], '!') === 0) {
//$search .= ($search ? ' ' : '').'NOT BODY "'.str_replace('"', '', $rule['rulevalue']).'"';
$searchfilterexcludesubject = preg_replace('/^!/', '', $rule['rulevalue']);
} else {
$search .= ($search ? ' ' : '').'SUBJECT "'.str_replace('"', '', $rule['rulevalue']).'"';
}
} }
if ($rule['type'] == 'body') { if ($rule['type'] == 'body') {
$search .= ($search ? ' ' : '').$not.'BODY "'.str_replace('"', '', $rule['rulevalue']).'"'; if (strpos($rule['rulevalue'], '!') === 0) {
//$search .= ($search ? ' ' : '').'NOT BODY "'.str_replace('"', '', $rule['rulevalue']).'"';
$searchfilterexcludebody = preg_replace('/^!/', '', $rule['rulevalue']);
} else {
$search .= ($search ? ' ' : '').'BODY "'.str_replace('"', '', $rule['rulevalue']).'"';
}
} }
if ($rule['type'] == 'header') { if ($rule['type'] == 'header') {
$search .= ($search ? ' ' : '').$not.'HEADER '.$rule['rulevalue']; $search .= ($search ? ' ' : '').$not.'HEADER '.$rule['rulevalue'];
@ -1684,8 +1706,6 @@ class EmailCollector extends CommonObject
$ticketfoundby = ''; $ticketfoundby = '';
$candidaturefoundby = ''; $candidaturefoundby = '';
$this->db->begin();
if (!empty($conf->global->MAIN_IMAP_USE_PHPIMAP)) { if (!empty($conf->global->MAIN_IMAP_USE_PHPIMAP)) {
dol_syslog("msgid=".$overview['message_id']." date=".dol_print_date($overview['date'], 'dayrfc', 'gmt')." from=".$overview['from']." to=".$overview['to']." subject=".$overview['subject']); dol_syslog("msgid=".$overview['message_id']." date=".dol_print_date($overview['date'], 'dayrfc', 'gmt')." from=".$overview['from']." to=".$overview['to']." subject=".$overview['subject']);
@ -1719,7 +1739,7 @@ class EmailCollector extends CommonObject
$attachments = []; $attachments = [];
} }
} else { } else {
$this->getmsg($connection, $imapemail); $this->getmsg($connection, $imapemail); // This set global var $charset, $htmlmsg, $plainmsg, $attachments
} }
//print $plainmsg; //print $plainmsg;
//var_dump($plainmsg); exit; //var_dump($plainmsg); exit;
@ -1729,6 +1749,15 @@ class EmailCollector extends CommonObject
// Removed emojis // Removed emojis
$messagetext = preg_replace('/[\x{10000}-\x{10FFFF}]/u', "\xEF\xBF\xBD", $messagetext); $messagetext = preg_replace('/[\x{10000}-\x{10FFFF}]/u', "\xEF\xBF\xBD", $messagetext);
if ($searchfilterexcludebody) {
if (preg_match('/'.preg_quote($searchfilterexcludebody, '/').'/ms', $messagetext)) {
$nbemailprocessed++;
$operationslog .= '<br>Discarded - Email body contains string '.$searchfilterexcludebody;
dol_syslog(" Discarded - Email body contains string ".$searchfilterexcludebody);
continue; // Exclude email
}
}
//var_dump($plainmsg); //var_dump($plainmsg);
//var_dump($htmlmsg); //var_dump($htmlmsg);
//var_dump($messagetext); //var_dump($messagetext);
@ -1812,6 +1841,14 @@ class EmailCollector extends CommonObject
//var_dump($msgid);exit; //var_dump($msgid);exit;
} }
if ($searchfilterexcludesubject) {
if (preg_match('/'.preg_quote($searchfilterexcludesubject, '/').'/ms', $subject)) {
$nbemailprocessed++;
$operationslog .= '<br>Discarded - Email subject contains string '.$searchfilterexcludesubject;
dol_syslog(" Discarded - Email subject contains string ".$searchfilterexcludesubject);
continue; // Exclude email
}
}
$reg = array(); $reg = array();
if (preg_match('/^(.*)<(.*)>$/', $fromstring, $reg)) { if (preg_match('/^(.*)<(.*)>$/', $fromstring, $reg)) {
@ -1830,6 +1867,7 @@ class EmailCollector extends CommonObject
} }
$fk_element_id = 0; $fk_element_type = ''; $fk_element_id = 0; $fk_element_type = '';
$this->db->begin();
$contactid = 0; $thirdpartyid = 0; $projectid = 0; $ticketid = 0; $contactid = 0; $thirdpartyid = 0; $projectid = 0; $ticketid = 0;