131 lines
4.0 KiB
PHP
131 lines
4.0 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace App\Services\BundleRenderers\Renderers;
|
||
|
|
||
|
use App\Classes\Bundle;
|
||
|
use Carbon\Carbon;
|
||
|
|
||
|
class DateBasedListRenderer extends ListRenderer
|
||
|
{
|
||
|
/**
|
||
|
* Return a boolean value indicating if this creator in particular can
|
||
|
* create bundles for specified section
|
||
|
*/
|
||
|
public static function handles(Bundle $bundle): bool
|
||
|
{
|
||
|
$parts = preg_split('#/#', $bundle->getPath(), -1, PREG_SPLIT_NO_EMPTY);
|
||
|
$count = count($parts);
|
||
|
$sections = ['blog', 'liens-interessants'];
|
||
|
|
||
|
return $count > 0
|
||
|
&& in_array($parts[0], $sections)
|
||
|
&& $count < 5;
|
||
|
}
|
||
|
|
||
|
protected function handleFilters($subBundles)
|
||
|
{
|
||
|
$url = $this->bundle->getPath();
|
||
|
$parts = preg_split('#/#', $url, -1, PREG_SPLIT_NO_EMPTY);
|
||
|
|
||
|
// $parts[0] is section
|
||
|
$selectedYear = $parts[1] ?? null;
|
||
|
$selectedMonth = $parts[2] ?? null;
|
||
|
$selectedDay = $parts[3] ?? null;
|
||
|
|
||
|
$filters = [
|
||
|
'Année' => [
|
||
|
'values' => [],
|
||
|
'selected' => $selectedYear ?? 'Toutes',
|
||
|
'visible' => true,
|
||
|
],
|
||
|
'Mois' => [
|
||
|
'values' => [],
|
||
|
'selected' => $selectedMonth ?? 'Tous',
|
||
|
'visible' => $selectedYear !== null,
|
||
|
],
|
||
|
'Jour' => [
|
||
|
'values' => [],
|
||
|
'selected' => $selectedDay ?? 'Tous',
|
||
|
'visible' => $selectedMonth !== null,
|
||
|
],
|
||
|
];
|
||
|
|
||
|
$prefix = sprintf('%s/', $parts[0]);
|
||
|
|
||
|
if ($selectedYear) {
|
||
|
$prefix .= $selectedYear . '/';
|
||
|
|
||
|
if ($selectedMonth) {
|
||
|
$prefix .= $selectedMonth . '/';
|
||
|
|
||
|
if ($selectedDay) {
|
||
|
$prefix .= $selectedDay . '/';
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
foreach ($subBundles as $subBundle) {
|
||
|
$fileParts = preg_split('#/#', $subBundle, -1, PREG_SPLIT_NO_EMPTY);
|
||
|
|
||
|
// $parts[0] is section
|
||
|
$year = $fileParts[1] ?? null;
|
||
|
$month = $fileParts[2] ?? null;
|
||
|
$day = $fileParts[3] ?? null;
|
||
|
|
||
|
if ($year) {
|
||
|
$filters['Année']['values'][$year] = [
|
||
|
'title' => $year,
|
||
|
'path' => sprintf('/%s/%s/', $parts[0], $year),
|
||
|
];
|
||
|
|
||
|
if ($month && $selectedYear !== null) {
|
||
|
$date = Carbon::parse(sprintf('%s-%s-%s', $year, $month, '01'));
|
||
|
$monthName = $date->isoFormat('MMMM');
|
||
|
|
||
|
$filters['Mois']['values'][$month] = [
|
||
|
'title' => $monthName,
|
||
|
'path' => sprintf('/%s/%s/%s/', $parts[0], $year, $month),
|
||
|
];
|
||
|
|
||
|
if ($day && $selectedMonth !== null) {
|
||
|
$filters['Jour']['values'][$day] = [
|
||
|
'title' => $day,
|
||
|
'path' => sprintf('/%s/%s/%s/%s/', $parts[0], $year, $month, $day),
|
||
|
];
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
ksort($filters['Année']['values']);
|
||
|
ksort($filters['Mois']['values']);
|
||
|
ksort($filters['Jour']['values']);
|
||
|
|
||
|
$filters['Année']['values'] = [
|
||
|
'Toutes' => [
|
||
|
'title' => 'Toutes',
|
||
|
'path' => sprintf('/%s/', $parts[0]),
|
||
|
],
|
||
|
]
|
||
|
+ $filters['Année']['values'];
|
||
|
|
||
|
$filters['Mois']['values'] = [
|
||
|
'Tous' => [
|
||
|
'title' => 'Tous',
|
||
|
'path' => sprintf('/%s/%s/', $parts[0], $selectedYear),
|
||
|
],
|
||
|
]
|
||
|
+ $filters['Mois']['values'];
|
||
|
|
||
|
$filters['Jour']['values'] = [
|
||
|
'Tous' => [
|
||
|
'title' => 'Tous',
|
||
|
'path' => sprintf('/%s/%s/%s/', $parts[0], $selectedYear, $selectedMonth),
|
||
|
],
|
||
|
]
|
||
|
+ $filters['Jour']['values'];
|
||
|
|
||
|
data_set($this->viewData['pagination'], 'filters', $filters);
|
||
|
}
|
||
|
}
|