|
1
|
|
|
<?php declare(strict_types=1); |
|
2
|
|
|
|
|
3
|
|
|
namespace Thinktomorrow\Chief\Media\Application; |
|
4
|
|
|
|
|
5
|
|
|
use Illuminate\Http\Request; |
|
6
|
|
|
use Thinktomorrow\AssetLibrary\Asset; |
|
7
|
|
|
use Thinktomorrow\AssetLibrary\HasAsset; |
|
8
|
|
|
use Thinktomorrow\Chief\Fields\Types\MediaField; |
|
9
|
|
|
|
|
10
|
|
|
class ImageFieldHandler extends AbstractMediaFieldHandler |
|
11
|
|
|
{ |
|
12
|
|
|
public function handle(HasAsset $model, MediaField $field, Request $request): void |
|
13
|
|
|
{ |
|
14
|
|
|
// Parse request ... |
|
15
|
|
|
$mediaRequest = $this->mediaRequest([ |
|
16
|
|
|
$request->input('images.'.$field->getName(), []), |
|
17
|
|
|
], $field, $request); |
|
18
|
|
|
|
|
19
|
|
|
foreach([MediaRequest::NEW, MediaRequest::REPLACE, MediaRequest::DETACH] as $action) { |
|
20
|
|
|
foreach($mediaRequest->getByKey($action) as $input) { |
|
21
|
|
|
$this->$action($model, $input); |
|
22
|
|
|
} |
|
23
|
|
|
} |
|
24
|
|
|
|
|
25
|
|
|
// TODO: sort the assets as well... perhaps can this be done in the mediaRequest class??? |
|
26
|
|
|
} |
|
27
|
|
|
|
|
28
|
|
|
private function new(HasAsset $model, MediaRequestInput $mediaRequestInput): Asset |
|
29
|
|
|
{ |
|
30
|
|
|
if($mediaRequestInput->metadata('existing_asset')) { |
|
31
|
|
|
return $this->newExistingAsset($model, $mediaRequestInput); |
|
32
|
|
|
} |
|
33
|
|
|
|
|
34
|
|
|
// Inputted value is expected to be a slim specific json string. |
|
35
|
|
|
$base64FileString = json_decode($mediaRequestInput->value())->output->image; |
|
36
|
|
|
|
|
37
|
|
|
$filename = json_decode($mediaRequestInput->value())->output->name; |
|
38
|
|
|
|
|
39
|
|
|
return $this->addAsset->add($model, $base64FileString, $mediaRequestInput->type(), $mediaRequestInput->locale(), $this->sluggifyFilename($filename)); |
|
40
|
|
|
} |
|
41
|
|
|
|
|
42
|
|
|
private function replace(HasAsset $model, MediaRequestInput $mediaRequest): Asset |
|
43
|
|
|
{ |
|
44
|
|
|
$asset = $this->createNewAsset($model, $mediaRequest); |
|
45
|
|
|
|
|
46
|
|
|
$currentAssetId = $mediaRequest->metadata('index'); |
|
47
|
|
|
|
|
48
|
|
|
$this->replaceAsset->handle($model, $currentAssetId, $asset->id, $mediaRequest->type(), $mediaRequest->locale()); |
|
|
|
|
|
|
49
|
|
|
|
|
50
|
|
|
return $asset; |
|
51
|
|
|
} |
|
52
|
|
|
|
|
53
|
|
|
private function detach(HasAsset $model, MediaRequestInput $mediaRequest) |
|
54
|
|
|
{ |
|
55
|
|
|
$assetId = $mediaRequest->value(); |
|
56
|
|
|
|
|
57
|
|
|
$this->detachAsset->detach($model, $assetId, $mediaRequest->type(), $mediaRequest->locale()); |
|
58
|
|
|
} |
|
59
|
|
|
|
|
60
|
|
|
protected function createNewAsset(HasAsset $model, MediaRequestInput $mediaRequestInput): Asset |
|
61
|
|
|
{ |
|
62
|
|
|
if($mediaRequestInput->metadata('existing_asset')) { |
|
63
|
|
|
return Asset::find($mediaRequestInput->value()); |
|
|
|
|
|
|
64
|
|
|
} |
|
65
|
|
|
|
|
66
|
|
|
// Inputted value is expected to be a slim specific json string. |
|
67
|
|
|
$file = json_decode($mediaRequestInput->value())->output->image; |
|
68
|
|
|
|
|
69
|
|
|
$filename = json_decode($mediaRequestInput->value())->output->name; |
|
70
|
|
|
|
|
71
|
|
|
return $this->assetUploader->uploadFromBase64($file, $filename); |
|
72
|
|
|
} |
|
73
|
|
|
} |
|
74
|
|
|
|
This function has been deprecated. The supplier of the function has supplied an explanatory message.
The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.