Spaces:
No application file
No application file
| 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 = []; | |
| } | |
| } | |