diff --git a/app/SculpinKernel.php b/app/SculpinKernel.php index 250870c..090ba84 100644 --- a/app/SculpinKernel.php +++ b/app/SculpinKernel.php @@ -1,5 +1,6 @@ +
+

The Schedule

+ + +
+ diff --git a/source/_sessions/doing-good-with-drupal.md b/source/_sessions/doing-good-with-drupal.md index c7b994e..521c70d 100644 --- a/source/_sessions/doing-good-with-drupal.md +++ b/source/_sessions/doing-good-with-drupal.md @@ -1,6 +1,7 @@ --- title: Doing good with Drupal speakers: [Matt Haworth] +slot: 15 use: [speakers] --- More and more charities and campaigners are choosing Drupal to create websites that raise funds, find supporters and deliver content and services to those who need it most. diff --git a/source/_sessions/real-state-of-drupal.md b/source/_sessions/real-state-of-drupal.md index de5758e..0213b37 100644 --- a/source/_sessions/real-state-of-drupal.md +++ b/source/_sessions/real-state-of-drupal.md @@ -1,5 +1,6 @@ --- title: The Real State of Drupal +slot: 3 speakers: [Dan McNamara] use: [speakers] --- diff --git a/source/index.html.twig b/source/index.html.twig index 9d63c52..f23d84f 100644 --- a/source/index.html.twig +++ b/source/index.html.twig @@ -3,7 +3,7 @@ layout: default twitter: url: https://twitter.com/drupalcampbris update_text: Early bird tickets are now available! -use: [speakers] +use: [sessions, speakers] --- {% block content %}
@@ -43,4 +43,9 @@ use: [speakers] {% include 'front-speakers' with { speakers: data.speakers, } %} + + {% include 'schedule' with { + sessions: data.sessions, + slots: site.schedule.slots, + } %} {% endblock %} diff --git a/source/schedule.html.twig b/source/schedule.html.twig deleted file mode 100644 index 66b419a..0000000 --- a/source/schedule.html.twig +++ /dev/null @@ -1,13 +0,0 @@ ---- -layout: page -title: Schedule -use: - - sessions ---- - diff --git a/src/Schedule/services.yml b/src/Schedule/services.yml new file mode 100644 index 0000000..f7d98d9 --- /dev/null +++ b/src/Schedule/services.yml @@ -0,0 +1,4 @@ +services: + App\Schedule\TwigExtension\ScheduleExtension: + tags: + - { name: twig.extension } diff --git a/src/Schedule/src/DependencyInjection/SculpinScheduleExtension.php b/src/Schedule/src/DependencyInjection/SculpinScheduleExtension.php new file mode 100644 index 0000000..f456765 --- /dev/null +++ b/src/Schedule/src/DependencyInjection/SculpinScheduleExtension.php @@ -0,0 +1,17 @@ +load('services.yml'); + } +} diff --git a/src/Schedule/src/Model/Session.php b/src/Schedule/src/Model/Session.php new file mode 100644 index 0000000..ecce4d1 --- /dev/null +++ b/src/Schedule/src/Model/Session.php @@ -0,0 +1,30 @@ +data = $data; + } + + public function getSlot(): int + { + return (int) $this->data['slot']; + } + + public function getTitle(): string + { + return $this->data['title']; + } + + public function getSpeakers(): Collection + { + return collect($this->data['speakers']); + } +} diff --git a/src/Schedule/src/SculpinScheduleBundle.php b/src/Schedule/src/SculpinScheduleBundle.php new file mode 100644 index 0000000..d3c7aae --- /dev/null +++ b/src/Schedule/src/SculpinScheduleBundle.php @@ -0,0 +1,9 @@ +map(function ($session): ?Session { + return new Session($session); + })->first(function (?Session $session) use ($slotId): bool { + return $session->getSlot() == $slotId; + }); + } +} diff --git a/src/Schedule/tests/ScheduleTest.php b/src/Schedule/tests/ScheduleTest.php new file mode 100644 index 0000000..3cda432 --- /dev/null +++ b/src/Schedule/tests/ScheduleTest.php @@ -0,0 +1,38 @@ +extension = new ScheduleExtension(); + } + + /** @test */ + public function get_a_session_for_a_slot() + { + $sessions = [ + ['title' => 'The Real State of Drupal', 'slot' => 4], + ['title' => 'Using Ansible for automation', 'slot' => 1], + ['title' => 'Introduction to Views', 'slot' => 3], + ['title' => 'Doing Good with Drupal', 'slot' => 2], + ]; + + $session = $this->extension->getSessionInSlot(3, $sessions); + + $this->assertInstanceOf(Session::class, $session); + $this->assertSame('Introduction to Views', $session->getTitle()); + } +} \ No newline at end of file diff --git a/src/Speakers/src/TwigExtension/SpeakersExtension.php b/src/Speakers/src/TwigExtension/SpeakersExtension.php index 066ae16..b513de5 100644 --- a/src/Speakers/src/TwigExtension/SpeakersExtension.php +++ b/src/Speakers/src/TwigExtension/SpeakersExtension.php @@ -28,9 +28,12 @@ class SpeakersExtension extends AbstractExtension */ public function getSessionSpeakers($session, array $speakers): array { - return collect($speakers)->filter(function ($speaker) use ($session): bool { - return collect($session['speakers'])->contains($speaker['title']); - })->values()->toArray(); + return collect($speakers) + ->filter(function ($speaker) use ($session): bool { + return collect($session['speakers'])->contains($speaker['title']); + }) + ->values() + ->toArray(); } /** @@ -43,8 +46,11 @@ class SpeakersExtension extends AbstractExtension */ public function getSpeakerSessions($speaker, array $sessions): array { - return collect($sessions)->filter(function ($session) use ($speaker): bool { - return collect($session['speakers'])->contains($speaker['title']); - })->values()->toArray(); + return collect($sessions) + ->filter(function ($session) use ($speaker): bool { + return collect($session['speakers'])->contains($speaker['title']); + }) + ->values() + ->toArray(); } }