75 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			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();
 | 
						|
    }
 | 
						|
}
 |