Commit workspace changes

This commit is contained in:
2026-04-05 19:42:33 +02:00
parent 148a3bbe43
commit 08ad757bcb
312 changed files with 35149 additions and 399 deletions

View File

@@ -9,6 +9,8 @@ use App\Services\Sitemaps\SitemapUrl;
use App\Services\Sitemaps\SitemapUrlBuilder;
use DateTimeInterface;
use cPad\Plugins\News\Models\NewsArticle;
use cPad\Plugins\News\Models\NewsCategory;
use cPad\Plugins\News\Models\NewsTag;
final class NewsSitemapBuilder extends AbstractSitemapBuilder
{
@@ -23,20 +25,40 @@ final class NewsSitemapBuilder extends AbstractSitemapBuilder
public function items(): array
{
return NewsArticle::query()
$articles = NewsArticle::query()
->published()
->orderBy('id')
->cursor()
->map(fn (NewsArticle $article): ?SitemapUrl => $this->urls->news($article))
->filter()
->values()
->all();
->values();
$categories = NewsCategory::query()
->active()
->whereHas('publishedArticles')
->ordered()
->cursor()
->map(fn (NewsCategory $category): ?SitemapUrl => $this->urls->newsCategory($category))
->filter()
->values();
$tags = NewsTag::query()
->whereHas('articles', fn ($query) => $query->published())
->orderBy('name')
->cursor()
->map(fn (NewsTag $tag): ?SitemapUrl => $this->urls->newsTag($tag))
->filter()
->values();
return $articles->concat($categories)->concat($tags)->values()->all();
}
public function lastModified(): ?DateTimeInterface
{
return $this->dateTime(NewsArticle::query()
->published()
->max('updated_at'));
return $this->dateTime(\collect([
NewsArticle::query()->published()->max('updated_at'),
NewsCategory::query()->active()->whereHas('publishedArticles')->max('updated_at'),
NewsTag::query()->whereHas('articles', fn ($query) => $query->published())->max('updated_at'),
])->filter()->max());
}
}

View File

@@ -19,6 +19,8 @@ use cPad\Plugins\Forum\Models\ForumBoard;
use cPad\Plugins\Forum\Models\ForumCategory;
use cPad\Plugins\Forum\Models\ForumTopic;
use cPad\Plugins\News\Models\NewsArticle;
use cPad\Plugins\News\Models\NewsCategory;
use cPad\Plugins\News\Models\NewsTag;
use Illuminate\Support\Str;
final class SitemapUrlBuilder extends AbstractSitemapBuilder
@@ -161,6 +163,30 @@ final class SitemapUrlBuilder extends AbstractSitemapBuilder
);
}
public function newsCategory(NewsCategory $category): ?SitemapUrl
{
if (trim((string) $category->slug) === '') {
return null;
}
return new SitemapUrl(
route('news.category', ['slug' => $category->slug]),
$this->newest($category->updated_at, $category->created_at),
);
}
public function newsTag(NewsTag $tag): ?SitemapUrl
{
if (trim((string) $tag->slug) === '') {
return null;
}
return new SitemapUrl(
route('news.tag', ['slug' => $tag->slug]),
$this->newest($tag->updated_at, $tag->created_at),
);
}
public function forumIndex(): SitemapUrl
{
return new SitemapUrl(route('forum.index'));