Completed
Pull Request — master (#79)
by Sebastian
04:18
created

MediaLibraryController::add()   B

Complexity

Conditions 4
Paths 4

Size

Total Lines 24
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 14
nc 4
nop 1
dl 0
loc 24
rs 8.6845
c 0
b 0
f 0
1
<?php
2
3
namespace App\Http\Controllers\Back;
4
5
use App\Http\Controllers\Controller;
6
use App\Http\Requests\Back\AddMediaRequest;
7
use Exception;
8
use Illuminate\Http\Request;
9
use Illuminate\Http\UploadedFile;
10
use Illuminate\Support\Collection;
11
use Response;
12
use Spatie\MediaLibrary\Media;
13
use App\Models\Transformers\MediaTransformer;
14
15
class MediaLibraryController extends Controller
16
{
17
    public function add(AddMediaRequest $request)
18
    {
19
        $model = $this->getModelFromRequest($request);
20
21
        $files = $request->file('file');
22
23
        if (! is_array($files)) {
24
            $files = [$files];
25
        }
26
27
        $media = collect($files)
28
            ->map(function (UploadedFile $file) use ($model, $request) {
29
                return $model
30
                    ->addMedia($file)
31
                    ->withCustomProperties(['temp' => $request->has('redactor') ? false : true])
32
                    ->toCollection($request->get('collection_name', 'default'));
33
            });
34
35
        if ($request->has('redactor')) {
36
            return Response::json(['filelink' => $media->first()->getUrl('redactor')]);
37
        }
38
39
        return fractal()->collection($media)->transformWith(new MediaTransformer());
40
    }
41
42
    public function index(Request $request)
43
    {
44
        $model = $this->getModelFromRequest($request);
45
46
        $collectionName = $request->get('collectionName');
47
48
        $media = $model->getMedia($collectionName)->reduce(function (Collection $collection, Media $media) {
49
            return $collection->push([
50
                'thumb' => $media->getUrl('admin'),
51
                'image' => $media->getUrl('redactor'),
52
                'name' => $media->name,
53
            ]);
54
        }, new Collection());
55
56
        return response()->json($media);
57
    }
58
59
    protected function getModelFromRequest(Request $request)
60
    {
61
        if (!isset($request['model_name'])) {
62
            throw new Exception('No model name provided');
63
        }
64
65
        if (!isset($request['model_id'])) {
66
            throw new Exception('No model id provided');
67
        }
68
69
        return call_user_func($request['model_name'].'::findOrFail', $request['model_id']);
70
    }
71
}
72