173 lines
5.7 KiB
PHP
173 lines
5.7 KiB
PHP
<?php
|
|
|
|
namespace App\Services\BundleRenderers\Renderers;
|
|
|
|
use App\Classes\Bundle;
|
|
use Carbon\Carbon;
|
|
|
|
class DateBasedListRenderer extends ListRenderer
|
|
{
|
|
/**
|
|
* Renders a complete HTML view of the bundle
|
|
*/
|
|
public function render()
|
|
{
|
|
$this->prepareRender();
|
|
|
|
$parts = preg_split('#/#', $this->bundle->getPath(), -1, PREG_SPLIT_NO_EMPTY);
|
|
$count = count($parts);
|
|
|
|
switch ($count) {
|
|
case 2:
|
|
// A year is specified
|
|
$date = sprintf('%s-%s-%s', $parts[1], '01', '01');
|
|
$date = Carbon::parse($date);
|
|
$articleTitle = $date->isoFormat('YYYY');
|
|
$siteTitle = sprintf('Articles publiés en %s', $date->isoFormat('YYYY'));
|
|
break;
|
|
case 3:
|
|
// A month is specified
|
|
$date = sprintf('%s-%s-%s', $parts[1], $parts[2], '01');
|
|
$date = Carbon::parse($date);
|
|
$articleTitle = $date->isoFormat('MMMM YYYY');
|
|
$siteTitle = sprintf('Articles publiés en %s %s', $date->isoFormat('MMMM'), $date->isoFormat('YYYY'));
|
|
break;
|
|
case 4:
|
|
// A day is specified
|
|
$date = sprintf('%s-%s-%s', $parts[1], $parts[2], $parts[3]);
|
|
$date = Carbon::parse($date);
|
|
$articleTitle = $date->isoFormat('DD MMMM YYYY');
|
|
$siteTitle = sprintf('Articles publiés le %s %s %s', $date->isoFormat('DD'), $date->isoFormat('MMMM'), $date->isoFormat('YYYY'));
|
|
break;
|
|
}
|
|
|
|
if (!empty($articleTitle)) {
|
|
data_set($this->viewData, 'articleTitle', $articleTitle);
|
|
data_set($this->viewData, 'siteTitle', $siteTitle);
|
|
}
|
|
|
|
return view('article', $this->viewData);
|
|
}
|
|
|
|
/**
|
|
* 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);
|
|
}
|
|
}
|