public function onPostSerialize(ObjectEvent $event)
 {
     $embeds = $this->embedsFactory->create($event->getObject(), $event->getContext());
     $links = $this->linksFactory->createLinks($event->getObject(), $event->getContext());
     if (count($links) > 0) {
         $this->xmlSerializer->serializeLinks($links, $event->getVisitor());
     }
     if (count($embeds) > 0) {
         $this->xmlSerializer->serializeEmbedded($embeds, $event->getVisitor(), $event->getContext());
     }
 }
 public function onPostDeserialize(ObjectEvent $event)
 {
     if ($event->getContext()->getDepth() > 1) {
         return;
     }
     $class = get_class($event->getObject());
     // Locate possible ObjectManager
     $objectManager = $this->managerRegistry->getManagerForClass($class);
     if (!$objectManager) {
         // No ObjectManager found
         return;
     }
     // Locate possible ClassMetadata
     $classMetadataFactory = $objectManager->getMetadataFactory();
     if ($classMetadataFactory->isTransient($class)) {
         // No ClassMetadata found
         return;
     }
     // Fallback to default constructor if missing identifier(s)
     $classMetadata = $objectManager->getClassMetadata($class);
     if (!$classMetadata instanceof ClassMetadataInfo || !$objectManager instanceof EntityManagerInterface) {
         return;
     }
     $propertyAccessor = PropertyAccess::createPropertyAccessor();
     foreach ($classMetadata->getAssociationMappings() as $mapping) {
         switch ($mapping['type']) {
             case ClassMetadataInfo::ONE_TO_MANY:
                 foreach ($event->getObject()->{$mapping['fieldName']} as $association) {
                     $propertyAccessor->setValue($association, $mapping['mappedBy'], $event->getObject());
                 }
                 break;
         }
     }
     $this->rootObject = null;
 }
Esempio n. 3
0
 /**
  * onPostSerializeDirectory
  *
  * @param ObjectEvent $event
  * @access private
  * @return void
  */
 private function onPostSerializeDirectory(ObjectEvent $event)
 {
     $directory = $event->getObject();
     $request = $this->requestStack->getMasterRequest();
     $width = $request->headers->get('X-Device-Width', 1170);
     $gutter = $request->query->get('gutter', 0);
     $lines = $this->lineLayout->computeRectangleList($directory->getChildren(), $width, 200, $gutter);
     $outLines = [];
     if ($event->getContext()->getDepth() == 0) {
         foreach ($lines as $key => $line) {
             $outLines[$key] = [];
             foreach ($line as $itemContainer) {
                 $item = $itemContainer['item'];
                 $geometry = $itemContainer['geometry'];
                 if ($item instanceof Directory) {
                     $slug = $item->getDirectoryThumbnail() ? $item->getDirectoryThumbnail()->getSlug() : null;
                 } else {
                     $slug = $item->getSlug();
                 }
                 $outLines[$key][$item->getId()]['geometry'] = $geometry;
                 if ($slug) {
                     $outLines[$key][$item->getId()]['thumbs'] = $this->router->generate('image_crop', ['slug' => $slug, 'cropWidth' => $geometry->getWidth(), 'cropHeight' => $geometry->getHeight()], true);
                 }
             }
         }
         $event->getVisitor()->addData('image_lines', $outLines);
     }
 }
 /**
  * @param ObjectEvent $event
  */
 public function onPostSerialize(ObjectEvent $event)
 {
     // getSubscribedEvents doesn't seem to support parent classes
     if (!$event->getObject() instanceof MediaInterface) {
         return;
     }
     $provider = $this->pool->getProvider($event->getObject()->getProvider());
     if ($provider->getName() == 'image') {
         $reference = $provider->getThumb($event->getObject());
         $groups = $event->getContext()->attributes->get('groups');
         if (!$groups instanceof None && in_array('detail', $groups->get())) {
             $filters = array_keys($this->filterConfig->all());
         } else {
             $filters = ['medialibrary'];
         }
         $variants = [];
         foreach ($filters as $filter) {
             if ($event->getObject()->getContentType() == 'image/svg+xml') {
                 $variants[$filter] = $provider->getUrl($event->getObject());
             } else {
                 $variants[$filter] = $this->cacheManager->getBrowserPath($reference, $filter);
             }
         }
         $event->getVisitor()->addData('images', $variants);
     }
     $event->getVisitor()->addData('original', $provider->getUrl($event->getObject()));
 }
 public function onPreSerialize(ObjectEvent $event)
 {
     if ($event->getContext()->getDepth() > 1 || null !== $this->rootObject) {
         return;
     }
     $this->stopwatch->start('jms_serializer');
     $this->rootObject = $event->getObject();
 }
 /**
  * Add uniqueid and media-data to serialized data.
  *
  * @param ObjectEvent $event
  */
 public function onPostSerialize(ObjectEvent $event)
 {
     $teaser = $event->getObject();
     $visitor = $event->getVisitor();
     $context = $event->getContext();
     if (!$teaser instanceof Teaser) {
         return;
     }
     $visitor->addData('teaserId', $context->accept(sprintf('%s;%s', $teaser->getType(), $teaser->getId())));
 }
