This commit is contained in:
2022-10-18 10:29:26 +02:00
parent 5d2f6b6dd0
commit eeefd826e5
70 changed files with 3175 additions and 815 deletions
@@ -22,6 +22,9 @@ use Grav\Framework\Cache\CacheInterface;
use Grav\Framework\Filesystem\Filesystem;
use Grav\Framework\Flex\FlexDirectory;
use Grav\Framework\Form\FormFlashFile;
use Grav\Framework\Media\Interfaces\MediaObjectInterface;
use Grav\Framework\Media\MediaObject;
use Grav\Framework\Media\UploadedMediaObject;
use Psr\Http\Message\UploadedFileInterface;
use RocketTheme\Toolbox\ResourceLocator\UniformResourceLocator;
use RuntimeException;
@@ -30,7 +33,6 @@ use function in_array;
use function is_array;
use function is_callable;
use function is_int;
use function is_object;
use function is_string;
use function strpos;
@@ -297,6 +299,55 @@ trait FlexMediaTrait
];
}
/**
* @param string|null $field
* @param string $filename
* @param MediaObjectInterface|null $image
* @return MediaObject|UploadedMediaObject
*/
protected function buildMediaObject(?string $field, string $filename, MediaObjectInterface $image = null)
{
if (!$image) {
$media = $field ? $this->getMediaField($field) : null;
if ($media) {
$image = $media[$filename];
}
}
return new MediaObject($field, $filename, $image, $this);
}
/**
* @param string|null $field
* @return array
*/
protected function buildMediaList(?string $field): array
{
$names = $field ? (array)$this->getNestedProperty($field) : [];
$media = $field ? $this->getMediaField($field) : null;
if (null === $media) {
$media = $this->getMedia();
}
$list = [];
foreach ($names as $key => $val) {
$name = is_string($val) ? $val : $key;
$medium = $media[$name];
if ($medium) {
if ($medium->uploaded_file) {
$upload = $medium->uploaded_file;
$id = $upload instanceof FormFlashFile ? $upload->getId() : "{$field}-{$name}";
$list[] = new UploadedMediaObject($id, $field, $name, $upload);
} else {
$list[] = $this->buildMediaObject($field, $name, $medium);
}
}
}
return $list;
}
/**
* @param array $files
* @return void
@@ -375,7 +426,7 @@ trait FlexMediaTrait
$updated = false;
foreach ($this->getUpdatedMedia() as $filename => $upload) {
if (is_array($upload)) {
// Uses new format with [UploadedFileInterface, array].
/** @var array{UploadedFileInterface,array} $upload */
$settings = $upload[1];
if (isset($settings['destination']) && $settings['destination'] === $media->getPath()) {
$upload = $upload[0];
@@ -388,6 +439,7 @@ trait FlexMediaTrait
$updated = true;
if ($medium) {
$medium->uploaded = true;
$medium->uploaded_file = $upload;
$media->add($filename, $medium);
} elseif (is_callable([$media, 'hide'])) {
$media->hide($filename);