<?php
namespace App\Controller;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Bundle\FrameworkBundle\Console\Application;
use Ivory\CKEditorBundle\Form\Type\CKEditorType;
use Symfony\Component\Finder\Finder;
use App\Entity\User;
use App\Entity\FreeWorld3D;
use Symfony\Contracts\Translation\TranslatorInterface;
class FreeWorld3DController extends DefaultController
{
protected ManagerRegistry $doctrine;
protected TranslatorInterface $translator;
public function __construct(ManagerRegistry $doctrine,
TranslatorInterface $translator)
{
$this->doctrine = $doctrine;
$this->translator = $translator;
}
/**
* @Route("/user/{userId}/freeWorld3D/{freeWorld3DId}", name="freeWorld3D")
*/
public function freeWorld3DAction(Request $request, $userId, $freeWorld3DId)
{
/* we load session data */
parent::init($request);
$session = $request->getSession();
//$logger = $this->getLogger(null, 'freeWorld 3D: '.$freeWorld3DId);
//print('<br>QQW user ID: '.$userId);
//\Doctrine\Common\Util\Debug::dump($category);
/* we load entity managers */
$em = $this->doctrine->getManager();
$dem = $this->doctrine->getManager('dynamic_em');
/* we get current user */
$user = $em->getRepository(User::class)->getUser($userId);
/* we get current 3D FreeWorld */
$freeWorld3D = $dem->getRepository(FreeWorld3D::class)->getFreeWorld3D($freeWorld3DId);
/* we check if 3D gallery exists
if($freeWorld3D === null) {
$this->addFlash('error', '3D FreeWorld with this ID does not exists.');
return $this->redirectToRoute('freeWorld3D', array('userId' => $userId, 'freeWorld3DId' => $freeWorld3DId));
}
*/
//print('<br>QQW freeWorld ID: '.$freeWorld3DId);
//print('<br>QQW freeWorld: ');
//\Doctrine\Common\Util\Debug::dump($freeWorld3D);
$userDirs = $this->getUserFolderPathsFromUserId($user->getUserId());
/* we render virtual reality data */
$response = $this->render('freeworld3D/freeworld3D.html.twig',
array( 'headerData' => $this -> getPageHeader($request),
'freeWorld3D' => $freeWorld3D,
'user' => $user,
'userDirs' => $userDirs,
//'logger' => $logger
)
);
//$response->headers->set('Content-Type', 'model/vrml');
return $response;
}
/**
* @Route("/freeWorld3DAdmin", name="freeWorld3DAdmin")
*/
public function freeWorld3DAdminAction(Request $request)
{
/* we load session data */
parent::init($request);
$session = $request->getSession();
/* we load entity managers */
$em = $this->doctrine->getManager();
$dem = $this->doctrine->getManager('dynamic_em');
$currentUserId = $session->get('user')->getUserId();
$freeWorldList = $dem->getRepository(FreeWorld3D::class)->getFreeWorld3DListByUser($currentUserId);
$user = $em->getRepository(User::class)->getUser($currentUserId);
/* we render data */
return $this->render('freeWorld3D.html.twig',
array('headerData' => $this -> getPageHeader($request),
'menu' => $this -> adminMenu($request),
'mainMenu' => $this -> adminMainMenu($request),
'freeWorldList' => $freeWorldList,
'user' => $user,
)
);
}
/**
* @Route("/freeWorld3DNew", name="freeWorld3DNew")
*/
public function freeWorld3DNewAction(Request $request)
{
/* we load session data */
parent::init($request);
$session = $request->getSession();
/* we load entity managers */
$em = $this->doctrine->getManager();
$dem = $this->doctrine->getManager('dynamic_em');
$currentUserId = $session->get('user')->getUserId();
$user = $em->getRepository(User::class)->getUser($currentUserId);
$freeWorld = new FreeWorld3D;
/* we build form */
$formBuilder = $this->createFormBuilder($freeWorld);
$formBuilder->add('freeWorld3DName', TextType::class, array(
'required' => true,
'label' => $this->translator->trans('module.FreeWorld3D_name'),
'attr' => array('class' => 'text_form', 'size' => 22),
'label_attr' => array('class' => 'form_field_label'),
));
$formBuilder->add('save', SubmitType::class, array('label' => $this->translator->trans('form.button.save'),
'attr' => array('class' => 'butt_big')));
$form = $formBuilder->getForm();
$form->handleRequest($request);
if ($request->getMethod() == 'POST') {
if ($form->isValid()) {
$formData = $form->getData();
/* we load users entity manager */
$dem = $this->doctrine->getManager('dynamic_em');
//$userName = $request->request->get('form')['username'];
//$userExist = $em->getRepository(User::class)->getUserFromLogin($userName, $request->request->get('form')['password']);
$freeWorld = new FreeWorld3D;
$freeWorld->setFreeWorld3DName($formData->getFreeWorld3DName());
$freeWorld->setUserId($currentUserId);
/* we persist and save */
$dem->persist($freeWorld);
$dem->flush();
$this->addFlash('notice', 'New FreeWorld 3D was created.');
return $this->redirectToRoute('freeWorld3DAdmin');
}
}
/* we render data */
return $this->render('freeWorld3DNew.html.twig',
array( 'form' => $formBuilder->getForm()->createView(),
'headerData' => $this -> getPageHeader($request),
'menu' => $this -> adminMenu($request),
'mainMenu' => $this -> adminMainMenu($request),
'user' => $user,
)
);
}
/**
* @Route("/freeWorld3DEdit/{freeWorld3DId}", name="freeWorld3DEdit")
*/
public function freeWorld3DEditAction(Request $request, $freeWorld3DId)
{
/* we load session data */
parent::init($request);
$session = $request->getSession();
// we check if any user is logged in
if(!$this->isLoggedUser($request)) {
return $this->redirectToRoute('login');
}
/* we load entity managers */
$em = $this->doctrine->getManager();
$dem = $this->doctrine->getManager('dynamic_em');
$userId = $session->get('user')->getUserId();
$user = $em->getRepository(User::class)->getUser($userId);
/* we get current freeWorld3D */
$freeWorld = $dem->getRepository(FreeWorld3D::class)->getFreeWorld3D($freeWorld3DId);
if(!empty($request->query->get('saveXml'))) {
//print('<br>qqw saving xml');
$this->saveListXML($request, $freeWorld->getFreeWorld3DId());
$this->addFlash('notice', 'Free World was exported to XML.');
$freeWorld = $dem->getRepository(FreeWorld3D::class)->getFreeWorld3D($freeWorld3DId);
}
//print('<br>qqw count web: '.$freeWorld->getXmlFile());
/* we build edit form */
$formBuilder = $this->createFormBuilder($freeWorld);
$userDirs = $this->getUserFolderPaths($request);
$formBuilder->add('save3', SubmitType::class, array('label' => $this->translator->trans('form.button.save'),
'attr' => array('class' => 'butt_big')));
$formBuilder->add('freeWorld3DName', TextType::class, array(
'required' => true,
'label' => $this->translator->trans('module.FreeWorld3D_name'),
'attr' => array('class' => 'text_form', 'size' => 50, 'value' => $freeWorld->getFreeWorld3DName()),
'label_attr' => array('class' => 'form_field_label')
));
$formBuilder->add('freeWorld3DDescription', TextareaType::class, array(
'required' => false,
'label' => $this->translator->trans('system.description'),
'attr' => array('class' => 'textarea_form_small', 'cols' => 101, 'rows' => 2, 'value' => $freeWorld->getFreeWorld3DDescription()),
'label_attr' => array('class' => 'form_textarea_label2'),
'data' => $freeWorld->getFreeWorld3DDescription(),
));
$formBuilder->add('freeWorld3DContent', TextareaType::class, array(
'required' => false,
'label' => $this->translator->trans('system.content'),
'attr' => array('class' => 'textarea_code', 'cols' => 101, 'rows' => 22, 'value' => $freeWorld->getFreeWorld3DContent()),
'label_attr' => array('class' => 'form_textarea_label2'),
'data' => $freeWorld->getFreeWorld3DContent(),
));
$formBuilder->add('preferredPosition', TextType::class, array(
'required' => false,
'label' => $this->translator->trans('module.FreeWorld3D_position'),
'attr' => array('class' => 'text_form', 'size' => 50, 'value' => $freeWorld->getPreferredPosition()),
'label_attr' => array('class' => 'form_field_label')
));
$formBuilder->add('preferredRotation', TextType::class, array(
'required' => false,
'label' => $this->translator->trans('module.FreeWorld3D_rotation'),
'attr' => array('class' => 'text_form', 'size' => 50, 'value' => $freeWorld->getPreferredRotation()),
'label_attr' => array('class' => 'form_field_label')
));
$formBuilder->add('preferredScale', TextType::class, array(
'required' => false,
'label' => $this->translator->trans('module.FreeWorld3D_scale'),
'attr' => array('class' => 'text_form', 'size' => 50, 'value' => $freeWorld->getPreferredScale()),
'label_attr' => array('class' => 'form_field_label')
));
$formBuilder->add('save', SubmitType::class, array('label' => $this->translator->trans('form.button.save'),
'attr' => array('class' => 'butt_big')));
$form = $formBuilder->getForm();
$form->handleRequest($request);
if ($request->getMethod() == 'POST') {
//$form->bindRequest($request);
if ($form->isValid()) {
$formData = $form->getData();
// save the object to the database
$freeWorld->setFreeWorld3DName($formData->getFreeWorld3DName());
$freeWorld->setFreeWorld3DDescription($formData->getFreeWorld3DDescription());
$freeWorld->setFreeWorld3DContent($formData->getFreeWorld3DContent());
/* we set preferredPosition */
if(!empty($formData->getPreferredPosition())) {
$freeWorld->setPreferredPosition($formData->getPreferredPosition());
}
/* we set preferredRotation */
if(!empty($formData->getPreferredRotation())) {
$freeWorld->setPreferredRotation($formData->getPreferredRotation());
}
/* we set preferredScale */
if(!empty($formData->getPreferredScale())) {
$freeWorld->setPreferredScale($formData->getPreferredScale());
}
/* we persist and save */
$dem->persist($freeWorld);
$dem->flush();
$this->addFlash('notice', 'FreeWorld 3D was updated.');
return $this->redirectToRoute('freeWorld3DEdit', array('freeWorld3DId' => $freeWorld->getFreeWorld3DId()));
}
}
/* we render data */
return $this->render('freeWorld3DEdit.html.twig',
array('headerData' => $this -> getPageHeader($request),
'freeWorld' => $freeWorld,
'form' => $formBuilder->getForm()->createView(),
'userDirs' => $userDirs,
'menu' => $this -> adminMenu($request),
'mainMenu' => $this -> adminMainMenu($request),
'user' => $user
)
);
}
public function saveListXML(Request $request, $freeWorldId)
{
/* we load session data */
parent::init($request);
$session = $request->getSession();
/* we load users entity manager */
$dem = $this->doctrine->getManager('dynamic_em');
$userId = $session->get('user')->getUserId();
$userDirs = $this->getUserFolderPathsFromUserId($userId);
//print('<br>user id: '.$userId);
//die('<br>qqw 22 user id: ');
$freeWorld = $dem->getRepository(FreeWorld3D::class)->getFreeWorld3D($freeWorldId);
if(!$this->isUserFolder($request)) {
$this->createUserFolder($request);
}
if(!$this->isUserCustomFolder($request, 'freeworld')) {
$this->createUserCustomFolder($request, 'freeworld');
}
/* we get file name and paths */
$xsdFile = $this->getNormalisedText($freeWorld->getFreeWorld3DName());
$userDirs = $this->getUserFolderPaths($request);
$freeWorldFile = $userDirs['user'].'/freeworld/'.$xsdFile.".x3d";
$freeWorldFileUrl = '/users/'.$session->get('user')->getUserName().'/freeworld/'.$xsdFile.".x3d";
/*
if(!empty($freeWorld->getXmlFile())) {
$freeWorldFile = $freeWorld->getXmlFile();
} else
$freeWorldFile = $userDirs['user'].'/freeworld/'.$xsdFile.".x3d";
}
*/
/* we open the freeWorld file and get the content */
//$freeWorldFile = "freeWorld/".$freeWorld->getFreeWorld3DContent();
/* we create empty freeWorld file if it does not exists yet */
if(!is_file($freeWorldFile)) {
$fh = fopen($freeWorldFile, 'w');
}
if (!$handle = fopen($freeWorldFile, 'r')) {
echo "Cannot open file ($freeWorldFile)";
exit;
}
$fileContents = fread($handle, filesize($freeWorldFile)+1);
fclose($handle);
// print('<br>QQW xml: '.$freeWorldFileUrl);
// \Doctrine\Common\Util\Debug::dump($userDirs);
//write to freeWorld file
//$freeWorldFile = "/freeworld/"."freeworld_".$freeWorldId.".xml";
$freeWorldContent = $freeWorld->getFreeWorld3DContent();
if (!$handle = fopen($freeWorldFile, 'w')) {
$this->addFlash('Error', 'Cannot open file.');
}
if (fwrite($handle, $freeWorldContent) === FALSE) {
$this->addFlash('Error', 'Cannot write to file.');
}
fclose($handle);
//print('<br>QQW freeWorldFile: '.$freeWorldFile);
$freeWorld->setXmlFile($freeWorldFileUrl);
$dem->persist($freeWorld);
$dem->flush();
}
public function adminMenu(Request $request)
{
$menuItems = array(0 => array('link' => 'services3dAdmin', 'langKey' => 'service.services3d', 'routeName' => 'services3dAdmin'),
1 => array('link' => 'freeWorld3DAdmin', 'langKey' => 'module.freeWorld3DAdmin', 'routeName' => 'freeWorld3DAdmin'),
2 => array('link' => 'freeWorld3DNew', 'langKey' => 'module.freeWorld3D_new', 'routeName' => 'freeWorld3DNew'),
);
return $menuItems;
}
}