Ejemplo n.º 1
0
 /**
  * Tries to serialize data that are not API resources (e.g. the entrypoint or data returned by a custom controller).
  *
  * @param GetResponseForControllerResultEvent $event
  * @param Request                             $request
  * @param object                              $controllerResult
  *
  * @throws RuntimeException
  */
 private function serializeRawData(GetResponseForControllerResultEvent $event, Request $request, $controllerResult)
 {
     if (!$request->attributes->get('_api_respond')) {
         return;
     }
     if (is_object($controllerResult)) {
         $event->setControllerResult($this->serializer->serialize($controllerResult, $request->getRequestFormat()));
         return;
     }
     if (!$this->serializer instanceof EncoderInterface) {
         throw new RuntimeException(sprintf('The serializer instance must implements the "%s" interface.', EncoderInterface::class));
     }
     $event->setControllerResult($this->serializer->encode($controllerResult, $request->getRequestFormat()));
 }
 /**
  * @param GetResponseForControllerResultEvent $event
  */
 protected function decorateView(GetResponseForControllerResultEvent $event)
 {
     $params = $event->getRequest()->attributes;
     array_walk($this->decorators, function (DecoratorInterface $decorator) use($event, $params) {
         $event->setControllerResult($decorator->decorate($params, $event->getControllerResult()));
     });
 }
 /**
  * Persists, updates or delete data return by the controller if applicable.
  *
  * @param GetResponseForControllerResultEvent $event
  *
  * @return mixed
  */
 public function onKernelView(GetResponseForControllerResultEvent $event)
 {
     if (!$event->isMasterRequest()) {
         return;
     }
     $request = $event->getRequest();
     if (!in_array($request->getMethod(), [Request::METHOD_POST, Request::METHOD_PUT, Request::METHOD_DELETE])) {
         return;
     }
     $resourceType = $request->attributes->get('_resource_type');
     if (!$resourceType) {
         return;
     }
     $controllerResult = $event->getControllerResult();
     if (null === ($objectManager = $this->getManager($resourceType, $controllerResult))) {
         return $controllerResult;
     }
     switch ($request->getMethod()) {
         case Request::METHOD_POST:
             $objectManager->persist($controllerResult);
             break;
         case Request::METHOD_DELETE:
             $objectManager->remove($controllerResult);
             $event->setControllerResult(null);
             break;
     }
     $objectManager->flush();
 }
Ejemplo n.º 4
0
 /**
  * Persists, updates or delete data return by the controller if applicable.
  *
  * @param GetResponseForControllerResultEvent $event
  *
  * @return mixed
  */
 public function onKernelView(GetResponseForControllerResultEvent $event)
 {
     $request = $event->getRequest();
     if ($request->isMethodSafe()) {
         return;
     }
     $resourceClass = $request->attributes->get('_api_resource_class');
     if (null === $resourceClass) {
         return;
     }
     $controllerResult = $event->getControllerResult();
     if (null === ($objectManager = $this->getManager($resourceClass, $controllerResult))) {
         return;
     }
     switch ($request->getMethod()) {
         case Request::METHOD_POST:
             $objectManager->persist($controllerResult);
             break;
         case Request::METHOD_DELETE:
             $objectManager->remove($controllerResult);
             $event->setControllerResult(null);
             break;
     }
     $objectManager->flush();
 }
Ejemplo n.º 5
0
 /**
  * Converts an HtmlFragment into an HtmlPage.
  *
  * @param \Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent $event
  *   The Event to process.
  */
 public function onHtmlFragment(GetResponseForControllerResultEvent $event)
 {
     $fragment = $event->getControllerResult();
     if ($fragment instanceof HtmlFragment && !$fragment instanceof HtmlPage) {
         $page = $this->fragmentRenderer->render($fragment);
         $event->setControllerResult($page);
     }
 }
