public function reverseTransform($value) { if (empty($value)) { $this->property->getMetadata()->remove('link'); return null; } $metadata = $this->property->getMetadata(); if (!$metadata->offsetExists('link')) { $metadata->set('link', new BlockPropertyMetadata('link', $this->property)); } $metaItem = $metadata->get('link'); /* @var $metaItem BlockPropertyMetadata */ $element = new LinkReferencedElement(); // @TODO: some data validation must happen here. $element->fillFromArray($value); $metaItem->setReferencedElement($element); return null; }
public static function getLinkReferencedElementUrl(LinkReferencedElement $element, EntityManager $entityManager, LocaleInterface $currenctLocale) { switch ($element->getResource()) { case LinkReferencedElement::RESOURCE_LINK: return $element->getHref(); case LinkReferencedElement::RESOURCE_PAGE: $localization = $entityManager->getRepository(PageLocalization::CN())->findOneBy(array('master' => $element->getPageId(), 'locale' => $currenctLocale->getId())); /* @var $localization PageLocalization */ if ($localization !== null) { // @TODO: allow to affect the path somehow? return $localization->getFullPath(Path::FORMAT_LEFT_DELIMITER); } break; case LinkReferencedElement::RESOURCE_FILE: // @FIXME: get the filestorage somehow, or use File entity? throw new \Exception('Implement me, I have no file storage here.'); break; default: throw new \UnexpectedValueException("Unrecognized resource type [{$element->getResource()}]."); } return null; // @TODO: 'email' resource type handling? }