src/Controller/CorrectionController.php line 24

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Correction;
  4. use App\Entity\Compilation;
  5. use App\Entity\Edition;
  6. use App\Entity\Task;
  7. use App\Entity\IndexEntry;
  8. use App\Entity\Register;
  9. use App\Entity\Log;
  10. use App\Form\CorrectionNewType;
  11. use App\Form\TaskType;
  12. use App\Form\IndexEntryType;
  13. use Doctrine\ORM\EntityManagerInterface;
  14. use Symfony\Component\HttpFoundation\Response;
  15. class CorrectionController extends BeehiveController{
  16.   protected $entityManager null;
  17.   protected $repository null;
  18.   protected $correction null;
  19.   protected $logs null;
  20.   public function list($print false): Response {
  21.     $entityManager $this->getDoctrine()->getManager();
  22.     $repository $entityManager->getRepository(Correction::class);
  23.     $corrections = [];
  24.     if ($this->request->getMethod() == 'POST') {
  25.       
  26.       // REQUEST PARAMETERS
  27.       
  28.       $limit         $this->getParameter('rows');
  29.       $page          $this->getParameter('page');
  30.       $offset        $page $limit $limit;
  31.       $offset        $offset $offset;
  32.       $sort          $this->getParameter('sidx');
  33.       $sortDirection $this->getParameter('sord');
  34.       $visible       explode(';'rtrim($this->getParameter('visible'), ';'));
  35.       // SELECT
  36.       $visibleColumns = ['title'];
  37.       foreach($visible as $column){
  38.         if($column != ''){
  39.           $visibleColumns[] = $column;
  40.         }
  41.       }
  42.       $visible $visibleColumns;
  43.       $this->logger->info('visible: ' print_r($visibletrue));
  44.       $this->logger->info('visible: ' $this->getParameter('visible'));
  45.       // ODER BY
  46.       $orderBy '';
  47.       if(in_array($sort, ['source''text''position''description''creator''created''status''compilationPage''compilationIndex'])){
  48.         $orderBy ' ORDER BY c.' $sort ' ' $sortDirection;
  49.       }
  50.       if(in_array($sort, ['tm''hgv''ddb'])){
  51.         $orderBy ' ORDER BY r.' $sort ' ' $sortDirection;
  52.       }
  53.       if($sort == 'edition'){
  54.         $orderBy ' ORDER BY e.sort ' $sortDirection .  ', e.title ' $sortDirection;
  55.       }
  56.       if($sort == 'compilation'){
  57.         $orderBy ' ORDER BY c2.volume ' $sortDirection ', c2.fascicle ' $sortDirection;
  58.       }
  59.       // WHERE WITH
  60.       $where '';
  61.       $with '';
  62.       $parameters = [];
  63.       if($this->getParameter('_search') == 'true'){
  64.         $prefix ' WHERE ';
  65.         foreach(['source''text''position''description''creator''created''status''compilationPage''compilationIndex'] as $field){
  66.           if(strlen($this->getParameter($field))){
  67.             $where .= $prefix 'c.' $field ' LIKE :' $field;
  68.             $parameters[$field] = '%' $this->getParameter($field) . '%';
  69.             $prefix ' AND ';
  70.           }
  71.         }
  72.         foreach(['tm''hgv''ddb'] as $field){
  73.           if(strlen($this->getParameter($field))){
  74.             $where .= $prefix 'r.' $field ' LIKE :' $field;
  75.             $parameters[$field] = '%' $this->getParameter($field) . '%';
  76.             $prefix ' AND ';
  77.           }
  78.         }
  79.         if($this->getParameter('edition')){
  80.           $where .= $prefix '(e.title LIKE :edition OR e.sort LIKE :edition)';
  81.           $parameters['edition'] = '%' $this->getParameter('edition') . '%';
  82.           $prefix ' AND ';
  83.         }
  84.         if($this->getParameter('compilation')){
  85.           $where .= $prefix '(c2.title = :compilation OR c2.volume = :compilation)';
  86.           $parameters['compilation'] = $this->getParameter('compilation');
  87.           $prefix ' AND ';
  88.         }
  89.         $prefix ' WITH ';
  90.         foreach(['task_bl''task_tm''task_hgv''task_ddb''task_apis''task_biblio'] as $field){
  91.           if(strlen($this->getParameter($field))){
  92.             $with $prefix ' (t.category = \'' str_replace('task_'''$field) . '\' AND t.description LIKE \'%' . ($this->getParameter($field) != '*' $this->getParameter($field) : '') . '%\')';
  93.             //$key =  ucfirst(str_replace('task_', '', $field));
  94.             //$with = $prefix . ' (t.category = :category' . $key . ' AND t.description LIKE :description' . $key . ')'; 
  95.             //$parameters['category' . $key] = strtolower($field);
  96.             //$parameters['description' . $key] = '%' . $this->getParameter($field) . '%';
  97.             $prefix ' OR ';
  98.           }
  99.         }
  100.       }
  101.       // LIMIT
  102.       $query $entityManager->createQuery('
  103.         SELECT count(DISTINCT c.id) FROM App\Entity\Correction c
  104.         LEFT JOIN c.registerEntries r LEFT JOIN c.tasks t JOIN c.edition e JOIN c.compilation c2
  105.         ' $with ' ' $where
  106.       );
  107.       $query->setParameters($parameters);
  108.       $count $query->getSingleScalarResult();
  109.       $totalPages = ($count && $limit 0) ? ceil($count/$limit) : 0;
  110.       // PAGINATION
  111.       if(!$print){
  112.         $query $entityManager->createQuery('
  113.           SELECT DISTINCT c.id FROM App\Entity\Correction c
  114.           LEFT JOIN c.registerEntries r LEFT JOIN c.tasks t JOIN c.edition e JOIN c.compilation c2
  115.           ' $with ' ' $where ' ' $orderBy
  116.         );
  117.         $query->setParameters($parameters);
  118.         $query->setFirstResult($offset)->setMaxResults($limit);
  119.         $result $query->getScalarResult();
  120.         $ids = [];
  121.         foreach ($result as $row) {
  122.           $ids[] = $row['id'];
  123.         }
  124.         if($where === ''){
  125.           $where ' WHERE ';
  126.         } else {
  127.           $where .= ' AND ';
  128.         }
  129.         $where .= 'c.id IN (:id)';
  130.         $parameters['id'] = $ids;
  131.       }
  132.       $this->logger->info('limit: ' $limit);
  133.       $this->logger->info('page: ' $page);
  134.       $this->logger->info('offset: ' $offset);
  135.       $this->logger->info('sort: ' $sort);
  136.       $this->logger->info('sortDirection: ' $sortDirection);
  137.       $this->logger->info('totalPages: ' $totalPages);
  138.       // QUERY
  139.       $query $entityManager->createQuery('
  140.         SELECT e, c, t FROM App\Entity\Correction c
  141.         LEFT JOIN c.registerEntries r LEFT JOIN c.tasks t JOIN c.edition e JOIN c.compilation c2 ' $with ' ' $where ' ' $orderBy
  142.       );
  143.       $query->setParameters($parameters);
  144.       $corrections $query->getResult();
  145.       if($print){
  146.         return $this->render('correction/print.html.twig', ['corrections' => $corrections'visible' => $visible]);
  147.       } else {
  148.         return $this->render('correction/list.xml.twig', ['corrections' => $corrections'count' => $count'totalPages' => $totalPages'page' => $page]);
  149.       }
  150.     } else {
  151.       if($print){
  152.         return $this->render('correction/print.html.twig', ['corrections' => $corrections'visible' => []]);
  153.       } else {
  154.         return $this->render('correction/list.html.twig', ['corrections' => $corrections]);
  155.       }
  156.     }
  157.   }
  158.   public function new(): Response {
  159.     $correction = new Correction();
  160.     $correction->setCreator($this->getUser()->getUsername());
  161.     // $this->get('security.context')->getToken()->getUser()->getUsername()
  162.     $entityManager $this->getDoctrine()->getManager();
  163.     $editionRepository $entityManager->getRepository(Edition::class);
  164.     $correction->setCompilation($this->getCompilation());
  165.     $correction->setEdition($this->getEdition());
  166.     $registerRepository $entityManager->getRepository(Register::class);
  167.     $form $this->createForm(CorrectionNewType::class, $correction, ['attr' => ['wizardUrl' => $this->generateUrl('PapyrillioBeehive_NumberWizardLookup')]]);
  168.     if ($this->request->getMethod() == 'POST') {
  169.       $form->handleRequest($this->request);
  170.       if ($form->isValid()) {
  171.         foreach($this->getParameter('task') as $category => $description){
  172.           if(strlen(trim($description))){
  173.             $task = new Task();
  174.             $task->setCategory($category);
  175.             $task->setDescription(trim($description));
  176.             $task->setCorrection($correction);
  177.             $entityManager->persist($task);
  178.           }
  179.         }
  180.         if($this->getParameter('register')){
  181.           foreach($this->getParameter('register') as $registerId){
  182.             $register $registerRepository->findOneBy(['id' => $registerId]);
  183.             if($register){
  184.               $correction->addRegisterEntry($register);
  185.             }
  186.           }
  187.         }
  188.         $entityManager->persist($correction);
  189.         $entityManager->flush();
  190.         if($this->getParameter('redirectTarget') === 'new'){
  191.           $this->addFlash('notice''Der Datensatz wurde angelegt!');
  192.           return $this->redirect($this->generateUrl('PapyrillioBeehive_CorrectionNew'));
  193.         } else {
  194.           return $this->redirect($this->generateUrl('PapyrillioBeehive_CorrectionShow', ['id' => $correction->getId()]));
  195.         }
  196.       }
  197.     }
  198.     return $this->render('correction/new.html.twig', ['form' => $form->createView(), 'compilations' => $this->getCompilations(), 'editions' => $editionRepository->findBy([], ['sort' => 'asc'])]);
  199.   }
  200.   protected function getCompilation($id null){
  201.     $entityManager $this->getDoctrine()->getManager();
  202.     $repository $entityManager->getRepository(Compilation::class);
  203.     if($id !== null){
  204.       return $repository->findOneBy(['id' => $id]);
  205.     } else if($this->request->getMethod() == 'POST'){
  206.       return $repository->findOneBy(['id' => $this->getParameter('compilation')]);
  207.     } else {
  208.       return $repository->findOneBy(['volume' => 14]);
  209.     }
  210.   }
  211.   protected function getCompilations(){
  212.     $entityManager $this->getDoctrine()->getManager();
  213.     $repository $entityManager->getRepository(Compilation::class);
  214.     return $repository->findAll();
  215.   }
  216.   protected function getEdition(){
  217.     $entityManager $this->getDoctrine()->getManager();
  218.     $repository $entityManager->getRepository(Edition::class);
  219.     if($this->request->getMethod() == 'POST'){
  220.       return $repository->findOneBy(['id' => $this->getParameter('edition')]);
  221.     }else{
  222.       return $repository->findOneBy(['sort' => 0]);
  223.     }
  224.   }
  225.   public function update($id): Response {
  226.     $this->retrieveCorrection($id);
  227.     $elementId $this->getParameter('elementid');
  228.     if($elementId == 'compilation'){
  229.       $this->correction->setCompilation($this->getCompilation($this->getParameter('newvalue')));
  230.       $this->entityManager->flush();
  231.       return new Response(htmlspecialchars($this->correction->getCompilation()->getTitle()));
  232.     } else {
  233.       $setter 'set' ucfirst($elementId);
  234.       $getter 'get' ucfirst($elementId);
  235.       
  236.       $this->correction->$setter($this->getParameter('newvalue'));
  237.       $this->entityManager->flush();
  238.       $this->entityManager->refresh($this->correction);
  239.       return new Response(htmlspecialchars($this->correction->$getter()));
  240.     }
  241.   }
  242.   public function delete($id): Response {
  243.     $entityManager $this->getDoctrine()->getManager();
  244.     $repository $entityManager->getRepository(Correction::class);
  245.     $correction $repository->findOneBy(['id' => $id]);
  246.     foreach($correction->getTasks() as $task){
  247.       $entityManager->remove($task);
  248.     }
  249.     foreach($correction->getIndexEntries() as $indexEntry){
  250.       $entityManager->remove($indexEntry);
  251.     }
  252.     $entityManager->remove($correction);
  253.     $entityManager->flush();
  254.     return $this->redirect($this->generateUrl('PapyrillioBeehive_CorrectionList'));
  255.   }
  256.   public function show($id): Response {
  257.     if(!$id){
  258.       return $this->forward('PapyrillioBeehiveBundle:Correction:list');
  259.     }
  260.     $this->retrieveCorrection($id);
  261.     $task = new Task();
  262.     $task->setCorrection($this->correction);
  263.     $formTask $this->createForm(TaskType::class, $task);
  264.     $index = new IndexEntry();
  265.     $index->addCorrection($this->correction);
  266.     $formIndex $this->createForm(IndexEntryType::class, $index);
  267.     
  268.     return $this->render('correction/show.html.twig', ['correction' => $this->correction'compilations' => $this->getCompilations(), 'logs' => $this->logs'formTask' => $formTask->createView(), 'formIndex' => $formIndex->createView()]);
  269.   }
  270.   
  271.   public function snippetLink($id): Response {
  272.     $this->retrieveCorrection($id);
  273.     
  274.     $this->logger->info('********************');
  275.     $this->logger->info(print_r($this->correction->getLinks(), TRUE));
  276.     return $this->render('correction/snippetLink.html.twig', ['correction' => $this->correction]);
  277.   }
  278.   protected function retrieveCorrection($id){
  279.     $this->entityManager $this->getDoctrine()->getManager();
  280.     $this->repository $this->entityManager->getRepository(Correction::class);
  281.     $this->correction $this->repository->findOneBy(['id' => $id]);
  282.     
  283.     if(!$this->correction){
  284.       throw $this->createNotFoundException('Correction #' $id ' does not exist');
  285.     }
  286.     $this->logs array_merge(
  287.       $this->entityManager->getRepository(Log::class)->getLogs($this->correction),
  288.       $this->entityManager->getRepository(Log::class)->getTaskLogs($this->correction));
  289.   }
  290. }