Esempio n. 7
0
 /**
  * @param ObjectEvent $event
  */
 public function onPostSerialize(ObjectEvent $event)
 {
     $attribures = $event->getContext()->attributes;
     if ($attribures->containsKey('wallet_data')) {
         /** @var Wallet $wallet */
         $wallet = $event->getObject();
         /** @var Some $walletData */
         $walletData = $attribures->get('wallet_data')->get()[$wallet->getId()];
         $event->getVisitor()->addData('withdrawnAmount', $walletData['withdrawnAmount']);
         $event->getVisitor()->addData('lastOperationDate', $walletData['lastOperationDate']);
     }
 }
 public function onPostSerialize(ObjectEvent $event)
 {
     $webspace = $event->getObject();
     $visitor = $event->getVisitor();
     $context = $event->getContext();
     if (!$webspace instanceof Webspace) {
         return;
     }
     $this->appendPortalInformation($webspace, $context, $visitor);
     $this->appendUrls($webspace, $context, $visitor);
     $this->appendCustomUrls($webspace, $context, $visitor);
     $visitor->addData('allLocalizations', $webspace->getAllLocalizations());
 }
 public function onPostSerialize(ObjectEvent $event)
 {
     $analytics = $event->getObject();
     if (!$analytics instanceof Analytics) {
         return;
     }
     if ($analytics->isAllDomains()) {
         $metadata = new PropertyMetadata($event->getType()['name'], 'domains');
         $value = new \stdClass();
         $value->domains = true;
         $event->getVisitor()->visitProperty($metadata, $value, $event->getContext());
     }
 }
Esempio n. 10
0
 public function onPostSerialize(ObjectEvent $event)
 {
     $object = $event->getObject();
     $context = $event->getContext();
     $embeddeds = $this->embeddedsFactory->create($object, $context);
     $links = $this->linksFactory->create($object, $context);
     $embeddeds = $this->embeddedsInlineDeferrer->handleItems($object, $embeddeds, $context);
     $links = $this->linksInlineDeferrer->handleItems($object, $links, $context);
     if (count($links) > 0) {
         $this->jsonSerializer->serializeLinks($links, $event->getVisitor(), $context);
     }
     if (count($embeddeds) > 0) {
         $this->jsonSerializer->serializeEmbeddeds($embeddeds, $event->getVisitor(), $context);
     }
 }
