src/Controller/DefaultController.php line 257

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Doctrine\ORM\Mapping\Entity;
  4. use Doctrine\Persistence\ObjectManager;
  5. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  6. //use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\Console\Input\ArrayInput;
  10. use Symfony\Bundle\FrameworkBundle\Console\Application;
  11. use Doctrine\Persistence\ManagerRegistry;
  12. use Symfony\Component\Console\Output\BufferedOutput;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Bundle\MonologBundle\SwiftMailer\Swift_Message;
  15. use Monolog\Handler\StreamHandler;
  16. use Monolog\Handler\SyslogHandler;
  17. use Monolog\ErrorHandler;
  18. use Monolog\Logger;
  19. use Doctrine\ORM\EntityManagerInterface;
  20. use Symfony\Component\HttpKernel\KernelInterface;
  21. use Symfony\Component\Mailer\MailerInterface;
  22. use Symfony\Component\Mime\Email;
  23. use App\Entity\Currency;
  24. use App\Entity\Eshop;
  25. use App\Entity\Gallery3D;
  26. use App\Entity\GalleryItem;
  27. use App\Entity\Language;
  28. use App\Entity\Module;
  29. use App\Entity\PriceLevel;
  30. use App\Entity\Product;
  31. use App\Entity\ProductGroup;
  32. use App\Entity\RedactionList;
  33. use App\Entity\Server;
  34. use App\Entity\Service;
  35. use App\Entity\User;
  36. use Symfony\Bridge\Twig\Mime\BodyRenderer;
  37. use Symfony\Component\Mailer\Transport;
  38. use Symfony\Component\Mailer\Mailer;
  39. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  40. use Symfony\Component\Mime\Address;
  41. use Twig\Environment;
  42. use Twig\Loader\FilesystemLoader;
  43. class DefaultController extends AbstractController
  44. {
  45.     protected string $databaseUser "root";
  46.     protected string $databasePassword "pswdb33";
  47.     protected string $translateBaseUrl 'https://translate.yandex.net/api/v1.5/tr.json/translate';
  48.     protected string $translateApiKey 'trnsl.1.1.20200423T052136Z.ae351a8275ee45f3.fe0d2bd852ec5d9c88b7a00ebe8d5260fc589c35';
  49.     protected MailerInterface $mailer;
  50.     public function __construct(
  51.         protected ManagerRegistry $doctrine,
  52.                     KernelInterface $appKernel,
  53.                     MailerInterface $mailer
  54.     ) {
  55.         $this->doctrine $doctrine;
  56.         $this->appKernel $appKernel;
  57.         $this->mailer $mailer;
  58.     }
  59.     public function init(Request $request)
  60.     {
  61.         $session $request->getSession();
  62.         $em $this->doctrine->getManager();
  63.         /* we set server info */
  64.         //$session->set('label', null);
  65.         /*
  66.         print("<br>qqw php ver: ");
  67.         print_r(phpversion());
  68.         print("<br>qqw label: ".$session->get('label'));
  69.         */
  70.         //$request->setLocale('cz');
  71. //        print(phpinfo());
  72.         //
  73. //        print("<br>qqw label: ".$session->get('label'));
  74.         //$em = $this->em;
  75.         //$session->remove('label');
  76.         /* setting default label/server/brand/ */
  77.         if(empty($session->get('label'))) {
  78.             /* we try to get http host and choose label */
  79.             //print("<br>qqw host: ".$_SERVER['HTTP_HOST']);
  80.             $hostServer $em->getRepository(Server::class)->getServerFromHost($_SERVER['HTTP_HOST']);
  81. //            print("<br>qqw hostServer: ".$_SERVER['HTTP_HOST']);
  82. //            \Doctrine\Common\Util\Debug::dump($hostServer);
  83.             if (empty($hostServer)) {
  84.                 $this->addFlash('error''Please add Server instance.');
  85.                 return;
  86.             }
  87.             $session->set('label'$hostServer->getLabel());
  88.             //$session->set('label', 'webexciter.com');
  89. //            print("<br>QQW getting default label: ".$session->get('label'));
  90.             $server $this->getServerByLabel($session->get('label'));
  91.             $session->set('server'$server);
  92.             /*
  93.             print('<hr>qqw getServices: ');
  94.             \Doctrine\Common\Util\Debug::dump($session->get('server')->getServices());
  95.             */
  96.             /* we load languages into session */
  97.             $langList $em->getRepository(Language::class)->getLanguageList();
  98.             $session->set('langList'$langList);
  99.             /* we load currencies into session */
  100.             $currencyList $em->getRepository(Currency::class)->getCurrencyList();
  101.             $session->set('currencyList'$currencyList);
  102.             /* we setup server preferred language */
  103.             $lang $em->getRepository(Language::class)->getLanguage($server->getPreferredLanguageId());
  104.             $session->set('lang'$lang);
  105. //            print("<br>QQW lang 1: ".$lang->getLangKey());
  106.             /*
  107.             print("<br>QQW locale 1: ".$request->getLocale());
  108.             if(empty($session->get('lang')->getLangKey())) {
  109.               $request->setLocale($session->get('lang')->getLangKey());
  110.             }
  111.             */
  112.             $request->setLocale($session->get('lang')->getLangKey());
  113.             /* we setup server preferred currency */
  114.             $currency $em->getRepository(Currency::class)->getCurrency($server->getPreferredCurrencyId());
  115.             $session->set('currency'$currency);
  116.         }
  117.         /*
  118.         print("<hr>qqw locale: ");
  119.         print_r($request->getLocale());
  120.         print("<hr>qqw label: ".$session->get('label'));
  121.         print("<hr>qqw langList: ");
  122.         print_r($session->get('langList'));
  123.         print("<hr>qqw currencyList: ");
  124.         print_r($session->get('currencyList'));
  125.         print("<hr>qqw lang: ");
  126.         print_r($session->get('lang'));
  127.         print("<hr>qqw currency: ");
  128.         print_r($session->get('currency'));
  129.         */
  130.         //print("<br>QQW locale 2: ".$request->getLocale());
  131.         /* setting new label/server/brand/ */
  132.         if(!empty($request->query->get('newlabel'))) {
  133.             $session->set('label'$request->query->get('newlabel'));
  134.             //print("<br>QQW setting new label");
  135.             $server $this->getServerByLabel($session->get('label'));
  136.             $session->set('server'$server);
  137.             /* we load languages into session */
  138.             $langList $em->getRepository(Language::class)->getLanguageList();
  139.             $session->set('langList'$langList);
  140.             /* we load currencies into session */
  141.             $currencyList $em->getRepository(Currency::class)->getCurrencyList();
  142.             $session->set('currencyList'$currencyList);
  143.             /* we setup server preferred language */
  144.             $lang $em->getRepository(Language::class)->getLanguage($server->getPreferredLanguageId());
  145.             $session->set('lang'$lang);
  146.             /* we setup server preferred currency */
  147.             $currency $em->getRepository(Currency::class)->getCurrency($server->getPreferredCurrencyId());
  148.             $session->set('currency'$currency);
  149.         }
  150.         /* setting new currency */
  151.         if(!empty($request->query->get('newcurrency'))) {
  152.             //print("<br>QQW setting new currency");
  153.             $currency $em->getRepository(Currency::class)->getCurrencyByKey($request->query->get('newcurrency'));
  154.             if(!empty($currency)) {
  155.                 $session->set('currency'$currency);
  156.                 $this->addFlash('notice''Currency was changed to '.$currency->getCurrencyName().'.');
  157.             }
  158.         }
  159.         /* setting new eshop currency */
  160.         /*         - it is done in EshopController @Route("/eshop/{eshopId}/eshopNewcurr", name="eshopNewcurr")
  161.         if(!empty($request->query->get('newEshopCurrency'))) {
  162.             //print("<br>QQW setting new eshop currency");
  163.             $currency = $em->getRepository('App:Currency')->getCurrencyByKey($request->query->get('newEshopCurrency'));
  164.             if(!empty($currency)) {
  165.                 $session->set('eshopCurrency', $currency);
  166.             foreach($session->getFlashBag() as $message) {
  167.                    print('<br>qqw message X');
  168.             }
  169.                 $this->addFlash('notice', 'E-shop Currency was changed to '.$currency->getCurrencyName().'.');
  170.             }
  171.         }
  172.          */
  173.         /* we set locale according to lang */
  174.         /* this is done in event listener */
  175.         //$request->setLocale($session->get('lang')->getLangKey());
  176.         //print("<br>QQW locale: ".$request->getLocale());
  177.         //$translator->getCatalogue($request->getLocale());
  178.         //print("<br>QQW label: ".$session->get('label'));
  179.         /* we set info */
  180.     }
  181.     public function getServerByLabel($label)
  182.     {
  183.         /* print("<br>QQW getting server from label: ".$label); */
  184.         $em $this->doctrine->getManager();
  185.         $server $em->getRepository(Server::class)->getServerFromLabel($label);
  186.         return $server;
  187.     }
  188.     public function getPageHeader(Request $request)
  189.     {
  190.         $session $request->getSession();
  191.         $em $this->doctrine->getManager();
  192.         $user null;
  193.         $serviceCollectionn null;
  194.         $moduleCollection null;
  195.         /* we get current user */
  196.         if(!empty($session->get('user'))) {
  197.             $currentUserId $session->get('user')->getUserId();
  198.             $user $em->getRepository(User::class)->getUser($currentUserId);
  199.             $serviceCollection $em->getRepository(Service::class)->getServiceList();
  200.             $moduleCollection $em->getRepository(Module::class)->getLiveModuleList();
  201.         }
  202.         //we build service array
  203.         $services = array();
  204.         if(!empty($serviceCollection)) {
  205.             foreach($serviceCollection as $service) {
  206.                 $isService $em->getRepository(User::class)->userHasService($user$service);
  207.                 if($isService) {
  208.                     $serviceId $service->getServiceId();
  209.                     $services[$serviceId] = $service;
  210.                 }
  211.             }
  212.         }
  213.         //we build module array
  214.         $modules = array();
  215.         if(!empty($moduleCollection)) {
  216.             foreach($moduleCollection as $module) {
  217.                 $isModule $em->getRepository(User::class)->userHasModule($user$module);
  218.                 if($isModule and $module->getIsLive() == 1) {
  219.                     $moduleId $module->getModuleId();
  220.                     $modules[$moduleId] = $module;
  221.                 }
  222.             }
  223.         }
  224.         $headerData = array();
  225.         $headerData['headerMessage'] = "";
  226.         $headerData['user'] = $user;
  227.         $headerData['services'] = $services;
  228.         $headerData['modules'] = $modules;
  229.         //we load services list of the server into session
  230.         if(!empty($session->get('server')) && (empty($session->get('server')->getServices()) || count($session->get('server')->getServices())==0)) {
  231.             $server $em->getRepository(Server::class)->getServer($session->get('server')->getServerId());
  232.             foreach($server->getServices() as $service) {
  233.                 if($service->getIsLive() == 1) {
  234.                     $session->get('server')->addService($service);
  235.                 }
  236.                 /*
  237.                 print('<hr>QQW session service: ');
  238.                 \Doctrine\Common\Util\Debug::dump($service);
  239.                 */
  240.             }
  241.         }
  242.         return $headerData;
  243.     }
  244.     public function getSeoData(Request $request)
  245.     {
  246.         $session $request->getSession();
  247.         $seoData = array();
  248.         $seoData['seoTitle'] = "SEO Title";
  249.         // print('<hr>QQW SERVER HEADER: ');  
  250.         // \Doctrine\Common\Util\Debug::dump($session->get('server')->getServices()); 
  251.         return $seoData;
  252.     }
  253.     public function checkUserEntities(Request $request)
  254.     {
  255.         $session $request->getSession();
  256.         $em $this->doctrine->getManager();
  257.         //print("<br>QQW checkUserEntities:");
  258.         /* temporary setting - we generate always entity */
  259.         $this->generateUserEntities();
  260.         /* we check user entities */
  261.         if(empty($session->get('user')->getDateEntitiesUpdated())) {
  262.             $this->generateUserEntities();
  263.             $dateTimeNow = new \DateTime("now");
  264.             /* we set entity update date in session */
  265.             $session->get('user')->setDateEntitiesUpdated($dateTimeNow);
  266.             /* we set entity update date in db */
  267.             $userId $session->get('user')->getUserId();
  268.             $user $em->getRepository(User::class)->getUser($userId);
  269.             $user->setDateEntitiesUpdated($dateTimeNow);
  270.             $em->flush();
  271.         }
  272.     }
  273.     /**
  274.      * @throws \Exception
  275.      */
  276.     public function generateUserEntities()
  277.     {
  278.         //define('STDIN',fopen("php://stdin","r"));
  279.         if (!defined('STDIN')) define('STDIN',fopen("php://stdin","r"));
  280.         /* we generate entities for the user */
  281. //        print("<br>Generate entities for the user.");
  282.         $dem $this->doctrine->getManager('dynamic_em');
  283.         $application = new Application($this->appKernel);
  284.         $application->setAutoExit(false);
  285.         // Update schema
  286.         //$options = array('command' => 'doctrine:schema:update','--force' => true, '--em' => 'dynamic_em');
  287.         //$options = array('command' => 'doctrine:migrations:migrate', '--em' => 'dynamic_em');
  288.         //$options = array('command' => 'doctrine:migrations:migrate --em=dynamic_em');
  289.         $input = new ArrayInput(array(
  290.             'command' => 'doctrine:migrations:migrate',
  291.             '--em' => 'dynamic_em'
  292.         ));
  293.         $output = new BufferedOutput();
  294.         $application->run($input$output);
  295.         // return the output, don't use if you used NullOutput()
  296.         $content $output->fetch();
  297.         //print(" ... Entities generated.");
  298. //        \Doctrine\Common\Util\Debug::dump($output);
  299.         // return new Response(""), if you used NullOutput()
  300.         return new Response($content);
  301.         //$options = array('command' => 'symfony server:stop');
  302.         //$output = $application->run(new ArrayInput($options));
  303. //        print("<br>Entities generated.");
  304. //        \Doctrine\Common\Util\Debug::dump($output);
  305.         return true;
  306.     }
  307.     public function checkUserDB(Request $request)
  308.     {
  309.         $session $request->getSession();
  310.         $em $this->doctrine->getManager();
  311.         $currentUserId $session->get('user')->getUserId();
  312.         if(!$em->getRepository(User::class)->isUserDB($currentUserId)) {
  313.             $this->createUserDB($request);
  314.             $this->addFlash('notice''User database was created.');
  315.             return false;
  316.         } else {
  317.             return true;
  318.         }
  319.     }
  320.     public function createUserDB(Request $request)
  321.     {
  322.         $session $request->getSession();
  323.         $currentUserId $session->get('user')->getUserId();
  324.         /* we create users db */
  325.         $em $this->doctrine->getManager();
  326.         $currentUser $em->getRepository(User::class)->getUser($currentUserId);
  327.         $userDbName "am_".$currentUser->getUserName();
  328.         $em->getRepository(User::class)->createUserDB($currentUserId$userDbName);
  329.         /* we insert db connection to user entity */
  330.         $currentUser->setDatabaseName($userDbName);
  331.         $currentUser->setDatabaseUser($this->databaseUser);
  332.         $currentUser->setDatabasePassword($this->databasePassword);
  333.         $session->get('user')->setDatabaseName($userDbName);
  334.         $session->get('user')->setDatabaseUser($this->databaseUser);
  335.         $session->get('user')->setDatabasePassword($this->databasePassword);
  336.         /* we persist and save user */
  337.         //$em->persist($user);
  338.         $em->flush();
  339.         return true;
  340.     }
  341.     public function isUserFolder(Request $request)
  342.     {
  343.         $session $request->getSession();
  344.         $currentUserName $session->get('user')->getUserName();
  345.         $imageDir "../public/users/".$currentUserName;
  346.         //print('<br>QQW check image dir: '.$imageDir);
  347.         if (is_dir($imageDir)) {
  348.             return true;
  349.         } else{
  350.             return false;
  351.         }
  352.     }
  353.     public function createUserFolder(Request $request)
  354.     {
  355.         $session $request->getSession();
  356.         $currentUserName $session->get('user')->getUserName();
  357.         $userDir "../public/users/".$currentUserName;
  358.         $imageDir "../public/users/".$currentUserName."/images";
  359.         //print('<br>Create image dir: '.$imageDir);
  360.         if (false === mkdir($userDir0777true) OR false === mkdir($imageDir0777true)) {
  361.             print('<br>Image dir: '.sprintf('Unable to create the "%s" directory'$imageDir));
  362.             //throw new FileException(sprintf('Unable to create the "%s" directory', $imageDir));
  363.             return false;
  364.         }  elseif (!is_writable($imageDir)) {
  365.             print('<br>Image dir: '.sprintf('Unable to write in the "%s" directory'$imageDir));
  366.             //throw new FileException(sprintf('Unable to write in the "%s" directory', $imageDir));
  367.             return false;
  368.         }  else{
  369.             return true;
  370.         }
  371.     }
  372.     public function isUserCustomFolder(Request $request$folderName)
  373.     {
  374.         $session $request->getSession();
  375.         $currentUserName $session->get('user')->getUserName();
  376.         $customDir "../public/users/".$currentUserName."/".$folderName;
  377.         //print('<br>QQW check custom dir: '.$customDir);
  378.         if (is_dir($customDir)) {
  379.             return true;
  380.         } else{
  381.             return false;
  382.         }
  383.     }
  384.     public function createUserCustomFolder(Request $request$folderName)
  385.     {
  386.         $session $request->getSession();
  387.         $currentUserName $session->get('user')->getUserName();
  388.         $userDir "../public/users/".$currentUserName;
  389.         $customDir "../public/users/".$currentUserName."/".$folderName;
  390.         print('<br>Create customDir dir: '.$customDir);
  391.         if (false === mkdir($customDir0777true)) {
  392.             print('<br>Custom dir: '.sprintf('Unable to create the "%s" directory'$customDir));
  393.             //throw new FileException(sprintf('Unable to create the "%s" directory', $customDir));
  394.             return false;
  395.         }  elseif (!is_writable($customDir)) {
  396.             print('<br>Custom dir: '.sprintf('Unable to write in the "%s" directory'$customDir));
  397.             //throw new FileException(sprintf('Unable to write in the "%s" directory', $customDir));
  398.             return false;
  399.         }  else{
  400.             return true;
  401.         }
  402.     }
  403.     public function getUserFolderPaths(Request $request$userName '')
  404.     {
  405.         $userFolderPaths = array();
  406.         $session $request->getSession();
  407.         if(!empty($session->get('user'))) {
  408.             $currentUserName $session->get('user')->getUserName();
  409.         } else {
  410.             $currentUserName $userName;
  411.         }
  412.         $userFolderPaths['user'] = "../public/users/".$currentUserName;
  413.         $userFolderPaths['images'] = "../public/users/".$currentUserName."/images";
  414.         if($_SERVER['HTTP_HOST'] != 'localhost') {
  415.             $userFolderPaths['web'] = "http://".$_SERVER['HTTP_HOST']."/users/".$currentUserName;
  416.             $userFolderPaths['webroot'] = "http://".$_SERVER['HTTP_HOST'];
  417.         } else {
  418.             $userFolderPaths['web'] = "https://".$_SERVER['HTTP_HOST']."/users/".$currentUserName;
  419.             $userFolderPaths['webroot'] = "https://".$_SERVER['HTTP_HOST']."/";
  420.         }
  421.           //print('<br>qqw web path: '.$userFolderPaths['web']);
  422.         return $userFolderPaths;
  423.     }
  424.     public function getUserFolderPathsFromUserId($userId)
  425.     {
  426.         $userFolderPaths = array();
  427.         /* we create users db */
  428.         $em $this->doctrine->getManager();
  429.         $user $em->getRepository(User::class)->getUser($userId);
  430.         $currentUserName $user->getUserName();
  431.         $userFolderPaths['user'] = "../public/users/".$currentUserName;
  432.         $userFolderPaths['images'] = "../public/users/".$currentUserName."/images";
  433.         if($_SERVER['HTTP_HOST'] != 'localhost') {
  434.             $userFolderPaths['web'] = "http://".$_SERVER['HTTP_HOST']."/users/".$currentUserName;
  435.             $userFolderPaths['webroot'] = "http://".$_SERVER['HTTP_HOST'];
  436.         } else {
  437.             $userFolderPaths['web'] = "https://"."www.".$_SERVER['HTTP_HOST']."/alliancemarkets2/public/users/".$currentUserName;
  438.             $userFolderPaths['webroot'] = "https://"."www.".$_SERVER['HTTP_HOST']."/alliancemarkets2/";
  439.         }
  440.         //print('<br>qqw web path: '.$userFolderPaths['web']);
  441.         return $userFolderPaths;
  442.     }
  443.     function parseContent(Request $request$text2Parse) {
  444.         $left 0;
  445.         //find first left bracket
  446.         $left strpos($text2Parse'{');
  447.         //find first right bracket
  448.         $right strpos($text2Parse'}');
  449.         //print("<br>qqw parse element: ");
  450.         $parsedText "";
  451.         if($right>0)
  452.         {
  453.             $parseElement substr($text2Parse$left+1$right-$left-1);
  454.             $textType explode('_'$parseElement);
  455.             if(!empty($textType[1])) {
  456.                 $elementId $textType[1];
  457.             }
  458.             switch($textType[0])
  459.             {
  460.                 case "SLIDESHOW":
  461.                     //we generate the code for the slideshow
  462.                     $startText substr($text2Parse0$right+1);
  463.                     print('<br>QQW SLIDESHOW');
  464.                     //$parsedText = ereg_replace ('{'.$parseElement.'}', $this->getSlideShow($textType[1]), $startText);
  465.                     break; //case "SLIDESHOW":
  466.                 case "INTERACTIVESLIDESHOW":
  467.                     //print('<br>INTERACTIVESLIDESHOW');
  468.                     $startText substr($text2Parse0$right+1);
  469.                     $startTextParsed preg_replace ("{{".$parseElement."}}"$this->getInteractiveSlideShow($elementId), $text2Parse);
  470.                     $restContent substr($text2Parse$right+1strlen($text2Parse)-$right);
  471.                     $restContentParsed $this->parseContent($request$restContent);
  472.                     $parsedText $startTextParsed.$restContentParsed;
  473.                     break; //case "INTERACTIVESLIDESHOW":
  474.                 case "REDACTIONLIST":
  475.                     $startText substr($text2Parse0$right+1);
  476.                     $startTextParsed preg_replace ("{{".$parseElement."}}"$this->getRedactionList($request$elementId), $startText);
  477.                     $restContent substr($text2Parse$right+1strlen($text2Parse)-$right);
  478.                     $restContentParsed $this->parseContent($request$restContent);
  479.                     $parsedText $startTextParsed.$restContentParsed;
  480.                     break; //case "REDACTIONLIST":
  481.                 case "PRODUCTSELECTIONGUIDE":
  482.                     $startText substr($text2Parse0$right+1);
  483.                     $startTextParsed preg_replace ("{{".$parseElement."}}"$this->getProductSelectionGuide($elementId), $startText);
  484.                     $restContent substr($text2Parse$right+1strlen($text2Parse)-$right);
  485.                     $restContentParsed $this->parseContent($request$restContent);
  486.                     $parsedText $startTextParsed.$restContentParsed;
  487.                     break; //case "PRODUCTSELECTIONGUIDE":
  488.                 case "PRODUCTGROUP":
  489.                     //print('<br>PRODUCTGROUP');
  490.                     $startText substr($text2Parse0$right+1);
  491.                     $startTextParsed preg_replace ("{{".$parseElement."}}"$this->getProductGroup($elementId$request), $startText);
  492.                     $restContent substr($text2Parse$right+1strlen($text2Parse)-$right);
  493.                     $restContentParsed $this->parseContent($request$restContent);
  494.                     $parsedText $startTextParsed.$restContentParsed;
  495.                     break; //case "PRODUCTGROUP":      
  496.                 case "WEBGALLERIES":
  497.                     //print('<br>qqw WEBGALLERIES');
  498.                     $startText substr($text2Parse0$right+1);
  499.                     $startTextParsed preg_replace ("{{".$parseElement."}}"$this->getWebGalleries($elementId$request), $startText);
  500.                     $restContent substr($text2Parse$right+1strlen($text2Parse)-$right);
  501.                     $restContentParsed $this->parseContent($request$restContent);
  502.                     $parsedText $startTextParsed.$restContentParsed;
  503.                     break; //case "WEBGALLERIES":         
  504.                 case "GALLERY3D":
  505.                     //print('<br>qqw GALLERY3D');
  506.                     $startText substr($text2Parse0$right+1);
  507.                     $startTextParsed preg_replace ("{{".$parseElement."}}"$this->getGallery3D($elementId$request), $startText);
  508.                     $restContent substr($text2Parse$right+1strlen($text2Parse)-$right);
  509.                     $restContentParsed $this->parseContent($request$restContent);
  510.                     $parsedText $startTextParsed.$restContentParsed;
  511.                     break; //case "GALLERY3D":                               
  512.             }
  513.             //we try to search in the rest of the content
  514.             $restContent substr($text2Parse$right+1strlen($text2Parse)-$right);
  515.             //print('<br><br><b>RESTCONTENT:</b> '.htmlentities($restContent));
  516.             //$parsedText .= $this->parseContent($request, $restContent);
  517.         }
  518.         if($parsedText == ''$parsedText $text2Parse;
  519.         return $parsedText;
  520.     }
  521.     function getRedactionList(Request $request$redactionListId) {
  522.         $session $request->getSession();
  523.         $listContent '';
  524.         /* we load entity managers */
  525.         $em $this->doctrine->getManager();
  526.         $dem $this->doctrine->getManager('dynamic_em');
  527.         // we get the redaction list
  528.         $redactionList $dem->getRepository(RedactionList::class)->getRedactionList($redactionListId);
  529.         if(empty($redactionList)) {
  530.             return $listContent;
  531.         }
  532.         // we get the user info
  533.         $user $em->getRepository(User::class)->getUser($redactionList->getUserId());
  534.         $userDirs $this->getUserFolderPathsFromUserId($redactionList->getUserId());
  535.         if(!empty($redactionList->getCssClass())) {
  536.             $cssClass $redactionList->getCssClass();
  537.         } else {
  538.             $cssClass '';
  539.         }
  540.         $webPages = [];
  541.         foreach($redactionList->getWebPages() as $webPage) {
  542.             $webPages[] = $webPage;
  543.         }
  544.         foreach(array_reverse($webPages) as $webPage) {
  545.             $listContent .= '<div class="'.$cssClass.'redactionListPage">';
  546.             $listContent .= '<div class="'.$cssClass.'redactionListThumb">';
  547.             //print('<br>QQW webPage: ');
  548.             //\Doctrine\Common\Util\Debug::dump($webPage);
  549.             //print('<br>QQW session langKey: '.$session->get('lang')->getLangKey());
  550.             $webPage->setLocale($session->get('lang')->getLangKey());
  551.             $dem->refresh($webPage);
  552.             $pageContent $webPage->getWebPageContent();
  553.             //print('<hr>QQW webPage 2: ');
  554.             //\Doctrine\Common\Util\Debug::dump($webPage);
  555.             $webPageLink $userDirs['webroot'].'/web/'.$webPage->getWebsiteId().'/page/'.$webPage->getWebPageId();
  556.             if(!empty($webPage->getImageFile())) {
  557.                 //$imagePath = 'users/'.$user->getUserName().'/images/'.$webPage->getImageFile();
  558.                 $imagePath $userDirs['web'].'/images/'.$webPage->getImageFile();
  559.                 if(!empty($redactionList->getThumbWidth())) {
  560.                     $imageWidth $redactionList->getThumbWidth();
  561.                 } else {
  562.                     $imageWidth 200;
  563.                 }
  564.                 //$listContent .= 'QQW THUMB: '.$imagePath.'</div>';
  565.                 $listContent .= '<a href="'.$webPageLink.'">';
  566.                 $listContent .= '<img src="'.$imagePath.'" width="'.$imageWidth.'" class="'.$redactionList->getThumbWidth().'">';
  567.                 $listContent .= '</a>';
  568.             }
  569.             $listContent .= '</div>';
  570.             $listContent .= '<div class="'.$cssClass.'redactionListText">';
  571.             $listContent .= '<a href="'.$webPageLink.'" class="'.$cssClass.'redactionListLink">'.$webPage->getWebPageName().'</a>';
  572.             $listContent .= '<div class="'.$cssClass.'redactionListDescription">'.$webPage->getWebPageDescription().'</div>';
  573.             $listContent .= '</div>';
  574.             $listContent .= '</div>';
  575.         }
  576.         return $listContent;
  577.     }
  578.     function getProductSelectionGuide($guideId) {
  579.         /* we load entity managers */
  580.         $em $this->doctrine->getManager();
  581.         $dem $this->doctrine->getManager('dynamic_em');
  582.         $content '';
  583.         //print('<hr>qqw Product Selection Guide ');
  584.         /* we get the selection guide */
  585.         $guide $dem->getRepository(ProductSelectionGuide::class)->getProductSelectionGuide($guideId);
  586.         /* we get product selection guide steps*/
  587.         $productSelectionStepList $dem->getRepository(ProductSelectionStep::class)->getProductSelectionStepListByGuide($guide);
  588.         /* we get the user info */
  589.         $user $em->getRepository(User::class)->getUser($guide->getUserId());
  590.         $count 0;
  591.         $content .= '<div class="productSelectionGuide">';
  592.         /* we display selection steps */
  593.         foreach($productSelectionStepList as $step) {
  594.             $count++;
  595.             $content .= '<div class="productSelectionStep">';
  596.             $content .= '<div class="productSelectionStepTitle">';
  597.             $content .= $step->getProductSelectionStepName();
  598.             $content .= '</div>';
  599.             $content .= '<div class="productSelectionStepContent">';
  600.             /* we display parameters */
  601.             foreach($step->getParameters() as $parameter) {
  602.                 $content .= '<div class="productSelectionParameter">';
  603.                 $paramName 'param_'.$parameter->getProductParameterId();
  604.                 if($parameter->getParameterType() == 1) {
  605.                     /* we display choices */
  606.                     $choices $parameter->getProductParameterChoices();
  607.                     $pChoices explode(";"$parameter->getProductParameterChoices());
  608.                     $choiceCount 0;
  609.                     foreach($pChoices as $choice) {
  610.                         $choiceCount++;
  611.                         $content .= '<label for="'.$paramName.'_'.$choiceCount.'" class="guideChoice"><input type="radio" name="'.$paramName.'" id="'.$paramName.'_'.$choiceCount.'" value="'.trim($choice).'"><span class="guideChoiceTitle">'.trim($choice).'</span></label>';
  612.                     }
  613.                 } else {
  614.                     /* we display checkboxes */
  615.                     //$content .= $parameter->getProductParameterName();
  616.                     $content .= '<label for="'.$paramName.'" class="guideChoice"><input type="checkbox" name="'.$paramName.'" id="'.$paramName.'" value="1"><span class="guideChoiceTitle">'.$parameter->getProductParameterName().'</span></label>';
  617.                 }
  618.                 $content .= '</div>';
  619.             }
  620.             $content .= '</div>';
  621.             $content .= '</div>';
  622.         }
  623.         $content .= '</div>';
  624.         return $content;
  625.     }
  626.     function getProductGroup($groupIdRequest $request) {
  627.         /* we load session data */
  628.         //parent::init($request); 
  629.         $session $request->getSession();
  630.         /* we load entity managers */
  631.         $em $this->doctrine->getManager();
  632.         $dem $this->doctrine->getManager('dynamic_em');
  633.         $eshopId null;
  634.         $content '';
  635.         $userDirs $this->getUserFolderPaths($request);
  636.         /* we get the product group */
  637.         $group $dem->getRepository(ProductGroup::class)->getProductGroup($groupId);
  638.         /* we get products */
  639.         $productCollection $dem->getRepository(Product::class)->getProductListByGroup($group);
  640.         //print('<br>qqw request: ');
  641.         //\Doctrine\Common\Util\Debug::dump($request);
  642.         $productThumbs = array();
  643.         foreach($productCollection as $product) {
  644.             $pId $product->getProductId();
  645.             if(empty($eshopId)) {
  646.                 $eshopId $dem->getRepository(Product::class)->getEshopByProduct($product->getProductId());
  647.                 if(empty($eshopId)) {
  648.                     //we get ehop id from url
  649.                     $pathArray explode("/"$request->getPathInfo());
  650.                     $eshopId $pathArray[2];
  651.                 }
  652.                 $eshop $em->getRepository(Eshop::class)->getEshop($eshopId);
  653.                 $user $em->getRepository(User::class)->getUser($eshop->getUserId());
  654.             }
  655.             if($product->getImage1() != "") {
  656.                 if (strpos($product->getImage1(), 'http') === false) {
  657.                     $imagePath 'users/'.$user->getUserName().'/images/'.$product->getImage1();
  658.                     $imageThumbPath 'users/'.$user->getUserName().'/images/thumb_'.$product->getImage1();
  659.                 } else {
  660.                     $imagePath $product->getImage1();
  661.                     $path parse_url($imagePathPHP_URL_PATH);
  662.                     $imageThumbPath 'users/'.$user->getUserName().'/images/thumb_'.basename($path);
  663.                 }
  664.                 /*
  665.                 print('<br>qqw imagePath: '.$imagePath);
  666.                 print('<br>qqw imageThumbPath: '.$imageThumbPath);  
  667.                 */
  668.                 $imageThumb $this->getEshopImageThumb($eshop$imagePath$imageThumbPath);
  669.                 $productThumbs[$pId] = $imageThumb;
  670.             }
  671.         }
  672.         $content .= '<div class="productGroup">';
  673.         foreach($productCollection as $product) {
  674.             if(empty($eshopId)) {
  675.                 $eshopId $dem->getRepository(Product::class)->getEshopByProduct($product->getProductId());
  676.                 $eshop $em->getRepository(Eshop::class)->getEshop($eshopId);
  677.                 $user $em->getRepository(User::class)->getUser($eshop->getUserId());
  678.             }
  679.             /* we setup product names - if empty then we load multilingual values */
  680.             $productName '';
  681.             if(!empty($product->getProductName()) && $product->getProductName() != '') {
  682.                 $productName $product->getProductName();
  683.             } else {
  684.                 //we try to get the product name from multilangual fields 
  685.                 foreach($eshop->getLanguages() as $lang) {
  686.                     $product->setLocale($lang->getLangKey());
  687.                     $dem->refresh($product);
  688.                     if(!empty($product->getProductName()) && $product->getProductName() != '') {
  689.                         $productName $product->getProductName();
  690.                     }
  691.                 }
  692.             }
  693.             $product->setProductName($productName);
  694.             /*
  695.             print('<br>qqw eshopId: ');
  696.             \Doctrine\Common\Util\Debug::dump($eshopId);
  697.             */
  698.             $productLink $userDirs['webroot'].'/eshop/'.$eshopId.'/product/'.$product->getProductId();
  699.             /* we get price(s) to display */
  700.             $displayPrice null;
  701.             $productIds = array();
  702.             $productIds[] = $product->getProductId();
  703.             /* we load prices */
  704.             $productPriceList $dem->getRepository(Product::class)->getProductPriceList($productIds);
  705.             $priceLevelList $dem->getRepository(PriceLevel::class)->getPriceLevelList();
  706.             $defaultCurrency $em->getRepository(Currency::class)->getCurrency($eshop->getPreferredCurrencyId());
  707.             $targetCurrency $session->get('eshopCurrency');
  708.             /* we load currency rated prices */
  709.             $productPriceList $dem->getRepository(Product::class)->getCurrencyRatedProductPriceList($productPriceList$defaultCurrency$targetCurrency);
  710.             $displayPrice null;
  711.             $stoneShopPrice null;
  712.             foreach($productPriceList as $price) {
  713.                 if($price->getProductId() == $product->getProductId()) {
  714.                     /* we get default price level */
  715.                     /* we get price level according to logged contact-customer */
  716.                     if(!empty($session->get('contact')) && !empty($session->get('contact')->getPriceLevel()) && $price->getPriceLevelId()==$session->get('contact')->getPriceLevel()->getPriceLevelId()) {
  717.                         /* we get netto or brutto value according to e-shop configuration */
  718.                         if(!empty($eshop->isDisplayNettoPrices()) && $eshop->isDisplayNettoPrices()==true) {
  719.                             $displayPrice round($price->getNettoValue(),$eshop->getRoundPrice());
  720.                         } else {
  721.                             $displayPrice round($price->getBruttoValue(),$eshop->getRoundPrice());
  722.                         }
  723.                         if(!empty($eshop->isDisplayNettoPrices()) && $eshop->isDisplayNettoPrices()==true) {
  724.                             $displayPriceVAT $displayPrice + ($displayPrice * ($productVAT/100));
  725.                             $displayPriceVATLabel $this->translator->trans('product.price_with_VAT');
  726.                         } else {
  727.                             $displayPriceVAT $displayPrice - ($displayPrice * ($productVAT/100));
  728.                             $displayPriceVATLabel $this->translator->trans('product.price_without_VAT');
  729.                         }
  730.                     } elseif($price->getPriceLevelId() == 1) {
  731.                         /* we get netto or brutto value according to e-shop configuration */
  732.                         if(!empty($eshop->isDisplayNettoPrices()) && $eshop->isDisplayNettoPrices()==true) {
  733.                             $displayPrice round($price->getNettoValue(),$eshop->getRoundPrice());
  734.                         } else {
  735.                             $displayPrice round($price->getBruttoValue(),$eshop->getRoundPrice());
  736.                         }
  737.                     } elseif ($price->getPriceLevelId() > 1) {
  738.                         foreach($priceLevelList as $priceLevel) {
  739.                             if($price->getPriceLevelId() == $priceLevel->getPriceLevelId() && $priceLevel->getPriceLevelName() == "stoneshop") {
  740.                                 if(!empty($eshop->isDisplayNettoPrices()) && $eshop->isDisplayNettoPrices()==true) {
  741.                                     $stoneShopPrice round($price->getNettoValue(),$eshop->getRoundPrice());
  742.                                 } else {
  743.                                     $stoneShopPrice round($price->getBruttoValue(),$eshop->getRoundPrice());
  744.                                 }
  745.                             }
  746.                         }
  747.                     }
  748.                 }
  749.             }
  750.             //$displayPrice = 22;         
  751.             $content .= $this->renderView('eshopProduct_GRID.html.twig',
  752.                 array('product' => $product,
  753.                     'eshop' => $eshop,
  754.                     'displayPrice' => $displayPrice,
  755.                     'stoneShopPrice' => $stoneShopPrice,
  756.                     'productThumbs' => $productThumbs,
  757.                     'userDirs' => $userDirs,
  758.                     'user' => $user)
  759.             );
  760.         }
  761.         $content .= '</div>';
  762.         /*
  763.         print('<hr>qqw content: ');
  764.             \Doctrine\Common\Util\Debug::dump($content);    
  765.         print('<hr>');
  766.         */
  767.         return $content;
  768.     }
  769.     function getWebGalleries($webIdRequest $request) {
  770.         /* we load entity managers */
  771.         $em $this->doctrine->getManager();
  772.         $dem $this->doctrine->getManager('dynamic_em');
  773.         //$rootDir = $this->container->get('kernel')->getRootDir();
  774.         /* we get current web */
  775.         $web $em->getRepository(Website::class)->getWebsite($webId);
  776.         $userDirs $this->getUserFolderPathsFromUserId($web->getUserId());
  777.         $eshopId null;
  778.         $content '';
  779.         /* we get list of galleries */
  780.         $galleryList $dem->getRepository(Gallery::class)->getWebGalleryList($webId);
  781.         //print('<br>qqw current webpage: '.$request->getUri());
  782.         /*
  783.         \Doctrine\Common\Util\Debug::dump($productCollection);
  784.         */
  785.         $content .= '<div class="galleryList">';
  786.         foreach($galleryList as $gallery) {
  787.             $content .= '<div class="galleryPanel">';
  788.             if(!empty($gallery->getGalleryLogoUrl())) {
  789.                 $content .= '<a href="'.$userDirs['webroot'].'/public/'.$web->getWebsiteId().'/gallery/'.$gallery->getGalleryId().'?backUrl='.$request->getUri().'"><img src="'.$gallery->getGalleryLogoUrl().'" alt="Gallery Logo" border="0" width="200"></a>';
  790.             }
  791.             $content .= '<div class="galleryDescription">';
  792.             $content .= '<a href="'.$userDirs['webroot'].'/public/'$webId.'/gallery/'.$gallery->getGalleryId().'?backUrl='.$request->getUri().'" class="galleryTitle">'.$gallery->getGalleryName().'</a>';
  793.             $content .= $gallery->getGalleryDescription();
  794.             $content .= '</div>';
  795.             $content .= '</div>';
  796.         }
  797.         $content .= '</div>';
  798.         return $content;
  799.     }
  800.     function getInteractiveSlideShow($galleryId) {
  801.         /* we load entity managers */
  802.         $em $this->doctrine->getManager();
  803.         $dem $this->doctrine->getManager('dynamic_em');
  804.         /* we get the gallery info */
  805.         $gallery $dem->getRepository(Gallery::class)->getGallery($galleryId);
  806.         $galleryItemCollection $dem->getRepository(GalleryItem::class)->getGalleryItemList($galleryId);
  807.         $userDirs $this->getUserFolderPathsFromUserId($gallery->getUserId());
  808.         /*
  809.         print('<br>qqw getInteractiveSlideShow: ');
  810.         \Doctrine\Common\Util\Debug::dump($gallery);
  811.         */
  812.         $sWidth $gallery->getSlideshowWidth();
  813.         $sHeight $gallery->getSlideshowHeight();
  814.         $sCount 0;
  815.         $navPanel '';
  816.         $slideShow '<div class="slideshowPanel">';
  817.         $slideShow .= '<div id="slideshow" style="z-index:1;" class="slideshow">';
  818.         foreach($galleryItemCollection as $galleryItem) {
  819.             /*
  820.             print('<br>qqw galleryItem: ');
  821.             \Doctrine\Common\Util\Debug::dump($galleryItem);
  822.             */
  823.             /*
  824.             if(strpos($row['title'],"ttp://")>0) $img = $row['title'];
  825.             else $img = './users/'.$userName.'/gallery/'.rawurlencode($galleryName).'/'.$row['title'];
  826.             */
  827.             $img $userDirs['web']."/images/".$galleryItem->getGalleryItemFile();
  828.             //$webPath = $userDirs['web']."/images/".$galleryItem->getGalleryItemFile();
  829.             if($sCount == 0)
  830.             {
  831.                 $slideShow .= '<div class="active" id="slide_'.$sCount.'">';
  832.                 if($galleryItem->getClickURL()!=''$slideShow .= '<a href="'.$galleryItem->getClickURL().'">';
  833.                 $slideShow .= '<img src="'.$img.'" alt="Slideshow Image '.$sCount.'" class="slideshowImage" border="0" />';
  834.                 if($galleryItem->getClickURL()!=''$slideShow .= '</a>';
  835.                 $slideShow .= '</div>';
  836.             }
  837.             else
  838.             {
  839.                 $slideShow .= '<div id="slide_'.$sCount.'">';
  840.                 if($galleryItem->getClickURL()!=''$slideShow .= '<a href="'.$galleryItem->getClickURL().'">';
  841.                 $slideShow .= '<img src="'.$img.'" alt="Slideshow Image '.$sCount.'" class="slideshowImage" border="0" />';
  842.                 if($galleryItem->getClickURL()!=''$slideShow .= '</a>';
  843.                 $slideShow .= '</div>';
  844.             }
  845.             if($galleryItem->getGalleryItemName()!=''$countLabel $galleryItem->getGalleryItemName();
  846.             else $countLabel $sCount 1;
  847.             //if($sCount > 0) $navPanel .= '';
  848.             $navPanel .= '<span id="slideNumber_'.$sCount.'" class="slideNumber"><a href="javascript:void(0)" onclick="viewFadeSlide('.$sCount.', '.count($galleryItemCollection).')" class="slideLink">'.$countLabel.'</a></span>';
  849.             $sCount++;
  850.         }
  851.         $slideShow .= '</div>';
  852.         $slideShow .= '</div>';
  853.         $slideShow .= '<div class="slideMenu">'.$navPanel.'</div>';
  854.         //$slideShow .= '<table border="0" cellpadding="0" cellspacing="0" align="center"><tr><td align="center" valign="top" class="slideLabelTable">'.$navPanel.'</td></tr></table>';
  855.         return $slideShow;
  856.     }
  857.     function getGallery3D($gallery3DIdRequest $request) {
  858.         /* we load session data */
  859.         //parent::init($request); 
  860.         $session $request->getSession();
  861.         // we load entity managers
  862.         $em $this->doctrine->getManager();
  863.         $dem $this->doctrine->getManager('dynamic_em');
  864.         $content '';
  865.         // we get the gallery
  866.         $gallery3D $dem->getRepository(Gallery3D::class)->getGallery3D($gallery3DId);
  867.         $user $em->getRepository(User::class)->getUser($gallery3D->getUserId());
  868.         $userDirs $this->getUserFolderPaths($request$user->getUserName());
  869.         $logger $this->getLogger(null'gallery 3D: '.$gallery3DId);
  870.         //print('<br>gallery3D: ');
  871.         //\Doctrine\Common\Util\Debug::dump($gallery3D);  
  872.         // we get parent gallery items
  873.         $galleryItemCollection null;
  874.         if(!empty($gallery3D->getGallery())) {
  875.             $galId $gallery3D->getGallery()->getGalleryId();
  876.             $galleryItemCollection $dem->getRepository(GalleryItem::class)->getGalleryItemList($galId);
  877.         }
  878.         // we get parent gallery items
  879.         $textureItemCollection null;
  880.         if(!empty($gallery3D->getTextureGallery())) {
  881.             $galId $gallery3D->getTextureGallery()->getGalleryId();
  882.             $textureItemCollection $dem->getRepository(GalleryItem::class)->getGalleryItemList($galId);
  883.         }
  884.         // print('<br>user: ');
  885.         // \Doctrine\Common\Util\Debug::dump($user);         
  886.         // print('<br>QQW freeWorld 22');
  887.         // \Doctrine\Common\Util\Debug::dump($gallery3D->getFreeWorlds());            
  888.         $content .= '<div class="gallery3DPanel">';
  889.         $template3D 'gallery3D/gallery3D.html.twig';
  890.         if(!empty($gallery3D->getTemplate3DPath())) {
  891.             $template3D 'gallery3D/'.$gallery3D->getTemplate3DPath();
  892.         }
  893.         //print('<hr>qqw template3D: '.$template3D);
  894.         $content .= $this->renderView($template3D,
  895.             array('gallery3D' => $gallery3D,
  896.                 'user' => $user,
  897.                 'userDirs' => $userDirs,
  898.                 'logger' => $logger,
  899.                 'galleryItemCollection' => $galleryItemCollection,
  900.                 'textureItemCollection' => $textureItemCollection,
  901.                 'isHeader' => false,
  902.                 'isFullscreen' => false,
  903.             )
  904.         );
  905.         $content .= '</div>';
  906.         /*
  907.         print('<hr>qqw content: ');
  908.             \Doctrine\Common\Util\Debug::dump($content);    
  909.         print('<hr>');
  910.         */
  911.         return $content;
  912.     }
  913.     function GetImage($path) {
  914.         //$mime = mime_content_type($path);
  915.         $mime = @exif_imagetype($path);
  916.         //print('<br>qqw mime: '.$mime);
  917.         switch($mime) {
  918.             case 'IMAGETYPE_PNG':
  919.             case 3:
  920.                 $img imagecreatefrompng($path);
  921.                 break;
  922.             case 'IMAGETYPE_GIF':
  923.             case 1:
  924.                 $img imagecreatefromgif($path);
  925.                 break;
  926.             case 'IMAGETYPE_JPEG':
  927.             case 2:
  928.                 $img imagecreatefromjpeg($path);
  929.                 break;
  930.             case 'IMAGETYPE_BMP':
  931.             case 6:
  932.                 $img imagecreatefrombmp($path);
  933.                 break;
  934.             default:
  935.                 $img null;
  936.         }
  937.         /*
  938.         print('<br>qqw img: ');
  939.         \Doctrine\Common\Util\Debug::dump($img);
  940.         */
  941.         return $img;
  942.     }
  943.     function analyseImageFromText($text=""$maxCharacterRow=50) {
  944.         $analysedText = array();
  945.         return $analysedText;
  946.     }
  947.     function getImageFromText($text=""$colorType="default"$imagePath$imageWebPath$countCharactersInLine 30$imageName="image_name"$imageWidth=400$imageHeight=60$fontSize=40$positionY 40) {
  948.         /* Set the content-type */
  949.         //header('Content-type: image/png');
  950.         $newText wordwrap($text$countCharactersInLine"\n"false);
  951.         $arrayText explode("\n"$newText);
  952.         $rowCount count($arrayText);
  953.         //print('<br>QQW rowcount: '.$rowCount);
  954.         //print('<br>QQW new image text: '.$newText);
  955.         //print('<br>QQW imageWidth: '.$imageWidth);
  956.         //print('<br>QQW imageHeight: '.$imageHeight);
  957.         if($rowCount 0) {
  958.             $imageHeight $imageHeight $rowCount;
  959.         }
  960.         /* Create the image */
  961.         $im imagecreatetruecolor($imageWidth$imageHeight);
  962.         /* Create some colors */
  963.         $white imagecolorallocate($im255255255);
  964.         $grey imagecolorallocate($im128128128);
  965.         $silver imagecolorallocate($im177177177);
  966.         $black imagecolorallocate($im000);
  967.         $green imagecolorallocate($im02550);
  968.         $yellow imagecolorallocate($im2552550);
  969.         $orange imagecolorallocate($im2551500);
  970.         switch ($colorType) {
  971.             case "default":
  972.                 $bgColor $black;
  973.                 $textColor $yellow;
  974.                 break;
  975.             case "silver-black":
  976.                 $bgColor $silver;
  977.                 $textColor $black;
  978.                 break;
  979.             case "black-yellow":
  980.                 $bgColor $black;
  981.                 $textColor $yellow;
  982.                 break;
  983.             case "black-white":
  984.                 $bgColor $white;
  985.                 $textColor $black;
  986.                 break;
  987.             case "black-green":
  988.                 $bgColor $black;
  989.                 $textColor $green;
  990.                 break;
  991.             case "orange-black":
  992.                 $bgColor $black;
  993.                 $textColor $orange;
  994.                 break;
  995.         }
  996.         imagefilledrectangle($im00, ($imageWidth-1), ($imageHeight-1), $bgColor);
  997.         /* font path */
  998.         //$font = 'arial.ttf';
  999.         //$font = "../web/ArialBold.ttf";
  1000. //        $font = $this->get('kernel')->getRootDir().'/public/ArialBold.ttf';
  1001.         $font $this->appKernel->getProjectDir() . '/public/ArialBold.ttf';
  1002.         //$font = "ArialBold.ttf";
  1003.         //$font = "http://localhost/alliancemarkets2/web/ArialBold.ttf";
  1004.         /* Add some shadow to the text */
  1005.         //imagettftext($im, 40, 0, 40, 50, $black, $font, $text);
  1006.         /* Add the text */
  1007.         //$positionY = 30;
  1008.         foreach($arrayText as $key => $rowText) {
  1009.             //print('<br>QQW new text row: '.$rowText);
  1010.             imagettftext($im$fontSize015$positionY$textColor$font$rowText);
  1011.             $positionY += 25;
  1012.         }
  1013.         /* Using imagepng() results in clearer text compared with imagejpeg() */
  1014.         $file $imagePath."/".$imageName.".png";
  1015.         $fileWeb $imageWebPath."/".$imageName.".png";
  1016.         imagepng($im$file);
  1017.         //imagejpeg($im, $file);
  1018.         imagedestroy($im);
  1019.         return $fileWeb;
  1020.     }
  1021.     function getNormalisedText($text="") {
  1022.         $text str_replace(' '''$text);
  1023.         $text str_replace('.'''$text);
  1024.         $text str_replace("'"""$text);
  1025.         return $text;
  1026.     }
  1027.     function getEshopImageThumb($eshop$imagePath$imageThumbPath$isCategoryThumb false$category null) {
  1028.         if(!is_file($imageThumbPath)) {
  1029.             //$imageData = getimagesize($imagePath);
  1030.             list($width$height) = @getimagesize($imagePath);
  1031.             if($width 0)
  1032.             {
  1033.                 $imageData2 = array('h' => $height'w' => $width );
  1034.                 if(!empty($isCategoryThumb) && $isCategoryThumb) {
  1035.                     //getEshopImageThumb
  1036.                     if(!empty($eshop->getCategoryImageThumbWidth()) && $eshop->getCategoryImageThumbWidth() > 0) {
  1037.                         $thumbWidth $eshop->getCategoryImageThumbWidth();
  1038.                     } else {
  1039.                         $thumbWidth 150;
  1040.                     }
  1041.                 } elseif(!empty($category) && !empty($category->getImageThumbWidth()) && $category->getImageThumbWidth() > 0) {
  1042.                     $thumbWidth $category->getImageThumbWidth();
  1043.                 } else {
  1044.                     $thumbWidth $eshop->getImageThumbWidth();
  1045.                 }
  1046.                 if($imageData2['w'] == 0$imageData2['w'] = 1;
  1047.                 $thumbHeight = ($imageData2['h']/$imageData2['w'])*$thumbWidth;
  1048.                 if(!empty($category) && !empty($category->getImageThumbHeight()) && $category->getImageThumbHeight() > 0) {
  1049.                     $eshopThumbHeight $category->getImageThumbWidth();
  1050.                 } elseif($eshop->getImageThumbHeight() > 0) {
  1051.                     $eshopThumbHeight $eshop->getImageThumbHeight();
  1052.                 }  else {
  1053.                     $eshopThumbHeight 200;
  1054.                 }
  1055.                 /* if the thumb height is bigger than allowed thumb height we generate thumb according to height*/
  1056.                 if($thumbHeight $eshopThumbHeight) {
  1057.                     $thumbHeight $eshopThumbHeight;
  1058.                     if($imageData2['h'] == 0$imageData2['h'] = 1;
  1059.                     $thumbWidth = ($imageData2['w']/$imageData2['h'])*$thumbHeight;
  1060.                 }
  1061.                 //print('<br>qqw thumb w: '.$thumbWidth.' h: '.$thumbHeight);
  1062.                 $srcimg $this->GetImage($imagePath);
  1063.                 $destimg = @imagecreatetruecolor($thumbWidth,$thumbHeight);
  1064.                 /*
  1065.                 print('<br>qqw srcimg: ');
  1066.                 print_r($srcimg);
  1067.                 */
  1068.                 /*
  1069.                 if(@getimagesize($imagePath)) {
  1070.                     //print('<br>qqw is file: '.$imagePath);
  1071.                     ImageCopyResized($destimg,$srcimg,0,0,0,0,$thumbWidth,$thumbHeight,ImageSX($srcimg),ImageSY($srcimg));
  1072.                     ImageJPEG($destimg,$imageThumbPath, 100);
  1073.                 }
  1074.                 */
  1075.             }
  1076.         }
  1077.         return $imageThumbPath;
  1078.     }
  1079.     function getLogger($user=null$loggerName 'universal') {
  1080.         $logPaths = array();
  1081.         $rootDir $this->appKernel->getProjectDir();
  1082.         //$templatesDir = $this->appKernel->getProjectDir() . '/app/Resources/views';
  1083. //        $rootDir = $this->container->get('kernel')->getRootDir();
  1084.         if(!empty($user)) {
  1085.             /* we get user paths */
  1086.             //@todo - setting for users
  1087.         } else {
  1088.             /* we set logging to universal location */
  1089.             $logPaths['logPath'] = $rootDir.'/var/log/am2.log';
  1090.             $logPaths['logErrorPath'] = $rootDir.'/var/log/am2_error.log';
  1091.         }
  1092.         /*
  1093.         print("\n\n qqw logPaths: ");
  1094.         \Doctrine\Common\Util\Debug::dump($logPaths);
  1095.         */
  1096.         $logger = new Logger($loggerName);
  1097.         //$log = $this->container->get('logger');
  1098.         $errorHandler = new ErrorHandler($logger);
  1099.         $errorHandler->registerErrorHandler([], false);
  1100.         $errorHandler->registerExceptionHandler();
  1101.         $errorHandler->registerFatalHandler();
  1102.         if(!empty($logPaths['logPath'])) {
  1103.             $logHandler = new StreamHandler($logPaths['logPath'], Logger::NOTICE);
  1104.             $logger->pushHandler($logHandler);
  1105.         }
  1106.         //$logError= new Logger('files');
  1107.         if(!empty($logPaths['logErrorPath'])) {
  1108.             $logErrorHandler = new StreamHandler($logPaths['logErrorPath'], Logger::ERROR);
  1109.             $logger->pushHandler($logErrorHandler);
  1110.             //$syslogHandler = new SyslogHandler($logPaths['logErrorPath'], 'user');
  1111.             //$log->pushHandler($syslogHandler);
  1112.         }
  1113.         return $logger;
  1114.     }
  1115.     function readFileTail($file$lines) {
  1116.         //global $fsize;
  1117.         $handle fopen($file"r");
  1118.         $linecounter $lines;
  1119.         $pos = -2;
  1120.         $beginning false;
  1121.         $text = array();
  1122.         while ($linecounter 0) {
  1123.             $t " ";
  1124.             while ($t != "\n") {
  1125.                 if(fseek($handle$posSEEK_END) == -1) {
  1126.                     $beginning true;
  1127.                     break;
  1128.                 }
  1129.                 $t fgetc($handle);
  1130.                 $pos --;
  1131.             }
  1132.             $linecounter --;
  1133.             if ($beginning) {
  1134.                 rewind($handle);
  1135.             }
  1136.             $text[$lines-$linecounter-1] = fgets($handle);
  1137.             if ($beginning) break;
  1138.         }
  1139.         fclose ($handle);
  1140.         return array_reverse($text);
  1141.     }
  1142.     function is_url($url) {
  1143.         $file_headers = @get_headers($url);
  1144.         if(!$file_headers || $file_headers[0] == 'HTTP/1.1 404 Not Found') {
  1145.             return false;
  1146.         }
  1147.         else {
  1148.             return true;
  1149.         }
  1150.     }
  1151.     /**
  1152.      * Returns generated unique ID.
  1153.      *
  1154.      * @return string
  1155.      */
  1156.     public function generateUId()
  1157.     {
  1158.         //$this->container
  1159.         $session $this->container->get('session');
  1160.         return substr$session->getId(), 0) . substrmd5uniqid''true ).'|'.microtime() ), 029 );
  1161.     }
  1162.     function translate2($from_lan$to_lan$text){
  1163.         $json json_decode(file_get_contents('https://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=' urlencode($text) . '&langpair=' $from_lan '|' $to_lan));
  1164.         $translated_text $json->responseData->translatedText;
  1165.         return $translated_text;
  1166.     }
  1167.     function translate($from_lan$to_lan$text) {
  1168.         $url $this->translateBaseUrl '?key=' $this->translateApiKey '&text=' rawurlencode($text) . '&lang=' $from_lan '-' $to_lan;
  1169.         $handle curl_init($url);
  1170.         curl_setopt($handleCURLOPT_SSL_VERIFYPEERFALSE);
  1171.         curl_setopt($handleCURLOPT_SSL_VERIFYHOSTFALSE);
  1172.         curl_setopt($handleCURLOPT_RETURNTRANSFERtrue);
  1173.         $response curl_exec($handle);
  1174.         $responseDecoded json_decode($responsetrue);
  1175.         curl_close($handle);
  1176.         //print("<br>QQW responseDecoded: ");
  1177.         //\Doctrine\Common\Util\Debug::dump($responseDecoded);
  1178.         if(!empty($responseDecoded['text'])) {
  1179.             $translated_text $responseDecoded['text'][0];
  1180.         } else {
  1181.             $translated_text '';
  1182.         }
  1183.         return $translated_text;
  1184.     }
  1185.     /**
  1186.      * Checks if any user is logged in admin.
  1187.      *
  1188.      * @return string
  1189.      */
  1190.     public function isLoggedUser($request$loginRedirect true) {
  1191.         $this->init($request);
  1192.         $session $request->getSession();
  1193.         if(!empty($session->get('user'))) {
  1194.             return true;
  1195.         } else {
  1196.             return false;
  1197.         }
  1198.     }
  1199.     # get success response from recaptcha and return it to controller
  1200.     function captchaVerify($recaptcha) {
  1201.         $url "https://www.google.com/recaptcha/api/siteverify";
  1202.         $ch curl_init();
  1203.         curl_setopt($chCURLOPT_URL$url);
  1204.         curl_setopt($chCURLOPT_HEADER0);
  1205.         curl_setopt($chCURLOPT_RETURNTRANSFERTRUE);
  1206.         curl_setopt($chCURLOPT_POSTtrue);
  1207.         curl_setopt($chCURLOPT_POSTFIELDS, array(
  1208.             "secret"=>"6LdD38wZAAAAAPUXf4e2LKQ49KaKKdrrEmKhyAEn","response"=>$recaptcha));
  1209.         $response curl_exec($ch);
  1210.         curl_close($ch);
  1211.         $data json_decode($response);
  1212.         return $data->success;
  1213.     }
  1214.     public function getTotalOrderItemPrice(Request $request$product$units$isPackSaleModule=false)
  1215.     {
  1216.         $totalOrderItemPrice $units $request->request->get('productPrice');
  1217.         if($isPackSaleModule) {
  1218.             /* @todo - product pack price*/
  1219.             if($product->getPiecesInPack() > && ($units $product->getPiecesInPack()) > 1) {
  1220.                 //print('<br>... more that 10');
  1221.                 //price for package(s)
  1222.                 $subPrice1 floor($units $product->getPiecesInPack()) * $request->request->get('productPackPrice');
  1223.                 //print(' :: subPrice1: '.$subPrice1);
  1224.                 //price for products left by modulo
  1225.                 $subPrice2 = ($units $product->getPiecesInPack()) * $request->request->get('productPrice');
  1226.                 //print(' :: subPrice2: '.$subPrice2);
  1227.                 $totalOrderItemPrice $subPrice1 $subPrice2;
  1228.             } elseif ($product->getPiecesInPack() > && ($units $product->getPiecesInPack()) == 1) {
  1229.                 //print('<br>... equals 10');
  1230.                 $totalOrderItemPrice floor($units $product->getPiecesInPack()) * $request->request->get('productPackPrice');
  1231.             } else {
  1232.                 //print('<br>... less that 10');
  1233.                 $totalOrderItemPrice $units $request->request->get('productPrice');
  1234.             }
  1235.             /*
  1236.             print("<br>qqw adding to basket pid: ".$product->getProductId()); 
  1237.             print(":: units: ".$units." :: PiecesInPack:".$product->getPiecesInPack());    
  1238.             print(":: productPrice: ".$request->request->get('productPrice'));   
  1239.             print(":: productPackPrice: ".$request->request->get('productPackPrice'));     
  1240.             echo ("<br> units mod PiecesInPack: ".($units % $product->getPiecesInPack()));                 
  1241.             echo (":: units divided PiecesInPack: ".($units / $product->getPiecesInPack()));   
  1242.             echo (":: floor: ".floor($units / $product->getPiecesInPack()));   
  1243.             */
  1244.         }
  1245.         return $totalOrderItemPrice;
  1246.     }
  1247.     public function sendEmail($to$subject$from$body)
  1248.     {
  1249.  
  1250.         $user 'info@virtualrealitycommerce.cz';
  1251.         $pass 'S7E3E4j4!f7';
  1252.         $server 'smtp.web4u.cz';
  1253.         //$port = '587';        
  1254.         $port '465';   
  1255.         // Generate connection configuration
  1256.         $dsn "smtp://" $user ":" $pass "@" $server ":" $port;
  1257.         $transport Transport::fromDsn($dsn);
  1258.         $customMailer = new Mailer($transport);
  1259.         // Generates the email
  1260.         $email = (new TemplatedEmail())
  1261.             ->from(new Address('info@virtualrealitycommerce.cz'$subject))
  1262.             ->to($to)
  1263.             ->subject($subject)
  1264.             ->htmlTemplate('emails/email.html.twig')
  1265.             ->context(['body' => $body]);
  1266.         // IMPORTANT: as you are using a customized mailer instance, you have to make the following
  1267.         // configuration as indicated in https://github.com/symfony/symfony/issues/35990.
  1268.         $loader = new FilesystemLoader('../templates/');
  1269.         $twigEnv = new Environment($loader);
  1270.         $twigBodyRenderer = new BodyRenderer($twigEnv);
  1271.         $twigBodyRenderer->render($email);
  1272.         // Sends the email
  1273.         try {
  1274.             $customMailer->send($email);
  1275.             return true;
  1276.         } catch (\Exception $e) {
  1277.             print('<br>email error: ');
  1278.             print_r($e->getMessage());
  1279.             return false;
  1280.         } 
  1281.     }
  1282.     public function sendEmail2($to$subject$from$body)
  1283.     {
  1284.         print('<br>Sending mail...');
  1285.         $body 'my email body';
  1286.         $message "<html><body><h1>" "Hi, there 99!" "</h1></body></html>";
  1287.         $headers 'MIME-Version: 1.0' "\r\n";
  1288.         $headers .= 'Content-type: text/html; charset=iso-8859-1' "\r\n";
  1289.         $headers .= "From: Info<user@example.com>" "\r\n";
  1290.         $status = @mail("webexciter@yahoo.com""Testing"$message$headers);  
  1291.         print('<br>mail status:');
  1292.         print_r($status);
  1293.         $headers  "MIME-Version: 1.0\r\n";
  1294.                 $headers .= "Content-type: text/html; charset=UTF-8\r\n";
  1295.                 $headers .= "From: <{$from}>\r\n";
  1296.                 $headers .= "Reply-To: <{$from}>\r\n";
  1297.                 $headers .= "Subject: {$subject}\r\n";
  1298.                 $headers .= "X-Mailer: PHP/".phpversion()."\r\n";
  1299.         mail('webexciter@yahoo.com''My Subject''My Message');        
  1300.         if(mail($to$subject$body$headers)) {
  1301.                     print('<br>Email was sent.');
  1302.                     print('<br>QQW Sending 2');
  1303.             return true;
  1304.         } else {
  1305.             print('<br>Email was not sent.');
  1306.             print_r(error_get_last());
  1307.             return false;
  1308.         }      
  1309.     }
  1310.     public function sendEmail3($to$subject$from$body)
  1311.     {
  1312.         print('<br>Sending Symfony mailer...');
  1313.         $email = (new Email())
  1314.             ->from('info@virtualrealitycommerce.cz')
  1315.             //->from($user->getEmail())
  1316.             ->to($to)
  1317.             //->cc('cc@example.com')
  1318.             //->bcc('bcc@example.com')
  1319.             //->replyTo('fabien@example.com')
  1320.             //->priority(Email::PRIORITY_HIGH)
  1321.             ->subject('Time for Symfony Mailer 101 !')
  1322.             ->text('Sending emails is fun again!')
  1323.             ->html('<p>See Twig integration for better HTML integration!</p>');
  1324.         try {
  1325.             $this->mailer->send($email);
  1326.             //$this->addFlash('notice', $this->translator->trans('user.forgotten_password_sent').': '.$emailAddress);
  1327.             return true;
  1328.         } catch (\Exception $e) {
  1329.             // some error prevented the email sending; display an
  1330.             // error message or try to resend the message
  1331.             //$this->addFlash('error', $this->translator->trans('user.forgotten_password_sent_error').': '.$emailAddress);
  1332.             print_r($e->getMessage());
  1333.             return false;
  1334.         }       
  1335.     }
  1336.     public function sendEmail4($to$subject$from$body)
  1337.     {
  1338.         print('<br>Sending cli email...'.$body);
  1339.         $output null;
  1340.         $retval null;
  1341.         $body "<h1>my email title</h1>";
  1342.         //$command = 'echo "'.addslashes($body).'" | mail -a "Content-type: text/html" -s "'.$subject.'" '.$to;
  1343.         $command 'echo "'.$body.'" | mail -s "'.$subject.'" '.$to;
  1344.         if (exec($command$output$retval) === false) {
  1345.             var_dump($output);
  1346.             return false;
  1347.         } else {
  1348.             return true;
  1349.         }
  1350.         
  1351.     } 
  1352.     public function sendEmail5($to$subject$from$body)
  1353.     {
  1354.         print('<br>Sending cli email...'.$body);
  1355.         require_once("Mail.php");
  1356.         $from "Your Name <email@blahblah.com>";
  1357.         $to "Their Name <webexcietr@yahoo.com>";
  1358.         $subject "Subject";
  1359.         $body "Lorem ipsum dolor sit amet, consectetur adipiscing elit...";
  1360.         $host "mailserver.virtualrealitycommerce.org";
  1361.         $username "smtp_username";
  1362.         $password "smtp_password";
  1363.         $headers = array('From' => $from'To' => $to'Subject' => $subject);
  1364.         $smtp Mail::factory('smtp', array ('host' => $host,
  1365.                                              'auth' => true,
  1366.                                              'username' => $username,
  1367.                                              'password' => $password));
  1368.         $mail $smtp->send($to$headers$body);
  1369.         if ( PEAR::isError($mail) ) {
  1370.             echo("<p>Error sending mail:<br/>" $mail->getMessage() . "</p>");
  1371.         } else {
  1372.             echo("<p>Message sent.</p>");
  1373.         }
  1374.         
  1375.     }
  1376.     public function sendAdminEmail($subject$from$body)
  1377.     {
  1378.         //print('<br>Sending admin email...');
  1379.         //sends email to owner
  1380.         $message = (new \Swift_Message($subject))
  1381.             ->setFrom($from)
  1382.             ->setTo('easycommerc@gmail.com')
  1383.             ->setBody($body,'text/plain')
  1384.         ;
  1385.         $this->get('mailer')->send($message);
  1386.         $this->addFlash('notice''Email was sent to administrators.');
  1387.     }
  1388.     public function adminMainMenu(Request $request)
  1389.     {
  1390.         $menuItems = array(=> array('link' => 'homeuser''langKey' => 'user.admin''routeName' => 'homeuser'),
  1391.             => array('link' => 'eshopAdmin''langKey' => 'eshop.admin''routeName' => 'eshopAdmin'),
  1392.             => array('link' => 'orderlist''langKey' => 'eshop.orders''routeName' => 'orderList'),
  1393.             => array('link' => 'productedit''langKey' => 'eshop.products''routeName' => 'productListEdit'),
  1394.             => array('link' => 'productnew''langKey' => 'eshop.new_product''routeName' => 'productNew'),
  1395.             => array('link' => 'categories''langKey' => 'eshop.categories''routeName' => 'categories'),
  1396.             => array('link' => 'categorynew''langKey' => 'eshop.new_category''routeName' => 'categoryNew'),
  1397.             => array('link' => 'contacts''langKey' => 'knowledgebase.contacts''routeName' => 'contacts'),
  1398.             => array('link' => 'eshopnew''langKey' => 'eshop.new_eshop''routeName' => 'eshopNew'),
  1399.             => array('link' => 'eshopConfig''langKey' => 'eshop.config''routeName' => 'eshopConfig'),
  1400.         );
  1401.         return $menuItems;
  1402.     }
  1403. }