2022-03-15 10:52:21 +01:00

75 lines
2.0 KiB
PHP

<?php
declare(strict_types=1);
/**
* @package Grav\Common\Flex
*
* @copyright Copyright (c) 2015 - 2022 Trilby Media, LLC. All rights reserved.
* @license MIT License; see LICENSE file for details.
*/
namespace Grav\Common\Flex;
use Grav\Common\Flex\Traits\FlexGravTrait;
use Grav\Common\Flex\Traits\FlexObjectTrait;
use Grav\Common\Media\Interfaces\MediaInterface;
use Grav\Framework\Flex\Traits\FlexMediaTrait;
use function is_array;
/**
* Class FlexObject
*
* @package Grav\Common\Flex
*/
abstract class FlexObject extends \Grav\Framework\Flex\FlexObject implements MediaInterface
{
use FlexGravTrait;
use FlexObjectTrait;
use FlexMediaTrait;
/**
* {@inheritdoc}
* @see FlexObjectInterface::getFormValue()
*/
public function getFormValue(string $name, $default = null, string $separator = null)
{
$value = $this->getNestedProperty($name, null, $separator);
// Handle media order field.
if (null === $value && $name === 'media_order') {
return implode(',', $this->getMediaOrder());
}
// Handle media fields.
$settings = $this->getFieldSettings($name);
if (($settings['media_field'] ?? false) === true) {
return $this->parseFileProperty($value, $settings);
}
return $value ?? $default;
}
/**
* {@inheritdoc}
* @see FlexObjectInterface::prepareStorage()
*/
public function prepareStorage(): array
{
// Remove extra content from media fields.
$fields = $this->getMediaFields();
foreach ($fields as $field) {
$data = $this->getNestedProperty($field);
if (is_array($data)) {
foreach ($data as $name => &$image) {
unset($image['image_url'], $image['thumb_url']);
}
unset($image);
$this->setNestedProperty($field, $data);
}
}
return parent::prepareStorage();
}
}