src/Controller/ApiaryController.php line 107

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''volume_dclp' => 'r.dclp''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''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.     if($type === 'volume_dclp'){
  92.       return $id ' (in DCLP)';
  93.     }
  94.     return $id;
  95.   }
  96.   
  97.   public function info($id): Response{
  98.     $entityManager $this->getDoctrine()->getManager();
  99.     $repository $entityManager->getRepository(Correction::class);
  100.     $correction $repository->findOneBy(['id' => $id]);
  101.     
  102.     if(!$correction){
  103.       throw $this->createNotFoundException('Correction #' $id ' does not exist');
  104.     }
  105.     $logs array_merge(
  106.       $entityManager->getRepository(Log::class)->getLogs($correction),
  107.       $entityManager->getRepository(Log::class)->getTaskLogs($correction));
  108.     return $this->render('apiary/info.html.twig', ['correction' => $correction'logs' => $logs]);
  109.   }
  110.   public function honey($type$id$format 'html'): Response{
  111.     $entityManager $this->getDoctrine()->getManager();
  112.     $repository $entityManager->getRepository(Correction::class);
  113.     // WHERE
  114.     $where self::$TYPES[$type] . ' = :id';
  115.     if(in_array($type, ['boep''volume''volume_dclp'])){
  116.       if(in_array($type, ['boep''volume''volume_dclp']) && !str_ends_with($id';')){
  117.         $id .= ';';
  118.       }
  119.       $where self::$TYPES[$type] . ' LIKE :id';
  120.       $id .= '%';
  121.     } elseif ($type === 'search'){
  122.       $where self::$TYPES[$type] . ' LIKE :id';
  123.       $id '%' $id '%';
  124.     }
  125.     $parameters = array('id' => $id);
  126.     // SORT
  127.     $sort 'c.sort';
  128.     if(($type === 'collection' && $id === 'BOEP') || ($type === 'boep' && $id === 'Bulletin of Online Emendations to Papyri')){
  129.       $sort 'c.sort';
  130.     } elseif ($type === 'boep' && preg_match('/Bulletin of Online Emendations to Papyri [\d.]+/'$id)) {
  131.       $sort 'c.compilationIndex';
  132.     }
  133.     // QUERY
  134.     $query $entityManager->createQuery('
  135.       SELECT e, c, t, r, d FROM App\Entity\Correction c
  136.       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
  137.     );
  138.     $query->setParameters($parameters);
  139.     if($type === 'collection' && in_array($id, ['ddb''dclp'])){
  140.       $query $entityManager->createQuery('
  141.         SELECT e, c, t, r FROM App\Entity\Correction c
  142.         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'
  143.       );
  144.       $query->setParameters(['collection' => 'BOEP']);
  145.       $query->setMaxResults(2000);
  146.     }
  147.     $corrections $query->getResult();
  148.     $compilations $this->getCompilations($type$id);
  149.     $compilationsOfInterest $this->getCompilationsOfInterest($corrections);
  150.     $title $this->makeTitle($typetrim($id'%'), $corrections);
  151.     if($format === 'html'){
  152.       return $this->render('apiary/honey.html.twig', ['corrections' => $corrections'compilations' => $compilations'compilationsOfInterest' => $compilationsOfInterest'title' => $title'type' => $type'id' => trim($id'%')]);
  153.     } elseif($format === 'plain'){
  154.       return $this->render('apiary/snippetHoney.html.twig', ['corrections' => $corrections'compilations' => $compilations'compilationsOfInterest' => $compilationsOfInterest'title' => $title'type' => $type'id' => trim($id'%')]);
  155.     } elseif ($format === 'rdf') {
  156.       $response = new Response($this->renderView('apiary/honey.xml.twig', ['corrections' => $corrections'compilations' => $compilations'compilationsOfInterest' => $compilationsOfInterest'title' => $title'type' => $type'id' => trim($id'%')]));
  157.       $response->headers->set('Content-Type''application/rdf+xml'); //$response->headers->set('Content-Type', 'text/xml');
  158.       return $response;
  159.     } elseif ($format === 'latex') {
  160.       $response = new Response($this->renderView('apiary/honey.tex.twig', ['corrections' => $corrections'compilations' => $compilations'compilationsOfInterest' => $compilationsOfInterest'title' => $title'type' => $type'id' => trim($id'%')]));
  161.       $response->headers->set('Content-Type''application/tex+txt'); //$response->headers->set('Content-Type', 'text/tex');
  162.       $response->headers->set('Content-Disposition''attachment; filename=' str_replace(' '''$title '.tex'));
  163.       return $response;
  164.     } else {
  165.       $data = ['corrections' => []];
  166.       $data $data['count'] = count($corrections);
  167.       foreach($corrections as $correction){
  168.         $data['corrections'][$correction->getId()] = array(
  169.           'tm' => $correction->getTm(),
  170.           'ddb' => $correction->getDdb(),
  171.           'hgv' => $correction->getHgv(),
  172.           'description' => $correction->getDescription(),
  173.           'status' => $correction->getStatus()
  174.         );
  175.       }
  176.       return new Response(json_encode(array('success' => 'true''data' => $data)));
  177.     }
  178.   }
  179. }