<?php
namespace App\Controller;
use App\Repository\ArtikelRepository;
use App\Repository\BulletinRepository;
use App\Repository\DokumentasiRepository;
use App\Repository\UserBulletinRepository;
use Doctrine\ORM\Tools\Pagination\Paginator;
use Kematjaya\UserBundle\Repo\KmjUserRepository;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
/**
* Description of BulletinController
* @Route("/", name="front_bulletin_")
* @author programmer
*/
class FrontBulletinController extends AbstractController
{
private $bulletinRepository;
private $artikelRepository;
private $dokRepository;
private $kmjUserRepository;
private UserBulletinRepository $userBulletinRepository;
public function __construct(
BulletinRepository $bulletinRepository,
ArtikelRepository $artikelRepository,
UserBulletinRepository $userBulletinRepository ,
KmjUserRepository $kmjUserRepo,
DokumentasiRepository $dokRepository)
{
$this->bulletinRepository = $bulletinRepository;
$this->artikelRepository = $artikelRepository;
$this->userBulletinRepository = $userBulletinRepository;
$this->dokRepository = $dokRepository;
$this->kmjUserRepository = $kmjUserRepo;
}
/**
* @Route("bulletin.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_numeric($v)) {
$queryWhere .= " AND a.".$k." = '".$v."'";
}else{
$queryWhere .= " AND LOWER(a.".$k.") LIKE '%".strtolower($v)."%'";
}
}
$query = $this->bulletinRepository->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)
{
$artikels = $this->artikelRepository->findByBulletinId($Data->getId());
$data_art = [];
foreach ($artikels as $key => $artikel) {
$data_art[$key]['judul'] = $artikel->getJudul();
$data_art[$key]['isi'] = $artikel->getIsi();
$data_art[$key]['penulis'] = $artikel->getPenulis();
$data_art[$key]['tanggal'] = $artikel->getTanggal();
$data_art[$key]['dokumentasi'] = $this->artikelRepository->getDokumentasis($artikel->getId(),$request);
}
$result['page'] = $page;
$result['total_item'] = $totalItems;
$result['total_page'] = $pagesCount;
$result['content'][] = array(
'id' => $Data -> getId(),
'kode' => $Data -> getKode(),
'edisi' => $Data -> getEdisi(),
'nama' => $Data -> getNama(),
'tanggal' => $Data -> getTanggal(),
'tag' => $Data -> getTag(),
'files' => $this->bulletinRepository->getDokumentasis($Data->getId(), $request),
'cabangs' => $this->bulletinRepository->getBulletinWhereCabangs($Data),
'artikel' => $data_art
);
}
return $this -> json($result);
}
/**
* @Route("bulletin-x.json", name="index_react", methods={"GET"})
*/
public function index_react(Request $request):Response
{
if($request->get('user_id'))
{
$KmjUser = $this->kmjUserRepository->find($request->get('user_id'));
}
$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(is_numeric($v)) {
$queryWhere .= " AND a.".$k." = '".$v."'";
}else{
$queryWhere .= " AND LOWER(a.".$k.") LIKE '%".strtolower($v)."%'";
}
}
}
$query = $this->bulletinRepository->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)
{
$artikels = $this->artikelRepository->findByBulletinId($Data->getId());
$isMyBulletin = ($request->get('user_id') && $this->userBulletinRepository->findOneBy(['kmj_user'=>$KmjUser,'bulletin'=>$Data]))?1:0;
$data_art = [];
foreach ($artikels as $key => $artikel) {
$data_art[$key]['judul'] = $artikel->getJudul();
$data_art[$key]['isi'] = $artikel->getIsi();
$data_art[$key]['penulis'] = $artikel->getPenulis();
$data_art[$key]['tanggal'] = $artikel->getTanggal();
$data_art[$key]['dokumentasi'] = $this->artikelRepository->getDokumentasis($artikel->getId(),$request);
}
$result['page'] = $page;
$result['total_item'] = $totalItems;
$result['total_page'] = $pagesCount;
$result['content'][] = array(
'id' => $Data -> getId(),
'kode' => $Data -> getKode(),
'is_mybulletin' => $isMyBulletin,
'edisi' => $Data -> getEdisi(),
'nama' => $Data -> getNama(),
'tanggal' => $Data -> getTanggal(),
'tag' => $Data -> getTag(),
'files' => $this->bulletinRepository->getDokumentasis($Data->getId(), $request),
'cabangs' => $this->bulletinRepository->getBulletinWhereCabangs($Data),
'artikel' => $data_art
);
}
return $this -> json($result);
}
private function jsonToArray($content){
$request = json_decode($content);
$request = json_decode(json_encode($request),true);
return $request;
}
}