Spaces:
No application file
No application file
| namespace Mautic\ChannelBundle\PreferenceBuilder; | |
| use Doctrine\Common\Collections\ArrayCollection; | |
| use Mautic\CampaignBundle\Entity\Event; | |
| use Mautic\CampaignBundle\Entity\LeadEventLog; | |
| class ChannelPreferences | |
| { | |
| /** | |
| * @var ArrayCollection[] | |
| */ | |
| private array $organizedByPriority = []; | |
| public function __construct( | |
| private Event $event | |
| ) { | |
| } | |
| /** | |
| * @param int $priority | |
| * | |
| * @return $this | |
| */ | |
| public function addPriority($priority) | |
| { | |
| $priority = (int) $priority; | |
| if (!isset($this->organizedByPriority[$priority])) { | |
| $this->organizedByPriority[$priority] = new ArrayCollection(); | |
| } | |
| return $this; | |
| } | |
| /** | |
| * @param int $priority | |
| * | |
| * @return $this | |
| */ | |
| public function addLog(LeadEventLog $log, $priority) | |
| { | |
| $priority = (int) $priority; | |
| $this->addPriority($priority); | |
| // We have to clone the log to not affect the original assocaited with the MM event itself | |
| // Clone to remove from Doctrine's ORM memory since we're having to apply a pseudo event | |
| $log = clone $log; | |
| $log->setEvent($this->event); | |
| $this->organizedByPriority[$priority]->set($log->getId(), $log); | |
| return $this; | |
| } | |
| /** | |
| * Removes a log from all prioritized groups. | |
| * | |
| * @return $this | |
| */ | |
| public function removeLog(LeadEventLog $log) | |
| { | |
| foreach ($this->organizedByPriority as $logs) { | |
| /** @var ArrayCollection<int, LeadEventLog> $logs */ | |
| $logs->remove($log->getId()); | |
| } | |
| return $this; | |
| } | |
| /** | |
| * @param int $priority | |
| * | |
| * @return ArrayCollection|LeadEventLog[] | |
| */ | |
| public function getLogsByPriority($priority) | |
| { | |
| $priority = (int) $priority; | |
| return $this->organizedByPriority[$priority] ?? new ArrayCollection(); | |
| } | |
| } | |