<?php
namespace App\Controller\Super;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use App\Entity\ReviewBatch;
use App\Entity\Reviewer;
use App\Form\ReviewerType;
use App\Form\UserPasswordType;
/**
*
* @Route("/super/reviewer/", name="super_reviewer_")
* @author "wendell.zheng <wxzheng@ustc.edu.cn>"
*/
class ReviewerController extends BaseController
{
/**
*
* @Route("list/{id}", name="list", requirements={"id"="\d+"})
*/
public function list(ReviewBatch $reviewBatch): Response
{
return $this->render('super/reviewer/list.html.twig', [
'name' => $this->getLowerName(),
'title' => $reviewBatch->getName() . ' - 专家列表',
'reviewBatch' => $reviewBatch,
'entities' => $this->getRepository()
->findByReviewBatch($reviewBatch)
]);
}
/**
*
* @Route("new/{id}", name="new", requirements={"id"="\d+"})
*/
public function new(ReviewBatch $reviewBatch, Request $request, UserPasswordHasherInterface $passwordHasher): Response
{
$reviewer = new Reviewer();
$reviewer->setUsername($reviewBatch->getId() . '_');
$reviewer->setReviewBatch($reviewBatch);
$form = $this->createForm(ReviewerType::class, $reviewer);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$password = $form->get('password')->getData();
return $this->changePassword($reviewer, $password, $passwordHasher);
}
return $this->render('super/reviewer/edit.html.twig', [
'name' => $this->getLowerName(),
'title' => $reviewBatch->getName() . ' - 新建专家',
'reviewBatch' => $reviewBatch,
'form' => $form->createView()
]);
}
/**
*
* @Route("edit/{id}", name="edit", requirements={"id"="\d+"})
*/
public function edit(Reviewer $reviewer, Request $request): Response
{
$reviewBatch = $reviewer->getReviewBatch();
$title = $reviewer->getId() ? '编辑' : '新建';
$form = $this->createForm(ReviewerType::class, $reviewer);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->em->persist($reviewer);
$this->em->flush();
$this->addFlash('reviewer', '操作成功');
return $this->redirectToRoute('super_reviewer_list', [
'id' => $reviewBatch->getId()
]);
}
return $this->render('super/reviewer/edit.html.twig', [
'name' => $this->getLowerName(),
'title' => $reviewBatch->getName() . ' - ' . $title . '专家',
'reviewBatch' => $reviewBatch,
'form' => $form->createView()
]);
}
/**
*
* @Route("delete/{id}", name="delete", requirements={"id"="\d+"})
*/
public function delete(Reviewer $reviewer): Response
{
return $this->doDelete($reviewer, 'super_reviewer_list', [
'id' => $reviewer->getReviewBatch()
->getId()
]);
}
/**
*
* @Route("password/{id}", name="password", requirements={"id"="\d+"})
*/
public function password(Reviewer $reviewer, Request $request, UserPasswordHasherInterface $passwordHasher)
{
$reviewBatch = $reviewer->getReviewBatch();
$form = $this->createForm(UserPasswordType::class, $reviewer);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
return $this->changePassword($reviewer, $form->get('password')
->getData(), $passwordHasher);
}
return $this->render('super/reviewer/edit.html.twig', [
'title' => '修改密码',
'reviewBatch' => $reviewBatch,
'form' => $form->createView()
]);
}
protected function changePassword(Reviewer $reviewer, $plaintextPassword, UserPasswordHasherInterface $passwordHasher): Response
{
$hashedPassword = $passwordHasher->hashPassword($reviewer, $plaintextPassword);
$reviewer->setPassword($hashedPassword);
$this->em->persist($reviewer);
$this->em->flush();
$this->addFlash('reviewer', '操作成功');
return $this->redirectToRoute('super_reviewer_list', [
'id' => $reviewer->getReviewBatch()
->getId()
]);
}
}