src/Controller/Backend/PtiGroupController.php line 142

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Backend;
  3. use App\Controller\Base\BaseController;
  4. use App\Entity\PtiGroup;
  5. use App\Entity\PtiRule;
  6. use App\Filter\PtiGroupFilterType;
  7. use App\Form\PtiGroupType;
  8. use App\Repository\PtiGroupRepository;
  9. use App\Repository\PtiModuleActionRepository;
  10. use App\Repository\PtiModuleRepository;
  11. use App\Repository\PtiRuleRepository;
  12. use App\Utils\ObjectManager;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Kematjaya\Breadcrumb\Lib\Builder as BreacrumbBuilder;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Knp\Component\Pager\PaginatorInterface;
  17. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  20. /**
  21.  * Require ROLE_SUPER_USER for *every* controller method in this class.
  22.  *
  23.  * @IsGranted("ROLE_SUPER_USER")
  24.  */
  25. class PtiGroupController extends BaseController
  26. {
  27.     private $pageName 'pti_group';
  28.     private $class PtiGroup::class;
  29.     /**
  30.      * @Route("/group", name="pti_group")
  31.      */
  32.     public function index(BreacrumbBuilder $builderRequest $requestPaginatorInterface $paginatorInterface): Response
  33.     {
  34.         $builder->add('Dashboard '"dashboard", array(), "&nbsp;<i class='fa fa-home'></i>");
  35.         $builder->add('Group User');
  36.         $form $this->createFormFilter(PtiGroupFilterType::class);
  37.         $queryBuilder $this->getQueryBuilder($this->class);
  38.         $queryBuilder $this->buildFilter($request$form$queryBuilder)->addOrderBy("this.id""DESC");
  39.     
  40.         $this->setSessionLimit($request);
  41.         $maxPerPage $request->getSession()->get("limit") ? $request->getSession()->get("limit") : $this->getLimit();
  42.         $pagination $paginatorInterface->paginate($queryBuilder$request->query->getInt('page'1), $maxPerPage);
  43.         
  44.         return $this->render('backend/pti_group/index.html.twig', [
  45.             'page_name' => $this->pageName,
  46.             'button_credential' => $this->buttonCredentials($this->pageName),
  47.             'filter' => $form->createView(),
  48.             'pagination' => $pagination,
  49.         ]);
  50.     }
  51.     /**
  52.      * @Route("/group/form/{id}", defaults={"id"= null}, name="pti_group_form", methods={"POST", "GET"})
  53.      */
  54.     public function form(?string $id nullRequest $requestPtiGroupRepository $ptiGroupRepo)
  55.     {
  56.         if ($id) {
  57.             $pti_group $ptiGroupRepo->find($id);
  58.         } else {
  59.             $pti_group = new PtiGroup();
  60.         }
  61.         if (!$pti_group) {
  62.             throw new NotFoundHttpException();
  63.         }
  64.         $form $this->createForm(PtiGroupType::class, $pti_group, ['action' => $this->generateUrl('pti_group_form', ['id' => $pti_group->getId()])]); //Jadi lebih singkat
  65.         $form->handleRequest($request);
  66.         if ($form->isSubmitted() && $form->isValid()) {
  67.             $pti_group $form->getData();
  68.             $entityManager $this->getDoctrine()->getManager();
  69.             $entityManager->persist($pti_group);
  70.             $entityManager->flush();
  71.             if($id){
  72.                 $this->addFlash('notice''User Group "' $pti_group->getNamaGroup() . '" berhasil diubah');
  73.             }else{
  74.                 $this->addFlash('notice''User Group "' $pti_group->getNamaGroup() . '" berhasil dibuat');
  75.             }
  76.             return $this->redirectToRoute('pti_group');
  77.         }
  78.         return $this->render('backend/pti_group/form.html.twig', ['form' => $form->createView()]);
  79.     }
  80.     /**
  81.      * @Route("/group/{id}/delete_pti_group", name="pti_group_delete", methods={"GET"})
  82.      */
  83.     public function delete(PtiGroup $ptiGroup)
  84.     {
  85.         //dump($myUserRepository); exit;
  86.         $entityManager $this->getDoctrine()->getManager();
  87.         $entityManager->remove($ptiGroup);
  88.         $entityManager->flush();
  89.         $this->addFlash('notice''User "' $ptiGroup->getNamaGroup() . '" berhasil dihapus');
  90.         return $this->redirectToRoute('pti_group');
  91.     }
  92.      /**
  93.      * @Route("/group/add_selected", name="pti_group_add_selected", methods={"POST"})
  94.      */
  95.     public function add_selected(Request $request)
  96.     {
  97.         $sessionName $request->get("name");
  98.         $this->get('session')->set($sessionName$request->get('selected'));
  99.         $selected = (!empty($this->get('session')->get($sessionName))) ? $this->get('session')->get($sessionName) : [];
  100.         return $this->json($selected);
  101.     }
  102.     /**
  103.      * @Route("/group/action_selected", name="pti_group_action_selected", methods={"POST"})
  104.      */
  105.     public function action_selected(Request $requestObjectManager $objectManager)
  106.     {
  107.         $sessionName $request->get("name");
  108.         if ($this->isCsrfTokenValid($sessionName '_action_selected'$request->request->get('_token')))
  109.         {
  110.             $selected = (!empty($this->get('session')->get($sessionName))) ? $this->get('session')->get($sessionName) : [];
  111.             $deleted $objectManager->deleteByIds($this->class$selected);
  112.             if($deleted) {
  113.                 $this->get('session')->set($sessionName, []);
  114.                 $this->addFlash('success'$this->getTranslator()->trans('messages.deleted.success'));
  115.             } else {
  116.                 $this->addFlash('error'$this->getTranslator()->trans('messages.deleted.error'));
  117.             }
  118.         }
  119.         
  120.         return $this->redirectToRoute('pti_group');
  121.     }
  122.     /**
  123.      * @Route("/group/{id}/detail", name="pti_group_detail", methods={"GET", "POST"})
  124.      */
  125.     public function detail(BreacrumbBuilder $builderPtiGroupRepository $ptiGroupRepoPtiGroup $ptiGroupPtiModuleRepository $ptiModuleRepo,
  126.     PtiModuleActionRepository $ptiModuleActionRepoPtiRuleRepository $ptiRuleRepo)
  127.     {
  128.         $builder->add('Dashboard '"dashboard", array(), "&nbsp;<i class='fa fa-home'></i>");
  129.         $builder->add('Group User'"pti_group");
  130.         $builder->add('Detail');
  131.         $detail $ptiGroupRepo->find($ptiGroup);
  132.         
  133.         $modules = [];
  134.         $credentials = [];
  135.         $rules = [];
  136.         $creds $ptiRuleRepo->findBy(['groups' => $detail->getId()]);
  137.         foreach($creds as $cred){
  138.             $credentials[$cred->getModuleAction()->getId()] = $cred;
  139.         }
  140.         // dump($credentials);exit;
  141.         $parents $ptiModuleRepo->findBy(['parent' => 0], ['id' => 'asc']);
  142.         foreach($parents as $parent)
  143.         {
  144.             $rule_parents $ptiModuleActionRepo->findBy(['module' => $parent->getId(), 'action' => 'index']);
  145.             $rules[$parent->getId()] = $rule_parents;
  146.             $childs $ptiModuleRepo->findBy(['parent' => $parent->getId()], ['id' => 'asc']);
  147.             $modules[] = ['parent' => $parent'child' => $childs];
  148.             foreach($childs as $child){
  149.                 $rule_child $ptiModuleActionRepo->findBy(['module' => $child->getId()], ['id' => 'asc']);
  150.                 $rules[$child->getId()] = $rule_child;
  151.             }
  152.         }
  153.         
  154.         // dump($credentials);exit;
  155.         return $this->render('backend/pti_group/detail.html.twig', [
  156.             'page_name' => $this->pageName,
  157.             'button_credential' => $this->buttonCredentials($this->pageName),
  158.             'ptiGroup' => $detail,
  159.             'modules' => $modules,
  160.             'rules' => $rules,
  161.             'credentials' => $credentials,
  162.         ]);
  163.     }
  164.     /**
  165.      * @Route("/group/access", name="pti_group_form_action_access", methods={"GET", "POST"})
  166.      */
  167.     public function form_action_access(Request $requestPtiGroupRepository $ptiGroupRepoPtiModuleActionRepository $ptiModuleActionRepoPtiRuleRepository $ptiRuleRepo)
  168.     {   
  169.         $credentials $request->get('credentials');
  170.         $group_id $request->get('group');
  171.         $group $ptiGroupRepo->find($group_id);
  172.         $rules $ptiRuleRepo->findBy(['groups' => $group_id]);
  173.         if ($rules) {
  174.             foreach ($rules as $rule) {
  175.                 $rule->setIsAllowed(false);
  176.                 $entityManager $this->getDoctrine()->getManager();
  177.                 $entityManager->persist($rule);
  178.                 $entityManager->flush();
  179.             }
  180.         }
  181.         // dump($credentials);exit;
  182.         foreach($credentials as $credential)
  183.         {
  184.             $rule $ptiRuleRepo->findOneBy(['groups' => $group_id'module_action' => $credential]);
  185.             if (!$rule) {
  186.                 $module_action $ptiModuleActionRepo->find($credential);
  187.                 $rule = new PtiRule();
  188.                 $rule->setGroups($group);
  189.                 $rule->setModuleAction($module_action);
  190.             }
  191.             $rule->setIsAllowed(true);
  192.             $entityManager $this->getDoctrine()->getManager();
  193.             $entityManager->persist($rule);
  194.             $entityManager->flush();
  195.         }
  196.         $this->addFlash('notice''Hak akses group user "' $group->getNamaGroup() . '" berhasil disimpan');
  197.         return $this->redirectToRoute('pti_group_detail', ['id' => $group_id]);
  198.     }
  199. }