Esempio n. 11
0
 public function onPostSerialize(ObjectEvent $event)
 {
     $object = $event->getObject();
     $context = $event->getContext();
     $context->startVisiting($object);
     $embeddeds = $this->embeddedsFactory->create($object, $context);
     $links = $this->linksFactory->create($object, $context);
     if (count($links) > 0) {
         $this->xmlSerializer->serializeLinks($links, $event->getVisitor(), $context);
     }
     if (count($embeddeds) > 0) {
         $this->xmlSerializer->serializeEmbeddeds($embeddeds, $event->getVisitor(), $context);
     }
     $context->stopVisiting($object);
 }
 /**
  * @param ObjectEvent $event
  */
 public function postSerialize(ObjectEvent $event)
 {
     /** @var DataInterface $data */
     $data = $event->getObject();
     if (!$data instanceof DataInterface) {
         return;
     }
     $context = $event->getContext();
     $visitor = $event->getVisitor();
     $family = $data->getFamily();
     foreach ($family->getAttributes() as $attribute) {
         $propertyMetadata = new VirtualPropertyMetadata(get_class($data), 'get' . ucfirst($attribute->getCode()));
         $context->pushPropertyMetadata($propertyMetadata);
         $visitor->visitProperty($propertyMetadata, $data, $context);
         /** @noinspection DisconnectedForeachInstructionInspection */
         $context->popPropertyMetadata();
     }
 }
 /**
  * Serialize images styles if the provider is an image type
  *
  * @param ObjectEvent $event
  */
 public function onPostSerialize(ObjectEvent $event)
 {
     $visitor = $event->getVisitor();
     $object = $event->getObject();
     $context = $event->getContext();
     if ($object instanceof Media) {
         $styles = [];
         $provider = $this->mediaPool->getProvider($object->getProviderName());
         $formats = $this->mediaPool->getFormatNamesByContext($object->getContext());
         if (is_array($formats)) {
             foreach ($formats as $formatName => $format) {
                 $styles[$formatName] = $provider->generatePublicUrl($object, $formatName);
             }
         }
         $visitor->addData('src', $provider->generatePublicUrl($object, 'reference'));
         $visitor->addData('styles', $styles);
     }
 }
Esempio n. 14
0
 public function onSerializeUser(ObjectEvent $event)
 {
     $object = $event->getObject();
     /** @var GenericSerializationVisitor $visitor */
     $visitor = $event->getVisitor();
     $groups = $event->getContext()->attributes->get('groups')->get();
     if ($object instanceof User) {
         //Cash Portfolio value
         if (in_array('summaryTable', $groups)) {
             $portfolioValue = $this->em->getRepository('WealthbotClientBundle:ClientAccount')->getAccountsSum($object);
             $visitor->addData('portfolioValue', $portfolioValue);
         }
         if ($object->additionalSerializerFields) {
             foreach ($object->additionalSerializerFields as $key => $value) {
                 $visitor->addData($key, $value);
             }
         }
     }
 }
 public function onPostSerialize(ObjectEvent $event)
 {
     if (in_array('api', (array) $event->getContext()->attributes->get('groups'))) {
         return;
     }
     $object = $event->getObject();
     $deviceDetector = $this->container->get('mobile_detect.mobile_detector');
     $mediaFormat = 'big1300';
     if ($deviceDetector->isMobile() || $deviceDetector->isTablet()) {
         $mediaFormat = 'big300';
     }
     if ($deviceDetector->isTablet()) {
         $mediaFormat = 'medium';
     }
     $provider = $this->container->get($object->getImage()->getProviderName());
     $formatBig = $provider->getFormatName($object->getImage(), $mediaFormat);
     $formatLow = $provider->getFormatName($object->getImage(), 'big200');
     $event->getVisitor()->addData('lowsrc', $provider->generatePublicUrl($object->getImage(), $formatLow));
     $event->getVisitor()->addData('fullsrc', $provider->generatePublicUrl($object->getImage(), $formatBig));
 }
