src/Controller/BackOffice/AppVersionController.php line 122

Open in your IDE?
  1. <?php
  2. namespace App\Controller\BackOffice;
  3. use App\Entity\Version\AppFirmwareRelation;
  4. use App\Entity\Version\APPVersion;
  5. use App\Entity\Version\FirmwareVersion;
  6. use App\Form\Type\BackOffice\Version\AppVersionType;
  7. use App\Model\PaginatedSearchCriteria;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use Symfony\Component\Form\FormFactoryInterface;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. /**
  15.  * Class AnalysisMethodsController
  16.  * @package App\Controller\BackOffice
  17.  * @Route(path="versions/app")
  18.  */
  19. class AppVersionController extends AbstractController
  20. {
  21.     /**
  22.      * @var EntityManagerInterface
  23.      */
  24.     private $entityManager;
  25.     /**
  26.      * @var FormFactoryInterface
  27.      */
  28.     private $formFactory;
  29.     /**
  30.      * AppVersionController constructor.
  31.      * @param EntityManagerInterface $entityManager
  32.      * @param FormFactoryInterface $formFactory
  33.      */
  34.     public function __construct(EntityManagerInterface $entityManagerFormFactoryInterface $formFactory)
  35.     {
  36.         $this->entityManager $entityManager;
  37.         $this->formFactory $formFactory;
  38.     }
  39.     /**
  40.      * @param Request $request
  41.      * @return Response
  42.      * @Route(methods={"GET"})
  43.      */
  44.     public function indexAction(Request $request): Response
  45.     {
  46.         $searchCriteria = new PaginatedSearchCriteria($request->query);
  47.         $searchCriteria->setPageSize(PaginatedSearchCriteria::BACKOFFICE_PAGINATION_SIZE);
  48.         $appVersions $this->entityManager
  49.             ->getRepository(APPVersion::class)
  50.             ->search($searchCriteria);
  51.         return $this->render('/backOffice/version/app/index.html.twig',[
  52.             'versions' => $appVersions
  53.         ]);
  54.     }
  55.     /**
  56.      * @param Request $request
  57.      * @return Response
  58.      * @Route (path="/new", methods={"GET", "POST"})
  59.      * @noinspection DuplicatedCode
  60.      */
  61.     public function newAction(Request $request): Response
  62.     {
  63.         $appVersion = new APPVersion();
  64.         $firmwareVersions $this->entityManager
  65.             ->getRepository(FirmwareVersion::class)
  66.             ->findAll();
  67.         $versionForm $this->formFactory
  68.             ->create(AppVersionType::class, $appVersion, [
  69.                 'firmware_versions' => $firmwareVersions
  70.             ]);
  71.         $versionForm->handleRequest($request);
  72.         if($versionForm->isSubmitted() && $versionForm->isValid()){
  73.             /** @var APPVersion $appVersion */
  74.             $appVersion $versionForm->getData();
  75.             $data $versionForm->get('firmwareVersions')->getData();
  76.             /** @var FirmwareVersion $version */
  77.             foreach ($firmwareVersions as $index => $version){
  78.                 if($data[$index]){
  79.                     $relation = new AppFirmwareRelation();
  80.                     $relation->setAppVersion($appVersion);
  81.                     $relation->setFirmwareVersion($version);
  82.                     $this->entityManager->persist($relation);
  83.                 }
  84.             }
  85.             $this->entityManager->persist($appVersion);
  86.             $this->entityManager->flush();
  87.             return $this->redirectToRoute('app_backoffice_appversion_index',[
  88.                 'appVersion' => $appVersion->getVersionId()
  89.             ]);
  90.         }
  91.         return $this->render('backOffice/version/app/new.html.twig',[
  92.             "versionForm" => $versionForm->createView()
  93.         ]);
  94.     }
  95.     /**
  96.      * @param Request $request
  97.      * @param $appVersion
  98.      * @return Response
  99.      * @Route (path="/{appVersion}", methods={"GET", "POST"})
  100.      * @noinspection DuplicatedCode
  101.      */
  102.     public function editAction(Request $request$appVersion): Response
  103.     {
  104.         $appVersion $this->entityManager
  105.             ->getRepository(APPVersion::class)
  106.             ->findOneBy(['versionId' => $appVersion]);
  107.         if(!$appVersion){
  108.             throw $this->createNotFoundException();
  109.         }
  110.         $compatible $this->entityManager
  111.             ->getRepository(AppFirmwareRelation::class)
  112.             ->findBy(['appVersion' => $appVersion]);
  113.         $indexed = [];
  114.         /** @var AppFirmwareRelation $v */
  115.         foreach ($compatible as $v){
  116.             $indexed[] = $v->getFirmwareVersion()->getVersionId();
  117.         }
  118.         $firmwareVersions $this->entityManager
  119.             ->getRepository(FirmwareVersion::class)
  120.             ->findAll();
  121.         $versionForm $this->formFactory
  122.             ->create(AppVersionType::class, $appVersion, [
  123.                 'gitHashDisabled' => true,
  124.                 'firmware_versions' => $firmwareVersions,
  125.                 'compatible_firmwares' => $indexed
  126.             ]);
  127.         $versionForm->handleRequest($request);
  128.         if($versionForm->isSubmitted() && $versionForm->isValid()){
  129.             /** @var APPVersion $appVersion */
  130.             $appVersion $versionForm->getData();
  131.             $data $versionForm->get('firmwareVersions')->getData();
  132.             /** @var FirmwareVersion $version */
  133.             foreach ($firmwareVersions as $index => $version){
  134.                 /** @var AppFirmwareRelation[] $relations */
  135.                 $relations $this->entityManager
  136.                     ->getRepository(AppFirmwareRelation::class)
  137.                     ->findBy(['firmwareVersion' => $version'appVersion' => $appVersion]);
  138.                 if($data[$index]){
  139.                     if(empty($relations)) {
  140.                         $relation = new AppFirmwareRelation();
  141.                         $relation->setAppVersion($appVersion);
  142.                         $relation->setFirmwareVersion($version);
  143.                         $this->entityManager->persist($relation);
  144.                     }
  145.                 } else {
  146.                     foreach ($relations as $relation){
  147.                         $this->entityManager->remove($relation);
  148.                     }
  149.                 }
  150.             }
  151.             $this->entityManager->persist($appVersion);
  152.             $this->entityManager->flush();
  153.             return $this->redirectToRoute('app_backoffice_appversion_index');
  154.         }
  155.         return $this->render('backOffice/version/app/edit.html.twig',[
  156.             "versionForm" => $versionForm->createView()
  157.         ]);
  158.     }
  159. }