src/Controller/FreeWorld3DController.php line 39

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Doctrine\Persistence\ManagerRegistry;
  4. use Symfony\Component\Routing\Annotation\Route;
  5. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\Form\Extension\Core\Type\TextType;
  9. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  10. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  11. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  12. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  13. use Symfony\Component\Form\Extension\Core\Type\FileType;
  14. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  15. use Symfony\Component\Console\Input\ArrayInput;
  16. use Symfony\Bundle\FrameworkBundle\Console\Application;
  17. use Ivory\CKEditorBundle\Form\Type\CKEditorType;
  18. use Symfony\Component\Finder\Finder;
  19. use App\Entity\User;
  20. use App\Entity\FreeWorld3D;
  21. use Symfony\Contracts\Translation\TranslatorInterface;
  22. class FreeWorld3DController extends DefaultController
  23. {
  24.     protected ManagerRegistry $doctrine;
  25.     protected TranslatorInterface $translator;
  26.     public function __construct(ManagerRegistry $doctrine,
  27.                                 TranslatorInterface $translator)
  28.     {
  29.         $this->doctrine $doctrine;
  30.         $this->translator $translator;
  31.     }
  32.     /**
  33.      * @Route("/user/{userId}/freeWorld3D/{freeWorld3DId}", name="freeWorld3D")
  34.      */
  35.     public function freeWorld3DAction(Request $request$userId$freeWorld3DId)
  36.     {
  37.     
  38.         /* we load session data */
  39.         parent::init($request);
  40.         $session $request->getSession();
  41.         //$logger = $this->getLogger(null, 'freeWorld 3D: '.$freeWorld3DId);
  42.         //print('<br>QQW user ID: '.$userId);
  43.         //\Doctrine\Common\Util\Debug::dump($category);
  44.         /* we load entity managers */
  45.         $em $this->doctrine->getManager();
  46.         $dem $this->doctrine->getManager('dynamic_em');
  47.         
  48.         /* we get current user */
  49.         $user $em->getRepository(User::class)->getUser($userId);
  50.         /* we get current 3D FreeWorld */
  51.         $freeWorld3D $dem->getRepository(FreeWorld3D::class)->getFreeWorld3D($freeWorld3DId);
  52.         /* we check if 3D gallery exists 
  53.         if($freeWorld3D === null) {
  54.             $this->addFlash('error', '3D FreeWorld with this ID does not exists.');
  55.             return $this->redirectToRoute('freeWorld3D', array('userId' => $userId, 'freeWorld3DId' => $freeWorld3DId));
  56.         }        
  57.         */
  58.         
  59.         //print('<br>QQW freeWorld ID: '.$freeWorld3DId);
  60.         //print('<br>QQW freeWorld: ');
  61.         //\Doctrine\Common\Util\Debug::dump($freeWorld3D);
  62.        
  63.         $userDirs $this->getUserFolderPathsFromUserId($user->getUserId());
  64.           /* we render virtual reality data */
  65.           $response $this->render('freeworld3D/freeworld3D.html.twig',
  66.             array(  'headerData' => $this -> getPageHeader($request),
  67.                             'freeWorld3D' => $freeWorld3D,
  68.                             'user' => $user,
  69.                             'userDirs' => $userDirs,
  70.                             //'logger' => $logger
  71.                 )
  72.             ); 
  73.         //$response->headers->set('Content-Type', 'model/vrml');
  74.         return $response;      
  75.          
  76.     }   
  77.     /**
  78.      * @Route("/freeWorld3DAdmin", name="freeWorld3DAdmin")
  79.      */
  80.     public function freeWorld3DAdminAction(Request $request)
  81.     {
  82.         /* we load session data */
  83.         parent::init($request);
  84.         $session $request->getSession();
  85.         
  86.         /* we load entity managers */
  87.         $em $this->doctrine->getManager();
  88.         $dem $this->doctrine->getManager('dynamic_em');
  89.     
  90.         $currentUserId $session->get('user')->getUserId();
  91.         
  92.         $freeWorldList $dem->getRepository(FreeWorld3D::class)->getFreeWorld3DListByUser($currentUserId);
  93.         $user $em->getRepository(User::class)->getUser($currentUserId);
  94.     
  95.         /* we render data */
  96.         return $this->render('freeWorld3D.html.twig',
  97.                 array('headerData' => $this -> getPageHeader($request),
  98.                 'menu' => $this -> adminMenu($request),
  99.                         'mainMenu' => $this -> adminMainMenu($request),
  100.                 'freeWorldList' => $freeWorldList,
  101.                 'user' => $user,
  102.                 )
  103.                 );
  104.     
  105.     } 
  106.     
  107.     /**
  108.      * @Route("/freeWorld3DNew", name="freeWorld3DNew")
  109.      */
  110.     public function freeWorld3DNewAction(Request $request)
  111.     {
  112.     
  113.         /* we load session data */
  114.         parent::init($request);
  115.         $session $request->getSession();
  116.     
  117.         /* we load entity managers */
  118.         $em $this->doctrine->getManager();
  119.         $dem $this->doctrine->getManager('dynamic_em');
  120.          
  121.         $currentUserId $session->get('user')->getUserId();
  122.         $user $em->getRepository(User::class)->getUser($currentUserId);
  123.         $freeWorld = new FreeWorld3D;
  124.         /* we build form */
  125.         $formBuilder $this->createFormBuilder($freeWorld);
  126.          
  127.         $formBuilder->add('freeWorld3DName'TextType::class, array(
  128.                 'required' => true,
  129.                 'label' => $this->translator->trans('module.FreeWorld3D_name'),
  130.                 'attr' => array('class' => 'text_form''size' => 22),
  131.                 'label_attr' => array('class' => 'form_field_label'),
  132.         ));
  133.          
  134.         $formBuilder->add('save'SubmitType::class, array('label' => $this->translator->trans('form.button.save'),
  135.                 'attr' => array('class' => 'butt_big')));
  136.          
  137.         $form $formBuilder->getForm();
  138.         $form->handleRequest($request);
  139.          
  140.         if ($request->getMethod() == 'POST') {
  141.     
  142.             if ($form->isValid()) {
  143.                 $formData $form->getData();
  144.                  
  145.                 /* we load users entity manager */
  146.                 $dem $this->doctrine->getManager('dynamic_em');
  147.                  
  148.                 //$userName = $request->request->get('form')['username'];
  149.                 //$userExist = $em->getRepository(User::class)->getUserFromLogin($userName, $request->request->get('form')['password']);
  150.                  
  151.                 $freeWorld = new FreeWorld3D;
  152.                 $freeWorld->setFreeWorld3DName($formData->getFreeWorld3DName());
  153.                 $freeWorld->setUserId($currentUserId);
  154.                 /* we persist and save */
  155.                 $dem->persist($freeWorld);
  156.                 $dem->flush();
  157.                  
  158.                 $this->addFlash('notice''New FreeWorld 3D was created.');
  159.                  
  160.                 return $this->redirectToRoute('freeWorld3DAdmin');
  161.                  
  162.             }
  163.              
  164.         }
  165.     
  166.         /* we render data */
  167.         return $this->render('freeWorld3DNew.html.twig',
  168.                 array(  'form' => $formBuilder->getForm()->createView(),
  169.                         'headerData' => $this -> getPageHeader($request),
  170.                         'menu' => $this -> adminMenu($request),
  171.                         'mainMenu' => $this -> adminMainMenu($request),
  172.                         'user' => $user,
  173.                 )
  174.                 );
  175.     
  176.     }    
  177.     
  178.     /**
  179.      * @Route("/freeWorld3DEdit/{freeWorld3DId}", name="freeWorld3DEdit")
  180.      */
  181.     public function freeWorld3DEditAction(Request $request$freeWorld3DId)
  182.     {
  183.     
  184.         /* we load session data */
  185.         parent::init($request);
  186.         $session $request->getSession();
  187.         
  188.         // we check if any user is logged in
  189.         if(!$this->isLoggedUser($request)) {
  190.             return $this->redirectToRoute('login');
  191.         }         
  192.     
  193.         /* we load entity managers */
  194.         $em $this->doctrine->getManager();
  195.         $dem $this->doctrine->getManager('dynamic_em');
  196.          
  197.         $userId $session->get('user')->getUserId();      
  198.         $user $em->getRepository(User::class)->getUser($userId);
  199.         
  200.         /* we get current freeWorld3D */
  201.         $freeWorld $dem->getRepository(FreeWorld3D::class)->getFreeWorld3D($freeWorld3DId);
  202.         
  203.         if(!empty($request->query->get('saveXml'))) {  
  204.             //print('<br>qqw saving xml');
  205.             $this->saveListXML($request$freeWorld->getFreeWorld3DId());
  206.             $this->addFlash('notice''Free World was exported to XML.');
  207.             $freeWorld $dem->getRepository(FreeWorld3D::class)->getFreeWorld3D($freeWorld3DId);
  208.         }  
  209.         //print('<br>qqw count web: '.$freeWorld->getXmlFile());
  210.         /* we build edit form */
  211.         $formBuilder $this->createFormBuilder($freeWorld);
  212.         
  213.         $userDirs $this->getUserFolderPaths($request);
  214.         $formBuilder->add('save3'SubmitType::class, array('label' => $this->translator->trans('form.button.save'),
  215.             'attr' => array('class' => 'butt_big')));
  216.         $formBuilder->add('freeWorld3DName'TextType::class, array(
  217.                 'required' => true,
  218.                 'label' => $this->translator->trans('module.FreeWorld3D_name'),
  219.                 'attr' => array('class' => 'text_form''size' => 50'value' => $freeWorld->getFreeWorld3DName()),
  220.                 'label_attr' => array('class' => 'form_field_label')
  221.         ));
  222.         $formBuilder->add('freeWorld3DDescription'TextareaType::class, array(
  223.                 'required' => false,
  224.                 'label' => $this->translator->trans('system.description'),
  225.                 'attr' => array('class' => 'textarea_form_small''cols' => 101'rows' => 2'value' => $freeWorld->getFreeWorld3DDescription()),
  226.                 'label_attr' => array('class' => 'form_textarea_label2'),
  227.                 'data' => $freeWorld->getFreeWorld3DDescription(),
  228.         ));   
  229.         $formBuilder->add('freeWorld3DContent'TextareaType::class, array(
  230.                 'required' => false,
  231.                 'label' => $this->translator->trans('system.content'),
  232.                 'attr' => array('class' => 'textarea_code''cols' => 101'rows' => 22'value' => $freeWorld->getFreeWorld3DContent()),
  233.                 'label_attr' => array('class' => 'form_textarea_label2'),
  234.                 'data' => $freeWorld->getFreeWorld3DContent(),
  235.         ));  
  236.         
  237.         $formBuilder->add('preferredPosition'TextType::class, array(
  238.                 'required' => false,
  239.                 'label' => $this->translator->trans('module.FreeWorld3D_position'),
  240.                 'attr' => array('class' => 'text_form''size' => 50'value' => $freeWorld->getPreferredPosition()),
  241.                 'label_attr' => array('class' => 'form_field_label')
  242.         ));      
  243.         
  244.         $formBuilder->add('preferredRotation'TextType::class, array(
  245.                 'required' => false,
  246.                 'label' => $this->translator->trans('module.FreeWorld3D_rotation'),
  247.                 'attr' => array('class' => 'text_form''size' => 50'value' => $freeWorld->getPreferredRotation()),
  248.                 'label_attr' => array('class' => 'form_field_label')
  249.         ));      
  250.         $formBuilder->add('preferredScale'TextType::class, array(
  251.                 'required' => false,
  252.                 'label' => $this->translator->trans('module.FreeWorld3D_scale'),
  253.                 'attr' => array('class' => 'text_form''size' => 50'value' => $freeWorld->getPreferredScale()),
  254.                 'label_attr' => array('class' => 'form_field_label')
  255.         ));                       
  256.         $formBuilder->add('save'SubmitType::class, array('label' => $this->translator->trans('form.button.save'),
  257.                 'attr' => array('class' => 'butt_big')));       
  258.         
  259.         $form $formBuilder->getForm();
  260.         $form->handleRequest($request);
  261.          
  262.         if ($request->getMethod() == 'POST') {
  263.     
  264.             //$form->bindRequest($request);
  265.     
  266.             if ($form->isValid()) {
  267.                 $formData $form->getData();
  268.                 // save the object to the database
  269.                 $freeWorld->setFreeWorld3DName($formData->getFreeWorld3DName());
  270.                 $freeWorld->setFreeWorld3DDescription($formData->getFreeWorld3DDescription());
  271.                 $freeWorld->setFreeWorld3DContent($formData->getFreeWorld3DContent());
  272.                 
  273.                 /* we set preferredPosition */
  274.                     if(!empty($formData->getPreferredPosition())) {
  275.                         $freeWorld->setPreferredPosition($formData->getPreferredPosition());
  276.                     }
  277.                 /* we set preferredRotation */
  278.                     if(!empty($formData->getPreferredRotation())) {
  279.                         $freeWorld->setPreferredRotation($formData->getPreferredRotation());
  280.                     }     
  281.                 /* we set preferredScale */
  282.                     if(!empty($formData->getPreferredScale())) {
  283.                         $freeWorld->setPreferredScale($formData->getPreferredScale());
  284.                     }                                                     
  285.                 /* we persist and save */
  286.                 $dem->persist($freeWorld);
  287.                 $dem->flush();
  288.     
  289.                 $this->addFlash('notice''FreeWorld 3D was updated.');
  290.     
  291.                 return $this->redirectToRoute('freeWorld3DEdit', array('freeWorld3DId' => $freeWorld->getFreeWorld3DId()));
  292.                  
  293.             }
  294.     
  295.         }
  296.         /* we render data */
  297.         return $this->render('freeWorld3DEdit.html.twig',
  298.                 array('headerData' => $this -> getPageHeader($request),
  299.                         'freeWorld' => $freeWorld,
  300.                         'form' => $formBuilder->getForm()->createView(),
  301.                         'userDirs' => $userDirs,
  302.                         'menu' => $this -> adminMenu($request),
  303.                         'mainMenu' => $this -> adminMainMenu($request),
  304.                         'user' => $user
  305.                 )
  306.                 );
  307.     
  308.     }    
  309.     
  310.     public function saveListXML(Request $request$freeWorldId)
  311.     { 
  312.         /* we load session data */
  313.         parent::init($request);
  314.         $session $request->getSession();
  315.     
  316.         /* we load users entity manager */
  317.         $dem $this->doctrine->getManager('dynamic_em');
  318.     
  319.         $userId $session->get('user')->getUserId();
  320.         $userDirs $this->getUserFolderPathsFromUserId($userId);
  321.         //print('<br>user id: '.$userId);
  322.         //die('<br>qqw 22 user id: ');          
  323.     
  324.         $freeWorld $dem->getRepository(FreeWorld3D::class)->getFreeWorld3D($freeWorldId);
  325.         if(!$this->isUserFolder($request)) {
  326.             $this->createUserFolder($request);
  327.         }
  328.         
  329.         if(!$this->isUserCustomFolder($request'freeworld')) {
  330.             $this->createUserCustomFolder($request'freeworld');
  331.         }        
  332.         /* we get file name and paths */
  333.         $xsdFile $this->getNormalisedText($freeWorld->getFreeWorld3DName());
  334.         $userDirs $this->getUserFolderPaths($request);
  335.         $freeWorldFile $userDirs['user'].'/freeworld/'.$xsdFile.".x3d";
  336.         $freeWorldFileUrl '/users/'.$session->get('user')->getUserName().'/freeworld/'.$xsdFile.".x3d";
  337.         /*
  338.         if(!empty($freeWorld->getXmlFile())) {
  339.             $freeWorldFile = $freeWorld->getXmlFile();
  340.         } else 
  341.             
  342.             $freeWorldFile = $userDirs['user'].'/freeworld/'.$xsdFile.".x3d";
  343.         }
  344.         */
  345.         
  346.         /* we open the freeWorld file and get the content */
  347.         //$freeWorldFile = "freeWorld/".$freeWorld->getFreeWorld3DContent();
  348.         
  349.         /* we create empty freeWorld file if it does not exists yet */
  350.         if(!is_file($freeWorldFile)) {
  351.             $fh fopen($freeWorldFile'w');
  352.         }
  353.         
  354.         if (!$handle fopen($freeWorldFile'r')) {
  355.             echo "Cannot open file ($freeWorldFile)";
  356.             exit;
  357.         }
  358.          
  359.         $fileContents fread($handlefilesize($freeWorldFile)+1);
  360.         fclose($handle);        
  361.         // print('<br>QQW xml: '.$freeWorldFileUrl);
  362.         // \Doctrine\Common\Util\Debug::dump($userDirs);
  363.         //write to freeWorld file
  364.         //$freeWorldFile = "/freeworld/"."freeworld_".$freeWorldId.".xml";
  365.     $freeWorldContent $freeWorld->getFreeWorld3DContent();
  366.     
  367.     if (!$handle fopen($freeWorldFile'w')) {
  368.         $this->addFlash('Error''Cannot open file.');
  369.     }
  370.     
  371.     if (fwrite($handle$freeWorldContent) === FALSE) {
  372.         $this->addFlash('Error''Cannot write to file.');
  373.     }
  374.     fclose($handle);    
  375.     //print('<br>QQW freeWorldFile: '.$freeWorldFile);
  376.     
  377.     
  378.     $freeWorld->setXmlFile($freeWorldFileUrl);
  379.         $dem->persist($freeWorld);
  380.         $dem->flush();            
  381.     
  382.     }              
  383.     
  384.     public function adminMenu(Request $request)
  385.     {
  386.         $menuItems = array(=> array('link' => 'services3dAdmin''langKey' => 'service.services3d''routeName' => 'services3dAdmin'),
  387.                 => array('link' => 'freeWorld3DAdmin''langKey' => 'module.freeWorld3DAdmin''routeName' => 'freeWorld3DAdmin'),
  388.                 => array('link' => 'freeWorld3DNew''langKey' => 'module.freeWorld3D_new''routeName' => 'freeWorld3DNew'),
  389.         );
  390.     
  391.         return $menuItems;
  392.     
  393.     }    
  394.     
  395. }