<?php
namespace App\Controller\Backend;
use App\Controller\Base\BaseController;
use App\Entity\PtiModule;
use App\Entity\PtiModuleAction;
use App\Filter\PtiModuleFilterType;
use App\Form\PtiModuleType;
use App\Repository\PtiModuleActionRepository;
use App\Repository\PtiModuleRepository;
use App\Repository\PtiRuleRepository;
use App\Utils\ObjectManager;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Kematjaya\Breadcrumb\Lib\Builder as BreacrumbBuilder;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
/**
* Require ROLE_SUPER_USER for *every* controller method in this class.
*
* @IsGranted("ROLE_SUPER_USER")
*/
class PtiModuleController extends BaseController
{
private $pageName = 'pti_module';
private $class = PtiModule::class;
/**
* @Route("/module", name="pti_module")
*/
public function index(BreacrumbBuilder $builder, Request $request, PaginatorInterface $paginatorInterface, PtiModuleRepository $PtiModuleRepo): Response
{
$builder->add('Dashboard ', "dashboard", array(), " <i class='fa fa-home'></i>");
$builder->add('Modules');
$form = $this->createFormFilter(PtiModuleFilterType::class);
$queryBuilder = $this->getQueryBuilder($this->class);
$queryBuilder = $this->buildFilter($request, $form, $queryBuilder)->addOrderBy("this.id", "DESC");
$this->setSessionLimit($request);
$maxPerPage = $request->getSession()->get("limit") ? $request->getSession()->get("limit") : $this->getLimit();
$pagination = $paginatorInterface->paginate($queryBuilder, $request->query->getInt('page', 1), $maxPerPage);
$parent = $PtiModuleRepo->findAll();
return $this->render('backend/pti_module/index.html.twig', [
'page_name' => $this->pageName,
'button_credential' => $this->buttonCredentials($this->pageName),
'filter' => $form->createView(),
'pagination' => $pagination,
'parent' => $parent
]);
}
/**
* @Route("/module/form/{id}", defaults={"id"= null}, name="pti_module_form", methods={"POST", "GET"})
*/
public function form(?string $id = null, Request $request, PtiModuleRepository $PtiModuleRepo)
{
if($id){
$ptimodule = $PtiModuleRepo->find($id);
} else {
$ptimodule = new PtiModule();
}
if(!$ptimodule){
throw new NotFoundHttpException();
}
$form = $this->createForm(PtiModuleType::class, $ptimodule, ['action' => $this->generateUrl('pti_module_form', ['id' => $ptimodule->getId()])]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user = $form->getData();
$user->setCreateAt(new \DateTime());
$user->setParent($request->request->get('parent'));
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($user);
if($id){
$this->addFlash('notice', 'Module "' . $user->getModule() . '" berhasil diubah');
}else{
$this->addFlash('notice', 'Module "' . $user->getModule() . '" berhasil dibuat');
}
$entityManager->flush();
return $this->redirectToRoute('pti_module');
}
$ptiM = $PtiModuleRepo->findAll();
return $this->render('/backend/pti_module/form.html.twig', ['ptimodule' => $ptiM, 'form' => $form->createView()]);
}
/**
* @Route("/module/{id}/detail", name="pti_module_detail", methods={"GET", "POST"})
*/
public function detail(?string $id, PtiRuleRepository $ptiRuleRepo, BreacrumbBuilder $builder, PtiModuleRepository $ptiModuleRepo, PtiModuleActionRepository $ptiModuleActionRepo)
{
$builder->add('Dashboard ', "dashboard", array(), " <i class='fa fa-home'></i>");
$builder->add('Modules', 'pti_module');
$builder->add('Detail');
$module = $ptiModuleRepo->find($id);
$module_action = $ptiModuleActionRepo->findBy(['module' => $id], ['id' => 'asc']);
$ptiRule = $ptiRuleRepo->findAll();
$ptiRule = [];
foreach($module_action as $ma){
$pr = $ptiRuleRepo->getRule($ma->getId());
$ptiRule[$ma->getId()] = $pr;
}
// foreach($module_action as $ma){
// $ptiRule = $ptiRuleRepo->getRule($ma->getId());
// }
// $ptiRule = $ptiRuleRepo->getRule(51);
// dump($ptiRule);exit;
return $this->render('/backend/pti_module/detail.html.twig', [
'page_name' => $this->pageName,
'button_credential' => $this->buttonCredentials($this->pageName),
'module' => $module,
'module_action' => $module_action,
'group' => $ptiRule
]);
}
/**
* @Route("/module/{id}/form_action", name="pti_module_form_action", methods={"GET", "POST"})
*/
public function form_action(?string $id, Request $request, PtiModuleRepository $ptiModuleRepo, PtiModuleActionRepository $ptiModuleActionRepo)
{
$module = $ptiModuleRepo->find($id);
$action = $ptiModuleActionRepo->findOneBy(['module' => $module->getId(), 'action' => trim(strtolower($request->get('aksi')))]);
if (!$action) {
$form = new PtiModuleAction();
$form->setAction(trim(strtolower($request->get('aksi'))));
$form->setModule($module);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($form);
$entityManager->flush();
$this->addFlash('notice', 'Action "' . $form->getAction() . '" berhasil ditambahkan');
} else{
$this->addFlash('warning', 'Action sudah ada');
}
return $this->redirectToRoute('pti_module_detail', [
'id' => $id,
]);
}
/**
* @Route("/module/{id}/import_action", name="pti_module_import_action", methods={"GET", "POST"})
*/
public function import_action(?string $id, Request $request, PtiModuleRepository $ptiModuleRepo, PtiModuleActionRepository $ptiModuleActionRepo)
{
$module = $ptiModuleRepo->find($id);
$list_action = array('index', 'new', 'edit', 'delete', 'detail');
foreach($list_action as $ls){
$action = $ptiModuleActionRepo->findOneBy(['module' => $module->getId(), 'action' => $ls]);
if (!$action) {
$form = new PtiModuleAction();
$form->setAction($ls);
$form->setModule($module);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($form);
$entityManager->flush();
}
}
$this->addFlash('notice', 'Action berhasil ditambahkan');
return $this->redirectToRoute('pti_module_detail', [
'id' => $id,
]);
}
/**
* @Route("/module/{id}/delete_action", name="pti_module_delete_action", methods={"GET", "POST"})
*/
public function delete_action(?string $id, Request $request, PtiModuleActionRepository $ptiModuleActionRepo)
{
$action = $ptiModuleActionRepo->find($id);
$module = $action->getModule();
$entityManager = $this->getDoctrine()->getManager();
$entityManager->remove($action);
$entityManager->flush();
$this->addFlash('notice', 'Action "' . $action->getAction() . '" berhasil dihapus');
return $this->redirectToRoute('pti_module_detail', [
'id' => $module->getId(),
]);
}
/**
* @Route("/module/{id}/delete_bidang", name="pti_module_delete", methods={"GET"})
*/
public function delete(?string $id = null, PtiModuleRepository $PtiModuleRepo)
{
$ptimodule = $PtiModuleRepo->find($id);
// dump($kategori); exit;
$entityManager = $this->getDoctrine()->getManager();
$entityManager->remove($ptimodule);
$entityManager->flush();
$this->addFlash('notice', 'Module "' . $ptimodule->getModule() . '" berhasil dihapus');
return $this->redirectToRoute('pti_module');
}
/**
* @Route("module/add_selected", name="pti_module_add_selected", methods={"POST"})
*/
public function add_selected(Request $request, ObjectManager $objectManager)
{
$sessionName = $request->get("name");
$this->get('session')->set($sessionName, $request->get('selected'));
$selected = (!empty($this->get('session')->get($sessionName))) ? $this->get('session')->get($sessionName) : [];
return $this->json($selected);
}
/**
* @Route("module/action_selected", name="pti_module_action_selected", methods={"POST"})
*/
public function action_selected(Request $request, ObjectManager $objectManager)
{
$sessionName = $request->get("name");
if ($this->isCsrfTokenValid($sessionName . '_action_selected', $request->request->get('_token')))
{
$selected = (!empty($this->get('session')->get($sessionName))) ? $this->get('session')->get($sessionName) : [];
$deleted = $objectManager->deleteByIds($this->class, $selected);
if($deleted) {
$this->get('session')->set($sessionName, []);
$this->addFlash('success', $this->getTranslator()->trans('messages.deleted.success'));
} else {
$this->addFlash('error', $this->getTranslator()->trans('messages.deleted.error'));
}
}
return $this->redirectToRoute('pti_module');
}
}