src/Controller/RegisterController.php line 39

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Correction;
  4. use App\Entity\Register;
  5. use App\Controller\ApiaryController;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use DOMDocument;
  8. use DOMXPath;
  9. class RegisterController extends BeehiveController{
  10.   private static function compareDdb($ddb1$ddb2){
  11.     $a explode(';'$ddb1['value']);
  12.     $b explode(';'$ddb2['value']);
  13.     if(count($a) < || count($b) < 3){
  14.       return count($a) < count($b) ? -1;
  15.     }
  16.     if($a[0] != $b[0]){
  17.       return $a[0] < $b[0] ? -1;
  18.     }
  19.     $a[1] = intval(preg_replace('/[^\d]+/'''$a[1]));
  20.     $a[2] = intval(preg_replace('/(.+;.*;[^ ]]+).*/''$1'$a[2]));
  21.     $b[1] = intval(preg_replace('/[^\d]+/'''$b[1]));
  22.     $b[2] = intval(preg_replace('/(.+;.*;[^ ]]+).*/''$1'$b[2]));
  23.     return ($a[1] * 1000000 $a[2]) < ($b[1] * 1000000 $b[2]) ? -1;
  24.   }
  25.   public function autocomplete($id 0): Response {
  26.     $term $this->getParameter('term');
  27.     $autocomplete = array();
  28.     if(strlen($term)){
  29.       $entityManager $this->getDoctrine()->getManager();
  30.       $repository $entityManager->getRepository(Register::class);
  31.       $search 'r.ddb LIKE \'%' $term '%\' or r.dclp LIKE \'%' $term '%\'';
  32.       $order 'r.ddb, r.dclp';
  33.       if(preg_match('/^\d/'$term)){
  34.         $search 'r.hgv LIKE \'' $term '%\' OR r.tm LIKE \'' $term '%\'';
  35.         $order 'r.tm, r.hgv';
  36.       }
  37.       $query $entityManager->createQuery('SELECT r.id, r.ddb, r.dclp, r.tm, r.hgv FROM App\Entity\Register r WHERE ' $search ' ORDER BY ' $order);
  38.       $query->setMaxResults(1000);
  39.       foreach($query->getResult() as $result){
  40.         $caption $this->makeCaption($result$term);
  41.         $autocomplete[] = array('id' => $result['id'], 'value' => $caption'label' => $caption);
  42.       }
  43.       if(preg_match('/^[^\d]/'$term)){
  44.         usort($autocomplete'self::compareDdb');
  45.       }
  46.     }
  47.     return new Response(json_encode(array_slice($autocomplete020)));
  48.   }
  49.   public function autocompleteDdb(): Response {
  50.     $term $this->getParameter('term');
  51.     $entityManager $this->getDoctrine()->getManager();
  52.     $repository $entityManager->getRepository(Register::class);
  53.     $query $entityManager->createQuery('SELECT DISTINCT r.ddb FROM App\Entity\Register r JOIN r.corrections c WHERE r.ddb LIKE \'' $term '%\' ORDER BY r.ddb');
  54.     $autocomplete = array();
  55.     foreach($query->getResult() as $result){
  56.       $autocomplete[] = $result['ddb'];
  57.     }
  58.     return new Response(json_encode($autocomplete));
  59.   }
  60.   protected function makeCaption($result$term){
  61.     if(preg_match('/^\d/'$term)){
  62.       $caption = ($result['tm'] ? $result['tm'] . ($result['hgv'] && ($result['hgv'] != $result['tm']) ? ' (' str_replace($result['tm'], ''$result['hgv']) . ')' '') : $result['hgv']);
  63.       $caption .= ($result['ddb'] ? ' (' $result['ddb'] . ')' '');
  64.       return $caption;
  65.     }
  66.     $caption = ($result['ddb'] && preg_match('/.*' $term '.*/'$result['ddb']) ? $result['ddb'] . ' ' : ($result['dclp'] && preg_match('/.*' $term '.*/'$result['dclp']) ? $result['dclp'] . ' ' ''));
  67.     $caption .= ($result['hgv'] || $result['tm'] ? ' TM/HGV ' '');
  68.     $caption .= ($result['tm'] ? $result['tm'] . ($result['hgv'] && ($result['hgv'] != $result['tm']) ? ' (' str_replace($result['tm'], ''$result['hgv']) . ')' '') : $result['hgv']);
  69.     return $caption;
  70.   }
  71.   public function showAssignments($correctionId): Response {
  72.     $correction $this->getDoctrine()->getManager()->getRepository(Correction::class)->findOneBy(['id' => $correctionId]);
  73.     return $this->render('register/snippetFolder.html.twig', ['correction' => $correction]);
  74.   }
  75.   public function assign($registerId$correctionId): Response {
  76.     $register $this->getDoctrine()->getManager()->getRepository(Register::class)->findOneBy(array('id' => $registerId));
  77.     $correction $this->getDoctrine()->getManager()->getRepository(Correction::class)->findOneBy(array('id' => $correctionId));
  78.     $correction->addRegisterEntry($register);
  79.     $this->getDoctrine()->getManager()->persist($correction);
  80.     $this->getDoctrine()->getManager()->flush();
  81.     return $this->redirect($this->generateUrl('PapyrillioBeehive_RegisterShowAssignments', array('correctionId' => $correctionId)));
  82.   }
  83.   public function revokeAssignment($registerId$correctionId): Response {
  84.     $register $this->getDoctrine()->getManager()->getRepository(Register::class)->findOneBy(array('id' => $registerId));
  85.     $correction $this->getDoctrine()->getManager()->getRepository(Correction::class)->findOneBy(array('id' => $correctionId));
  86.     $register->getCorrections()->removeElement($correction);
  87.     $correction->getRegisterEntries()->removeElement($register);
  88.     $this->getDoctrine()->getManager()->persist($correction);
  89.     $this->getDoctrine()->getManager()->flush();
  90.     return $this->redirect($this->generateUrl('PapyrillioBeehive_RegisterShowAssignments', array('correctionId' => $correctionId)));
  91.   }
  92.   protected function getIdnoTriplet(){
  93.     $newEntry $this->getParameter('newEntry');
  94.     $ddb null;
  95.     $tm  null;
  96.     $hgv null;
  97.     $ddbParse preg_replace('/^([^; ]+\s+)?([\w\d\.]+;[^; ]*;[^; ]+)(\s+[^;]+)?$/''$2'$newEntry);
  98.     if(preg_match('/^[\w\d\.]+;[^; ]*;[^; ]+$/'$ddbParse)){
  99.       $ddb $ddbParse;
  100.     }
  101.     $tmParse preg_replace('/^(.* )?(\d+)( .*)?$/''$2'$newEntry);
  102.     if(preg_match('/^\d+$/'$tmParse)){
  103.       $tm $tmParse;
  104.     }
  105.     $hgvParse preg_replace('/^(.* )?(\d+[a-z]+)( .*)?$/''$2'$newEntry); // nur was einen Buchstaben hat, kann klar als HGV-Nummer erkannt werden
  106.     if(preg_match('/^\d+[a-z]+$/'$hgvParse)){
  107.       $hgv $hgvParse;
  108.     }
  109.     
  110.     if(!$hgv && $tm && preg_match('/.*' $tm '.+' $tm '.*/'$newEntry)){ // sind HGV- und TM-Nummer gleich, müssen beide (= die gleiche Nummer zwei Mal) angegeben werden
  111.       $hgv $tm;
  112.     }
  113.     return array('tm' => $tm'hgv' => $hgv'ddb' => $ddb);
  114.   }
  115.   public function createAndAssign($correctionId): Response {
  116.     $idnoTriplet $this->getIdnoTriplet(); 
  117.     $register $this->getOrCreate($idnoTriplet['ddb'], $idnoTriplet['tm'], $idnoTriplet['hgv']);
  118.     $correction $this->getDoctrine()->getManager()->getRepository(Correction::class)->findOneBy(array('id' => $correctionId));
  119.     $register->addCorrection($correction);
  120.     $correction->addRegisterEntry($register);
  121.     $this->getDoctrine()->getManager()->persist($correction);
  122.     $this->getDoctrine()->getManager()->persist($register);
  123.     $this->getDoctrine()->getManager()->flush();
  124.     return $this->redirect($this->generateUrl('PapyrillioBeehive_RegisterShowAssignments', array('correctionId' => $correctionId)));
  125.   }
  126.   public function create(): Response {
  127.     $idnoTriplet $this->getIdnoTriplet(); 
  128.     $register $this->getOrCreate($idnoTriplet['ddb'], $idnoTriplet['tm'], $idnoTriplet['hgv']);
  129.     return $this->render('register/snippetListEntry.html.twig', ['register' => $register]);
  130.     //return $this->redirect($this->generateUrl('PapyrillioBeehive_RegisterShow', array('id' => $register->getId())));
  131.   }
  132.   public function show($id): Response {
  133.     $register $this->getDoctrine()->getManager()->getRepository(Register::class)->findOneBy(array('id' => $id));
  134.     return $this->render('register/show.html.twig', ['register' => $register]);
  135.   }
  136.   
  137.   private function getOrCreate($ddb null$tm null$hgv null){
  138.     $register $this->getDoctrine()->getManager()->getRepository(Register::class)->findOneBy(array('ddb' => $ddb'tm' => $tm'hgv' => $hgv));
  139.     if(!$register && ((isset($tm) && strlen($tm)) || (isset($hgv) && strlen($hgv)) || (isset($ddb) && strlen($ddb)))){
  140.       $register = new Register();
  141.       if($ddb && strlen($ddb)){
  142.         $register->setDdb($ddb);
  143.       }
  144.       if($hgv && strlen($hgv)){
  145.         $register->setHgv($hgv);
  146.       }
  147.       if($tm && strlen($tm)){
  148.         $register->setTm($tm);
  149.       }
  150.       $this->getDoctrine()->getManager()->persist($register);
  151.       $this->getDoctrine()->getManager()->flush();
  152.     }
  153.     return $register;
  154.   }
  155.    public function wizard($id): Response {
  156.     $data $this->getData($id);
  157.     return new Response(json_encode(array('success' => true'data' => $data)));
  158.   }
  159.   public function apiary($id): Response {
  160.     return $this->forward('App\Controller\ApiaryController::honey', array('type' => 'register''id' => $id'format' => 'plain'));
  161.   }
  162.   protected function getData($id 0){
  163.     $data = array('tm' => array(), 'hgv' => array(), 'ddb' => array(), 'bl' => array());
  164.     if(!$id){
  165.       return $data;
  166.     }
  167.     $register $this->getDoctrine()->getManager()->getRepository(Register::class)->findOneBy(array('id' => $id));
  168.     // TM, HGV, DDB
  169.     $data['tm']  = $register->getTm();
  170.     $data['hgv'] = $register->getHgv();
  171.     $data['ddb'] = $register->getDdb();
  172.     // BL EDITION & TEXT
  173.     if(!$register->getCorrections()->isEmpty()){
  174.       $correction $register->getCorrections()->first();
  175.       $data['bl'] = array('edition' => $correction->getEdition()->getId(), 'text' => $correction->getText());
  176.     }
  177.     return $data;
  178.   }
  179. }