src/Controller/Backoffice/AdminHomeController.php line 30

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Backoffice;
  3. use App\Repository\UserRepository;
  4. use App\Repository\SportRepository;
  5. use App\Repository\CourseRepository;
  6. use App\Service\EditorUploadStorage;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. use Symfony\Component\HttpFoundation\JsonResponse;
  11. use Symfony\Contracts\Translation\TranslatorInterface;
  12. use Symfony\Component\HttpFoundation\File\UploadedFile;
  13. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  14. class AdminHomeController extends AbstractController
  15. {
  16.     const MAX_FILESIZE 10000000// 10 MB
  17.     private $translator;
  18.     public function __construct(TranslatorInterface $translator)
  19.     {
  20.         $this->translator $translator;
  21.     }
  22.     
  23.     #[Route(path''name'admin_dashboard')]
  24.     public function dashboard(Request $requestUserRepository $userRepositoryCourseRepository $courseRepositorySportRepository $sportRepository): Response
  25.     {
  26.         if (!$this->isGranted('ROLE_ADMIN') && $this->isGranted('ROLE_EDITOR')) {
  27.             return $this->redirectToRoute('admin_blog_published_articles');
  28.             
  29.         }
  30.         
  31.         $trainees $userRepository->getNumber("Trainee");
  32.         $operators $userRepository->getNumber("Operator");
  33.         $clubs $userRepository->getNumber("Club");
  34.         $coachs $userRepository->getNumber("Coach");
  35.         $courses $courseRepository->getNumber();
  36.         $coursesActive $courseRepository->getNumber('active');
  37.         $coursesArchived $courseRepository->getNumber('archived');
  38.         $coursesFinished $courseRepository->getNumber('completed');
  39.         $sports $sportRepository->findAll();
  40.         $arraySports = [];
  41.         $arrayCourses = [];
  42.         $arrayBooking = [];
  43.         foreach ($sports as $sport)
  44.         {
  45.             $arraySports[] = $this->translator->trans("sport_name." $sport->getSlug());
  46.             $coursesData $courseRepository->getCoursesBySport($sport);
  47.             $arrayCourses[] = count($coursesData);
  48.             $booking 0;
  49.             foreach($coursesData as $course)
  50.             {
  51.                 foreach($course->getBookings() as $bookingData)
  52.                 {
  53.                     if($bookingData->getStatus() != "denied")
  54.                     {
  55.                         $booking++;
  56.                     }
  57.                 }
  58.             }
  59.             $arrayBooking[] = $booking;
  60.         }
  61.         $mostCountries $courseRepository->getMostCountries();
  62.         $countries = [];
  63.         foreach($mostCountries as $country)
  64.         {
  65.            $countryCode $country['countryCode'];
  66.            $coursesCount count($courseRepository->findBy(['countryCode' => $countryCode'status' => 'active']));
  67.            
  68.            $country['courses'] = $coursesCount;
  69.            $countries[] = $country;
  70.         }  
  71.         $newTrainees = [];
  72.         $newPros = [];
  73.         for ($i 1$i 13$i++)
  74.         {
  75.             $newTrainees[] = $userRepository->getNewTraineeByMonth(strval($i), date('Y'));
  76.             $newPros[] = $userRepository->getNewProByMonth(strval($i), date('Y'));
  77.         }
  78.         if($request->request->get('editordata')) {
  79.             dd($request->request->all());
  80.         }
  81.         return $this->render('backoffice/dashboard.html.twig', [
  82.             'trainees' => $trainees,
  83.             'operators' => $operators,
  84.             'clubs' => $clubs,
  85.             'coachs' => $coachs,
  86.             'courses' => $courses,
  87.             'coursesActive' => $coursesActive,
  88.             'coursesArchived' => $coursesArchived,
  89.             'coursesFinished' => $coursesFinished,
  90.             'arraySports' => $arraySports,
  91.             'arrayCourses' => $arrayCourses,
  92.             'arrayBooking' => $arrayBooking,
  93.             'countries' => $countries,
  94.             'newTrainees' => $newTrainees,
  95.             'newPros' => $newPros,
  96.             'menu' => 'dashboard'
  97.         ]);
  98.     }
  99.     #[Route(path'/upload-editor-image'name'upload_editor_image')]
  100.     public function uploadEditoImage(Request $requestEditorUploadStorage $editorUploadStorage)
  101.     {
  102.         // @TODO: Set your own domain(s) in `$allowedOrigins`
  103.         $allowedOrigins = ["https://backoffice.localhost""https://racket-trip.com""https://racket-trip.eu"];
  104.         $origin $request->server->get('HTTP_ORIGIN');
  105.         /*
  106.         // same-origin requests won't set an origin. If the origin is set, it must be valid.
  107.         if ($origin && !in_array($origin, $allowedOrigins)) {
  108.             return new Response("You do not have access to this resource.", 403);
  109.         }
  110.         */
  111.         // Don't attempt to process the upload on an OPTIONS request
  112.         if ($request->isMethod("OPTIONS")) {
  113.             return new Response(""200, ["Access-Control-Allow-Methods" => "POST, OPTIONS"]);
  114.         }
  115.         /** @var UploadedFile|null */
  116.         $file $request->files->get("file");
  117.         if (!$file) {
  118.             return new Response("Missing file."400);
  119.         }
  120.         if ($file->getSize() > self::MAX_FILESIZE) {
  121.             return new Response("Your file is too big. Maximum size: ".(self::MAX_FILESIZE 1000000)."MB"400);
  122.         }
  123.         if (!str_starts_with($file->getMimeType(), "image/")) {
  124.             return new Response("Provided file is not an image."400);
  125.         }
  126.         /** 
  127.          * @TODO: Replace this next line with your own file upload/save process. 
  128.          * The $fileUrl variable should contain the publicly accessible URL of
  129.          * the file/image.
  130.          */
  131.         $fileUrl $editorUploadStorage->upload($file);
  132.         return new JsonResponse(
  133.             ["location" => $fileUrl],
  134.             200,
  135.             [
  136.                 "Access-Control-Allow-Origin" => $origin,
  137.                 "Access-Control-Allow-Credentials" => true,
  138.                 "P3P" => 'CP="There is no P3P policy."',
  139.             ],
  140.         );
  141.     }
  142. }