mirror of
https://github.com/itflow-org/itflow
synced 2026-03-11 16:24:50 +00:00
Add new optional beta email parser thats based on ImapEngine instead of Webklex
This commit is contained in:
226
plugins/vendor/directorytree/imapengine/src/Testing/FakeMessageQuery.php
vendored
Normal file
226
plugins/vendor/directorytree/imapengine/src/Testing/FakeMessageQuery.php
vendored
Normal file
@@ -0,0 +1,226 @@
|
||||
<?php
|
||||
|
||||
namespace DirectoryTree\ImapEngine\Testing;
|
||||
|
||||
use BackedEnum;
|
||||
use DirectoryTree\ImapEngine\Collections\MessageCollection;
|
||||
use DirectoryTree\ImapEngine\Connection\ImapQueryBuilder;
|
||||
use DirectoryTree\ImapEngine\Enums\ImapFetchIdentifier;
|
||||
use DirectoryTree\ImapEngine\MessageInterface;
|
||||
use DirectoryTree\ImapEngine\MessageQueryInterface;
|
||||
use DirectoryTree\ImapEngine\Pagination\LengthAwarePaginator;
|
||||
use DirectoryTree\ImapEngine\QueriesMessages;
|
||||
|
||||
class FakeMessageQuery implements MessageQueryInterface
|
||||
{
|
||||
use QueriesMessages;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
public function __construct(
|
||||
protected FakeFolder $folder,
|
||||
protected ImapQueryBuilder $query = new ImapQueryBuilder
|
||||
) {}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function get(): MessageCollection
|
||||
{
|
||||
return new MessageCollection(
|
||||
$this->folder->getMessages()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function count(): int
|
||||
{
|
||||
return count(
|
||||
$this->folder->getMessages()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function first(): ?MessageInterface
|
||||
{
|
||||
return $this->get()->first();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function firstOrFail(): MessageInterface
|
||||
{
|
||||
return $this->get()->firstOrFail();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function append(string $message, mixed $flags = null): int
|
||||
{
|
||||
$uid = 1;
|
||||
|
||||
if ($lastMessage = $this->get()->last()) {
|
||||
$uid = $lastMessage->uid() + 1;
|
||||
}
|
||||
|
||||
$this->folder->addMessage(
|
||||
new FakeMessage($uid, $flags === null ? [] : $flags, $message)
|
||||
);
|
||||
|
||||
return $uid;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function each(callable $callback, int $chunkSize = 10, int $startChunk = 1): void
|
||||
{
|
||||
$this->chunk(function (MessageCollection $messages) use ($callback) {
|
||||
foreach ($messages as $key => $message) {
|
||||
if ($callback($message, $key) === false) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}, $chunkSize, $startChunk);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function chunk(callable $callback, int $chunkSize = 10, int $startChunk = 1): void
|
||||
{
|
||||
$page = $startChunk;
|
||||
|
||||
foreach ($this->get()->chunk($chunkSize) as $chunk) {
|
||||
if ($page < $startChunk) {
|
||||
$page++;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
// If the callback returns false, break out.
|
||||
if ($callback($chunk, $page) === false) {
|
||||
break;
|
||||
}
|
||||
|
||||
$page++;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function paginate(int $perPage = 5, $page = null, string $pageName = 'page'): LengthAwarePaginator
|
||||
{
|
||||
return $this->get()->paginate($perPage, $page, $pageName);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function findOrFail(int $id, ImapFetchIdentifier $identifier = ImapFetchIdentifier::Uid): MessageInterface
|
||||
{
|
||||
return $this->get()->findOrFail($id);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function find(int $id, ImapFetchIdentifier $identifier = ImapFetchIdentifier::Uid): ?MessageInterface
|
||||
{
|
||||
return $this->get()->find($id);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function destroy(array|int $uids, bool $expunge = false): void
|
||||
{
|
||||
$messages = $this->get()->keyBy(
|
||||
fn (MessageInterface $message) => $message->uid()
|
||||
);
|
||||
|
||||
foreach ((array) $uids as $uid) {
|
||||
$messages->pull($uid);
|
||||
}
|
||||
|
||||
$this->folder->setMessages(
|
||||
$messages->values()->all()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function flag(BackedEnum|string $flag, string $operation, bool $expunge = false): int
|
||||
{
|
||||
return count($this->folder->getMessages());
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function markRead(): int
|
||||
{
|
||||
return count($this->folder->getMessages());
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function markUnread(): int
|
||||
{
|
||||
return count($this->folder->getMessages());
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function markFlagged(): int
|
||||
{
|
||||
return count($this->folder->getMessages());
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function unmarkFlagged(): int
|
||||
{
|
||||
return count($this->folder->getMessages());
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function delete(bool $expunge = false): int
|
||||
{
|
||||
$count = count($this->folder->getMessages());
|
||||
|
||||
$this->folder->setMessages([]);
|
||||
|
||||
return $count;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function move(string $folder, bool $expunge = false): int
|
||||
{
|
||||
return count($this->folder->getMessages());
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function copy(string $folder): int
|
||||
{
|
||||
return count($this->folder->getMessages());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user