src/Controller/HomeController.php line 90

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Company;
  4. use App\Form\CompanyType;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use ScssPhp\ScssPhp\Compiler;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\HttpFoundation\File\UploadedFile;
  9. use Symfony\Component\HttpFoundation\JsonResponse;
  10. use Symfony\Component\HttpFoundation\RedirectResponse;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\HttpFoundation\Session\Session;
  14. use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
  15. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. use Symfony\Component\Yaml\Yaml;
  18. class HomeController extends AbstractController
  19. {
  20.     /**
  21.      * @Route("/profil/{profil}", name="set_profil")
  22.      */
  23.     public function setProfil($profilSession $session): RedirectResponse
  24.     {
  25.         $session->set('profil'$profil);
  26.         return $this->redirectToRoute("home");
  27.     }
  28.     /**
  29.      * @Route("/upload", name="upload")
  30.      */
  31.     public function upload(Request $request$projectDir): JsonResponse
  32.     {
  33.         $content json_decode($request->getContent(), true);
  34.         $token $content['token'];
  35.         $configFile sprintf("%s/var/tokens/%s.yaml"$projectDir$token);
  36.         if(!file_exists(dirname($configFile))) {
  37.             mkdir(dirname($configFile));
  38.         }
  39.         $config = [];
  40.         if(file_exists($configFile)) {
  41.             $config Yaml::parseFile($configFile);
  42.         }
  43.         $config['time'] = time();
  44.         unset($content['token']);
  45.         $content['time'] = time();
  46.         if(isset($content['reference']) && strlen($content['reference']) > 30) {
  47.             $content['reference'] = substr($content['reference'], 030);
  48.         }
  49.         $alreadyExists false;
  50.         if (array_key_exists('step'$content)) {
  51.             $step $content['step'];
  52.             foreach ($config as $key => $conf) {
  53.                 if (is_array($conf) && array_key_exists('step'$conf) && $conf['step'] == $step) {
  54.                     $config[$key] = $content;
  55.                     $alreadyExists true;
  56.                     break;
  57.                 }
  58.             }
  59.         }
  60.         if ($alreadyExists === false) {
  61.             $config[] = $content;
  62.         }
  63.         $yaml Yaml::dump($config4);
  64.         file_put_contents($configFile$yaml);
  65.         if(!file_exists($configFile)) {
  66.             return $this->json(['result' => 'file not created']);
  67.         }
  68.         return $this->json(['result' => 'ok']);
  69.     }
  70.     /**
  71.      * @Route("/", name="home")
  72.      */
  73.     public function index(iterable $activities): Response
  74.     {
  75.         return $this->render('home/index.html.twig');
  76.     }
  77.     /**
  78.      * @Route("/activity/{token}", name="sub_token")
  79.      */
  80.     public function selectSubToken($tokeniterable $activities): Response
  81.     {
  82.         foreach($activities as $activity) {
  83.             if($activity->getToken() === $token) {
  84.                 if($activity->getSubToken() === false || !is_array($activity->getSubToken())) {
  85.                     return $this->showActivity($tokenfalse$activities);
  86.                 }
  87.                 return $this->render('home/subtoken.html.twig', [
  88.                     'activity' => $activity,
  89.                 ]);
  90.             }
  91.         }
  92.         throw new NotFoundHttpException();
  93.     }
  94.     /**
  95.      * @Route("/activity/{token}/{subtoken}", name="show_activity")
  96.      */
  97.     public function showActivity($token$subtokeniterable $activities): Response
  98.     {
  99.         foreach($activities as $activity) {
  100.             if ($activity->getToken() === $token) {
  101.                 return $this->render($activity->getTemplate($token$subtoken), array_merge([
  102.                     'activity' => $activity
  103.                 ], $activity->getTemplateData($token$subtoken)));
  104.             }
  105.         }
  106.         throw new NotFoundHttpException();
  107.     }
  108.     /**
  109.      * @Route("/ajax/{token}", name="ajax_call_get", methods={"GET"})
  110.      */
  111.     public function ajaxGet($tokeniterable $activitiesRequest $request): JsonResponse
  112.     {
  113.         $response = new JsonResponse();
  114.         $response->setData(['error' => 'activity not found']);
  115.         if(!$request->query->has("command")) {
  116.             throw new BadRequestHttpException();
  117.         }
  118.         if(!$request->query->has("params")) {
  119.             throw new BadRequestHttpException();
  120.         }
  121.         foreach($activities as $activity) {
  122.             if ($activity->getToken() === $token) {
  123.                 $params = [];
  124.                 if(is_array($request->query->get('params') )) {
  125.                     foreach($request->query->get("params") as $param) {
  126.                         $params[] = json_decode($paramtrue);
  127.                     }
  128.                 } else {
  129.                     $params json_decode($request->query->get("params"), true);
  130.                 }
  131.                 $response->setData($activity->handleAjax($request->query->get("command"), $params ));
  132.             }
  133.         }
  134.         return $response;
  135.     }
  136.     /**
  137.      * @Route("/ajax/{token}", name="ajax_call_post", methods={"POST"})
  138.      */
  139.     public function ajaxPost($tokeniterable $activitiesRequest $request): JsonResponse
  140.     {
  141.         $response = new JsonResponse();
  142.         $response->setData(['error' => 'activity not found']);
  143.         $parameters json_decode($request->getContent(), true);
  144.         if(!isset($parameters["command"])) {
  145.             throw new BadRequestHttpException();
  146.         }
  147.         if(!isset($parameters["params"])) {
  148.             throw new BadRequestHttpException();
  149.         }
  150.         foreach($activities as $activity) {
  151.             if ($activity->getToken() === $token) {
  152.                 $response->setData($activity->handleAjax($parameters["command"], $parameters["params"] ));
  153.             }
  154.         }
  155.         return $response;
  156.     }
  157.     /**
  158.      * @Route("/mon-compte", name="account")
  159.      */
  160.     public function account(EntityManagerInterface  $entityManager$projectDirRequest $request): Response
  161.     {
  162.         $company $this->getUser()->getCompany();
  163.         $form $this->createForm(CompanyType::class, $company);
  164.         $form->handleRequest($request);
  165.         $updated false;
  166.         if($form->isSubmitted() && $form->isValid()) {
  167.             $logo $company->getFile();
  168.             if($logo instanceof UploadedFile) {
  169.                 $dest sprintf("%s/public/uploads/%s.%s"$projectDiruniqid(), $logo->getClientOriginalExtension());
  170.                 $logo->move(dirname($dest), basename($dest));
  171.                 $company->setLogo(basename($dest));
  172.             }
  173.             $entityManager->flush();
  174.             $company->setFile(null);
  175.             $updated true;
  176.         }
  177.         return $this->render("home/account.html.twig", ['form' => $form->createView(), 'updated' => $updated]);
  178.     }
  179.     /**
  180.      * @Route("/mon-compte/composants", name="account_components")
  181.      *
  182.      * Company components list
  183.      */
  184.     public function listComponents(EntityManagerInterface $entityManager)
  185.     {
  186.         $company $this->getUser()->getCompany();
  187.         $companyComponents $company->getCompanyComponents();
  188.         /*$companyComponentsToKeep = [];
  189.         foreach ($companyComponents as $companyComponent) {
  190.             $keep = true;
  191.             foreach ($companyComponent->getComponent()->getOptions() as $option) {
  192.                 $keepOption = false;
  193.                 foreach ($option->getModules() as $module) {
  194.                     dump($module->getId());
  195.                     if ($module->getId() == 1 || $module->getId() == 2) {
  196.                         $keepOption = true;
  197.                     }
  198.                 }
  199.                 if (!$keepOption) {
  200.                     $keep = false;
  201.                 }
  202.             }
  203.             if ($keep) {
  204.                 $companyComponentsToKeep[] = $companyComponent;
  205.             }
  206.         }
  207.         return $this->render("home/components.html.twig", ['companyComponents' => $companyComponentsToKeep]);*/
  208.         return $this->render("home/components.html.twig", ['companyComponents' => $companyComponents]);
  209.     }
  210.     /**
  211.      * @Route("/css/custom", name="css")
  212.      */
  213.     public function getCss(Request $requestEntityManagerInterface $entityManager, \App\Helper\Company $helper$projectDir): Response
  214.     {
  215.         $companyId $request->query->get('company');
  216.         $company $entityManager->getRepository(Company::class)->find($companyId);
  217.         if(!$company instanceof Company) {
  218.             $company $helper->getCompany();
  219.         }
  220.         $homeScss sprintf("%s/assets/scss/home.scss"$projectDir);
  221.         $homeContent file_get_contents($homeScss);
  222.         $content "";
  223.         foreach ($company->getColors() as $color) {
  224.             $content .= sprintf("$%s: %s;"$color->getName(), $color->getValue()).PHP_EOL;
  225.         }
  226.         $content .= file_get_contents(sprintf("%s/node_modules/%s"$projectDir"bootstrap/dist/css/bootstrap.css"));
  227.         $content .= $homeContent;
  228.         $compiler = new Compiler();
  229.         $css $compiler->compile($content);
  230.         return new Response($css200, ['Content-type' => 'text/css']);
  231.     }
  232. }