Advertisement
Guest User

Untitled

a guest
Mar 20th, 2019
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.35 KB | None | 0 0
  1. <?php
  2.  
  3. namespace CoreBundle\Listener;
  4.  
  5. use CoreBundle\Entity\ImageUrlInterface;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\RequestStack;
  8. use JMS\Serializer\EventDispatcher\ObjectEvent;
  9. use JMS\Serializer\EventDispatcher\EventSubscriberInterface;
  10. use Vich\UploaderBundle\Templating\Helper\UploaderHelper;
  11.  
  12. class SerializationSubscriber implements EventSubscriberInterface
  13. {
  14. /** @var RequestStack */
  15. protected $requestStack;
  16.  
  17. /** @var Request */
  18. private $request;
  19.  
  20. /** @var UploaderHelper */
  21. private $uploadHelper;
  22.  
  23. private $imagine;
  24.  
  25. /**
  26. * SerializationSubscriber constructor.
  27. * @param RequestStack $requestStack
  28. * @param UploaderHelper $uploadHelper
  29. * @param $imagine
  30. */
  31. public function __construct(RequestStack $requestStack, UploaderHelper $uploadHelper, $imagine)
  32. {
  33. $this->requestStack = $requestStack;
  34. $this->request = $requestStack->getCurrentRequest();
  35. $this->uploadHelper = $uploadHelper;
  36. $this->imagine = $imagine;
  37. }
  38.  
  39. /**
  40. * @inheritdoc
  41. */
  42. static public function getSubscribedEvents()
  43. {
  44. return [
  45. [
  46. 'event' => 'serializer.pre_serialize',
  47. 'method' => 'onPreSerialize'
  48. ]
  49. ];
  50. }
  51.  
  52. public function onPreSerialize(ObjectEvent $event)
  53. {
  54. $object = $event->getObject();
  55.  
  56. if ($object instanceof ImageUrlInterface) {
  57. if ($this->request->headers->has('x-screen-density')) {
  58. $density = intval($this->request->headers->get('x-screen-density'));
  59. $imageUrl = $this->imagine->getBrowserPath($this->uploadHelper->asset($object, 'image'), $this->getFilterByDensity($density));
  60. } else {
  61. $imageUrl = $this->imagine->getBrowserPath($this->uploadHelper->asset($object, 'image'), 'normal');
  62. }
  63.  
  64. $object->setImageUrl($imageUrl);
  65. }
  66.  
  67. return $object;
  68. }
  69.  
  70. private function getFilterByDensity(int $density)
  71. {
  72. switch ($density) {
  73. case 1:
  74. return 'small';
  75. case 2:
  76. return 'medium';
  77. case 3:
  78. return 'normal';
  79. default:
  80. return 'normal';
  81. }
  82. }
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement