2026-01-15 01:13:44 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
|
|
|
|
|
|
use App\Http\Requests\StoreMediaRequest;
|
2026-01-17 17:44:37 +00:00
|
|
|
use App\Models\Media;
|
2026-01-15 01:13:44 +00:00
|
|
|
use Illuminate\Http\JsonResponse;
|
2026-01-17 17:44:37 +00:00
|
|
|
use Illuminate\Http\Request;
|
2026-01-15 01:13:44 +00:00
|
|
|
|
|
|
|
|
class MediaController extends Controller
|
|
|
|
|
{
|
|
|
|
|
public function store(StoreMediaRequest $request): JsonResponse
|
|
|
|
|
{
|
2026-01-17 17:44:37 +00:00
|
|
|
$modelClass = $request->input('model');
|
|
|
|
|
$modelId = $request->input('model_id');
|
|
|
|
|
$collection = $request->input('collection', 'default');
|
|
|
|
|
|
|
|
|
|
$model = $modelClass::findOrFail($modelId);
|
|
|
|
|
|
|
|
|
|
$media = $model->addMedia(
|
|
|
|
|
$request->file('media'),
|
|
|
|
|
$collection
|
|
|
|
|
);
|
2026-01-15 01:13:44 +00:00
|
|
|
|
|
|
|
|
return response()->json([
|
|
|
|
|
'id' => $media->id,
|
|
|
|
|
'url' => $media->url,
|
|
|
|
|
'type' => $media->type->value,
|
|
|
|
|
'original_filename' => $media->original_filename,
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-17 17:44:37 +00:00
|
|
|
public function destroy(string $modelId, Media $media): JsonResponse
|
2026-01-15 01:13:44 +00:00
|
|
|
{
|
2026-01-17 17:44:37 +00:00
|
|
|
if ($media->mediable_id !== $modelId) {
|
|
|
|
|
abort(403);
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-15 01:13:44 +00:00
|
|
|
$media->delete();
|
|
|
|
|
|
|
|
|
|
return response()->json(['success' => true]);
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-17 17:44:37 +00:00
|
|
|
public function duplicate(Media $media, Request $request): JsonResponse
|
2026-01-17 15:36:49 +00:00
|
|
|
{
|
2026-01-17 17:44:37 +00:00
|
|
|
$targets = $request->input('targets', []);
|
2026-01-17 15:36:49 +00:00
|
|
|
|
|
|
|
|
$duplicates = [];
|
|
|
|
|
|
2026-01-17 17:44:37 +00:00
|
|
|
foreach ($targets as $target) {
|
|
|
|
|
$modelClass = $target['model'];
|
|
|
|
|
$modelId = $target['model_id'];
|
|
|
|
|
$collection = $target['collection'] ?? $media->collection;
|
|
|
|
|
|
|
|
|
|
$model = $modelClass::findOrFail($modelId);
|
|
|
|
|
|
|
|
|
|
$duplicate = $model->media()->create([
|
|
|
|
|
'collection' => $collection,
|
2026-01-17 15:36:49 +00:00
|
|
|
'type' => $media->type,
|
|
|
|
|
'path' => $media->path,
|
|
|
|
|
'original_filename' => $media->original_filename,
|
|
|
|
|
'mime_type' => $media->mime_type,
|
|
|
|
|
'size' => $media->size,
|
|
|
|
|
'order' => $media->order,
|
|
|
|
|
'meta' => $media->meta,
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
$duplicates[] = [
|
|
|
|
|
'id' => $duplicate->id,
|
2026-01-17 17:44:37 +00:00
|
|
|
'mediable_id' => $duplicate->mediable_id,
|
|
|
|
|
'mediable_type' => $duplicate->mediable_type,
|
2026-01-17 15:36:49 +00:00
|
|
|
'url' => $duplicate->url,
|
|
|
|
|
'type' => $duplicate->type->value,
|
|
|
|
|
'original_filename' => $duplicate->original_filename,
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return response()->json($duplicates);
|
|
|
|
|
}
|
2026-01-15 01:13:44 +00:00
|
|
|
}
|