2021-08-23 12:00:00 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
declare(strict_types=1);
|
|
|
|
|
|
|
|
namespace App\TwigExtension;
|
|
|
|
|
2021-08-28 00:59:44 +01:00
|
|
|
use App\Collection\TalkCollection;
|
2021-09-08 23:47:14 +01:00
|
|
|
use Illuminate\Support\Collection;
|
2021-08-25 00:59:26 +01:00
|
|
|
use Twig\Extension\AbstractExtension;
|
|
|
|
use Twig\TwigFunction;
|
2021-08-23 12:00:00 +01:00
|
|
|
|
2021-09-12 20:17:28 +01:00
|
|
|
/**
|
|
|
|
* @template TKey of array-key
|
|
|
|
* @template TValue
|
|
|
|
*/
|
2021-08-25 00:59:26 +01:00
|
|
|
final class TalkExtension extends AbstractExtension
|
2021-08-23 12:00:00 +01:00
|
|
|
{
|
2021-08-25 00:59:26 +01:00
|
|
|
public function getFunctions()
|
|
|
|
{
|
|
|
|
return [
|
2021-09-08 23:47:14 +01:00
|
|
|
new TwigFunction('get_last_event_date_for_talk', [$this, 'getLastEventDate']),
|
2021-08-25 00:59:26 +01:00
|
|
|
new TwigFunction('get_past_talk_count', [$this, 'getPastTalkCount']),
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
2021-09-12 20:17:28 +01:00
|
|
|
/**
|
|
|
|
* @param TValue $talk
|
|
|
|
*/
|
2021-09-08 23:47:14 +01:00
|
|
|
public function getLastEventDate($talk): ?string
|
|
|
|
{
|
2021-11-09 17:35:29 +00:00
|
|
|
return Collection::make($talk['events'])
|
|
|
|
->pluck('date')
|
|
|
|
->sort()
|
|
|
|
->last();
|
2021-09-08 23:47:14 +01:00
|
|
|
}
|
|
|
|
|
2021-09-12 20:17:28 +01:00
|
|
|
/**
|
|
|
|
* @param iterable<int, TValue> $talks
|
|
|
|
*/
|
2021-08-25 01:11:57 +01:00
|
|
|
public function getPastTalkCount(iterable $talks = []): int
|
|
|
|
{
|
|
|
|
return $this->getEventsFromTalks($talks)->count();
|
|
|
|
}
|
|
|
|
|
2021-09-12 20:17:28 +01:00
|
|
|
/**
|
|
|
|
* @param iterable<int, TValue> $talks
|
|
|
|
*
|
|
|
|
* @return TalkCollection<int, TValue>
|
|
|
|
*/
|
2021-08-28 00:59:44 +01:00
|
|
|
private function getEventsFromTalks(iterable $talks): TalkCollection
|
2021-08-23 12:00:00 +01:00
|
|
|
{
|
2021-08-28 00:59:44 +01:00
|
|
|
$talkCollection = new TalkCollection($talks);
|
2021-08-25 10:48:56 +01:00
|
|
|
|
2021-08-25 01:11:57 +01:00
|
|
|
return $talkCollection
|
2021-08-28 00:59:44 +01:00
|
|
|
->getEvents()
|
|
|
|
->onlyPastTalks();
|
2021-08-23 12:00:00 +01:00
|
|
|
}
|
|
|
|
}
|
2021-08-25 10:48:56 +01:00
|
|
|
|