Ejemplo n.º 6
0
 /**
  * Handles Kernel View events
  *
  * @param GetResponseForControllerResultEvent $event
  */
 public function onKernelView(GetResponseForControllerResultEvent $event)
 {
     $request = $event->getRequest();
     $response = $event->getResponse();
     $parameters = $event->getControllerResult();
     if (!$response instanceof Response && ($template = $request->attributes->get('_template'))) {
         return $event->setControllerResult($this->templating->render($template, $parameters));
     }
 }
 public function onKernelView(GetResponseForControllerResultEvent $event)
 {
     $result = $event->getControllerResult();
     if (!$result instanceof SuccessResult) {
         return;
     }
     $metadata = $result->getMetadata();
     $response = empty($metadata) ? new Response('', 204) : new JsonResponse($metadata, 200);
     $event->setControllerResult($response);
 }
 public function onKernelView(GetResponseForControllerResultEvent $event)
 {
     $result = $event->getControllerResult();
     $request = $event->getRequest();
     if (!$result instanceof ResourceCreatedResult) {
         return;
     }
     $transformerKey = $request->attributes->get('_rest[transform]', null, true);
     $transformedData = $this->transformer->transform($transformerKey, $result->getResource());
     $transformedData = $this->setMetadata($transformedData, $result);
     $event->setControllerResult(new JsonResponse($transformedData, 201));
 }
 public function onKernelView(GetResponseForControllerResultEvent $event)
 {
     $request = $event->getRequest();
     if (!$request->attributes->has('_rest') || $event->getControllerResult() instanceof Response) {
         return;
     }
     $config = $this->normalizeConfig($request->attributes->get('_rest', array(), true));
     $includes = $request->query->get('include', null);
     $data = $event->getControllerResult();
     $transformedData = $this->transformResult($config, $data, $includes, $request);
     $event->setControllerResult($transformedData);
 }
 /**
  * @param GetResponseForControllerResultEvent $event
  */
 public function onKernelView(GetResponseForControllerResultEvent $event)
 {
     $_route = $event->getRequest()->attributes->get('_route');
     if ('oro_shortcut_actionslist' == $_route) {
         $controllerResult = $event->getControllerResult();
         foreach ($controllerResult['actionsList'] as $route => $data) {
             if (!$this->whitelistProvider->isItemWhitelisted($route)) {
                 unset($controllerResult['actionsList'][$route]);
             }
         }
         $event->setControllerResult($controllerResult);
     }
 }
Ejemplo n.º 11
0
 public function __invoke(GetResponseForControllerResultEvent $event)
 {
     $controllerResult = $event->getControllerResult();
     $callback = $this->app['callback_resolver']->resolveCallback($this->callback);
     if (!$this->shouldRun($callback, $controllerResult)) {
         return;
     }
     $response = call_user_func($callback, $controllerResult, $event->getRequest());
     if ($response instanceof Response) {
         $event->setResponse($response);
     } elseif (null !== $response) {
         $event->setControllerResult($response);
     }
 }
 /**
  * @param GetResponseForControllerResultEvent $event
  */
 public function onKernelView(GetResponseForControllerResultEvent $event)
 {
     $_route = $event->getRequest()->attributes->get('_route');
     if ('oro_config_configuration_system' !== $_route) {
         return;
     }
     $result = $event->getControllerResult();
     /** @var AbstractNodeDefinition $data */
     $data = clone $result['data'];
     $this->cleanTree($data);
     $form = clone $result['form'];
     $this->clearForm($form);
     $result['data'] = $data;
     $result['form'] = $form;
     $event->setControllerResult($result);
 }
Ejemplo n.º 13
0
 /**
  * Persists, updates or delete data return by the controller if applicable.
  *
  * @param GetResponseForControllerResultEvent $event
  */
 public function onKernelView(GetResponseForControllerResultEvent $event)
 {
     $user = $event->getControllerResult();
     if (!$user instanceof UserInterface) {
         return;
     }
     switch ($event->getRequest()->getMethod()) {
         case Request::METHOD_POST:
         case Request::METHOD_PUT:
             $this->userManager->updateUser($user, false);
             break;
         case Request::METHOD_DELETE:
             $this->userManager->deleteUser($user);
             $event->setControllerResult(null);
             break;
     }
 }
 /**
  * @param GetResponseForControllerResultEvent $event
  */
 public function onKernelView(GetResponseForControllerResultEvent $event)
 {
     $response = $event->getControllerResult();
     if ($response instanceof Response) {
         // If it's a response, just continue
         return;
     }
     $request = $event->getRequest();
     if ($request->attributes->has('_template')) {
         //template is already set
         return;
     }
     $nodeTranslation = $request->attributes->get('_nodeTranslation');
     if ($nodeTranslation) {
         $entity = $request->attributes->get('_entity');
         $url = $request->attributes->get('url');
         $nodeMenu = $request->attributes->get('_nodeMenu');
         $parameters = $request->attributes->get('_renderContext');
         if ($request->get('preview') === true) {
             $version = $request->get('version');
             if (!empty($version) && is_numeric($version)) {
                 $nodeVersion = $this->em->getRepository('KunstmaanNodeBundle:NodeVersion')->find($version);
                 if (!is_null($nodeVersion)) {
                     $entity = $nodeVersion->getRef($this->em);
                 }
             }
         }
         $renderContext = array('nodetranslation' => $nodeTranslation, 'slug' => $url, 'page' => $entity, 'resource' => $entity, 'nodemenu' => $nodeMenu);
         if (is_array($parameters) || $parameters instanceof \ArrayObject) {
             $parameters = array_merge($renderContext, (array) $parameters);
         } else {
             $parameters = $renderContext;
         }
         if (is_array($response)) {
             // If the response is an array, merge with rendercontext
             $parameters = array_merge($parameters, $response);
         }
         //set the rendercontext with all params as response, plus the template in the request attribs
         //the SensioFrameworkExtraBundle kernel.view will handle everything else
         $event->setControllerResult((array) $parameters);
         $template = new Template(array());
         $template->setTemplate($entity->getDefaultView());
         $request->attributes->set('_template', $template);
     }
 }
