Add function for getting events for a talk
GH-160
This commit is contained in:
parent
105ae345a9
commit
5499f555c1
|
@ -33,6 +33,7 @@ class TalksExtension extends AbstractExtension
|
||||||
new TwigFunction('get_upcoming_talks', [$this, 'getUpcomingTalks']),
|
new TwigFunction('get_upcoming_talks', [$this, 'getUpcomingTalks']),
|
||||||
new TwigFunction('get_past_talks', [$this, 'getPastTalks']),
|
new TwigFunction('get_past_talks', [$this, 'getPastTalks']),
|
||||||
new TwigFunction('get_past_talk_count', [$this, 'getPastTalkCount']),
|
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();
|
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
|
private function getLastDate($talk): string
|
||||||
{
|
{
|
||||||
return $this->eventsFromTalks(new Collection([$talk]))
|
return $this->eventsFromTalks(new Collection([$talk]))
|
||||||
|
|
|
@ -83,4 +83,71 @@ class RetrievingEventsTest extends TestCase
|
||||||
$this->assertCount(1, $pastEvents);
|
$this->assertCount(1, $pastEvents);
|
||||||
$this->assertSame('php_south_wales', $pastEvents[0]['event']);
|
$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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,6 @@
|
||||||
{% include 'talk/slides' %}
|
{% include 'talk/slides' %}
|
||||||
{% include 'talk/video' %}
|
{% include 'talk/video' %}
|
||||||
{% include 'talk/tweets' %}
|
{% include 'talk/tweets' %}
|
||||||
{% include 'talk/events' %}
|
{% include 'talk/events' with { events: get_events_for_talk(page, site.events) } only %}
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
{% import 'helpers' as helpers %}
|
{% import 'helpers' as helpers %}
|
||||||
|
|
||||||
{% if page.events %}
|
{% if events %}
|
||||||
<div>
|
<div>
|
||||||
<h2 class="mb-2">Presented at</h2>
|
<h2>Presented at</h2>
|
||||||
|
|
||||||
<ul class="markup list-disc ml-5">
|
<ul class="markup mt-2 list-disc ml-5">
|
||||||
{% for event in page.events if not event.date is empty %}
|
{% for event in events %}
|
||||||
<li>
|
<li>
|
||||||
{{ helpers.talkEventName(event) }}
|
{{ helpers.talkEventName(event) }}
|
||||||
|
{{ helpers.talkEventLocation(event) }}
|
||||||
<span class="text-gray-800">- {{ event.date|date('jS F Y') }}</span>
|
<span class="text-gray-800">- {{ event.date|date('jS F Y') }}</span>
|
||||||
</li>
|
</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
Loading…
Reference in a new issue