fixed sanitazer and academy
This commit is contained in:
@@ -5,7 +5,9 @@ declare(strict_types=1);
|
||||
namespace App\Http\Controllers\Studio;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\User;
|
||||
use App\Services\News\NewsService;
|
||||
use App\Support\AvatarUrl;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
@@ -46,6 +48,8 @@ final class StudioNewsController extends Controller
|
||||
{
|
||||
$this->authorizeNews($request);
|
||||
|
||||
$user = $request->user();
|
||||
|
||||
return Inertia::render('Studio/StudioNewsEditor', [
|
||||
'title' => 'Create article',
|
||||
'description' => 'Draft a new News story with editorial workflow, SEO metadata, and related entity links.',
|
||||
@@ -61,11 +65,14 @@ final class StudioNewsController extends Controller
|
||||
'storeUrl' => route('studio.news.store'),
|
||||
'coverUploadUrl' => route('api.studio.news.media.upload'),
|
||||
'coverDeleteUrl' => route('api.studio.news.media.destroy'),
|
||||
'bodyMediaUploadUrl' => route('api.studio.news.media.upload'),
|
||||
'bodyMediaDeleteUrl' => route('api.studio.news.media.destroy'),
|
||||
'coverCdnBaseUrl' => rtrim((string) config('cdn.files_url', 'https://files.skinbase.org'), '/'),
|
||||
'entitySearchUrl' => route('studio.news.entity-search'),
|
||||
'categoriesUrl' => route('studio.news.categories'),
|
||||
'tagsUrl' => route('studio.news.tags'),
|
||||
'defaultAuthor' => $this->news->searchEntities('user', (string) $request->user()->username)[0] ?? null,
|
||||
'defaultAuthor' => $this->mapDefaultAuthor($user),
|
||||
'defaultPublishedAt' => now()->format('Y-m-d\TH:i'),
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -96,6 +103,8 @@ final class StudioNewsController extends Controller
|
||||
'relationTypeOptions' => $this->news->relationTypeOptions(),
|
||||
'coverUploadUrl' => route('api.studio.news.media.upload'),
|
||||
'coverDeleteUrl' => route('api.studio.news.media.destroy'),
|
||||
'bodyMediaUploadUrl' => route('api.studio.news.media.upload'),
|
||||
'bodyMediaDeleteUrl' => route('api.studio.news.media.destroy'),
|
||||
'coverCdnBaseUrl' => rtrim((string) config('cdn.files_url', 'https://files.skinbase.org'), '/'),
|
||||
'updateUrl' => route('studio.news.update', ['article' => $article->id]),
|
||||
'destroyUrl' => route('studio.news.destroy', ['article' => $article->id]),
|
||||
@@ -250,6 +259,29 @@ final class StudioNewsController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
private function mapDefaultAuthor(mixed $user): ?array
|
||||
{
|
||||
if (! $user instanceof User) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$user->loadMissing('profile');
|
||||
|
||||
return [
|
||||
'id' => (int) $user->id,
|
||||
'entity_type' => 'user',
|
||||
'entity_label' => 'User',
|
||||
'title' => (string) ($user->name ?: $user->username),
|
||||
'subtitle' => $user->username ? '@' . $user->username : null,
|
||||
'description' => Str::limit(trim((string) ($user->profile?->bio ?? '')), 120),
|
||||
'url' => $user->username ? route('profile.show', ['username' => $user->username]) : null,
|
||||
'image' => null,
|
||||
'avatar' => AvatarUrl::forUser((int) $user->id, $user->profile?->avatar_hash ?? null, 96),
|
||||
'context_label' => 'Profile',
|
||||
'meta' => [],
|
||||
];
|
||||
}
|
||||
|
||||
public function storeCategory(Request $request): RedirectResponse
|
||||
{
|
||||
$this->authorizeNews($request);
|
||||
|
||||
Reference in New Issue
Block a user