Spaces:
No application file
No application file
File size: 2,382 Bytes
d2897cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
<?php
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);
}
}
|