diff --git a/app/src/Talk/TwigExtension/TalksExtension.php b/app/src/Talk/TwigExtension/TalksExtension.php index 69755629..ce4b36ae 100644 --- a/app/src/Talk/TwigExtension/TalksExtension.php +++ b/app/src/Talk/TwigExtension/TalksExtension.php @@ -33,6 +33,7 @@ class TalksExtension extends AbstractExtension new TwigFunction('get_upcoming_talks', [$this, 'getUpcomingTalks']), new TwigFunction('get_past_talks', [$this, 'getPastTalks']), new TwigFunction('get_past_talk_count', [$this, 'getPastTalkCount']), + new TwigFunction('get_events_for_talk', [$this, 'getEventsForTalk']), ]; } @@ -89,6 +90,18 @@ class TalksExtension extends AbstractExtension return $this->getPastEvents($talks)->count(); } + public function getEventsForTalk(array $talk, array $eventData): Collection + { + return (new Collection($talk['events'])) + ->map(function (array $event) use ($eventData): Collection { + return (new Collection($event))->merge($eventData[$event['event']]); + }) + ->filter(function (Collection $event): bool { + return !empty($event->get('date')); + }) + ->sortBy('date'); + } + private function getLastDate($talk): string { return $this->eventsFromTalks(new Collection([$talk])) diff --git a/app/tests/Talk/TwigExtension/RetrievingEventsTest.php b/app/tests/Talk/TwigExtension/RetrievingEventsTest.php index b2af666a..dff83612 100644 --- a/app/tests/Talk/TwigExtension/RetrievingEventsTest.php +++ b/app/tests/Talk/TwigExtension/RetrievingEventsTest.php @@ -83,4 +83,71 @@ class RetrievingEventsTest extends TestCase $this->assertCount(1, $pastEvents); $this->assertSame('php_south_wales', $pastEvents[0]['event']); } + + /** @test */ + public function get_all_of_the_events_for_a_talk() + { + $talk = [ + 'title' => 'TDD - Test Driven Drupal', + 'events' => [ + [ + 'event' => 'drupal_developer_days_2018', + 'date' => (new DateTime('-1 day'))->getTimestamp(), + ], + [ + 'event' => 'drupalcamp_london_2019', + 'date' => (new DateTime('+1 day'))->getTimestamp(), + ], + ], + ]; + + $eventData = [ + 'drupal_developer_days_2018' => [ + 'name' => 'Drupal Developer Days, Lisbon 2018', + ], + 'drupalcamp_london_2019' => [ + 'name' => 'DrupalCamp London 2019', + ], + ]; + + $events = $this->extension->getEventsForTalk($talk, $eventData); + + $this->assertCount(2, $events); + $this->assertSame( + ['drupal_developer_days_2018', 'drupalcamp_london_2019'], + $events->pluck('event')->toArray() + ); + } + + /** @test */ + public function events_with_no_date_are_not_returned_for_an_event() + { + $talk = [ + 'title' => 'TDD - Test Driven Drupal', + 'events' => [ + [ + 'event' => 'drupal_developer_days_2018', + 'date' => (new DateTime('-2 days'))->getTimestamp(), + ], + [ + 'event' => 'drupalcamp_london_2019', + 'date' => '', + ], + ], + ]; + + $eventData = [ + 'drupal_developer_days_2018' => [ + 'name' => 'Drupal Developer Days, Lisbon 2018', + ], + 'drupalcamp_london_2019' => [ + 'name' => 'DrupalCamp London 2019', + ], + ]; + + $events = $this->extension->getEventsForTalk($talk, $eventData); + + $this->assertCount(1, $events); + $this->assertSame('drupal_developer_days_2018', $events->pluck('event')->first()); + } } diff --git a/source/_layouts/talk.html.twig b/source/_layouts/talk.html.twig index ffb94543..9720134f 100644 --- a/source/_layouts/talk.html.twig +++ b/source/_layouts/talk.html.twig @@ -17,6 +17,6 @@ {% include 'talk/slides' %} {% include 'talk/video' %} {% include 'talk/tweets' %} - {% include 'talk/events' %} + {% include 'talk/events' with { events: get_events_for_talk(page, site.events) } only %} {% endblock %} diff --git a/source/_partials/talk/events.html.twig b/source/_partials/talk/events.html.twig index caa5ad86..41867464 100644 --- a/source/_partials/talk/events.html.twig +++ b/source/_partials/talk/events.html.twig @@ -1,13 +1,14 @@ {% import 'helpers' as helpers %} -{% if page.events %} +{% if events %}