Skip to content

Commit

Permalink
Remove usages of Events::generateEventUrl
Browse files Browse the repository at this point in the history
  • Loading branch information
aschempp committed Jan 17, 2024
1 parent ce0463b commit c464ee4
Show file tree
Hide file tree
Showing 7 changed files with 65 additions and 73 deletions.
2 changes: 2 additions & 0 deletions calendar-bundle/config/services.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,15 @@ services:
class: Contao\CalendarBundle\EventListener\InsertTagsListener
arguments:
- '@contao.framework'
- '@contao.routing.content_url_generator'
tags:
- { name: contao.hook, hook: replaceInsertTags }

contao_calendar.listener.preview_url_convert:
class: Contao\CalendarBundle\EventListener\PreviewUrlConvertListener
arguments:
- '@contao.framework'
- '@contao.routing.content_url_generator'
tags:
- kernel.event_listener

Expand Down
5 changes: 3 additions & 2 deletions calendar-bundle/contao/classes/Events.php
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,7 @@ protected function addEvent($objEvents, $intStart, $intEnd, $intBegin, $intLimit
$arrEvent['link'] = $objEvents->title;
$arrEvent['target'] = '';
$arrEvent['title'] = StringUtil::specialchars($objEvents->title, true);
$arrEvent['href'] = $this->generateEventUrl($objEvents);
$arrEvent['href'] = System::getContainer()->get('contao.routing.content_url_generator')->generate($objEvents);
$arrEvent['class'] = $objEvents->cssClass ? ' ' . $objEvents->cssClass : '';
$arrEvent['recurring'] = $recurring;
$arrEvent['until'] = $until;
Expand Down Expand Up @@ -431,12 +431,13 @@ public static function generateEventUrl($objEvent, $blnAbsolute=false)
public static function getSchemaOrgData(CalendarEventsModel $objEvent): array
{
$htmlDecoder = System::getContainer()->get('contao.string.html_decoder');
$urlGenerator = System::getContainer()->get('contao.routing.content_url_generator');

$jsonLd = array(
'@type' => 'Event',
'identifier' => '#/schema/events/' . $objEvent->id,
'name' => $htmlDecoder->inputEncodedToPlainText($objEvent->title),
'url' => self::generateEventUrl($objEvent),
'url' => $urlGenerator->generate($objEvent),
'startDate' => $objEvent->addTime ? date('Y-m-d\TH:i:sP', $objEvent->startTime) : date('Y-m-d', $objEvent->startTime)
);

Expand Down
1 change: 0 additions & 1 deletion calendar-bundle/contao/dca/tl_calendar_events.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
use Contao\DataContainer;
use Contao\Date;
use Contao\DC_Table;
use Contao\Events;
use Contao\Input;
use Contao\LayoutModel;
use Contao\PageModel;
Expand Down
8 changes: 5 additions & 3 deletions calendar-bundle/contao/modules/ModuleEventReader.php
Original file line number Diff line number Diff line change
Expand Up @@ -77,14 +77,16 @@ public function generate()
*/
protected function compile()
{
$urlGenerator = System::getContainer()->get('contao.routing.content_url_generator');

/** @var PageModel $objPage */
global $objPage;

$this->Template->event = '';

if ($this->overviewPage && ($overviewPage = PageModel::findById($this->overviewPage)))
{
$this->Template->referer = System::getContainer()->get('contao.routing.content_url_generator')->generate($overviewPage);
$this->Template->referer = $urlGenerator->generate($overviewPage);
$this->Template->back = $this->customLabel ?: $GLOBALS['TL_LANG']['MSC']['eventOverview'];
}

Expand All @@ -103,7 +105,7 @@ protected function compile()
case 'internal':
case 'article':
case 'external':
throw new RedirectResponseException(System::getContainer()->get('contao.routing.content_url_generator')->generate($objEvent, array(), UrlGeneratorInterface::ABSOLUTE_URL), 301);
throw new RedirectResponseException($urlGenerator->generate($objEvent, array(), UrlGeneratorInterface::ABSOLUTE_URL), 301);
}

// Overwrite the page metadata (see #2853, #4955 and #87)
Expand Down Expand Up @@ -157,7 +159,7 @@ protected function compile()
}
elseif (!$this->cal_keepCanonical)
{
$htmlHeadBag->setCanonicalUri(Events::generateEventUrl($objEvent, true));
$htmlHeadBag->setCanonicalUri($urlGenerator->generate($objEvent, array(), UrlGeneratorInterface::ABSOLUTE_URL));
}
}

