Surfaces distinct visitors for the selected range as a headline figure, and lets the current view be exported for use in filings without retyping. Unique visitors are counted across the range as a whole rather than summed per document, so one person pulling five filings counts once. Where visitor IPs were never recorded the CSV leaves the cell blank instead of writing 0, which would otherwise read as "nobody downloaded this".
61 lines
3.3 KiB
PHP
61 lines
3.3 KiB
PHP
<?php
|
|
|
|
use App\Http\Controllers\DocumentController;
|
|
use App\Http\Controllers\HomeController;
|
|
use App\Http\Controllers\ProfileController;
|
|
use App\Http\Controllers\SubscriptionController;
|
|
use Illuminate\Foundation\Application;
|
|
use Illuminate\Support\Facades\Route;
|
|
use Inertia\Inertia;
|
|
|
|
// Public home page - Court Docket
|
|
Route::get('/', [HomeController::class, 'index'])->name('home');
|
|
|
|
// Subscription API routes
|
|
Route::post('/api/subscribe', [SubscriptionController::class, 'subscribe'])->name('api.subscribe');
|
|
Route::get('/unsubscribe/{token}', [SubscriptionController::class, 'showUnsubscribe'])->name('unsubscribe');
|
|
Route::post('/api/unsubscribe/{token}', [SubscriptionController::class, 'unsubscribe'])->name('api.unsubscribe');
|
|
|
|
// Document download route
|
|
Route::get('/api/documents/{id}/download', [DocumentController::class, 'download'])->name('api.documents.download');
|
|
|
|
// Admin routes
|
|
Route::prefix('admin')->name('admin.')->group(function () {
|
|
// Admin login routes (no auth required)
|
|
Route::get('/login', [\App\Http\Controllers\Admin\AuthController::class, 'showLogin'])->name('login');
|
|
Route::post('/login', [\App\Http\Controllers\Admin\AuthController::class, 'login'])->name('login.post');
|
|
|
|
// Protected admin routes
|
|
Route::middleware('admin.auth')->group(function () {
|
|
Route::get('/dashboard', [\App\Http\Controllers\Admin\DashboardController::class, 'index'])->name('dashboard');
|
|
Route::post('/logout', [\App\Http\Controllers\Admin\AuthController::class, 'logout'])->name('logout');
|
|
|
|
// Docket entry routes
|
|
Route::resource('docket-entries', \App\Http\Controllers\Admin\DocketEntryController::class);
|
|
Route::post('/docket-entries/{docketEntry}/send-notification', [\App\Http\Controllers\Admin\DocketEntryController::class, 'sendNotification'])->name('docket-entries.send-notification');
|
|
|
|
// Document routes
|
|
Route::post('/docket-entries/{docketEntry}/documents', [\App\Http\Controllers\Admin\DocumentController::class, 'store'])->name('documents.store');
|
|
Route::delete('/documents/{document}', [\App\Http\Controllers\Admin\DocumentController::class, 'destroy'])->name('documents.destroy');
|
|
|
|
// Document access statistics
|
|
Route::get('/document-access', [\App\Http\Controllers\Admin\DocumentAccessController::class, 'index'])->name('document-access.index');
|
|
Route::get('/document-access/export', [\App\Http\Controllers\Admin\DocumentAccessController::class, 'export'])->name('document-access.export');
|
|
|
|
// Subscriber routes
|
|
Route::get('/subscribers', [\App\Http\Controllers\Admin\SubscriberController::class, 'index'])->name('subscribers.index');
|
|
Route::delete('/subscribers/{subscription}', [\App\Http\Controllers\Admin\SubscriberController::class, 'destroy'])->name('subscribers.destroy');
|
|
});
|
|
});
|
|
|
|
Route::get('/dashboard', function () {
|
|
return Inertia::render('Dashboard');
|
|
})->middleware(['auth', 'verified'])->name('dashboard');
|
|
|
|
Route::middleware('auth')->group(function () {
|
|
Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
|
|
Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
|
|
Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
|
|
});
|
|
|
|
require __DIR__.'/auth.php';
|