FlexObject.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4. * @package Grav\Common\Flex
  5. *
  6. * @copyright Copyright (c) 2015 - 2023 Trilby Media, LLC. All rights reserved.
  7. * @license MIT License; see LICENSE file for details.
  8. */
  9. namespace Grav\Common\Flex;
  10. use Grav\Common\Flex\Traits\FlexGravTrait;
  11. use Grav\Common\Flex\Traits\FlexObjectTrait;
  12. use Grav\Common\Media\Interfaces\MediaInterface;
  13. use Grav\Framework\Flex\Traits\FlexMediaTrait;
  14. use function is_array;
  15. /**
  16. * Class FlexObject
  17. *
  18. * @package Grav\Common\Flex
  19. */
  20. abstract class FlexObject extends \Grav\Framework\Flex\FlexObject implements MediaInterface
  21. {
  22. use FlexGravTrait;
  23. use FlexObjectTrait;
  24. use FlexMediaTrait;
  25. /**
  26. * {@inheritdoc}
  27. * @see FlexObjectInterface::getFormValue()
  28. */
  29. public function getFormValue(string $name, $default = null, string $separator = null)
  30. {
  31. $value = $this->getNestedProperty($name, null, $separator);
  32. // Handle media order field.
  33. if (null === $value && $name === 'media_order') {
  34. return implode(',', $this->getMediaOrder());
  35. }
  36. // Handle media fields.
  37. $settings = $this->getFieldSettings($name);
  38. if (($settings['media_field'] ?? false) === true) {
  39. return $this->parseFileProperty($value, $settings);
  40. }
  41. return $value ?? $default;
  42. }
  43. /**
  44. * {@inheritdoc}
  45. * @see FlexObjectInterface::prepareStorage()
  46. */
  47. public function prepareStorage(): array
  48. {
  49. // Remove extra content from media fields.
  50. $fields = $this->getMediaFields();
  51. foreach ($fields as $field) {
  52. $data = $this->getNestedProperty($field);
  53. if (is_array($data)) {
  54. foreach ($data as $name => &$image) {
  55. unset($image['image_url'], $image['thumb_url']);
  56. }
  57. unset($image);
  58. $this->setNestedProperty($field, $data);
  59. }
  60. }
  61. return parent::prepareStorage();
  62. }
  63. }