Esempio n. 16
0
 /**
  * Adds all the structure specific data (template, structure properties and breadcrumb) to the serialization.
  *
  * @param ObjectEvent $event
  */
 public function onPostSerialize(ObjectEvent $event)
 {
     $document = $event->getObject();
     $context = $event->getContext();
     if (!$document instanceof StructureBehavior) {
         return;
     }
     $visitor = $event->getVisitor();
     $structureMetadata = $this->inspector->getStructureMetadata($document);
     $visitor->addData('template', $document->getStructureType());
     $visitor->addData('originTemplate', $document->getStructureType());
     $visitor->addData('internal', false);
     $visitor->addData('localizedTemplate', $structureMetadata->getTitle($this->inspector->getLocale($document)));
     if (array_search('defaultPage', $context->attributes->get('groups')->getOrElse([])) !== false) {
         $this->addStructureProperties($structureMetadata, $document, $visitor);
     }
     // create bread crumbs
     if (array_search('breadcrumbPage', $context->attributes->get('groups')->getOrElse([])) !== false) {
         $this->addBreadcrumb($document, $visitor);
     }
 }
Esempio n. 17
0
 /**
  * @param ObjectEvent $event
  */
 public function onPostSerialize(ObjectEvent $event)
 {
     /** @var Campaign $campaign */
     $campaign = $event->getObject();
     $attribures = $event->getContext()->attributes;
     // если кампания в списке забаненных, то добавляет сериализованной кампании свойство "banned: true"
     if ($attribures->containsKey('banned_campaigns')) {
         $bannedCampaigns = $attribures->get('banned_campaigns');
         if (in_array($campaign, $bannedCampaigns->get(), true)) {
             $banned = true;
         } else {
             $banned = false;
         }
         $event->getVisitor()->addData('banned', $banned);
     }
     $groups = $attribures->get('groups')->get();
     if (in_array('default', $groups)) {
         $campaignData = $this->campaignManager->getCampaignParametersForPartner($campaign);
         $event->getVisitor()->addData('bid', $campaignData['bid']);
         $event->getVisitor()->addData('general_budget', $campaignData['budget']);
         $event->getVisitor()->addData('general_budget_remains', $campaignData['budgetRemains']);
     }
 }
Esempio n. 18
0
 public function onPostSerialize(ObjectEvent $event)
 {
     $object = $event->getObject();
     if (false === $object instanceof AutoAclSerializableInterface) {
         return true;
     }
     $objectClass = get_class($object);
     $visitor = $event->getVisitor();
     $context = $event->getContext();
     $propertyMetadata = $context->getmetadataFactory()->getMetadataForClass($objectClass)->propertyMetadata;
     $aclMetaData = $propertyMetadata['acl'];
     $exclusionStrategy = $context->getExclusionStrategy();
     if (false == $exclusionStrategy->shouldSkipProperty($aclMetaData, $context)) {
         $acl = [];
         $permissions = ['edit'];
         foreach ($permissions as $permission) {
             if ($this->authorizationChecker->isGranted($permission, $object)) {
                 $acl[$permission] = 1;
             }
         }
         $visitor->addData('acl', $acl);
     }
 }
 /**
  * @param ObjectEvent $event
  *
  * @return void
  */
 public function onPostSerialize(ObjectEvent $event)
 {
     // Reset links array
     $this->links = [];
     // Get Exclusion Groups from the Serialization Context
     $attr = iterator_to_array($event->getContext()->attributes);
     $groups = !empty($attr['groups']) ? $attr['groups'] : [];
     // Reflection Class of the Entity being Serialized
     $reflClass = new \ReflectionClass($event->getObject());
     // Custom Annotations not found in doctrine Proxy class - use the parent
     if ($reflClass->implementsInterface("Doctrine\\Common\\Persistence\\Proxy")) {
         $reflClass = $reflClass->getParentClass();
     }
     // Get the Class Level Hateoas Annotation, if it exists
     $annotation = $this->reader->getClassAnnotation($reflClass, $this->annotationClass);
     if (null !== $annotation) {
         // Check to see if the hateoas groups match the exclusion groups
         if (empty($annotation->groups) || sizeof(array_intersect($annotation->groups, $groups))) {
             $this->addLinkUrl($annotation, $event->getObject());
         }
     }
     // Get the Property Level Hateoas Annotations, if they exist
     foreach ($reflClass->getProperties() as $property) {
         $annotation = $this->reader->getPropertyAnnotation($property, $this->annotationClass);
         if (null === $annotation) {
             continue;
         }
         // Check to see if the hateoas groups match the exclusion groups
         if (empty($annotation->groups) || sizeof(array_intersect($annotation->groups, $groups))) {
             $this->addLinkUrl($annotation, $event->getObject());
         }
     }
     // Only return the _links property if necessary
     if (sizeof($this->links)) {
         $event->getVisitor()->addData('_links', $this->links);
     }
 }