Expand Down
17 changes: 9 additions & 8 deletions calendar-bundle/src/EventListener/InsertTagsListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,9 @@
use Contao\CalendarEventsModel;
use Contao\CalendarFeedModel;
use Contao\CoreBundle\Framework\ContaoFramework;
use Contao\Events;
use Contao\CoreBundle\Routing\ContentUrlGenerator;
use Contao\StringUtil;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;

/**
* @internal
Expand All @@ -31,8 +32,10 @@ class InsertTagsListener
'event_teaser',
];

public function __construct(private readonly ContaoFramework $framework)
{
public function __construct(
private readonly ContaoFramework $framework,
private readonly ContentUrlGenerator $urlGenerator,
) {
}

public function __invoke(string $tag, bool $useCache, mixed $cacheValue, array $flags): string|false
Expand Down Expand Up @@ -74,23 +77,21 @@ private function replaceEventInsertTag(string $insertTag, string $idOrAlias, arr
return '';
}

$events = $this->framework->getAdapter(Events::class);

return match ($insertTag) {
'event' => sprintf(
'<a href="%s" title="%s"%s>%s</a>',
$events->generateEventUrl($model, \in_array('absolute', $arguments, true)) ?: './',
$this->urlGenerator->generate($model, [], \in_array('absolute', $arguments, true) ? UrlGeneratorInterface::ABSOLUTE_URL : UrlGeneratorInterface::ABSOLUTE_PATH),
StringUtil::specialcharsAttribute($model->title),
\in_array('blank', $arguments, true) ? ' target="_blank" rel="noreferrer noopener"' : '',
$model->title,
),
'event_open' => sprintf(
'<a href="%s" title="%s"%s>',
$events->generateEventUrl($model, \in_array('absolute', $arguments, true)) ?: './',
$this->urlGenerator->generate($model, [], \in_array('absolute', $arguments, true) ? UrlGeneratorInterface::ABSOLUTE_URL : UrlGeneratorInterface::ABSOLUTE_PATH),
StringUtil::specialcharsAttribute($model->title),
\in_array('blank', $arguments, true) ? ' target="_blank" rel="noreferrer noopener"' : '',
),
'event_url' => $events->generateEventUrl($model, \in_array('absolute', $arguments, true)) ?: './',
'event_url' => $this->urlGenerator->generate($model, [], \in_array('absolute', $arguments, true) ? UrlGeneratorInterface::ABSOLUTE_URL : UrlGeneratorInterface::ABSOLUTE_PATH),
'event_title' => StringUtil::specialcharsAttribute($model->title),
'event_teaser' => $model->teaser,
default => '',
Expand Down
11 changes: 7 additions & 4 deletions calendar-bundle/src/EventListener/PreviewUrlConvertListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,19 @@
use Contao\CalendarEventsModel;
use Contao\CoreBundle\Event\PreviewUrlConvertEvent;
use Contao\CoreBundle\Framework\ContaoFramework;
use Contao\Events;
use Contao\CoreBundle\Routing\ContentUrlGenerator;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;

/**
* @internal
*/
class PreviewUrlConvertListener
{
public function __construct(private readonly ContaoFramework $framework)
{
public function __construct(
private readonly ContaoFramework $framework,
private readonly ContentUrlGenerator $urlGenerator,
) {
}

/**
Expand All @@ -40,7 +43,7 @@ public function __invoke(PreviewUrlConvertEvent $event): void
return;
}

$event->setUrl($this->framework->getAdapter(Events::class)->generateEventUrl($eventModel, true));
$event->setUrl($this->urlGenerator->generate($eventModel, [], UrlGeneratorInterface::ABSOLUTE_URL));
}

private function getEventModel(Request $request): CalendarEventsModel|null
Expand Down
94 changes: 39 additions & 55 deletions calendar-bundle/tests/EventListener/InsertTagsListenerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,9 @@
use Contao\CalendarBundle\EventListener\InsertTagsListener;
use Contao\CalendarEventsModel;
use Contao\CalendarFeedModel;
use Contao\Events;
use Contao\CoreBundle\Routing\ContentUrlGenerator;
use Contao\TestCase\ContaoTestCase;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;

class InsertTagsListenerTest extends ContaoTestCase
{
Expand All @@ -31,8 +32,9 @@ public function testReplacesTheCalendarFeedTag(): void
];

$framework = $this->mockContaoFramework($adapters);
$urlGenerator = $this->createMock(ContentUrlGenerator::class);

$listener = new InsertTagsListener($framework);
$listener = new InsertTagsListener($framework, $urlGenerator);
$url = $listener('calendar_feed::2', false, null, []);

$this->assertSame('http://localhost/share/events.xml', $url);
Expand All @@ -44,26 +46,41 @@ public function testReplacesTheEventTags(): void
$eventModel->title = 'The "foobar" event';
$eventModel->teaser = '<p>The annual foobar event.</p>';

$events = $this->mockAdapter(['generateEventUrl']);
$events
->method('generateEventUrl')
->willReturnCallback(
static function (CalendarEventsModel $model, bool $absolute): string {
if ($absolute) {
return 'http://domain.tld/events/the-foobar-event.html';
}

return 'events/the-foobar-event.html';
},
)
;

$adapters = [
CalendarEventsModel::class => $this->mockConfiguredAdapter(['findByIdOrAlias' => $eventModel]),
Events::class => $events,
];

$listener = new InsertTagsListener($this->mockContaoFramework($adapters));
$urlGenerator = $this->createMock(ContentUrlGenerator::class);
$urlGenerator
->expects($this->exactly(10))
->method('generate')
->withConsecutive(
[$eventModel, [], UrlGeneratorInterface::ABSOLUTE_PATH],
[$eventModel, [], UrlGeneratorInterface::ABSOLUTE_PATH],
[$eventModel, [], UrlGeneratorInterface::ABSOLUTE_PATH],
[$eventModel, [], UrlGeneratorInterface::ABSOLUTE_PATH],
[$eventModel, [], UrlGeneratorInterface::ABSOLUTE_URL],
[$eventModel, [], UrlGeneratorInterface::ABSOLUTE_URL],
[$eventModel, [], UrlGeneratorInterface::ABSOLUTE_PATH],
[$eventModel, [], UrlGeneratorInterface::ABSOLUTE_URL],
[$eventModel, [], UrlGeneratorInterface::ABSOLUTE_URL],
[$eventModel, [], UrlGeneratorInterface::ABSOLUTE_URL],
)
->willReturnOnConsecutiveCalls(
'events/the-foobar-event.html',
'events/the-foobar-event.html',
'events/the-foobar-event.html',
'events/the-foobar-event.html',
'http://domain.tld/events/the-foobar-event.html',
'http://domain.tld/events/the-foobar-event.html',
'events/the-foobar-event.html',
'http://domain.tld/events/the-foobar-event.html',
'http://domain.tld/events/the-foobar-event.html',
'http://domain.tld/events/the-foobar-event.html',
)
;

$listener = new InsertTagsListener($this->mockContaoFramework($adapters), $urlGenerator);

$this->assertSame(
'<a href="events/the-foobar-event.html" title="The &quot;foobar&quot; event">The "foobar" event</a>',
Expand Down Expand Up @@ -126,44 +143,10 @@ static function (CalendarEventsModel $model, bool $absolute): string {
);
}

public function testHandlesEmptyUrls(): void
{
$eventModel = $this->mockClassWithProperties(CalendarEventsModel::class);
$eventModel->title = 'The "foobar" event';
$eventModel->teaser = '<p>The annual foobar event.</p>';

$events = $this->mockAdapter(['generateEventUrl']);
$events
->method('generateEventUrl')
->willReturn('')
;

$adapters = [
CalendarEventsModel::class => $this->mockConfiguredAdapter(['findByIdOrAlias' => $eventModel]),
Events::class => $events,
];

$listener = new InsertTagsListener($this->mockContaoFramework($adapters));

$this->assertSame(
'<a href="./" title="The &quot;foobar&quot; event">The "foobar" event</a>',
$listener('event::2', false, null, []),
);

$this->assertSame(
'<a href="./" title="The &quot;foobar&quot; event">',
$listener('event_open::2', false, null, []),
);

$this->assertSame(
'./',
$listener('event_url::2', false, null, []),
);
}

public function testReturnsFalseIfTheTagIsUnknown(): void
{
$listener = new InsertTagsListener($this->mockContaoFramework());
$urlGenerator = $this->createMock(ContentUrlGenerator::class);
$listener = new InsertTagsListener($this->mockContaoFramework(), $urlGenerator);

$this->assertFalse($listener('link_url::2', false, null, []));
}
Expand All @@ -175,7 +158,8 @@ public function testReturnsAnEmptyStringIfThereIsNoModel(): void
CalendarFeedModel::class => $this->mockConfiguredAdapter(['findByPk' => null]),
];

$listener = new InsertTagsListener($this->mockContaoFramework($adapters));
$urlGenerator = $this->createMock(ContentUrlGenerator::class);
$listener = new InsertTagsListener($this->mockContaoFramework($adapters), $urlGenerator);

$this->assertSame('', $listener('calendar_feed::3', false, null, []));
$this->assertSame('', $listener('event_url::3', false, null, []));
Expand Down

0 comments on commit c464ee4

Please sign in to comment.