src/Controller/ApiaryController.php line 116

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Correction;
  4. use App\Entity\Log;
  5. use App\Entity\Compilation;
  6. use App\Entity\Register;
  7. use App\Entity\Edition;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. use DateTime;
  12. class ApiaryController extends BeehiveController{
  13.   protected static $TYPES = ['tm' => 'r.tm''hgv' => 'r.hgv''ddb' => 'r.ddb''biblio' => 'c.source''bl' => 'c2.volume''register' => 'r.id''boep' => 'c2.title''collection' => 'c2.collection''volume' => 'r.ddb''editie' => 'c.edition''search' => 'c.description'];
  14.   public function index(): Response{
  15.     $entityManager $this->getDoctrine()->getManager();
  16.     $repository $entityManager->getRepository(Edition::class);
  17.     $editions $repository->findAll(['sort' => 'ASC']);
  18.     return $this->render('apiary/index.html.twig', ['editions' => $editions]);
  19.   }
  20.   private function getCompilationsOfInterest($corrections){
  21.     $compilationsOfInterest = [];
  22.     foreach($corrections as $correction){
  23.       if($correction->getCompilation()->getCollection() != 'BOEP'){
  24.         if(!isset($compilationsOfInterest[$correction->getCompilation()->getId()])){
  25.           $compilationsOfInterest[$correction->getCompilation()->getId()] = $correction->getCompilation();
  26.         }
  27.       } else {
  28.         $compilationsOfInterest['BOEP'] = $correction->getCompilation();
  29.       }
  30.     }
  31.     ksort($compilationsOfInterest);
  32.     return $compilationsOfInterest;
  33.   }
  34.   private function getCompilations($type$id){
  35.     $entityManager $this->getDoctrine()->getManager();
  36.     $repository $entityManager->getRepository(Compilation::class);
  37.     $result = [];
  38.     if($type === 'collection' && in_array($id, ['BL''BL Konk.''BOEP'])){
  39.       $result $repository->findBy(['collection' => $id], ['collection' => 'ASC''volume' => 'ASC']);
  40.     } elseif ($type === 'collection' && in_array($id, ['ddb''dclp'])) {
  41.       $result $repository->findBy(['collection' => 'BOEP'], ['collection' => 'ASC''volume' => 'ASC']);
  42.     } elseif ($type === 'bl') {
  43.       $result $repository->findBy(['collection' => 'BL'], ['collection' => 'ASC''volume' => 'ASC']);
  44.     } elseif ($type === 'BL') {
  45.       $result $repository->findBy(['collection' => 'BL'], ['collection' => 'ASC''volume' => 'ASC']);
  46.     } elseif ($type === 'boep') {
  47.       $result $repository->findBy(['collection' => 'BOEP'], ['collection' => 'ASC''volume' => 'ASC']);
  48.     } elseif ($type === 'BOEP') {
  49.       $result $repository->findBy(['collection' => 'BOEP'], ['collection' => 'ASC''volume' => 'ASC']);
  50.     } elseif ($type === 'BL Konk.') {
  51.       $result $repository->findBy(['collection' => 'BL Konk.'], ['collection' => 'ASC''volume' => 'ASC']);
  52.     } else {
  53.       $result $repository->findBy([], ['collection' => 'ASC''volume' => 'ASC']);
  54.     }
  55.     return $result;
  56.   }
  57.   private function makeTitle ($type$id$corrections){
  58.     if($type === 'boep'){
  59.       return $id;
  60.     }
  61.     if($type === 'search'){
  62.       return 'Suchergebnisse für "' $id '"';
  63.     }
  64.     if($type === 'bl'){
  65.       if($id == 2){
  66.         return 'BL II 1 + 2';
  67.       }
  68.       if(count($corrections)){
  69.         return $corrections[0]->getCompilation()->getShort();
  70.       }
  71.     }
  72.     if($type === 'editie' && count($corrections)){
  73.       return $corrections[0]->getEdition()->getTitle();
  74.     }
  75.     if(\in_array($type, ['tm''hgv''ddb''biblio''volume''register'])){
  76.       return strtoupper($type) . ' ' $id;
  77.     }
  78.     if($type === 'collection'){
  79.       if($id ===  'ddb') {
  80.         return 'DDB-Einträge in BOEP';
  81.       } elseif ($id ===  'dclp') {
  82.         return 'DCLP-Einträge in BOEP';
  83.       } elseif ($id ===  'BL') {
  84.         return 'Berichtigungsliste Online';
  85.       } elseif ($id ===  'BL Konk.') {
  86.         return 'Konkordanz der Berichtigungsliste Online';
  87.       } elseif ($id ===  'BOEP') {
  88.         return 'Bulletin of Online Emendations to Papyri';
  89.       }
  90.     }
  91.     return $id;
  92.   }
  93.   
  94.   public function info($id): Response{
  95.     $entityManager $this->getDoctrine()->getManager();
  96.     $repository $entityManager->getRepository(Correction::class);
  97.     $correction $repository->findOneBy(['id' => $id]);
  98.     
  99.     if(!$correction){
  100.       throw $this->createNotFoundException('Correction #' $id ' does not exist');
  101.     }
  102.     $logs array_merge(
  103.       $entityManager->getRepository(Log::class)->getLogs($correction),
  104.       $entityManager->getRepository(Log::class)->getTaskLogs($correction));
  105.     return $this->render('apiary/info.html.twig', ['correction' => $correction'logs' => $logs]);
  106.   }
  107.   public function honey($type$id$format 'html'): Response{
  108.     $entityManager $this->getDoctrine()->getManager();
  109.     $repository $entityManager->getRepository(Correction::class);
  110.     // WHERE
  111.     $where self::$TYPES[$type] . ' = :id';
  112.     if($type === 'boep' || $type === 'volume'){
  113.       if($type === 'volume' && !str_ends_with($id';')){
  114.         $id .= ';';
  115.       }
  116.       $where self::$TYPES[$type] . ' LIKE :id';
  117.       $id .= '%';
  118.     } elseif ($type === 'search'){
  119.       $where self::$TYPES[$type] . ' LIKE :id';
  120.       $id '%' $id '%';
  121.     }
  122.     $parameters = array('id' => $id);
  123.     // SORT
  124.     $sort 'c.sort';
  125.     if(($type === 'collection' && $id === 'BOEP') || ($type === 'boep' && $id === 'Bulletin of Online Emendations to Papyri')){
  126.       $sort 'c.sort';
  127.     } elseif ($type === 'boep' && preg_match('/Bulletin of Online Emendations to Papyri [\d.]+/'$id)) {
  128.       $sort 'c.compilationIndex';
  129.     }
  130.     // QUERY
  131.     $query $entityManager->createQuery('
  132.       SELECT e, c, t, r, d FROM App\Entity\Correction c
  133.       LEFT JOIN c.registerEntries r LEFT JOIN c.tasks t JOIN c.edition e JOIN c.compilation c2 LEFT JOIN e.docketEntries d WHERE ' $where ' ORDER BY ' $sort
  134.     );
  135.     $query->setParameters($parameters);
  136.     if($type === 'collection' && in_array($id, ['ddb''dclp'])){
  137.       $query $entityManager->createQuery('
  138.         SELECT e, c, t, r FROM App\Entity\Correction c
  139.         JOIN c.registerEntries r LEFT JOIN c.tasks t JOIN c.edition e JOIN c.compilation c2 WHERE c2.collection = :collection AND  r.' $id ' IS NOT NULL ORDER BY c.sort'
  140.       );
  141.       $query->setParameters(['collection' => 'BOEP']);
  142.       $query->setMaxResults(2000);
  143.     }
  144.     $corrections $query->getResult();
  145.     $compilations $this->getCompilations($type$id);
  146.     $compilationsOfInterest $this->getCompilationsOfInterest($corrections);
  147.     $title $this->makeTitle($typetrim($id'%'), $corrections);
  148.     if($format === 'html'){
  149.       return $this->render('apiary/honey.html.twig', ['corrections' => $corrections'compilations' => $compilations'compilationsOfInterest' => $compilationsOfInterest'title' => $title'type' => $type'id' => trim($id'%')]);
  150.     } elseif($format === 'plain'){
  151.       return $this->render('apiary/snippetHoney.html.twig', ['corrections' => $corrections'compilations' => $compilations'compilationsOfInterest' => $compilationsOfInterest'title' => $title'type' => $type'id' => trim($id'%')]);
  152.     } elseif ($format === 'rdf') {
  153.       $response = new Response($this->renderView('apiary/honey.xml.twig', ['corrections' => $corrections'compilations' => $compilations'compilationsOfInterest' => $compilationsOfInterest'title' => $title'type' => $type'id' => trim($id'%')]));
  154.       $response->headers->set('Content-Type''application/rdf+xml'); //$response->headers->set('Content-Type', 'text/xml');
  155.       return $response;
  156.     } elseif ($format === 'latex') {
  157.       $response = new Response($this->renderView('apiary/honey.tex.twig', ['corrections' => $corrections'compilations' => $compilations'compilationsOfInterest' => $compilationsOfInterest'title' => $title'type' => $type'id' => trim($id'%')]));
  158.       $response->headers->set('Content-Type''application/tex+txt'); //$response->headers->set('Content-Type', 'text/tex');
  159.       $response->headers->set('Content-Disposition''attachment; filename=' str_replace(' '''$title '.tex'));
  160.       return $response;
  161.     } else {
  162.       $data = ['corrections' => []];
  163.       $data $data['count'] = count($corrections);
  164.       foreach($corrections as $correction){
  165.         $data['corrections'][$correction->getId()] = array(
  166.           'tm' => $correction->getTm(),
  167.           'ddb' => $correction->getDdb(),
  168.           'hgv' => $correction->getHgv(),
  169.           'description' => $correction->getDescription(),
  170.           'status' => $correction->getStatus()
  171.         );
  172.       }
  173.       return new Response(json_encode(array('success' => 'true''data' => $data)));
  174.     }
  175.   }
  176. }