src/Controller/PdfCounterController.php line 122

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Entity;
  5. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  6. use Symfony\Component\HttpFoundation\JsonResponse;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpKernel\Exception\HttpException;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. use Symfony\Component\Serializer\SerializerInterface;
  12. use App\Form\PdfProjectSelectFormType;
  13. use App\Form\PdfFolderSelectFormType;
  14. use App\Entity\Taskmeister\PdfFolder;
  15. use App\Entity\Taskmeister\PdfFile;
  16. use App\Entity\Taskmeister\SelectionProject as Project;
  17. use App\Entity\Taskmeister\Task;
  18. /**
  19.  * @Route("/pdf-counter", name="pdf_counter_")
  20.  */
  21. class PdfCounterController extends AbstractController
  22. {
  23.     private $entityManager;
  24.     private $projectRepository;
  25.     public function __construct(EntityManagerInterface $entityManager)
  26.     {
  27.         $this->entityManager $entityManager;
  28.         $this->projectRepository $entityManager->getRepository(Project::class);
  29.         $this->taskRepository $entityManager->getRepository(Task::class);
  30.     }
  31.     /**
  32.      * @Route("/index", name="index")
  33.      */
  34.     public function index(Request $request): Response
  35.     {
  36.         $form $this->createForm(PdfProjectSelectFormType::class);
  37.         $form->handleRequest($request);
  38.         if ($form->isSubmitted() && $form->isValid()) {
  39.             return $this->redirectToRoute("pdf_counter_show", ["id" => $form->getData()["project"]->getId()]);
  40.         }
  41.         return $this->render("pdf_counter/index.html.twig", [
  42.             "projectForm" => $form->createView()
  43.         ]);
  44.     }
  45.     /**
  46.      * @Route("/{id}/select", name="select")
  47.      */
  48.     public function select(Project $projectRequest $requestSerializerInterface $serializer): Response
  49.     {
  50.         $this->denyAccessUnlessGranted("view"$project);
  51.         $pdfFiles $project->getPdfFiles();
  52.         $form $this->createForm(PdfFolderSelectFormType::class);
  53.         $form->handleRequest($request);
  54.         if ($form->isSubmitted() && $form->isValid()) {
  55.             $pdfFiles json_decode($form->getData()["pdfJson"], true)["files"];
  56.             $overBatchLimit $form->getData()["overBatchLimit"];
  57.             foreach ($pdfFiles as $_key => $file) {
  58.                 $folderRepository $this->entityManager->getRepository(PdfFolder::class);
  59.                 $pdfFolder $folderRepository->findOneBy(array("path" => $file["path"], "project" => $project));
  60.                 if (empty($pdfFolder)) {
  61.                     $pdfFolder = new PdfFolder($file["path"], $project);
  62.                     $this->entityManager->persist($pdfFolder);
  63.                     $this->entityManager->flush();
  64.                 }
  65.                 $pdfFile = new PdfFile(
  66.                     $project,
  67.                     $pdfFolder,
  68.                     $file["fileName"],
  69.                     $file["fileCount"],
  70.                     $file["pageCount"],
  71.                     $file["imageCount"],
  72.                     $file["formInputCount"],
  73.                     $file["tableCount"],
  74.                     $file["listCount"],
  75.                     $file["formXObjectCount"],
  76.                     $file["linkCount"],
  77.                     $file["ocrPageCount"]
  78.                 );
  79.                 $this->entityManager->persist($pdfFile);
  80.             }
  81.             $this->entityManager->flush();
  82.             // dd(json_decode($form->getData()["pdf_json"])->files);
  83.             if ($overBatchLimit == "true") {
  84.                 return $this->redirectToRoute("pdf_counter_select", ["id" => $project->getId()]);
  85.             }
  86.             return $this->redirectToRoute("pdf_counter_show", ["id" => $project->getId()]);
  87.         }
  88.         // $pdfFiles = $project->getPdfFiles();
  89.         $filesArray $project->getPdfFilesAsArray();
  90.         // dump($filesArray);
  91.         return $this->renderForm(
  92.             "pdf_counter/select.html.twig",
  93.             [
  94.                 "folderForm" => $form,
  95.                 "filesArray" => $filesArray,
  96.                 "project" => $project
  97.             ]
  98.         );
  99.     }
  100.     /**
  101.      * @Route("/{id}/show", name="show")
  102.      */
  103.     public function show(Project $projectRequest $request): Response
  104.     {
  105.         $this->denyAccessUnlessGranted("view"$project);
  106.         $pdfFiles $project->getPdfFiles();
  107.         // $pdfTree = $project->getPdfFilesAsNestedArray();
  108.         $pdfTree $project->getPdfFilesAsJson();
  109.         // dd($pdfTree);
  110.         if (is_array($pdfTree) && count($pdfTree) == 1) {
  111.             $pdfRoot $pdfTree[0];
  112.             $pdfRoot["total"] = $pdfFiles->count();
  113.         }
  114.         if ($pdfFiles->isEmpty()) {
  115.             return $this->redirectToRoute("pdf_counter_select", ["id" => $project->getId()]);
  116.         }
  117.         // dd($pdfTree);
  118.         return $this->render(
  119.             "pdf_counter/show.html.twig",
  120.             [
  121.                 "pdfRoot" => $pdfRoot,
  122.                 "project" => $project,
  123.                 "helpmeisterUrl" => $_ENV["HELPMEISTER_URL"]
  124.             ]
  125.         );
  126.     }
  127.     /**
  128.      * @Route("/{id}/task-type/{taskType}/task/{taskId}/json", name="json")
  129.      */
  130.     public function getJsonPdfs(Project $projectstring $taskTypeint $taskIdRequest $request): JsonResponse
  131.     {
  132.         $this->denyAccessUnlessGranted("view"$project);
  133.         if ($taskId 0) {
  134.             $task $this->taskRepository->find($taskId);
  135.         }
  136.         switch ($taskType) {
  137.             case 'main':
  138.                 $targetFiles $task->getPdfFiles();
  139.                 break;
  140.             default:
  141.                 $targetFiles null;
  142.                 break;
  143.         }
  144.         $pdfTree $project->getPdfFilesAsJson($targetFiles);
  145.         if (is_array($pdfTree) && count($pdfTree) == 1) {
  146.             $pdfTree $pdfTree[0]["children"];
  147.         }
  148.         return new JsonResponse($pdfTree);
  149.     }
  150.     /**
  151.      * @Route("/{id}/json/ids", name="json_ids")
  152.      */
  153.     public function getJsonPdfIds(Project $projectRequest $request): JsonResponse
  154.     {
  155.         $this->denyAccessUnlessGranted("view"$project);
  156.         $pdfTree $project->getPdfFilesAsJson();
  157.         if (is_array($pdfTree) && count($pdfTree) == 1) {
  158.             $pdfTree $pdfTree[0]["children"];
  159.         }
  160.         return new JsonResponse($pdfTree);
  161.     }
  162.     /**
  163.      * @Route("/{id}/{type}/{taskId}", name="subtask", requirements={"type"="(ocr|ocr-qa|remediation|final-qa)"})
  164.      * @Entity("task", expr="repository.find(taskId)")
  165.      */
  166.     public function subtask(Project $projectTask $taskstring $typeRequest $request): Response
  167.     {
  168.         // dd($type);
  169.         $this->denyAccessUnlessGranted("edit"$task);
  170.         if ($task->isSubtask()) {
  171.             // throw $this->createUnprocessableEntityHttpException();
  172.             throw new HttpException(422"Subtasks are not valid for this action.");
  173.         }
  174.         $pdfFiles $task->getPdfFiles();
  175.         if ($pdfFiles->isEmpty()) {
  176.             // throw $this->createUnprocessableEntityHttpException("This task has no associated pdf files.");
  177.             throw new HttpException(422"This task has no associated pdf files.");
  178.         }
  179.         if ($project !== $pdfFiles[0]->getProject()) {
  180.             // throw $this->createUnprocessableEntityHttpException("This task is not part of this project.");
  181.             throw new HttpException(422"This task is not part of this project.");
  182.         }
  183.         $pdfTree $project->getPdfFilesAsJson($pdfFiles);
  184.         // dd($pdfTree);
  185.         if (is_array($pdfTree) && count($pdfTree) == 1) {
  186.             $pdfRoot $pdfTree[0];
  187.             $pdfRoot["total"] = $pdfFiles->count();
  188.         }
  189.         return $this->render(
  190.             "pdf_counter/$type.html.twig",
  191.             [
  192.                 "pdfRoot" => $pdfRoot,
  193.                 "project" => $project,
  194.                 "task" => $task,
  195.                 "taskType" => $type,
  196.                 "helpmeisterUrl" => $_ENV["HELPMEISTER_URL"]
  197.             ]
  198.         );
  199.     }
  200. }