Passed
Push — dependabot/npm_and_yarn/string... ( b56eb5...bc569b )
by
unknown
45:46 queued 33s
created

UploadManagersMediaController::store()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 31
Code Lines 19

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 20

Importance

Changes 0
Metric Value
cc 4
eloc 19
nc 4
nop 3
dl 0
loc 31
ccs 0
cts 18
cp 0
crap 20
rs 9.6333
c 0
b 0
f 0
1
<?php
2
3
namespace Thinktomorrow\Chief\App\Http\Controllers\Back\Media;
4
5
use Illuminate\Http\Request;
6
use Thinktomorrow\AssetLibrary\Models\AssetUploader;
7
use Thinktomorrow\Chief\Management\Managers;
8
use Thinktomorrow\Chief\Media\MediaType;
9
use Thinktomorrow\Chief\App\Http\Controllers\Controller;
10
use Thinktomorrow\Chief\Pages\Page;
11
12
class UploadManagersMediaController extends Controller
13
{
14
    /** @var Managers */
15
    private $managers;
16
17
    public function __construct(Managers $managers)
18
    {
19
        $this->managers = $managers;
20
    }
21
22
    /**
23
     * Upload a file via redactor editor. Keep in mind
24
     * that here one file at a time is accepted
25
     *
26
     * @param string $key
27
     * @param $id
28
     * @param Request $request
29
     * @return \Illuminate\Http\JsonResponse
30
     * @throws \Spatie\MediaLibrary\Exceptions\FileCannotBeAdded
31
     * @throws \Thinktomorrow\AssetLibrary\Exceptions\AssetUploadException
32
     */
33
    public function store(string $key, $id, Request $request)
34
    {
35
        $uploads = $request->file('file');
36
        $model = $this->managers->findByKey($key, $id)->model();
37
38
        if (empty($uploads)) {
39
            return response()->json([
40
                'error' => true,
41
                'messages' => 'Geen afbeelding opgeladen.',
42
            ], 500);
43
        }
44
45
        $responseContent = [];
46
47
        foreach ($uploads as $upload) {
48
            if (! $asset = AssetUploader::upload($upload)) {
49
                return response()->json([
50
                    'error' => true,
51
                    'messages' => 'Afbeelding kan niet worden opgeladen.',
52
                ], 500);
53
            }
54
55
            $asset->attachToModel($model, MediaType::CONTENT);
56
57
            $responseContent['file-'.$asset->id] = [
58
                'url' => $asset->getFileUrl(),
59
                'id' => $asset->id,
60
            ];
61
        }
62
63
        return response()->json($responseContent, 201);
64
    }
65
}
66