Allow heading tags (h1-h6) in ContentSanitizer so news editor headings render

This commit is contained in:
2026-06-04 07:52:57 +02:00
parent 0b33a1b074
commit 15870ddb1f
191 changed files with 15453 additions and 1786 deletions

View File

@@ -162,6 +162,7 @@ Route::prefix('academy')->name('academy.')->group(function () {
Route::get('/lessons/{slug}', [AcademyLessonController::class, 'show'])->name('lessons.show');
Route::get('/prompts', [AcademyPromptController::class, 'index'])->name('prompts.index');
Route::get('/prompts/popular', [AcademyPromptController::class, 'popular'])->name('prompts.popular');
Route::get('/prompts/{slug}', [AcademyPromptController::class, 'show'])->name('prompts.show');
Route::get('/billing/success', [AcademyBillingController::class, 'success'])->middleware('auth')->name('billing.success');
@@ -353,6 +354,9 @@ Route::prefix('news')->name('news.')->group(function () {
->name('author');
Route::get('category/{slug}', [FrontendNewsController::class, 'category'])->name('category');
Route::get('tag/{slug}', [FrontendNewsController::class, 'tag'])->name('tag');
Route::get('type/{type}', [FrontendNewsController::class, 'type'])
->where('type', '[a-z][a-z0-9_]*')
->name('type');
Route::middleware(['auth', 'verified'])->post('{slug}/comments', [NewsArticleCommentController::class, 'store'])
->where('slug', '[a-z0-9\-]+')
->name('comments.store');
@@ -740,6 +744,10 @@ Route::get('/internal/nova-cards/render-frame/{uuid}', [\App\Http\Controllers\In
->where('uuid', '[0-9a-f\-]{36}')
->name('nova-cards.render-frame');
Route::get('/internal/enhance/source/{enhanceJob}', [\App\Http\Controllers\Internal\EnhanceSourceController::class, 'show'])
->whereNumber('enhanceJob')
->name('enhance.source.download');
Route::middleware(['auth', 'verified'])->group(function () {
Route::post('/cards/{card}/comments', [\App\Http\Controllers\NovaCardCommentController::class, 'store'])
->whereNumber('card')
@@ -748,6 +756,14 @@ Route::middleware(['auth', 'verified'])->group(function () {
->whereNumber('card')
->whereNumber('comment')
->name('cards.comments.destroy');
Route::get('/enhance', [\App\Http\Controllers\EnhanceController::class, 'index'])->name('enhance.index');
Route::get('/enhance/create', [\App\Http\Controllers\EnhanceController::class, 'create'])->name('enhance.create');
Route::post('/enhance', [\App\Http\Controllers\EnhanceController::class, 'store'])->middleware('throttle:20,1')->name('enhance.store');
Route::get('/enhance/{enhanceJob}', [\App\Http\Controllers\EnhanceController::class, 'show'])->whereNumber('enhanceJob')->name('enhance.show');
Route::post('/enhance/{enhanceJob}/retry', [\App\Http\Controllers\EnhanceController::class, 'retry'])->middleware('throttle:20,1')->whereNumber('enhanceJob')->name('enhance.retry');
Route::delete('/enhance/{enhanceJob}', [\App\Http\Controllers\EnhanceController::class, 'destroy'])->whereNumber('enhanceJob')->name('enhance.destroy');
Route::post('/art/{artwork}/enhance', [\App\Http\Controllers\ArtworkEnhanceController::class, 'store'])->middleware('throttle:20,1')->whereNumber('artwork')->name('artworks.enhance.store');
});
Route::middleware(['auth', 'admin.moderation'])->prefix('cp/cards')->name('cp.cards.')->group(function () {
@@ -787,6 +803,14 @@ Route::middleware(['artwork.maturity.access'])->prefix('cp/ai-biography')->name(
Route::post('/records/{biography}/show', [\App\Http\Controllers\Settings\AiBiographyAdminController::class, 'show'])->whereNumber('biography')->name('show');
});
Route::middleware(['auth', 'admin.moderation'])->prefix('moderation/enhance')->name('admin.enhance.')->group(function () {
Route::get('/', [\App\Http\Controllers\Moderation\ModerationEnhanceController::class, 'index'])->name('index');
Route::get('/{enhanceJob}', [\App\Http\Controllers\Moderation\ModerationEnhanceController::class, 'show'])->whereNumber('enhanceJob')->name('show');
Route::post('/{enhanceJob}/retry', [\App\Http\Controllers\Moderation\ModerationEnhanceController::class, 'retry'])->middleware('throttle:20,1')->whereNumber('enhanceJob')->name('retry');
Route::post('/{enhanceJob}/mark-failed', [\App\Http\Controllers\Moderation\ModerationEnhanceController::class, 'markFailed'])->middleware('throttle:20,1')->whereNumber('enhanceJob')->name('mark-failed');
Route::delete('/{enhanceJob}', [\App\Http\Controllers\Moderation\ModerationEnhanceController::class, 'destroy'])->middleware('throttle:20,1')->whereNumber('enhanceJob')->name('destroy');
});
// ── SETTINGS / PROFILE EDIT ───────────────────────────────────────────────────
Route::middleware(['auth', 'verified', 'normalize.username', 'ensure.onboarding.complete'])->group(function () {
Route::get('/profile', fn () => redirect()->route('dashboard.profile', [], 301))->name('legacy.profile.redirect');
@@ -1097,7 +1121,7 @@ Route::middleware(['auth', 'admin.access'])
Route::post('/', [\App\Http\Controllers\Settings\FeaturedArtworkAdminController::class, 'store'])->name('store');
Route::match(['put', 'patch'], '/{feature}', [\App\Http\Controllers\Settings\FeaturedArtworkAdminController::class, 'update'])->whereNumber('feature')->name('update');
Route::post('/{feature}/toggle', [\App\Http\Controllers\Settings\FeaturedArtworkAdminController::class, 'toggle'])->whereNumber('feature')->name('toggle');
Route::post('/{feature}/force-hero', [\App\Http\Controllers\Settings\FeaturedArtworkAdminController::class, 'toggleForceHero'])->whereNumber('feature')->name('force-hero');
Route::match(['post', 'patch'], '/{feature}/force-hero', [\App\Http\Controllers\Settings\FeaturedArtworkAdminController::class, 'toggleForceHero'])->whereNumber('feature')->name('force-hero');
Route::delete('/{feature}', [\App\Http\Controllers\Settings\FeaturedArtworkAdminController::class, 'destroy'])->whereNumber('feature')->name('delete');
});
@@ -1140,6 +1164,7 @@ Route::middleware(['auth', 'admin.access'])
Route::get('/', [AcademyAdminAnalyticsController::class, 'overview'])->name('overview');
Route::get('/intelligence', [AcademyAdminAnalyticsController::class, 'intelligence'])->name('intelligence');
Route::get('/content', [AcademyAdminAnalyticsController::class, 'content'])->name('content');
Route::get('/prompt-library', [AcademyAdminAnalyticsController::class, 'promptLibrary'])->name('prompt-library');
Route::get('/prompts', [AcademyAdminAnalyticsController::class, 'prompts'])->name('prompts');
Route::get('/lessons', [AcademyAdminAnalyticsController::class, 'lessons'])->name('lessons');
Route::get('/courses', [AcademyAdminAnalyticsController::class, 'courses'])->name('courses');