src/Controller/ApiaryController.php line 109

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