src/Controller/BoardController.php line 33

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Board;
  4. use App\Entity\Score;
  5. use App\Form\BoardType;
  6. use App\Repository\BoardRepository;
  7. use App\Repository\ScoreRepository;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
  13. use Symfony\Component\Validator\Mapping\ClassMetadata;
  14. /**
  15.  * @Route("/board")
  16.  */
  17. class BoardController extends AbstractController
  18. {
  19.     #[Route('/'name'app_board_index')]
  20.     public function index(BoardRepository $boardRepository): Response
  21.     {
  22.         $board = new Board();
  23.         $this->denyAccessUnlessGranted('BOARD_LIST',$board);
  24.         return $this->render('board/index.html.twig', [
  25.             'boards' => $boardRepository->findAll(),
  26.         ]);
  27.     }
  28.     #[Route('/new'name'app_board_new')]
  29.     public function new(Request $requestBoardRepository $boardRepository): Response
  30.     {
  31.         $board = new Board();
  32.         //$board->setPublicKey();
  33.         
  34.         $form $this->createForm(BoardType::class, $board);
  35.         if(!$form->isSubmitted()){
  36.             $form->get('private_key')->setData($this->generateRandomString(32));
  37.         }
  38.         $form->handleRequest($request);
  39.         if ($form->isSubmitted() && $form->isValid()) {
  40.             $boardRepository->add($boardtrue);
  41.             return $this->redirectToRoute('app_board_show', ['private_key'=>$board->getPrivateKey()], Response::HTTP_SEE_OTHER);
  42.         }
  43.         return $this->renderForm('board/new.html.twig', [
  44.             'board' => $board,
  45.             'form' => $form,
  46.         ]);
  47.     }
  48.     
  49.     #[Route('/{private_key}/addscore'name'app_board_addscore')]
  50.     public function addscore(Board $boardRequest $requestScoreRepository $scoreRepositoryBoardRepository $boardRepository): Response
  51.     {
  52.         $score = new Score();
  53.         $score->setBoard($board);
  54.         
  55.         if ($request->get('extraInt')){
  56.             $score->setExtraInt($request->get('extraInt'));
  57.         } 
  58.         if ($request->get('extraString')) {
  59.             $score->setExtraString($request->get('extraString'));
  60.         }
  61.         if ($request->get('score') && $request->get('name')) {
  62.             $score->setName($request->get('name'));
  63.             $score->setScore($request->get('score'));
  64.             $scoreRepository->add($scoretrue);
  65.             $id $score->getId();
  66.             $responseArray $scoreRepository->getMetadata($score);
  67.             $responseArray["success"] = true;
  68.             
  69.             $response = new Response(json_encode($responseArray));
  70.             $response->headers->set('Content-Type''application/json');
  71.             $response->headers->set('Access-Control-Allow-Origin''*');
  72.             return $response;
  73.         }
  74.             
  75.         $response = new Response(json_encode(array('success' => false)));
  76.         $response->headers->set('Content-Type''application/json');
  77.         $response->headers->set('Access-Control-Allow-Origin''*');
  78.         return $response;
  79.     }
  80.     
  81.     #[Route('/{private_key}'name'app_board_show')]
  82.     public function show(Board $board): Response
  83.     {
  84.         return $this->render('board/show.html.twig', [
  85.             'board' => $board,
  86.         ]);
  87.     }
  88.     #[Route('/{private_key}/unityclass'name'app_board_unityclass')]
  89.     public function unityclass(Board $board): Response
  90.     {
  91.         $content $this->render('board/ApiHighscore.cs.twig', [
  92.             'board' => $board,
  93.         ]);
  94.         $response=new Response();
  95.         $response = new Response();
  96.         $response->headers->set('Content-type''application/octet-stream');
  97.         $response->headers->set('Content-Disposition''attachment; filename="ApiHighscore.cs"');
  98.         $response->setContent($content->getContent());
  99.         $response->setStatusCode(200);
  100.         $response->headers->set('Content-Transfer-Encoding''binary');
  101.         $response->headers->set('Pragma''no-cache');
  102.         $response->headers->set('Expires''0');
  103.         return $response;
  104.     }
  105.     #[Route('/{public_key}/list'name'app_board_list')]
  106.     public function list(Board $board,Request $requestBoardRepository $boardRepository,  ScoreRepository $scoreRepository): Response
  107.     {
  108.         $scores $scoreRepository->findBy
  109.         (
  110.             array("board"=>$board),
  111.             array('score' => $board->getSortOrder())
  112.         );
  113.         $scoreArray= array();
  114.         foreach($scores as $score){
  115.             $scoreArray["scores"][] = array(
  116.                 "name" => $score->getName(),
  117.                 "score" => $score->getScore()
  118.             );
  119.         }
  120.         $response = new Response(json_encode($scoreArray));
  121.         $response->headers->set('Content-Type''application/json');
  122.         $response->headers->set('Access-Control-Allow-Origin''*');
  123.         return $response;
  124.     }
  125.     #[Route('/{public_key}/listFull'name'app_board_list_fullapp_board_list')]
  126.     public function listFull(Board $board,Request $requestBoardRepository $boardRepository,  ScoreRepository $scoreRepository): Response
  127.     {
  128.         $scores $scoreRepository->findBy
  129.         (
  130.             array("board"=>$board),
  131.             array('score' => $board->getSortOrder())
  132.         );
  133.         $scoreArray= array();
  134.         foreach($scores as $score){
  135.             $scoreArray["scores"][] = array(
  136.                 "name" => $score->getName(),
  137.                 "id" => $score->getId(),
  138.                 "score" => $score->getScore(),
  139.                 "extraString" => $score->getExtraString(),
  140.                 "extraInt" => $score->getExtraInt()
  141.             );
  142.         }
  143.         $response = new Response(json_encode($scoreArray));
  144.         $response->headers->set('Content-Type''application/json');
  145.         $response->headers->set('Access-Control-Allow-Origin''*');
  146.         return $response;
  147.     }
  148.     #[Route('/{private_key}/edit'name'app_board_edit')]
  149.     public function edit(Request $requestBoard $boardBoardRepository $boardRepository): Response
  150.     {
  151.         $form $this->createForm(BoardType::class, $board);
  152.         $form->handleRequest($request);
  153.         if ($form->isSubmitted() && $form->isValid()) {
  154.             $boardRepository->add($boardtrue);
  155.             return $this->redirectToRoute('app_home', [], Response::HTTP_SEE_OTHER);
  156.         }
  157.         return $this->renderForm('board/edit.html.twig', [
  158.             'board' => $board,
  159.             'form' => $form,
  160.         ]);
  161.     }
  162.     #[Route('/{private_key}/delete'name'app_board_delete')]
  163.     public function delete(Request $requestBoard $boardBoardRepository $boardRepository): Response
  164.     {
  165.         $this->denyAccessUnlessGranted('BOARD_DELETE',$board,);
  166.         
  167.         $boardRepository->remove($boardtrue);
  168.         return $this->redirectToRoute('app_board_index', [], Response::HTTP_SEE_OTHER);
  169.     }
  170.     function generateRandomString($length 10) {
  171.         $characters '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  172.         $charactersLength strlen($characters);
  173.         $randomString '';
  174.         for ($i 0$i $length$i++) {
  175.             $randomString .= $characters[rand(0$charactersLength 1)];
  176.         }
  177.         return $randomString;
  178.     }
  179.     public static function loadValidatorMetadata(ClassMetadata $metadata)
  180.     {
  181.         $metadata->addConstraint(new UniqueEntity([
  182.             'fields' => ['public_key'],
  183.             'errorPath' => 'public_key',
  184.             'message' => 'Öffentlicher Schlüssel existiert bereits',
  185.         ]));
  186.         $metadata->addConstraint(new UniqueEntity([
  187.             'fields' => ['private_key'],
  188.             'errorPath' => 'private_key',
  189.             'message' => 'Privater Schlüssel existiert bereits',
  190.         ]));
  191.     }
  192. }