<?php
namespace App\Controller;
use App\Manager\FacebookManager;
use App\Repository\CityRepository;
use App\Repository\CustomerRepository;
use App\Repository\PrayerRepository;
use App\Repository\PrayingRepository;
use App\Repository\PageRepository;
use App\Service\StatutService;
use Exception;
use Facebook\Exceptions\FacebookSDKException;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Serializer\Exception\ExceptionInterface;
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
use Symfony\Component\Serializer\SerializerInterface;
class IndexController extends AbstractController
{
/**
* @Route("/", name="index")
*/
public function index(
PrayerRepository $prayerRepository,
CustomerRepository $customerRepository,
CityRepository $cityRepository,
PrayingRepository $prayingRepository,
NormalizerInterface $normalizer,
FacebookManager $facebookManager
): Response
{
$stat = [
'cities' => $normalizer->normalize($cityRepository->findAll(), 'json'),
'prayingCities' => $customerRepository->getCity(true),
'prayers' => $prayerRepository->findBy(['status' => StatutService::PUBLISHED_VALUE]),
'religious' => $prayingRepository->findBy([]),
];
try {
$postsFb = $facebookManager->getPosts()->getDecodedBody();
} catch (FacebookSDKException $e) {
$postsFb = null;
}
return $this->render('public/index.html.twig', [
'lastPrayers' => $prayerRepository->getLastPrayer(),
'stat' => $stat,
'postsFb' => $postsFb
]);
}
/**
* @Route("/prayer", name="prayer")
*/
public function prayer(CustomerRepository $customerRepository, Request $request, PaginatorInterface $paginator, PrayerRepository $prayerRepository): Response
{
$prayerId = $request->query->get('id', null);
$prayer = null;
if ($prayerId) {
$prayer = $prayerRepository->findOneBy(['id' => $prayerId]);
}
$validatedAtQuery = $request->query->get('validatedat');
/** @var array<int|string,mixed> $searchQueries */
$searchQueries = $request->query->get('prayer') ?: [];
$searchQueries = array_merge(['subject' => '', 'city' => ''], $searchQueries, ['validatedAt' => $validatedAtQuery]);
$prayers = $paginator->paginate(
$prayerRepository->findBySearchQueries($searchQueries),
$request->query->getInt('page', 1),
6
);
return $this->render('public/prayer.html.twig', [
'prayers' => $prayers,
'searchQueries' => $searchQueries,
'cities' => $customerRepository->getCity(),
'prayer' => $prayer
]);
}
/**
* @Route("/city", name="city")
*/
public function list(CityRepository $cityRepository, PaginatorInterface $paginator, Request $request, NormalizerInterface $normalizer): Response
{
$cities = $normalizer->normalize($cityRepository->findAll(), 'json');
$cityPaginate = $paginator->paginate(
$cities,
$request->query->getInt('page', 1),
6
);
return $this->render('public/city.html.twig', [
'cities' => $cityPaginate
]);
}
/**
* @Route("/praying-users", name="praying_users")
*/
public function prayingUsers(Request $request, CustomerRepository $customerRepository, SerializerInterface $serializer): JsonResponse
{
$customers = $serializer->serialize($customerRepository->getPrayings(), 'json', ['groups' => 'customer:read']);
return new JsonResponse($customers, Response::HTTP_OK, [], true);
}
/**
* @Route("/search-form", name="search_form")
*/
public function searchForm(Request $request): Response
{
/** @var array<mixed,mixed> $searchQueries */
$searchQueries = $request->query->get('prayer') ?: [];
$searchQueries = array_merge(['subject' => '', 'city' => ''], $searchQueries);
return $this->render('public/component/_search_form.html.twig', [
'searchQueries' => $searchQueries,
]);
}
/**
* @Route("/who-are-we", name="who_are_we")
*/
public function whoAreWe(PageRepository $repository): Response
{
$type = "who-are-we" ;
$page = $repository->findOneBy(['type' => $type]);
if (!$page){
throw $this->createNotFoundException('Page not found');
}
return $this->render('public/qui_sommes_nous.html.twig',[
'page' => $page
]);
}
/**
* @Route("/condition-general", name="condition-gle")
*/
public function conditionGle(): Response
{
return $this->render('public/condition_gle.html.twig');
}
// recuperation des publications dans un page facebook vers cette plateforme
// public function facebookPostList(FacebookManager $facebookManager): array
// {
// return $facebookManager->getPosts()->getDecodedBody();
// }
}