Ejemplo n.º 15
0
 /**
  * Persists, updates or delete data return by the controller if applicable.
  *
  * @param GetResponseForControllerResultEvent $event
  */
 public function onKernelView(GetResponseForControllerResultEvent $event)
 {
     $request = $event->getRequest();
     try {
         RequestAttributesExtractor::extractAttributes($request);
     } catch (RuntimeException $e) {
         return;
     }
     $user = $event->getControllerResult();
     if (!$user instanceof UserInterface || $request->isMethodSafe(false)) {
         return;
     }
     switch ($request->getMethod()) {
         case Request::METHOD_DELETE:
             $this->userManager->deleteUser($user);
             $event->setControllerResult(null);
             break;
         default:
             $this->userManager->updateUser($user);
             break;
     }
 }
 /**
  * @param GetResponseForControllerResultEvent $event
  */
 public function onKernelView(GetResponseForControllerResultEvent $event)
 {
     $request = $event->getRequest();
     $document = $this->documentRepository->get($request->attributes->get('_definition'));
     switch ($document->getDefinition()->info->version) {
         case '2.0.0':
             $result = $event->getControllerResult();
             if (!$result instanceof Resource && !$result instanceof Document) {
                 $result = new Resource($result, $this->serializer);
             }
             if ($result instanceof Resource) {
                 $result = new Document($result);
             }
             if ($result instanceof Document) {
                 $result->addLink('self', $event->getRequest()->getPathInfo());
                 $event->setControllerResult($result->toArray());
             }
             break;
         default:
             //noop
     }
 }
 /**
  * Replaces any temporary images with actual instances of the configured UploadedFile collection.
  *
  * Automatically extracts the proper setters and getters from the metadata and instantiates the correct
  * UploadedFile child class.
  *
  * @param GetResponseForControllerResultEvent $event The event
  */
 public function replaceTemporaryFile(GetResponseForControllerResultEvent $event)
 {
     $data = $event->getControllerResult();
     if (!is_object($data)) {
         return;
     }
     $classReflection = new \ReflectionClass($data);
     foreach ($classReflection->getProperties() as $property) {
         $propertyAnnotationCollection = $this->reader->getPropertyAnnotation($property, 'PartKeepr\\UploadedFileBundle\\Annotation\\UploadedFileCollection');
         $propertyAnnotation = $this->reader->getPropertyAnnotation($property, 'PartKeepr\\UploadedFileBundle\\Annotation\\UploadedFile');
         $manyToOneAnnotation = $this->reader->getPropertyAnnotation($property, 'Doctrine\\ORM\\Mapping\\OneToMany');
         $oneToOneAnnotation = $this->reader->getPropertyAnnotation($property, 'Doctrine\\ORM\\Mapping\\OneToOne');
         if ($propertyAnnotationCollection !== null || $propertyAnnotation !== null) {
             if ($manyToOneAnnotation !== null) {
                 $collection = $this->propertyAccessor->getValue($data, $property->getName());
                 foreach ($collection as $key => $item) {
                     if ($item instanceof TempUploadedFile || $item instanceof TempImage) {
                         $targetEntity = $manyToOneAnnotation->targetEntity;
                         $newFile = $this->setReplacementFile($targetEntity, $item, $data);
                         $collection[$key] = $newFile;
                     }
                 }
                 $this->propertyAccessor->setValue($data, $property->getName(), $collection);
             }
             if ($oneToOneAnnotation !== null) {
                 $item = $this->propertyAccessor->getValue($data, $property->getName());
                 if ($item instanceof TempUploadedFile || $item instanceof TempImage) {
                     $targetEntity = $oneToOneAnnotation->targetEntity;
                     $newFile = $this->setReplacementFile($targetEntity, $item, $data);
                     $this->propertyAccessor->setValue($data, $property->getName(), $newFile);
                 } else {
                     $item = $this->propertyAccessor->getValue($data, $property->getName());
                     if ($item !== null && $item->getReplacement() !== null) {
                         /**
                          * @var UploadedFile
                          */
                         $tempImage = $this->iriConverter->getItemFromIri($item->getReplacement());
                         $this->replaceFile($item, $tempImage);
                     }
                 }
             }
         }
     }
     $event->setControllerResult($data);
 }