Implement academy analytics, billing, and web stories updates
This commit is contained in:
@@ -26,6 +26,7 @@ final class StaticPagesSitemapBuilder extends AbstractSitemapBuilder
|
||||
$this->urls->staticRoute('/'),
|
||||
$this->urls->staticRoute('/academy'),
|
||||
$this->urls->staticRoute('/academy/pricing'),
|
||||
$this->urls->staticRoute('/web-stories'),
|
||||
$this->urls->staticRoute('/faq'),
|
||||
$this->urls->staticRoute('/rules-and-guidelines'),
|
||||
$this->urls->staticRoute('/privacy-policy'),
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Services\Sitemaps\Builders;
|
||||
|
||||
use App\Models\WorldWebStory;
|
||||
use App\Services\Sitemaps\AbstractSitemapBuilder;
|
||||
use App\Services\Sitemaps\SitemapUrlBuilder;
|
||||
use DateTimeInterface;
|
||||
|
||||
final class WorldWebStoriesSitemapBuilder extends AbstractSitemapBuilder
|
||||
{
|
||||
public function __construct(private readonly SitemapUrlBuilder $urls)
|
||||
{
|
||||
}
|
||||
|
||||
public function name(): string
|
||||
{
|
||||
return 'web-stories';
|
||||
}
|
||||
|
||||
public function items(): array
|
||||
{
|
||||
return WorldWebStory::query()
|
||||
->visible()
|
||||
->with('world')
|
||||
->orderByDesc('published_at')
|
||||
->orderByDesc('id')
|
||||
->get()
|
||||
->map(fn (WorldWebStory $story) => $this->urls->webStory($story))
|
||||
->filter()
|
||||
->values()
|
||||
->all();
|
||||
}
|
||||
|
||||
public function lastModified(): ?DateTimeInterface
|
||||
{
|
||||
return $this->dateTime(WorldWebStory::query()->visible()->max('updated_at'));
|
||||
}
|
||||
}
|
||||
@@ -22,6 +22,7 @@ use App\Services\Sitemaps\Builders\StaticPagesSitemapBuilder;
|
||||
use App\Services\Sitemaps\Builders\StoriesSitemapBuilder;
|
||||
use App\Services\Sitemaps\Builders\TagsSitemapBuilder;
|
||||
use App\Services\Sitemaps\Builders\UsersSitemapBuilder;
|
||||
use App\Services\Sitemaps\Builders\WorldWebStoriesSitemapBuilder;
|
||||
|
||||
final class SitemapRegistry
|
||||
{
|
||||
@@ -43,6 +44,7 @@ final class SitemapRegistry
|
||||
CollectionsSitemapBuilder $collections,
|
||||
CardsSitemapBuilder $cards,
|
||||
StoriesSitemapBuilder $stories,
|
||||
WorldWebStoriesSitemapBuilder $webStories,
|
||||
NewsSitemapBuilder $news,
|
||||
GoogleNewsSitemapBuilder $googleNews,
|
||||
ForumIndexSitemapBuilder $forumIndex,
|
||||
@@ -63,6 +65,7 @@ final class SitemapRegistry
|
||||
$collections->name() => $collections,
|
||||
$cards->name() => $cards,
|
||||
$stories->name() => $stories,
|
||||
$webStories->name() => $webStories,
|
||||
$news->name() => $news,
|
||||
$googleNews->name() => $googleNews,
|
||||
$forumIndex->name() => $forumIndex,
|
||||
|
||||
@@ -14,6 +14,7 @@ use App\Models\Page;
|
||||
use App\Models\Story;
|
||||
use App\Models\Tag;
|
||||
use App\Models\User;
|
||||
use App\Models\WorldWebStory;
|
||||
use App\Services\ThumbnailPresenter;
|
||||
use cPad\Plugins\Forum\Models\ForumBoard;
|
||||
use cPad\Plugins\Forum\Models\ForumCategory;
|
||||
@@ -187,6 +188,21 @@ final class SitemapUrlBuilder extends AbstractSitemapBuilder
|
||||
);
|
||||
}
|
||||
|
||||
public function webStory(WorldWebStory $story): ?SitemapUrl
|
||||
{
|
||||
if (trim((string) $story->slug) === '') {
|
||||
return null;
|
||||
}
|
||||
|
||||
return new SitemapUrl(
|
||||
$story->publicUrl(),
|
||||
$this->newest($story->updated_at, $story->published_at, $story->created_at),
|
||||
$this->images([
|
||||
$this->image($story->posterPortraitUrl(), (string) $story->title),
|
||||
]),
|
||||
);
|
||||
}
|
||||
|
||||
public function forumIndex(): SitemapUrl
|
||||
{
|
||||
return new SitemapUrl(route('forum.index'));
|
||||
|
||||
Reference in New Issue
Block a user