style updates

This commit is contained in:
Mark Gregory
2026-07-24 14:59:44 +01:00
parent 24ab771cd3
commit dd23205d0b
482 changed files with 7173 additions and 1435 deletions
@@ -1,3 +1,37 @@
<?php
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema;
return new class extends Migration { public function up(): void { Schema::create('media', function(Blueprint $table): void { $table->id(); $table->uuid('uuid')->unique(); $table->nullableMorphs('attachable'); $table->string('collection')->default('default')->index(); $table->string('disk')->default('public'); $table->string('path'); $table->string('original_name'); $table->string('mime_type')->nullable(); $table->unsignedBigInteger('size')->default(0); $table->string('title')->nullable(); $table->string('alt_text')->nullable(); $table->text('caption')->nullable(); $table->json('metadata')->nullable(); $table->unsignedInteger('sort_order')->default(0); $table->foreignId('uploaded_by')->nullable()->constrained('users')->nullOnDelete(); $table->timestamps(); $table->softDeletes(); $table->index(['attachable_type','attachable_id','collection','sort_order'],'media_attachable_collection_index'); }); } public function down(): void { Schema::dropIfExists('media'); } };
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('media', function (Blueprint $table): void {
$table->id();
$table->uuid('uuid')->unique();
$table->nullableMorphs('attachable');
$table->string('collection')->default('default')->index();
$table->string('disk')->default('public');
$table->string('path');
$table->string('original_name');
$table->string('mime_type')->nullable();
$table->unsignedBigInteger('size')->default(0);
$table->string('title')->nullable();
$table->string('alt_text')->nullable();
$table->text('caption')->nullable();
$table->json('metadata')->nullable();
$table->unsignedInteger('sort_order')->default(0);
$table->foreignId('uploaded_by')->nullable()->constrained('users')->nullOnDelete();
$table->timestamps();
$table->softDeletes();
$table->index(['attachable_type', 'attachable_id', 'collection', 'sort_order'], 'media_attachable_collection_index');
});
}
public function down(): void
{
Schema::dropIfExists('media');
}
};
@@ -1,8 +1,34 @@
<?php
namespace Modules\Media\Http\Controllers;
use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\Storage; use Modules\Media\Models\Media;
final class MediaController extends Controller {
public function index(){ return view('media::index',['media'=>Media::query()->latest()->paginate(30)]); }
public function store(Request $request){ $request->validate(['file'=>['required','file','max:20480'],'title'=>['nullable','string','max:255'],'alt_text'=>['nullable','string','max:255']]); $file=$request->file('file'); $path=$file->store('media','public'); Media::create(['disk'=>'public','path'=>$path,'original_name'=>$file->getClientOriginalName(),'mime_type'=>$file->getMimeType(),'size'=>$file->getSize(),'title'=>$request->string('title')->toString() ?: pathinfo($file->getClientOriginalName(),PATHINFO_FILENAME),'alt_text'=>$request->string('alt_text')->toString() ?: null,'uploaded_by'=>$request->user()->id]); return back()->with('status','Media uploaded.'); }
public function destroy(Media $medium){ Storage::disk($medium->disk)->delete($medium->path); $medium->delete(); return back()->with('status','Media deleted.'); }
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Modules\Media\Models\Media;
final class MediaController extends Controller
{
public function index()
{
return view('media::index', ['media' => Media::query()->latest()->paginate(30)]);
}
public function store(Request $request)
{
$request->validate(['file' => ['required', 'file', 'max:20480'], 'title' => ['nullable', 'string', 'max:255'], 'alt_text' => ['nullable', 'string', 'max:255']]);
$file = $request->file('file');
$path = $file->store('media', 'public');
Media::create(['disk' => 'public', 'path' => $path, 'original_name' => $file->getClientOriginalName(), 'mime_type' => $file->getMimeType(), 'size' => $file->getSize(), 'title' => $request->string('title')->toString() ?: pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME), 'alt_text' => $request->string('alt_text')->toString() ?: null, 'uploaded_by' => $request->user()->id]);
return back()->with('status', 'Media uploaded.');
}
public function destroy(Media $medium)
{
Storage::disk($medium->disk)->delete($medium->path);
$medium->delete();
return back()->with('status', 'Media deleted.');
}
}
+25 -2
View File
@@ -1,3 +1,26 @@
<?php
namespace Modules\Media\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Support\Str;
final class Media extends Model { use SoftDeletes; protected $table='media'; protected $guarded=[]; protected static function booted(): void { static::creating(fn(self $m) => $m->uuid ??= (string) Str::uuid()); } protected function casts(): array { return ['metadata'=>'array','size'=>'integer','sort_order'=>'integer']; } }
namespace Modules\Media\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Str;
final class Media extends Model
{
use SoftDeletes;
protected $table = 'media';
protected $guarded = [];
protected static function booted(): void
{
self::creating(fn (self $m) => $m->uuid ??= (string) Str::uuid());
}
protected function casts(): array
{
return ['metadata' => 'array', 'size' => 'integer', 'sort_order' => 'integer'];
}
}
+9 -2
View File
@@ -1,3 +1,10 @@
<?php
use Illuminate\Support\Facades\Route; use Modules\Media\Http\Controllers\MediaController;
Route::middleware(['auth','verified'])->prefix('administration/media')->name('administration.media.')->group(function (): void { Route::get('/',[MediaController::class,'index'])->name('index'); Route::post('/',[MediaController::class,'store'])->name('store'); Route::delete('/{medium}',[MediaController::class,'destroy'])->name('destroy'); });
use Illuminate\Support\Facades\Route;
use Modules\Media\Http\Controllers\MediaController;
Route::middleware(['auth', 'verified'])->prefix('administration/media')->name('administration.media.')->group(function (): void {
Route::get('/', [MediaController::class, 'index'])->name('index');
Route::post('/', [MediaController::class, 'store'])->name('store');
Route::delete('/{medium}', [MediaController::class, 'destroy'])->name('destroy');
});
+9 -2
View File
@@ -4,6 +4,13 @@ namespace Modules\Media\Support;
final class ModuleInfo
{
public static function name(): string { return 'Media'; }
public static function nameLower(): string { return 'media'; }
public static function name(): string
{
return 'Media';
}
public static function nameLower(): string
{
return 'media';
}
}