style updates
This commit is contained in:
@@ -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.');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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'];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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');
|
||||
});
|
||||
|
||||
@@ -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';
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user