src/AppBundle/Prismic/BlogPostRepository.php line 113

Open in your IDE?
  1. <?php
  2. namespace AppBundle\Prismic;
  3. use AppBundle\Helpers\LocalizationHelper;
  4. use Doctrine\Common\Collections\ArrayCollection;
  5. use Prismic\Predicates;
  6. use Symfony\Component\HttpFoundation\RequestStack;
  7. use GuzzleHttp\Client;
  8. class BlogPostRepository extends PrismicRepository
  9. {
  10.     /**
  11.      * @var string
  12.      */
  13.     private $type;
  14.     /**
  15.      * @param RequestStack $requestStack
  16.      * @param LocalizationHelper $localizationHelper
  17.      * @param string $prismicUrl
  18.      * @param string $prismicToken
  19.      */
  20.     public function __construct(
  21.         RequestStack $requestStack,
  22.         LocalizationHelper $localizationHelper
  23.     ) {
  24.         parent::__construct($requestStack$localizationHelper);
  25.         $this->type 'blog-post';
  26.     }
  27.     /**
  28.      * @return array
  29.      */
  30.     public function findAllOrderedByPublicationDate(
  31.         ?int $pageSize 20,
  32.         ?int $page 1
  33.     ): array {
  34.         $site $this->requestStack->getCurrentRequest()->getLocale();
  35.         $client = new Client();
  36.         $response $client->request('GET'"https://content.europeanfilmchallenge.eu/{$site}/blog-posts", [
  37.             'headers' => [
  38.                 'Accept' => 'application/json',
  39.             ],
  40.             'query' => [
  41.                 'order' => 'DESC',
  42.                 'page' => $page,
  43.                 'page-size' => $pageSize,
  44.             ],
  45.         ]);
  46.         $body json_decode($response->getBody());
  47.         $posts $body->items;
  48.         return [
  49.             'data' => collect($posts)->map(function ($post) {
  50.                 return BlogPost::create($post);
  51.             }),
  52.             'meta' => [
  53.                 'page' => $body->page,
  54.                 'prev_page' => $body->prev_page,
  55.                 'next_page' => $body->next_page,
  56.                 'total_pages' => $body->total_pages,
  57.             ],
  58.         ];
  59.     }
  60.     /**
  61.      * @return array
  62.      */
  63.     public function findAllSlider(): array {
  64.         $site $this->requestStack->getCurrentRequest()->getLocale();
  65.         $client = new Client();
  66.         $response $client->request('GET'"https://content.europeanfilmchallenge.eu/{$site}/blog-posts/slider", [
  67.             'headers' => [
  68.                 'Accept' => 'application/json',
  69.             ],
  70.         ]);
  71.         $body json_decode($response->getBody());
  72.         $posts $body->items;
  73.         return [
  74.             'data' => collect($posts)->map(function ($post) {
  75.                 return BlogPost::create($post);
  76.             }),
  77.         ];
  78.     }
  79.     /**
  80.      * @param string $uid
  81.      *
  82.      * @return BlogPost
  83.      */
  84.     public function findOneByUid(string $uid): BlogPost
  85.     {
  86.         $site $this->requestStack->getCurrentRequest()->getLocale();
  87.         $client = new Client();
  88.         $response $client->request('GET'"https://content.europeanfilmchallenge.eu/{$site}/blog-post/{$uid}", [
  89.             'headers' => [
  90.                 'Accept' => 'application/json',
  91.             ]
  92.         ]);
  93.         $body json_decode($response->getBody());
  94.         $post = (object)$body->post;
  95.         return BlogPost::create((object)$post);
  96.     }
  97. }