Spaces:
No application file
No application file
declare(strict_types=1); | |
namespace Mautic\IntegrationsBundle\Sync\Notification\Helper; | |
use Mautic\IntegrationsBundle\Event\InternalObjectRouteEvent; | |
use Mautic\IntegrationsBundle\IntegrationEvents; | |
use Mautic\IntegrationsBundle\Sync\Exception\ObjectNotFoundException; | |
use Mautic\IntegrationsBundle\Sync\Exception\ObjectNotSupportedException; | |
use Mautic\IntegrationsBundle\Sync\SyncDataExchange\Internal\ObjectProvider; | |
use Mautic\IntegrationsBundle\Sync\SyncDataExchange\MauticSyncDataExchange; | |
use Symfony\Component\EventDispatcher\EventDispatcherInterface; | |
class RouteHelper | |
{ | |
/** | |
* @var RouEventDispatcherInterfaceter | |
*/ | |
private $dispatcher; | |
public function __construct( | |
private ObjectProvider $objectProvider, | |
EventDispatcherInterface $dispatcher | |
) { | |
$this->dispatcher = $dispatcher; | |
} | |
/** | |
* @throws ObjectNotSupportedException | |
*/ | |
public function getRoute(string $object, int $id): string | |
{ | |
try { | |
$event = new InternalObjectRouteEvent($this->objectProvider->getObjectByName($object), $id); | |
} catch (ObjectNotFoundException) { | |
// Throw this exception instead to keep BC. | |
throw new ObjectNotSupportedException(MauticSyncDataExchange::NAME, $object); | |
} | |
$this->dispatcher->dispatch($event, IntegrationEvents::INTEGRATION_BUILD_INTERNAL_OBJECT_ROUTE); | |
return $event->getRoute(); | |
} | |
/** | |
* @throws ObjectNotSupportedException | |
*/ | |
public function getLink(string $object, int $id, string $linkText): string | |
{ | |
$route = $this->getRoute($object, $id); | |
return sprintf('<a href="%s">%s</a>', $route, $linkText); | |
} | |
/** | |
* @throws ObjectNotSupportedException | |
*/ | |
public function getRoutes(string $object, array $ids): array | |
{ | |
$routes = []; | |
foreach ($ids as $id) { | |
$routes[$id] = $this->getRoute($object, $id); | |
} | |
return $routes; | |
} | |
/** | |
* @throws ObjectNotSupportedException | |
*/ | |
public function getLinkCsv(string $object, array $ids): string | |
{ | |
$links = []; | |
$routes = $this->getRoutes($object, $ids); | |
foreach ($routes as $id => $route) { | |
$links[] = sprintf('[<a href="%s">%s</a>]', $route, $id); | |
} | |
return implode(', ', $links); | |
} | |
} | |