<?php
namespace App\Controller\Super;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Vich\UploaderBundle\Handler\DownloadHandler;
use App\Entity\Batch;
use App\Entity\Project;
use App\Repository\ProjectRepository;
use App\Form\ProjectSuperType;
use App\Form\ProjectSearchType;
use App\Util\Exporter\Project\ProjectSuperExporter;
/**
*
* @Route("/super/project/", name="super_project_")
* @author "wendell.zheng <wxzheng@ustc.edu.cn>"
*/
class ProjectController extends BaseController
{
/**
*
* @Route("list/{id}", name="list", requirements={"id"="\d+"})
*/
public function list(Batch $batch, Request $request, ProjectRepository $repository): Response
{
$form = $this->createForm(ProjectSearchType::class, null, [
'batch' => $batch
]);
$parameters = [
'batch' => $batch
];
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$parameters += $form->getData();
if ($form->getClickedButton() === $form->get('export')) {
$projects = $repository->search($parameters);
$exporter = ProjectSuperExporter::getExporterByBatch($batch, $projects);
return $exporter->download($batch->getName() . '_汇总表');
}
}
$twig = 'super/project/' . Batch::TYPE_TWIGS[$batch->getType()] . '_list.html.twig';
return $this->render($twig, [
'title' => $batch->getName(),
'name' => $this->getLowerName(),
'batch' => $batch,
'entities' => $repository->search($parameters),
'form' => $form->createView()
]);
}
/**
*
* @Route("edit/{id}", name="edit", requirements={"id"="\d+"})
*/
public function edit(Project $project, Request $request): Response
{
$batch = $project->getBatch();
return $this->projectEdit($project, $batch, $request);
}
/**
*
* @Route("download/{id}", name="download", requirements={"id"="\d+"})
*/
public function download(Project $project, DownloadHandler $downloadHandler): Response
{
return $downloadHandler->downloadObject($project, 'doc', null, $project->getDocDownloadName());
}
/**
*
* @Route("college/download/{id}", name="college_download", requirements={"id"="\d+"})
*/
public function collegeDownload(Project $project, DownloadHandler $downloadHandler): Response
{
return $downloadHandler->downloadObject($project, 'collegeDoc', null, $project->getCollegeDocDownloadName());
}
protected function projectEdit(Project $project, Batch $batch, Request $request): Response
{
$title = $project->getId() ? '编辑' : '新建';
$form = $this->createForm(ProjectSuperType::class, $project);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->em->persist($project);
$this->em->flush();
$this->addFlash('project', '操作成功');
return $this->redirectToRoute('super_project_list', [
'id' => $batch->getId()
]);
}
return $this->render('super/project/edit.html.twig', [
'title' => $batch->getName() . ' - ' . $title . '项目',
'project' => $project,
'form' => $form->createView()
]);
}
}