src/Controller/Admin/ProjectController.php line 30

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Admin;
  3. use Symfony\Component\Routing\Annotation\Route;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Vich\UploaderBundle\Handler\DownloadHandler;
  9. use App\Entity\Batch;
  10. use App\Entity\Project;
  11. use App\Form\ProjectCollegeType;
  12. use App\Form\ProjectCollegeSearchType;
  13. use App\Security\ProjectVoter;
  14. use App\Repository\ProjectRepository;
  15. use App\Util\Exporter\Project\ProjectAdminExporter;
  16. /**
  17.  *
  18.  * @Route("/admin/project/", name="admin_project_")
  19.  * @author "wendell.zheng <wxzheng@ustc.edu.cn>"
  20.  */
  21. class ProjectController extends AbstractController
  22. {
  23.     /**
  24.      *
  25.      * @Route("index/{id}", name="index", requirements={"id"="\d+"})
  26.      */
  27.     public function index(Batch $batchRequest $requestProjectRepository $repository): Response
  28.     {
  29.         $form $this->createForm(ProjectCollegeSearchType::class, null, [
  30.             'batch' => $batch
  31.         ]);
  32.         $user $this->getUser();
  33.         $college $user->getAdminCollege();
  34.         $parameters = [
  35.             'batch' => $batch,
  36.             'college' => $college
  37.         ];
  38.         $form->handleRequest($request);
  39.         if ($form->isSubmitted() && $form->isValid()) {
  40.             $parameters += $form->getData();
  41.             if ($form->getClickedButton() === $form->get('export')) {
  42.                 $projects $repository->search($parameters);
  43.                 $exporter = new ProjectAdminExporter($projects);
  44.                 return $exporter->download($college->getName() . '汇总表');
  45.             }
  46.         }
  47.         $twig 'admin/project/' Batch::TYPE_TWIGS[$batch->getType()] . '_index.html.twig';
  48.         return $this->render($twig, [
  49.             'title' => $batch->getName(),
  50.             'batch' => $batch,
  51.             'entities' => $repository->search($parameters),
  52.             'form' => $form->createView()
  53.         ]);
  54.     }
  55.     /**
  56.      *
  57.      * @Route("download/{id}", name="download", requirements={"id"="\d+"})
  58.      */
  59.     public function download(Project $projectDownloadHandler $downloadHandler): Response
  60.     {
  61.         $this->denyAccessUnlessGranted(ProjectVoter::COLLEGE_VIEW$project);
  62.         return $downloadHandler->downloadObject($project'doc'null$project->getDocDownloadName());
  63.     }
  64.     /**
  65.      *
  66.      * @Route("college/download/{id}", name="college_download", requirements={"id"="\d+"})
  67.      */
  68.     public function collegeDownload(Project $projectDownloadHandler $downloadHandler): Response
  69.     {
  70.         $this->denyAccessUnlessGranted(ProjectVoter::COLLEGE_VIEW$project);
  71.         return $downloadHandler->downloadObject($project'collegeDoc'null$project->getCollegeDocDownloadName());
  72.     }
  73.     /**
  74.      *
  75.      * @Route("recommend/{id}", name="recommend")
  76.      */
  77.     public function recommend(Project $projectEntityManagerInterface $emRequest $request): Response
  78.     {
  79.         $this->denyAccessUnlessGranted(ProjectVoter::COLLEGE_ACTION$project);
  80.         $form $this->createForm(ProjectCollegeType::class, $project);
  81.         $form->handleRequest($request);
  82.         if ($form->isSubmitted() && $form->isValid()) {
  83.             $project->setStatus(Project::STATUS_COLLEGE_RECOMMEND);
  84.             $em->flush();
  85.             $this->addFlash('notice''操作成功');
  86.             return $this->redirectToRoute('admin_project_index', [
  87.                 'id' => $project->getBatch()
  88.                     ->getId()
  89.             ]);
  90.         }
  91.         return $this->render('admin/project/edit.html.twig', [
  92.             'title' => '学院推荐',
  93.             'project' => $project,
  94.             'form' => $form->createView()
  95.         ]);
  96.     }
  97.     /**
  98.      *
  99.      * @Route("reject/{id}", name="reject")
  100.      */
  101.     public function reject(Project $projectEntityManagerInterface $em): Response
  102.     {
  103.         $this->denyAccessUnlessGranted(ProjectVoter::COLLEGE_ACTION$project);
  104.         $project->setStatus(Project::STATUS_COLLEGE_REJECT);
  105.         $project->setCollegeSort(0);
  106.         $em->flush();
  107.         $this->addFlash('notice''操作成功');
  108.         return $this->redirectToRoute('admin_project_index', [
  109.             'id' => $project->getBatch()
  110.                 ->getId()
  111.         ]);
  112.     }
  113.     /**
  114.      *
  115.      * @Route("sort/{id}", name="sort")
  116.      */
  117.     public function sort(Project $projectEntityManagerInterface $emRequest $request): Response
  118.     {
  119.         $this->denyAccessUnlessGranted(ProjectVoter::COLLEGE_SORT$project);
  120.         $form $this->createForm(ProjectCollegeType::class, $project);
  121.         $form->handleRequest($request);
  122.         if ($form->isSubmitted() && $form->isValid()) {
  123.             $project->setStatus(Project::STATUS_COLLEGE_RECOMMEND);
  124.             $em->flush();
  125.             $this->addFlash('notice''操作成功');
  126.             return $this->redirectToRoute('admin_project_index', [
  127.                 'id' => $project->getBatch()
  128.                     ->getId()
  129.             ]);
  130.         }
  131.         return $this->render('admin/project/edit.html.twig', [
  132.             'title' => '修改排序',
  133.             'project' => $project,
  134.             'form' => $form->createView()
  135.         ]);
  136.     }
  137. }