Spaces:
No application file
No application file
File size: 1,611 Bytes
d2897cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
<?php
namespace Mautic\EmailBundle\Stat;
use Mautic\EmailBundle\Entity\Stat;
use Mautic\EmailBundle\Model\EmailStatModel;
use Mautic\EmailBundle\Stat\Exception\StatNotFoundException;
class StatHelper
{
/**
* Just store email ID and lead ID to avoid doctrine RAM issues with entities.
*
* @var Reference[]
*/
private $stats = [];
/**
* @var array
*/
private $deleteUs = [];
public function __construct(
private EmailStatModel $emailStatModel
) {
}
public function storeStat(Stat $stat, $emailAddress): void
{
$this->emailStatModel->saveEntity($stat);
// to avoid Doctrine RAM issues, we're just going to hold onto ID references
$this->stats[$emailAddress] = new Reference($stat);
// clear stat from doctrine memory
$this->emailStatModel->getRepository()->detachEntity($stat);
}
public function deletePending(): void
{
if (count($this->deleteUs)) {
$this->emailStatModel->getRepository()->deleteStats($this->deleteUs);
}
}
public function markForDeletion(Reference $stat): void
{
$this->deleteUs[] = $stat->getStatId();
}
/**
* @return Reference
*
* @throws StatNotFoundException
*/
public function getStat($emailAddress)
{
if (!isset($this->stats[$emailAddress])) {
throw new StatNotFoundException();
}
return $this->stats[$emailAddress];
}
public function reset(): void
{
$this->deleteUs = [];
$this->stats = [];
}
}
|