vendor/ibexa/connector-qualifio/src/lib/Event/Subscriber/Block/QualifioBlockSubscriber.php line 40

Open in your IDE?
  1. <?php
  2. /**
  3. * @copyright Copyright (C) Ibexa AS. All rights reserved.
  4. * @license For full copyright and license information view LICENSE file distributed with this source code.
  5. */
  6. declare(strict_types=1);
  7. namespace Ibexa\ConnectorQualifio\Event\Subscriber\Block;
  8. use Ibexa\Contracts\ConnectorQualifio\QualifioServiceInterface;
  9. use Ibexa\Contracts\FieldTypePage\FieldType\Page\Block\Definition\BlockDefinitionEvents;
  10. use Ibexa\FieldTypePage\FieldType\Page\Block\Definition\Event\BlockDefinitionEvent;
  11. use Ibexa\FieldTypePage\FieldType\Page\Block\Renderer\BlockRenderEvents;
  12. use Ibexa\FieldTypePage\FieldType\Page\Block\Renderer\Event\PreRenderEvent;
  13. use Ibexa\FieldTypePage\FieldType\Page\Block\Renderer\Twig\TwigRenderRequest;
  14. use LogicException;
  15. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  16. final class QualifioBlockSubscriber implements EventSubscriberInterface
  17. {
  18. private const BLOCK_IDENTIFIER = 'qualifio';
  19. private QualifioServiceInterface $qualifioService;
  20. public function __construct(
  21. QualifioServiceInterface $qualifioService
  22. ) {
  23. $this->qualifioService = $qualifioService;
  24. }
  25. public static function getSubscribedEvents(): array
  26. {
  27. return [
  28. BlockRenderEvents::getBlockPreRenderEventName(self::BLOCK_IDENTIFIER) => 'onBlockPreRender',
  29. BlockDefinitionEvents::getBlockDefinitionEventName(self::BLOCK_IDENTIFIER) => 'onBlockDefinition',
  30. ];
  31. }
  32. public function onBlockDefinition(BlockDefinitionEvent $event): void
  33. {
  34. if (!$this->qualifioService->isConfigured()) {
  35. $event->getDefinition()->setVisible(false);
  36. }
  37. }
  38. public function onBlockPreRender(PreRenderEvent $event): void
  39. {
  40. $renderRequest = $event->getRenderRequest();
  41. if (!$renderRequest instanceof TwigRenderRequest) {
  42. throw new LogicException(sprintf(
  43. 'Expected an instance of %s, received %s.',
  44. TwigRenderRequest::class,
  45. get_debug_type($renderRequest),
  46. ));
  47. }
  48. $parameters = $renderRequest->getParameters();
  49. if (!array_key_exists('campaign', $parameters)) {
  50. return;
  51. }
  52. $campaignId = (int)$parameters['campaign'];
  53. if ($campaignUrl = $this->qualifioService->buildCampaignUrl($campaignId)) {
  54. $parameters['url'] = $campaignUrl;
  55. }
  56. $renderRequest->setParameters($parameters);
  57. }
  58. }