/** * @param array $data * @return Struct\Media */ public function hydrate(array $data) { $media = new Struct\Media(); if (isset($data['__media_id'])) { $media->setId((int) $data['__media_id']); } if (isset($data['__media_name'])) { $media->setName($data['__media_name']); } if (isset($data['__media_description'])) { $media->setDescription($data['__media_description']); } if (isset($data['__media_type'])) { $media->setType($data['__media_type']); } if (isset($data['__media_extension'])) { $media->setExtension($data['__media_extension']); } if (isset($data['__media_path'])) { $media->setFile($this->mediaService->getUrl($data['__media_path'])); } /** * Live Migration to add width/height to images */ if ($media->getType() == Struct\Media::TYPE_IMAGE && $this->mediaService->has($data['__media_path'])) { if (array_key_exists('__media_width', $data) && array_key_exists('__media_height', $data)) { if ($data['__media_width'] === null || $data['__media_height'] === null) { list($width, $height) = getimagesizefromstring($this->mediaService->read($data['__media_path'])); $this->database->executeUpdate('UPDATE s_media SET width = :width, height = :height WHERE id = :id', [':width' => $width, ':height' => $height, ':id' => $data['__media_id']]); $data['__media_width'] = $width; $data['__media_height'] = $height; } } } if (isset($data['__media_width'])) { $media->setWidth((int) $data['__media_width']); } if (isset($data['__media_height'])) { $media->setHeight((int) $data['__media_height']); } if ($media->getType() == Struct\Media::TYPE_IMAGE && $data['__mediaSettings_create_thumbnails']) { $media->setThumbnails($this->getMediaThumbnails($data)); } if (!empty($data['__mediaAttribute_id'])) { $attribute = $this->attributeHydrator->hydrate($this->extractFields('__mediaAttribute_', $data)); $media->addAttribute('media', $attribute); } return $media; }
/** * @param array $data * @return Media */ public function createMedia($data) { $media = new Media(); $media->setId($data['id']); $media->setExtension($data['extension']); $media->setName($data['name']); $media->setPreview($data['preview']); $media->setType($data['type']); $media->setFile($data['file']); $media->setDescription($data['description']); $me = $this; $thumbnails = array_map(function ($thumbnailData) use($me) { return $me->createThumbnail($thumbnailData); }, $data['thumbnails']); $media->setThumbnails($thumbnails); $media->addAttributes($this->createAttributes($data['attributes'])); return $media; }