Spaces:
No application file
No application file
namespace Mautic\CampaignBundle\Helper; | |
use Mautic\CampaignBundle\Entity\ChannelInterface; | |
use Mautic\CampaignBundle\Entity\Event; | |
use Mautic\CampaignBundle\EventCollector\Accessor\Event\AbstractEventAccessor; | |
class ChannelExtractor | |
{ | |
public static function setChannel(ChannelInterface $entity, Event $event, AbstractEventAccessor $eventConfig): void | |
{ | |
// Allow event to update itself | |
$isSelf = $entity === $event; | |
if (!$isSelf && $entity->getChannel()) { | |
return; | |
} | |
if (!$channel = $eventConfig->getChannel()) { | |
return; | |
} | |
$entity->setChannel($channel); | |
if (!$channelIdField = $eventConfig->getChannelIdField()) { | |
return; | |
} | |
if (!$event->getProperties()) { | |
return; | |
} | |
$entity->setChannelId( | |
self::getChannelId($event->getProperties(), $channelIdField) | |
); | |
} | |
/** | |
* @param string $channelIdField | |
*/ | |
private static function getChannelId(array $properties, $channelIdField): ?int | |
{ | |
if (empty($properties[$channelIdField])) { | |
return null; | |
} | |
$channelId = $properties[$channelIdField]; | |
if (is_array($channelId) && (1 === count($channelId))) { | |
// Only store channel ID if a single item was selected | |
$channelId = reset($channelId); | |
} | |
if (!is_numeric($channelId)) { | |
return null; | |
} | |
return (int) $channelId; | |
} | |
} | |