mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-08-25 10:09:20 +03:00
Merge f2648a54c0 into c154d23cfe
This commit is contained in:
commit
439da0ac39
1 changed files with 228 additions and 193 deletions
|
|
@ -51,45 +51,33 @@ class SearchFiltersPlugin extends \RainLoop\Plugins\AbstractPlugin
|
|||
$Filters = $aSettings['SFilters'];
|
||||
|
||||
foreach ($Filters as $filter) {
|
||||
$this->Manager()->logWrite(json_encode([
|
||||
'filter' => $filter,
|
||||
]), LOG_WARNING);
|
||||
$this->Manager()->logWrite(json_encode(['filter' => $filter]), LOG_WARNING);
|
||||
|
||||
$folder = 'INBOX';
|
||||
$searchQ = $filter['searchQ'];
|
||||
$uids = $this->searchMessages($oImapClient, $searchQ, "INBOX");
|
||||
|
||||
//Mark as read/seen
|
||||
if ($filter['fSeen']) {
|
||||
foreach ($uids as $uid) {
|
||||
$oRange = new MailSo\Imap\SequenceSet([$uid]);
|
||||
$this->Manager()->Actions()->MailClient()->MessageSetFlag(
|
||||
$folder,
|
||||
$oRange,
|
||||
MailSo\Imap\Enumerations\MessageFlag::SEEN
|
||||
);
|
||||
// obsługa keyword (multi-folder)
|
||||
if (stripos($searchQ, 'keyword=') !== false) {
|
||||
$oMailClient = $this->Manager()->Actions()->MailClient();
|
||||
|
||||
// Pobieramy wszystkie foldery top-level
|
||||
$folders = $oMailClient->Folders('', false, '');
|
||||
foreach ($folders as $f) {
|
||||
$folder = $f->FullName ?? null;
|
||||
if (!$folder) continue;
|
||||
|
||||
$uids = $this->searchMessages($oImapClient, $searchQ, $folder);
|
||||
if (!empty($uids)) {
|
||||
$this->applyActions($oImapClient, $filter, $uids, $folder);
|
||||
}
|
||||
}
|
||||
|
||||
//Flag/Star message
|
||||
if ($filter['fFlag']) {
|
||||
foreach ($uids as $uid) {
|
||||
$oRange = new MailSo\Imap\SequenceSet([$uid]);
|
||||
$this->Manager()->Actions()->MailClient()->MessageSetFlag(
|
||||
$folder,
|
||||
$oRange,
|
||||
MailSo\Imap\Enumerations\MessageFlag::FLAGGED
|
||||
);
|
||||
}
|
||||
continue; // przechodzimy do następnego filtra
|
||||
}
|
||||
|
||||
// Move to folder
|
||||
if ($filter['fFolder']) {
|
||||
$folder = $filter['fFolder'];
|
||||
foreach ($uids as $uid) {
|
||||
$oRange = new MailSo\Imap\SequenceSet([$uid]);
|
||||
$oImapClient->MessageMove("INBOX", $folder, $oRange);
|
||||
}
|
||||
// normalny search w INBOX
|
||||
$uids = $this->searchMessages($oImapClient, $searchQ, 'INBOX');
|
||||
if (!empty($uids)) {
|
||||
$this->applyActions($oImapClient, $filter, $uids, 'INBOX');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -99,10 +87,7 @@ class SearchFiltersPlugin extends \RainLoop\Plugins\AbstractPlugin
|
|||
string $search,
|
||||
string $folder = "INBOX"
|
||||
): array {
|
||||
$oParams = new \MailSo\Mail\MessageListParams();
|
||||
$oParams->sSearch = $search;
|
||||
$oParams->sFolderName = $folder;
|
||||
|
||||
try {
|
||||
$bUseCache = false;
|
||||
$oSearchCriterias = \MailSo\Imap\SearchCriterias::fromString(
|
||||
$imapClient,
|
||||
|
|
@ -114,7 +99,57 @@ class SearchFiltersPlugin extends \RainLoop\Plugins\AbstractPlugin
|
|||
|
||||
$imapClient->FolderSelect($folder);
|
||||
return $imapClient->MessageSearch($oSearchCriterias, true);
|
||||
|
||||
} catch (\Throwable $e) {
|
||||
$this->Manager()->logWrite(
|
||||
'SearchFilters IMAP error in folder "' . $folder .
|
||||
'" for search "' . $search . '": ' . $e->getMessage(),
|
||||
LOG_ERR
|
||||
);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
private function applyActions(
|
||||
\MailSo\Imap\ImapClient $imapClient,
|
||||
array $filter,
|
||||
array $uids,
|
||||
string $folder
|
||||
) {
|
||||
// Mark as read/seen
|
||||
if (!empty($filter['fSeen'])) {
|
||||
foreach ($uids as $uid) {
|
||||
$oRange = new \MailSo\Imap\SequenceSet([$uid]);
|
||||
$this->Manager()->Actions()->MailClient()->MessageSetFlag(
|
||||
$folder,
|
||||
$oRange,
|
||||
\MailSo\Imap\Enumerations\MessageFlag::SEEN
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Flag/Star message
|
||||
if (!empty($filter['fFlag'])) {
|
||||
foreach ($uids as $uid) {
|
||||
$oRange = new \MailSo\Imap\SequenceSet([$uid]);
|
||||
$this->Manager()->Actions()->MailClient()->MessageSetFlag(
|
||||
$folder,
|
||||
$oRange,
|
||||
\MailSo\Imap\Enumerations\MessageFlag::FLAGGED
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Move to folder
|
||||
if (!empty($filter['fFolder']) && $filter['fFolder'] !== -1) {
|
||||
foreach ($uids as $uid) {
|
||||
$oRange = new \MailSo\Imap\SequenceSet([$uid]);
|
||||
$imapClient->MessageMove('INBOX', $filter['fFolder'], $oRange);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function GetFilters()
|
||||
{
|
||||
|
|
@ -173,7 +208,6 @@ class SearchFiltersPlugin extends \RainLoop\Plugins\AbstractPlugin
|
|||
} else {
|
||||
$aSettings['SFilters'][$foundIndex] = $newFilter;
|
||||
}
|
||||
|
||||
return $this->jsonResponse(__FUNCTION__, $this->saveUserSettings($aSettings));
|
||||
}
|
||||
|
||||
|
|
@ -211,3 +245,4 @@ class SearchFiltersPlugin extends \RainLoop\Plugins\AbstractPlugin
|
|||
return $this->jsonResponse(__FUNCTION__, $this->saveUserSettings($aSettings));
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue