diff --git a/app/Classes/Bundle.php b/app/Classes/Bundle.php index 5c902d6..4ddf0cc 100644 --- a/app/Classes/Bundle.php +++ b/app/Classes/Bundle.php @@ -268,6 +268,10 @@ private function repairCover() */ private function normalizeBundlePath(string $path): string { + if ($path === './' || $path === '' || $path === '.') { + return '/'; + } + $parts = preg_split('#/#', $path, -1, PREG_SPLIT_NO_EMPTY); $count = count($parts); diff --git a/app/Services/BundleRenderers/Renderers/ListRenderer.php b/app/Services/BundleRenderers/Renderers/ListRenderer.php index baa6779..4d1b4f4 100644 --- a/app/Services/BundleRenderers/Renderers/ListRenderer.php +++ b/app/Services/BundleRenderers/Renderers/ListRenderer.php @@ -6,6 +6,20 @@ class ListRenderer extends BaseRenderer { + /** + * Renders a complete HTML view of the bundle + */ + public function render() + { + $baseRender = parent::render(); + + if ($this->bundle->getPath() === '/') { + $baseRender['/index.xml'] = $this->renderFeed(); + } + + return $baseRender; + } + /** * Return a boolean value indicating if this creator in particular can * create bundles for specified section @@ -16,4 +30,23 @@ public static function handles(Bundle $bundle): bool // can handle the path return false; } + + private function renderFeed() + { + $bundles = $this->getSubBundles(); + $lastBundles = array_map( + function ($item) { + $bundle = new Bundle($item, $this->bundle->getDisk()); + $bundle->load(); + + return $bundle; + }, + array_slice($bundles, 0, 10) + ); + + return (string) view('feed', [ + 'bundles' => $lastBundles, + 'lastBuildDate' => now()->toRssString(), + ]); + } } diff --git a/resources/views/feed.blade.php b/resources/views/feed.blade.php new file mode 100644 index 0000000..fe202a5 --- /dev/null +++ b/resources/views/feed.blade.php @@ -0,0 +1,26 @@ + + + + {{ config('app.name') }} + {{ config('app.url') }} + {{ config('app.description') }} + {{ $lastBuildDate }} + @foreach ($bundles as $bundle) + + [{{ $bundle->getSection()->getArticleTitle() }}] {{ $bundle->getArticleTitle() }} + {{ $bundle->getPath() }} + {{ Carbon\Carbon::parse($bundle->metadata()->get('date'))->toRssString() }} + {{ $bundle->getPath() }} + + metadata()->get('cover'))) + {!! $bundle->attachments(\App\Classes\AttachmentsManager::Images)->getComponentByRef($bundle->metadata()->get('cover'), 'article')->render() !!} + @endif + {!! $bundle->markdown()->render() !!} + ]]> + + + @endforeach + +