1
0
cms11/app/Services/BundleRenderers/Renderers/DateBasedListRenderer.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);
}
}