src/Controller/BoardController.php line 52
<?phpnamespace App\Controller;use App\Entity\Board;use App\Entity\Score;use App\Form\BoardType;use App\Repository\BoardRepository;use App\Repository\ScoreRepository;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\Routing\Annotation\Route;use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;use Symfony\Component\Validator\Mapping\ClassMetadata;/*** @Route("/board")*/class BoardController extends AbstractController{#[Route('/', name: 'app_board_index')]public function index(BoardRepository $boardRepository): Response{$board = new Board();$this->denyAccessUnlessGranted('BOARD_LIST',$board);return $this->render('board/index.html.twig', ['boards' => $boardRepository->findAll(),]);}#[Route('/new', name: 'app_board_new')]public function new(Request $request, BoardRepository $boardRepository): Response{$board = new Board();//$board->setPublicKey();$form = $this->createForm(BoardType::class, $board);if(!$form->isSubmitted()){$form->get('private_key')->setData($this->generateRandomString(32));}$form->handleRequest($request);if ($form->isSubmitted() && $form->isValid()) {$boardRepository->add($board, true);return $this->redirectToRoute('app_board_show', ['private_key'=>$board->getPrivateKey()], Response::HTTP_SEE_OTHER);}return $this->renderForm('board/new.html.twig', ['board' => $board,'form' => $form,]);}#[Route('/{private_key}/addscore', name: 'app_board_addscore')]public function addscore(Board $board, Request $request, ScoreRepository $scoreRepository, BoardRepository $boardRepository): Response{$score = new Score();$score->setBoard($board);if ($request->get('extraInt')){$score->setExtraInt($request->get('extraInt'));}if ($request->get('extraString')) {$score->setExtraString($request->get('extraString'));}if ($request->get('score') && $request->get('name')) {$score->setName($request->get('name'));$score->setScore($request->get('score'));$scoreRepository->add($score, true);$id = $score->getId();$responseArray = $scoreRepository->getMetadata($score);$responseArray["success"] = true;$response = new Response(json_encode($responseArray));$response->headers->set('Content-Type', 'application/json');$response->headers->set('Access-Control-Allow-Origin', '*');return $response;}$response = new Response(json_encode(array('success' => false)));$response->headers->set('Content-Type', 'application/json');$response->headers->set('Access-Control-Allow-Origin', '*');return $response;}#[Route('/{private_key}', name: 'app_board_show')]public function show(Board $board): Response{return $this->render('board/show.html.twig', ['board' => $board,]);}#[Route('/{private_key}/unityclass', name: 'app_board_unityclass')]public function unityclass(Board $board): Response{$content = $this->render('board/ApiHighscore.cs.twig', ['board' => $board,]);$response=new Response();$response = new Response();$response->headers->set('Content-type', 'application/octet-stream');$response->headers->set('Content-Disposition', 'attachment; filename="ApiHighscore.cs"');$response->setContent($content->getContent());$response->setStatusCode(200);$response->headers->set('Content-Transfer-Encoding', 'binary');$response->headers->set('Pragma', 'no-cache');$response->headers->set('Expires', '0');return $response;}#[Route('/{public_key}/list', name: 'app_board_list')]public function list(Board $board,Request $request, BoardRepository $boardRepository, ScoreRepository $scoreRepository): Response{$scores = $scoreRepository->findBy(array("board"=>$board),array('score' => $board->getSortOrder()));$scoreArray= array();foreach($scores as $score){$scoreArray["scores"][] = array("name" => $score->getName(),"score" => $score->getScore());}$response = new Response(json_encode($scoreArray));$response->headers->set('Content-Type', 'application/json');$response->headers->set('Access-Control-Allow-Origin', '*');return $response;}#[Route('/{public_key}/listFull', name: 'app_board_list_fullapp_board_list')]public function listFull(Board $board,Request $request, BoardRepository $boardRepository, ScoreRepository $scoreRepository): Response{$scores = $scoreRepository->findBy(array("board"=>$board),array('score' => $board->getSortOrder()));$scoreArray= array();foreach($scores as $score){$scoreArray["scores"][] = array("name" => $score->getName(),"id" => $score->getId(),"score" => $score->getScore(),"extraString" => $score->getExtraString(),"extraInt" => $score->getExtraInt());}$response = new Response(json_encode($scoreArray));$response->headers->set('Content-Type', 'application/json');$response->headers->set('Access-Control-Allow-Origin', '*');return $response;}#[Route('/{private_key}/edit', name: 'app_board_edit')]public function edit(Request $request, Board $board, BoardRepository $boardRepository): Response{$form = $this->createForm(BoardType::class, $board);$form->handleRequest($request);if ($form->isSubmitted() && $form->isValid()) {$boardRepository->add($board, true);return $this->redirectToRoute('app_home', [], Response::HTTP_SEE_OTHER);}return $this->renderForm('board/edit.html.twig', ['board' => $board,'form' => $form,]);}#[Route('/{private_key}/delete', name: 'app_board_delete')]public function delete(Request $request, Board $board, BoardRepository $boardRepository): Response{$this->denyAccessUnlessGranted('BOARD_DELETE',$board,);$boardRepository->remove($board, true);return $this->redirectToRoute('app_board_index', [], Response::HTTP_SEE_OTHER);}function generateRandomString($length = 10) {$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';$charactersLength = strlen($characters);$randomString = '';for ($i = 0; $i < $length; $i++) {$randomString .= $characters[rand(0, $charactersLength - 1)];}return $randomString;}public static function loadValidatorMetadata(ClassMetadata $metadata){$metadata->addConstraint(new UniqueEntity(['fields' => ['public_key'],'errorPath' => 'public_key','message' => 'Öffentlicher Schlüssel existiert bereits',]));$metadata->addConstraint(new UniqueEntity(['fields' => ['private_key'],'errorPath' => 'private_key','message' => 'Privater Schlüssel existiert bereits',]));}}