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(); | |
} | |
} | |