vendor/pimcore/pimcore/models/DataObject/ClassDefinition/Data/Image.php line 87

Open in your IDE?
  1. <?php
  2. /**
  3. * Pimcore
  4. *
  5. * This source file is available under two different licenses:
  6. * - GNU General Public License version 3 (GPLv3)
  7. * - Pimcore Commercial License (PCL)
  8. * Full copyright and license information is available in
  9. * LICENSE.md which is distributed with this source code.
  10. *
  11. * @copyright Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  12. * @license http://www.pimcore.org/license GPLv3 and PCL
  13. */
  14. namespace Pimcore\Model\DataObject\ClassDefinition\Data;
  15. use Pimcore\Model;
  16. use Pimcore\Model\Asset;
  17. use Pimcore\Model\DataObject\ClassDefinition\Data;
  18. use Pimcore\Model\Element;
  19. use Pimcore\Normalizer\NormalizerInterface;
  20. class Image extends Data implements ResourcePersistenceAwareInterface, QueryResourcePersistenceAwareInterface, TypeDeclarationSupportInterface, EqualComparisonInterface, VarExporterInterface, NormalizerInterface, IdRewriterInterface
  21. {
  22. use Extension\ColumnType;
  23. use ImageTrait;
  24. use Extension\QueryColumnType;
  25. /**
  26. * Static type of this element
  27. *
  28. * @internal
  29. *
  30. * @var string
  31. */
  32. public $fieldtype = 'image';
  33. /**
  34. * Type for the column to query
  35. *
  36. * @internal
  37. *
  38. * @var string
  39. */
  40. public $queryColumnType = 'int(11)';
  41. /**
  42. * Type for the column
  43. *
  44. * @internal
  45. *
  46. * @var string
  47. */
  48. public $columnType = 'int(11)';
  49. /**
  50. * @see ResourcePersistenceAwareInterface::getDataForResource
  51. *
  52. * @param mixed $data
  53. * @param null|Model\DataObject\Concrete $object
  54. * @param mixed $params
  55. *
  56. * @return int|null
  57. */
  58. public function getDataForResource($data, $object = null, $params = [])
  59. {
  60. if ($data instanceof Asset) {
  61. return $data->getId();
  62. }
  63. return null;
  64. }
  65. /**
  66. * @see ResourcePersistenceAwareInterface::getDataFromResource
  67. *
  68. * @param int $data
  69. * @param null|Model\DataObject\Concrete $object
  70. * @param mixed $params
  71. *
  72. * @return Asset|null
  73. */
  74. public function getDataFromResource($data, $object = null, $params = [])
  75. {
  76. if ((int)$data > 0) {
  77. return Asset\Image::getById($data);
  78. }
  79. return null;
  80. }
  81. /**
  82. * @see QueryResourcePersistenceAwareInterface::getDataForQueryResource
  83. *
  84. * @param Asset|null $data
  85. * @param null|Model\DataObject\Concrete $object
  86. * @param mixed $params
  87. *
  88. * @return int|null
  89. */
  90. public function getDataForQueryResource($data, $object = null, $params = [])
  91. {
  92. if ($data instanceof Asset) {
  93. return $data->getId();
  94. }
  95. return null;
  96. }
  97. /**
  98. * @see Data::getDataForEditmode
  99. *
  100. * @param Asset\Image|null $data
  101. * @param null|Model\DataObject\Concrete $object
  102. * @param array $params
  103. *
  104. * @return array|null
  105. */
  106. public function getDataForEditmode($data, $object = null, $params = [])
  107. {
  108. if ($data instanceof Asset\Image) {
  109. return $data->getObjectVars();
  110. }
  111. return $data;
  112. }
  113. /**
  114. * @param Asset $data
  115. * @param null|Model\DataObject\Concrete $object
  116. * @param mixed $params
  117. *
  118. * @return array
  119. */
  120. public function getDataForGrid($data, $object = null, $params = [])
  121. {
  122. return $this->getDataForEditmode($data, $object, $params);
  123. }
  124. /**
  125. * @see Data::getDataFromEditmode
  126. *
  127. * @param array $data
  128. * @param null|Model\DataObject\Concrete $object
  129. * @param mixed $params
  130. *
  131. * @return Asset\Image|null
  132. */
  133. public function getDataFromEditmode($data, $object = null, $params = [])
  134. {
  135. if ($data && (int)$data['id'] > 0) {
  136. return Asset\Image::getById($data['id']);
  137. }
  138. return null;
  139. }
  140. /**
  141. * @param int $data
  142. * @param null|Model\DataObject\Concrete $object
  143. * @param mixed $params
  144. *
  145. * @return Asset
  146. */
  147. public function getDataFromGridEditor($data, $object = null, $params = [])
  148. {
  149. return $this->getDataFromEditmode($data, $object, $params);
  150. }
  151. /**
  152. * @see Data::getVersionPreview
  153. *
  154. * @param Asset\Image|null $data
  155. * @param null|Model\DataObject\Concrete $object
  156. * @param mixed $params
  157. *
  158. * @return string|null
  159. */
  160. public function getVersionPreview($data, $object = null, $params = [])
  161. {
  162. if ($data instanceof Asset\Image) {
  163. return '<img src="/admin/asset/get-image-thumbnail?id=' . $data->getId() . '&width=100&height=100&aspectratio=true" />';
  164. }
  165. return null;
  166. }
  167. /**
  168. * {@inheritdoc}
  169. */
  170. public function getForCsvExport($object, $params = [])
  171. {
  172. $data = $this->getDataFromObjectParam($object, $params);
  173. if ($data instanceof Element\ElementInterface) {
  174. return $data->getRealFullPath();
  175. }
  176. return '';
  177. }
  178. /**
  179. * {@inheritdoc}
  180. */
  181. public function getDataForSearchIndex($object, $params = [])
  182. {
  183. return '';
  184. }
  185. /**
  186. * {@inheritdoc}
  187. */
  188. public function getCacheTags($data, array $tags = [])
  189. {
  190. if ($data instanceof Asset\Image) {
  191. if (!array_key_exists($data->getCacheTag(), $tags)) {
  192. $tags = $data->getCacheTags($tags);
  193. }
  194. }
  195. return $tags;
  196. }
  197. /**
  198. * @param Asset|null $data
  199. *
  200. * @return array
  201. */
  202. public function resolveDependencies($data)
  203. {
  204. $dependencies = [];
  205. if ($data instanceof Asset) {
  206. $dependencies['asset_' . $data->getId()] = [
  207. 'id' => $data->getId(),
  208. 'type' => 'asset',
  209. ];
  210. }
  211. return $dependencies;
  212. }
  213. /**
  214. * {@inheritdoc}
  215. */
  216. public function isDiffChangeAllowed($object, $params = [])
  217. {
  218. return true;
  219. }
  220. /** Generates a pretty version preview (similar to getVersionPreview) can be either html or
  221. * a image URL. See the https://github.com/pimcore/object-merger bundle documentation for details
  222. *
  223. * @param Asset\Image|null $data
  224. * @param Model\DataObject\Concrete|null $object
  225. * @param mixed $params
  226. *
  227. * @return array|string
  228. */
  229. public function getDiffVersionPreview($data, $object = null, $params = [])
  230. {
  231. $versionPreview = null;
  232. if ($data instanceof Asset\Image) {
  233. $versionPreview = '/admin/asset/get-image-thumbnail?id=' . $data->getId() . '&width=150&height=150&aspectratio=true';
  234. }
  235. if ($versionPreview) {
  236. $value = [];
  237. $value['src'] = $versionPreview;
  238. $value['type'] = 'img';
  239. return $value;
  240. } else {
  241. return '';
  242. }
  243. }
  244. /**
  245. * { @inheritdoc }
  246. */
  247. public function rewriteIds(/** mixed */ $container, /** array */ $idMapping, /** array */ $params = []) /** :mixed */
  248. {
  249. $data = $this->getDataFromObjectParam($container, $params);
  250. if ($data instanceof Asset\Image) {
  251. if (array_key_exists('asset', $idMapping) && array_key_exists($data->getId(), $idMapping['asset'])) {
  252. return Asset::getById($idMapping['asset'][$data->getId()]);
  253. }
  254. }
  255. return $data;
  256. }
  257. /**
  258. * @param Model\DataObject\ClassDefinition\Data\Image $masterDefinition
  259. */
  260. public function synchronizeWithMasterDefinition(Model\DataObject\ClassDefinition\Data $masterDefinition)
  261. {
  262. $this->uploadPath = $masterDefinition->uploadPath;
  263. }
  264. /**
  265. * {@inheritdoc}
  266. */
  267. public function isFilterable(): bool
  268. {
  269. return true;
  270. }
  271. /**
  272. * @param Asset|null $oldValue
  273. * @param Asset|null $newValue
  274. *
  275. * @return bool
  276. */
  277. public function isEqual($oldValue, $newValue): bool
  278. {
  279. $oldValue = $oldValue instanceof Asset ? $oldValue->getId() : null;
  280. $newValue = $newValue instanceof Asset ? $newValue->getId() : null;
  281. return $oldValue === $newValue;
  282. }
  283. /**
  284. * {@inheritdoc}
  285. */
  286. public function getParameterTypeDeclaration(): ?string
  287. {
  288. return '?\\' . Asset\Image::class;
  289. }
  290. /**
  291. * {@inheritdoc}
  292. */
  293. public function getReturnTypeDeclaration(): ?string
  294. {
  295. return '?\\' . Asset\Image::class;
  296. }
  297. /**
  298. * {@inheritdoc}
  299. */
  300. public function getPhpdocInputType(): ?string
  301. {
  302. return '\\' . Asset\Image::class . '|null';
  303. }
  304. /**
  305. * {@inheritdoc}
  306. */
  307. public function getPhpdocReturnType(): ?string
  308. {
  309. return '\\' . Asset\Image::class . '|null';
  310. }
  311. /**
  312. * {@inheritdoc}
  313. */
  314. public function normalize($value, $params = [])
  315. {
  316. if ($value instanceof \Pimcore\Model\Asset\Image) {
  317. return [
  318. 'type' => 'asset',
  319. 'id' => $value->getId(),
  320. ];
  321. }
  322. }
  323. /**
  324. * {@inheritdoc}
  325. */
  326. public function denormalize($value, $params = [])
  327. {
  328. if (isset($value['id'])) {
  329. return Asset\Image::getById($value['id']);
  330. }
  331. }
  332. }