<?php
namespace App\Controller\Super;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Entity\ReviewBatch;
use App\Util\Exporter\ReviewExporter;
use App\Repository\ReviewRepository;
use App\Form\ReviewBatchType;
/**
*
* @Route("/super/review-batch/", name="super_review_batch_")
* @author "wendell.zheng <wxzheng@ustc.edu.cn>"
*/
class ReviewBatchController extends BaseController
{
/**
*
* @Route("list", name="list")
*/
public function list(): Response
{
return $this->doList();
}
/**
*
* @Route("new", name="new")
*/
public function new(Request $request): Response
{
return $this->doEdit($request, new ReviewBatch());
}
/**
*
* @Route("edit/{id}", name="edit", requirements={
* "id": "\d+"
* })
*/
public function edit(Request $request, ReviewBatch $reviewBatch): Response
{
return $this->doEdit($request, $reviewBatch);
}
/**
*
* @Route("delete/{id}", name="delete", requirements={
* "id": "\d+"
* })
*/
public function delete(ReviewBatch $reviewBatch): Response
{
$items = [
'Reviewers' => '评审专家'
];
foreach ($items as $type => $name) {
$method = "get{$type}";
if (count($reviewBatch->$method())) {
$this->addFlash('notice', "批次下有{$name},需先删除{$name}!");
return $this->redirectToRoute($this->getListRoute());
}
}
return $this->doDelete($reviewBatch);
}
/**
*
* @Route("current/{id}", name="current", requirements={
* "id": "\d+"
* })
*/
public function current(ReviewBatch $reviewBatch): Response
{
$reviewBatchs = $this->repository->findAll();
foreach ($reviewBatchs as $item) {
if ($item->getId() == $reviewBatch->getId()) {
$reviewBatch->setCurrent(true);
} else {
$item->setCurrent(false);
}
}
$this->em->flush();
$this->addFlash('notice', '设置成功');
return $this->redirectToRoute($this->getListRoute());
}
/**
*
* @Route("export/{id}", name="export", requirements={
* "id": "\d+"
* })
*/
public function export(ReviewBatch $reviewBatch, ReviewRepository $rr): Response
{
$reviews = $rr->findBy([
'reviewBatch' => $reviewBatch
], [
'group' => 'ASC',
'sort' => 'ASC'
]);
$exporter = new ReviewExporter($reviews);
return $exporter->download($reviewBatch->getName() . '_评审结果');
}
protected function doEdit(Request $request, $reviewBatch = null): Response
{
$form = $this->createForm(ReviewBatchType::class, $reviewBatch);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->em->persist($reviewBatch);
$this->em->flush();
if ($reviewBatch->getCurrent()) {
$reviewBatchs = $this->repository->findAll();
foreach ($reviewBatchs as $item) {
if ($item->getId() != $reviewBatch->getId()) {
$item->setCurrent(false);
}
}
$this->em->flush();
}
$this->addFlash('notice', '操作成功');
return $this->redirectToRoute($this->getListRoute());
}
$data = [
'name' => $this->getLowerName(),
'title' => $this->getEditTitle($reviewBatch->getId()),
'form' => $form->createView()
];
return $this->render('super/common_edit.html.twig', $data);
}
}