/** * Handle Article Media with Image (add renditions, set mimetype etc.). * * @param ArticleMedia $articleMedia * @param string $key unique key shared between media and image rendition * @param ItemInterface $item * * @return ArticleMedia */ protected function createImageMedia(ArticleMedia $articleMedia, string $key, ItemInterface $item) { if (0 === $item->getRenditions()->count()) { return $articleMedia; } $originalRendition = $item->getRenditions()['original']; $criteria = new Criteria(); $criteria->set('assetId', ArticleMedia::handleMediaId($originalRendition->getMedia())); $articleMedia->setMimetype($originalRendition->getMimetype()); $articleMedia->setKey($key); $image = $this->imageRepository->getByCriteria($criteria, [])->getQuery()->getOneOrNullResult(); $articleMedia->setImage($image); foreach ($item->getRenditions() as $key => $rendition) { $criteria->set('assetId', ArticleMedia::handleMediaId($rendition->getMedia())); $image = $this->imageRepository->getByCriteria($criteria, [])->getQuery()->getOneOrNullResult(); if (null === $image) { continue; } $imageRendition = $image->getRendition(); if (null === $image->getRendition()) { $imageRendition = $this->createImageRendition($image, $articleMedia, $key, $rendition); $this->imageRepository->persist($imageRendition); } $articleMedia->addRendition($imageRendition); } return $articleMedia; }
/** * @param ItemInterface $item */ public function setFromItem(ItemInterface $item) { $this->setBody($item->getBody() ?: $item->getBodyText()); $this->setByLine($item->getByLine()); $this->setLocated($item->getLocated()); $this->setDescription($item->getDescription()); $this->setUsageTerms($item->getUsageTerms()); }