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($field, $request); |
16
|
|
|
|
17
|
|
|
foreach([MediaRequest::NEW, MediaRequest::REPLACE, MediaRequest::DETACH] as $action) { |
18
|
|
|
foreach($mediaRequest->getByKey($action) as $input) { |
19
|
|
|
$this->$action($model, $input); |
20
|
|
|
} |
21
|
|
|
} |
22
|
|
|
|
23
|
|
|
// TODO: sort the assets as well... perhaps can this be done in the mediaRequest class??? |
24
|
|
|
} |
25
|
|
|
|
26
|
|
|
private function mediaRequest(MediaField $field, Request $request): MediaRequest |
27
|
|
|
{ |
28
|
|
|
$mediaRequest = new MediaRequest(); |
29
|
|
|
|
30
|
|
|
foreach($request->input('images.'.$field->getName(), []) as $locale => $filesPerLocale) { |
31
|
|
|
|
32
|
|
|
foreach($filesPerLocale as $action => $files) { |
33
|
|
|
foreach($files as $k => $file) { |
34
|
|
|
|
35
|
|
|
// If the passed value is null, we do not want to process it. |
36
|
|
|
if(!$file) continue; |
37
|
|
|
|
38
|
|
|
$mediaRequest->add($action, new MediaRequestInput( |
39
|
|
|
$file, $locale, $field->getKey(), ['index' => $k] // index key is used for e.g. replace method to indicate the current asset id |
40
|
|
|
)); |
41
|
|
|
} |
42
|
|
|
} |
43
|
|
|
|
44
|
|
|
} |
45
|
|
|
|
46
|
|
|
return $mediaRequest; |
47
|
|
|
} |
48
|
|
|
|
49
|
|
|
private function new(HasAsset $model, MediaRequestInput $mediaRequest): Asset |
50
|
|
|
{ |
51
|
|
|
// Inputted value is expected to be a slim specific json string. |
52
|
|
|
$base64FileString = json_decode($mediaRequest->value())->output->image; |
53
|
|
|
|
54
|
|
|
$filename = json_decode($mediaRequest->value())->output->name; |
55
|
|
|
|
56
|
|
|
return $this->addAsset->add($model, $base64FileString, $mediaRequest->type(), $mediaRequest->locale(), $this->sluggifyFilename($filename)); |
57
|
|
|
} |
58
|
|
|
|
59
|
|
|
private function replace(HasAsset $model, MediaRequestInput $mediaRequest): Asset |
60
|
|
|
{ |
61
|
|
|
$asset = $this->new($model, $mediaRequest); |
62
|
|
|
|
63
|
|
|
$currentAssetId = $mediaRequest->metadata('index'); |
64
|
|
|
|
65
|
|
|
$this->replaceAsset->handle($model, $currentAssetId, $asset->id); |
|
|
|
|
66
|
|
|
|
67
|
|
|
return $asset; |
68
|
|
|
} |
69
|
|
|
|
70
|
|
|
private function detach(HasAsset $model, MediaRequestInput $mediaRequest) |
71
|
|
|
{ |
72
|
|
|
$assetId = $mediaRequest->value(); |
73
|
|
|
|
74
|
|
|
$this->detachAsset->detach($model, $assetId, $mediaRequest->type(), $mediaRequest->locale()); |
75
|
|
|
} |
76
|
|
|
} |
77
|
|
|
|
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.