src/Controller/GZZ/IndexController.php line 35

Open in your IDE?
  1. <?php
  2. namespace App\Controller\GZZ;
  3. use App\Entity\Category48;
  4. use App\Entity\Quiz;
  5. use App\Entity\User;
  6. use Doctrine\ORM\QueryBuilder;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. use Omines\DataTablesBundle\Adapter\ArrayAdapter;
  12. use Omines\DataTablesBundle\Adapter\Doctrine\ORM\SearchCriteriaProvider;
  13. use Omines\DataTablesBundle\Adapter\Doctrine\ORMAdapter;
  14. use Omines\DataTablesBundle\Column\TextColumn;
  15. use Omines\DataTablesBundle\Column\DateTimeColumn;
  16. use Omines\DataTablesBundle\DataTableFactory;
  17. use stdClass;
  18. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  19. use Symfony\Component\Security\Core\Security;
  20. class IndexController extends AbstractController
  21. {
  22.     private $security;
  23.     public function __construct(Security $security)
  24.     {
  25.         $this->security = $security;
  26.     }
  27.     /**
  28.      * @Route("/", name="home")
  29.      */
  30.     public function index(Request $request, DataTableFactory $dataTableFactory): Response
  31.     {
  32.         $table = $dataTableFactory->create()
  33.             ->add('createDate', DateTimeColumn::class, ['label' => 'Data utworzenia', 'format' => 'Y-m-d'])
  34.             ->add('name', TextColumn::class, ['label' => 'Nazwa testu'])
  35.             ->add('nameClass', TextColumn::class, ['label' => 'Klasa'])
  36.             ->add('nameGroup', TextColumn::class, ['label' => 'Grupa'])
  37.             ->add('description', TextColumn::class, ['label' => 'Opis'])
  38.             ->createAdapter(ORMAdapter::class, [
  39.                 'entity' => Quiz::class,
  40.                 'query' => function (QueryBuilder $builder) {
  41.                     $builder
  42.                         ->select('c')
  43.                         ->from(Quiz::class, 'c');
  44.                 },
  45.                 // 'query' => function (QueryBuilder $builder) {
  46.                 //     $builder
  47.                 //         ->select('e')
  48.                 //         ->addSelect('c')
  49.                 //         ->from(Employee::class, 'e')
  50.                 //         ->leftJoin('e.company', 'c')
  51.                 //     ;
  52.                 // },
  53.                 'criteria' => [
  54.                     function (QueryBuilder $builder) {
  55.                         $builder->andWhere($builder->expr()->like('c.ownerId', ':userId'))->setParameter('userId', $this->security->getUser()->getIduser());
  56.                     },
  57.                     new SearchCriteriaProvider(),
  58.                 ],
  59.             ])
  60.             ->handleRequest($request);
  61.         if ($table->isCallback()) {
  62.             return $table->getResponse();
  63.         }
  64.         return $this->render('quiz/list.html.twig', [
  65.             'controller_name' => 'IndexController', 'datatable' => $table, 'panel' => 'gzz', 'page' => 'testy'
  66.         ]);
  67.     }
  68.     /**
  69.      * @Route("/quiz/new", name="newQuiz")
  70.      */
  71.     public function newAction(Request $request): Response
  72.     {
  73.         $quiz = new Quiz();
  74.         $form = $this->createFormBuilder($quiz)
  75.             ->add('save', SubmitType::class, ['label' => 'Zapisz'])
  76.             ->getForm();
  77.         $form->handleRequest($request);
  78.         if ($form->isSubmitted() && $form->isValid()) {
  79.             // $form->getData() holds the submitted values
  80.             // but, the original `$task` variable has also been updated
  81.             $quiz = $form->getData();
  82.             // ... perform some action, such as saving the task to the database
  83.             return $this->redirectToRoute('task_success');
  84.         }
  85.         $em = $this->getDoctrine()->getManager();
  86.         $categories = [];
  87.         foreach ($em->getRepository('App:Category48')->findBy(['active' => 1,], ['idcategory' => 'ASC', 'prior' => 'ASC']) as $item) {
  88.             $category = $this->_setCategory($item);
  89.             if ($category->parentId == null)
  90.                 $categories[] = $category;
  91.             else $this->_setParent($categories, $category);
  92.         }
  93.         return $this->renderForm('quiz/new.html.twig', [
  94.             'form' => $form,
  95.             'categories' => $categories,
  96.             'panel' => 'gzz',
  97.             'page' => 'testy'
  98.         ]);
  99.     }
  100.     private function _setCategory(Category48 $item): stdClass
  101.     {
  102.         $category = new stdClass();
  103.         $category->idcategory = $item->getIdcategory();
  104.         $category->name = $item->getName();
  105.         $category->parentId = ($item->getParentId()) ? $item->getParentId()->getIdcategory() : null;
  106.         $category->executable = $item->getExecutable();
  107.         $category->children = [];
  108.         return $category;
  109.     }
  110.     private function _setParent(array &$categories, stdClass $child, ?stdClass $parent = null)
  111.     {
  112.         foreach ($categories as $item) {
  113.             if ($item->idcategory == $child->parentId) {
  114.                 $item->children[] = $child;
  115.                 break;
  116.             } else {
  117.                 $this->_setParent($item->children, $child);
  118.             }
  119.         }
  120.     }
  121.     /**
  122.      * @Route("/quiz/delete/{id}", name="deleteQuiz")
  123.      */
  124.     public function deleteAction($id)
  125.     {
  126.         $em = $this->getDoctrine()->getManager();
  127.         $find = $em->getRepository('App:Quiz')->find($id);
  128.         return $this->redirectToRoute('homepage', array('remove'));
  129.         // $em->remove($list);
  130.         //$em->flush();
  131.     }
  132.     /**
  133.      * @Route("/quiz/edit/{id}", name="editQuiz")
  134.      */
  135.     public function editAction($id)
  136.     {
  137.         $em = $this->getDoctrine()->getManager();
  138.         $find = $em->getRepository('App:Quiz')->find($id);
  139.         return $this->redirectToRoute('homepage', array('remove'));
  140.         // $em->remove($list);
  141.         //$em->flush();
  142.     }
  143.     /**
  144.      * @Route("/info", name="info")
  145.      */
  146.     public function infoAction()
  147.     {
  148.         return $this->render('info.html.twig', [
  149.             'controller_name' => 'IndexController', 'panel' => 'gzz', 'page' => 'info'
  150.         ]);
  151.     }
  152. }