<?php
namespace AppBundle\Prismic;
use AppBundle\Helpers\LocalizationHelper;
use Doctrine\Common\Collections\ArrayCollection;
use Prismic\Predicates;
use Symfony\Component\HttpFoundation\RequestStack;
use GuzzleHttp\Client;
class BlogPostRepository extends PrismicRepository
{
/**
* @var string
*/
private $type;
/**
* @param RequestStack $requestStack
* @param LocalizationHelper $localizationHelper
* @param string $prismicUrl
* @param string $prismicToken
*/
public function __construct(
RequestStack $requestStack,
LocalizationHelper $localizationHelper
) {
parent::__construct($requestStack, $localizationHelper);
$this->type = 'blog-post';
}
/**
* @return array
*/
public function findAllOrderedByPublicationDate(
?int $pageSize = 20,
?int $page = 1
): array {
$site = $this->requestStack->getCurrentRequest()->getLocale();
$client = new Client();
$response = $client->request('GET', "https://content.europeanfilmchallenge.eu/{$site}/blog-posts", [
'headers' => [
'Accept' => 'application/json',
],
'query' => [
'order' => 'DESC',
'page' => $page,
'page-size' => $pageSize,
],
]);
$body = json_decode($response->getBody());
$posts = $body->items;
return [
'data' => collect($posts)->map(function ($post) {
return BlogPost::create($post);
}),
'meta' => [
'page' => $body->page,
'prev_page' => $body->prev_page,
'next_page' => $body->next_page,
'total_pages' => $body->total_pages,
],
];
}
/**
* @return array
*/
public function findAllSlider(): array {
$site = $this->requestStack->getCurrentRequest()->getLocale();
$client = new Client();
$response = $client->request('GET', "https://content.europeanfilmchallenge.eu/{$site}/blog-posts/slider", [
'headers' => [
'Accept' => 'application/json',
],
]);
$body = json_decode($response->getBody());
$posts = $body->items;
return [
'data' => collect($posts)->map(function ($post) {
return BlogPost::create($post);
}),
];
}
/**
* @param string $uid
*
* @return BlogPost
*/
public function findOneByUid(string $uid): BlogPost
{
$site = $this->requestStack->getCurrentRequest()->getLocale();
$client = new Client();
$response = $client->request('GET', "https://content.europeanfilmchallenge.eu/{$site}/blog-post/{$uid}", [
'headers' => [
'Accept' => 'application/json',
]
]);
$body = json_decode($response->getBody());
$post = (object)$body->post;
return BlogPost::create((object)$post);
}
}