Esempio n. 20
0
 /**
  * @param \JMS\Serializer\EventDispatcher\ObjectEvent $event
  */
 public function onPostDeserialize(\JMS\Serializer\EventDispatcher\ObjectEvent $event)
 {
     /** @var $page PageInterface */
     $page = $event->getObject();
     if ($page instanceof PageInterface) {
         $context = $event->getContext();
         $er = $this->getPageManager();
         if (!$page->getId()) {
             return;
         }
         if ($parent = $page->getParent()) {
             $parent = $er->find($page->getParent());
             $page->setParent($parent);
         } else {
             $page->setParent(null);
         }
         if ($alias = $page->getAlias()) {
             $alias = $er->find($page->getAlias());
             $page->setAlias($alias);
         } else {
             $page->setAlias(null);
         }
         if ($parents = $page->getParents()) {
             foreach ($parents as $key => $parent) {
                 if (is_array($parent) && array_key_exists('id', $parent)) {
                     $parent = $parent['id'];
                 }
                 $parents[$key] = $er->find($parent);
             }
             $page->setParents($parents);
         } else {
             $page->setParents(array());
         }
         if ($children = $page->getChildren()) {
             foreach ($children as $key => $child) {
                 $children[$key] = $er->find($child);
             }
             $page->setChildren($children);
         } else {
             $page->setChildren(array());
         }
         if ($originals = $page->getOriginals()) {
             foreach ($originals as $key => $original) {
                 $originals[$key] = $er->find($original);
             }
             $page->setOriginals($originals);
         } else {
             $page->setOriginals(array());
         }
         if ($context instanceof PageSnapshotDeserializationContext && $context->deserializeTranslations()) {
             if ($translations = $page->getTranslations()) {
                 foreach ($translations as $key => $translation) {
                     $translations[$key] = $er->find($translation);
                 }
                 $page->setTranslations($translations);
             } else {
                 $originalPageId = $page->getId();
                 $originalPage = $er->find($originalPageId);
                 $page->setTranslations($originalPage->getAllTranslations()->toArray());
             }
         }
         if (!($contentRoute = $page->getContentRoute()->getId())) {
             $pageSnapshotManager = $this->getPageSnapshotManager();
             $pageSnapshots = $pageSnapshotManager->findSnapshotByPageId($page->getId());
             $lastPageSnapshot = reset($pageSnapshots);
             $page->setContentRoute($lastPageSnapshot->getContentRoute());
         }
     }
 }
 public function onPostSerialize(ObjectEvent $event)
 {
     $visitor = $event->getVisitor();
     $object = $event->getObject();
     $context = $event->getContext();
     /** @var ClassMetadata $metadata */
     $metadata = $this->hateoasMetadataFactory->getMetadataForClass(get_class($object));
     // if it has no json api metadata, skip it
     if (null === $metadata) {
         return;
     }
     /** @var \JMS\Serializer\Metadata\ClassMetadata $jmsMetadata */
     $jmsMetadata = $this->jmsMetadataFactory->getMetadataForClass(get_class($object));
     $propertyAccessor = PropertyAccess::createPropertyAccessor();
     if ($visitor instanceof JsonApiSerializationVisitor) {
         $visitor->addData(self::EXTRA_DATA_KEY, $this->getRelationshipDataArray($metadata, $this->getId($metadata, $object)));
         $relationships = array();
         foreach ($metadata->getRelationships() as $relationship) {
             $relationshipPropertyName = $relationship->getName();
             $relationshipObject = $propertyAccessor->getValue($object, $relationshipPropertyName);
             // JMS Serializer support
             if (!isset($jmsMetadata->propertyMetadata[$relationshipPropertyName])) {
                 continue;
             }
             $jmsPropertyMetadata = $jmsMetadata->propertyMetadata[$relationshipPropertyName];
             $relationshipPayloadKey = $this->namingStrategy->translateName($jmsPropertyMetadata);
             $relationshipData =& $relationships[$relationshipPayloadKey];
             $relationshipData = array();
             // add `links`
             $links = $this->processRelationshipLinks($object, $relationship, $relationshipPayloadKey);
             if ($links) {
                 $relationshipData['links'] = $links;
             }
             $include = [];
             if ($request = $this->requestStack->getCurrentRequest()) {
                 $include = $request->query->get('include');
                 $include = $this->parseInclude($include);
             }
             // FIXME: $includePath always is relative to the primary resource, so we can build our way with
             // class metadata to find out if we can include this relationship.
             foreach ($include as $includePath) {
                 $last = end($includePath);
                 if ($last === $relationship->getName()) {
                     // keep track of the path we are currently following (e.x. comments -> author)
                     $this->currentPath = $includePath;
                     $relationship->setIncludedByDefault(true);
                     // we are done here, since we have found out we can include this relationship :)
                     break;
                 }
             }
             // We show the relationships data if it is included or if there are no links. We do this
             // because there MUST be links or data (see: http://jsonapi.org/format/#document-resource-object-relationships).
             if ($relationship->isIncludedByDefault() || !$links || $relationship->getShowData()) {
                 // hasMany relationship
                 if ($this->isIteratable($relationshipObject)) {
                     $relationshipData['data'] = array();
                     foreach ($relationshipObject as $item) {
                         $relationshipData['data'][] = $this->processRelationship($item, $relationship, $context);
                     }
                 } else {
                     $relationshipData['data'] = $this->processRelationship($relationshipObject, $relationship, $context);
                 }
             }
         }
         if ($relationships) {
             $visitor->addData('relationships', $relationships);
         }
         // TODO: Improve link handling
         if (true === $metadata->getResource()->getShowLinkSelf()) {
             $visitor->addData('links', array('self' => $this->baseUrl . '/' . $metadata->getResource()->getType() . '/' . $this->getId($metadata, $object)));
         }
         $root = (array) $visitor->getRoot();
         $root['included'] = array_values($this->includedRelationships);
         $visitor->setRoot($root);
     }
 }
 /**
  * Adds a link to the value object to serialize
  *
  * @param ObjectEvent $event
  * @param string[] $config
  *
  * @throws \LogicException If the visitor is not valid
  * @throws \LogicException If the id getter is invalid
  */
 private function addLink(ObjectEvent $event, $config)
 {
     $valueObject = $event->getObject();
     /** @var $visitor GenericSerializationVisitor */
     if (!($visitor = $event->getVisitor()) instanceof GenericSerializationVisitor) {
         throw new \LogicException('The default Visitor contract does not support addData()!');
     }
     $getter = $config['id_getter'];
     if (!method_exists($valueObject, $getter)) {
         throw new \LogicException(sprintf('The identity getter "%s" on object "%s" does not exist or its accessibility is restricted!', $getter, get_class($valueObject)));
     }
     $userId = ['id' => call_user_func([$valueObject, $getter])];
     $params = isset($config['params']) ? array_merge($config['params'], $userId) : $userId;
     if (!isset($params['_format'])) {
         $params['_format'] = $event->getContext()->getFormat();
     }
     $visitor->addData('link', $this->urlGenerator->generate($config['url_name'], $params));
 }