<?php
namespace App\Controller;
use App\Repository\ArtikelRepository;
use App\Repository\BulletinRepository;
use App\Repository\DokumentasiRepository;
use App\Repository\SlideRepository;
use Doctrine\ORM\Tools\Pagination\Paginator;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
/**
* Description of SlideController
* @Route("/", name="front_slide_")
* @author programmer
*/
class FrontSlideController extends AbstractController
{
private $slideRepository;
private $dokRepository;
public function __construct(SlideRepository $slideRepository, DokumentasiRepository $dokRepository)
{
$this->slideRepository = $slideRepository;
$this->dokRepository = $dokRepository;
}
/**
* @Route("slide.json", name="index", methods={"GET"})
*/
public function index(Request $request):Response
{
$content = $this->jsonToArray($request->getContent());
$page = $content['page'];
$limit = $content['limit'];
$filters = $content['filter'];
$queryWhere = "a.id is not null" ;
foreach($filters as $k => $v) {
if(is_int($v)) {
$queryWhere .= " AND a.".$k." = '".$v."'";
}else{
$queryWhere .= " AND LOWER(a.".$k.") LIKE '%".strtolower($v)."%'";
}
}
$query = $this->slideRepository->createQueryBuilder('a')
->where($queryWhere)
->getQuery();
$paginator = new Paginator($query);
$totalItems = count($paginator);
$pagesCount = ceil($totalItems / $limit);
$paginator ->getQuery()->setFirstResult($limit * ($page-1))->setMaxResults($limit);
$result = [];
foreach ($paginator as $Data)
{
$result['page'] = $page;
$result['total_item'] = $totalItems;
$result['total_page'] = $pagesCount;
$result['content'][] = array(
'id' => $Data -> getId(),
'judul' => $Data -> getJudul(),
'deskripsi' => $Data -> getDeskripsi(),
'cover' => $this->slideRepository->getDokumentasis($Data->getId(), $request)
);
}
return $this -> json($result);
}
/**
* @Route("slide-x.json", name="slide_react", methods={"GET"})
*/
public function index_react(Request $request):Response
{
$page = ($request->get('page')) ? $request->get('page') : 1 ;
$limit = ($request->get('limit')) ? $request->get('limit') : 1 ;
$filters = $request->get('filter');
$queryWhere = "a.id is not null" ;
if($filters) {
foreach($filters as $k => $v) {
if($k == 'id') {
$queryWhere .= " AND a.".$k." = '".$v."'";
}else{
$queryWhere .= " AND LOWER(a.".$k.") LIKE '%".strtolower($v)."%'";
}
}
}
$query = $this->slideRepository->createQueryBuilder('a')
->where($queryWhere)
->getQuery();
$paginator = new Paginator($query);
$totalItems = count($paginator);
$pagesCount = ceil($totalItems / $limit);
$paginator ->getQuery()->setFirstResult($limit * ($page-1))->setMaxResults($limit);
$result = [];
foreach ($paginator as $Data)
{
$result['page'] = $page;
$result['total_item'] = $totalItems;
$result['total_page'] = $pagesCount;
$result['content'][] = array(
'id' => $Data -> getId(),
'judul' => $Data -> getJudul(),
'deskripsi' => $Data -> getDeskripsi(),
'cover' => $this->slideRepository->getDokumentasis($Data->getId(), $request)
);
}
return $this -> json($result);
}
private function jsonToArray($content){
$request = json_decode($content);
$request = json_decode(json_encode($request),true);
return $request;
}
}