vendor/helios-ag/fm-elfinder-bundle/src/Controller/ElFinderController.php line 61

  1. <?php
  2. namespace FM\ElfinderBundle\Controller;
  3. use Exception;
  4. use FM\ElfinderBundle\Loader\ElFinderLoader;
  5. use FM\ElfinderBundle\Session\ElFinderSession;
  6. use Symfony\Component\Asset\Package;
  7. use Symfony\Component\Asset\VersionStrategy\EmptyVersionStrategy;
  8. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\HttpFoundation\JsonResponse;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  13. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  14. use FM\ElfinderBundle\Event\ElFinderPreExecutionEvent;
  15. use FM\ElfinderBundle\Event\ElFinderPostExecutionEvent;
  16. use Symfony\Component\HttpKernel\HttpKernelInterface;
  17. use Twig\Environment;
  18. class ElFinderController
  19. {
  20.     private Environment $twig;
  21.     private array $params;
  22.     private $loader;
  23.     public function __construct(Environment $twig, array $params$loader)
  24.     {
  25.         $this->twig   $twig;
  26.         $this->params $params;
  27.         $this->loader $loader;
  28.     }
  29.     /**
  30.      * Renders Elfinder.
  31.      *
  32.      * @throws Exception
  33.      */
  34.     public function show(Request $requeststring $instancestring $homeFolder): Response
  35.     {
  36.         $efParameters $this->params;
  37.         if (empty($efParameters['instances'][$instance])) {
  38.             throw new NotFoundHttpException('Instance not found');
  39.         }
  40.         $parameters   $efParameters['instances'][$instance];
  41.         if (empty($parameters['locale'])) {
  42.             $parameters['locale'] = $request->getLocale();
  43.         }
  44.         $assetsPath      $efParameters['assets_path'];
  45.         $result          $this->selectEditor($parameters$instance$homeFolder$assetsPath$request->get('id'));
  46.         return new Response($this->twig->render($result['template'], $result['params']));
  47.     }
  48.     /**
  49.      * @throws Exception
  50.      */
  51.     private function selectEditor(array $parametersstring $instancestring $homeFolderstring $assetsPathstring $formTypeId null): array
  52.     {
  53.         $editor         $parameters['editor'];
  54.         $locale         $parameters['locale'] ?: $this->container->getParameter('locale');
  55.         $fullScreen     $parameters['fullscreen'];
  56.         $relativePath   $parameters['relative_path'];
  57.         $pathPrefix     $parameters['path_prefix'];
  58.         $theme          $parameters['theme'];
  59.         // convert to javascript array
  60.         $onlyMimes      count($parameters['visible_mime_types'])
  61.                               ? "['".implode("','"$parameters['visible_mime_types'])."']"
  62.                               '[]';
  63.         $result         = [];
  64.         switch ($editor) {
  65.             case 'custom':
  66.                 if (empty($parameters['editor_template'])) {
  67.                     throw new Exception("Configuration error : 'custom' editor must define 'editor_template' parameter");
  68.                 }
  69.                 $result['template'] = $parameters['editor_template'];
  70.                 $result['params']   = [
  71.                     'locale'        => $locale,
  72.                     'fullscreen'    => $fullScreen,
  73.                     'instance'      => $instance,
  74.                     'homeFolder'    => $homeFolder,
  75.                     'relative_path' => $relativePath,
  76.                     'prefix'        => $assetsPath,
  77.                     'theme'         => $theme,
  78.                     'pathPrefix'    => $pathPrefix,
  79.                     'onlyMimes'     => $onlyMimes,
  80.                     'id'            => $formTypeId,
  81.                 ];
  82.                 return $result;
  83.             case 'ckeditor':
  84.                 $result['template'] = '@FMElfinder/Elfinder/ckeditor.html.twig';
  85.                 $result['params']   = [
  86.                     'locale'        => $locale,
  87.                     'fullscreen'    => $fullScreen,
  88.                     'instance'      => $instance,
  89.                     'homeFolder'    => $homeFolder,
  90.                     'relative_path' => $relativePath,
  91.                     'prefix'        => $assetsPath,
  92.                     'theme'         => $theme,
  93.                     'pathPrefix'    => $pathPrefix,
  94.                     'onlyMimes'     => $onlyMimes,
  95.                 ];
  96.                 return $result;
  97.             case 'summernote':
  98.                 $result['template'] = '@FMElfinder/Elfinder/summernote.html.twig';
  99.                 $result['params']   = [
  100.                     'locale'        => $locale,
  101.                     'fullscreen'    => $fullScreen,
  102.                     'instance'      => $instance,
  103.                     'homeFolder'    => $homeFolder,
  104.                     'relative_path' => $relativePath,
  105.                     'prefix'        => $assetsPath,
  106.                     'theme'         => $theme,
  107.                     'pathPrefix'    => $pathPrefix,
  108.                     'onlyMimes'     => $onlyMimes,
  109.                 ];
  110.                 return $result;
  111.             case 'tinymce':
  112.                 $result['template'] = '@FMElfinderBundle/Elfinder/tinymce.html.twig';
  113.                 $result['params']   = [
  114.                     'locale'             => $locale,
  115.                     'tinymce_popup_path' => $parameters['tinymce_popup_path'],
  116.                     'instance'           => $instance,
  117.                     'homeFolder'         => $homeFolder,
  118.                     'prefix'             => $assetsPath,
  119.                     'theme'              => $theme,
  120.                     'pathPrefix'         => $pathPrefix,
  121.                     'onlyMimes'          => $onlyMimes,
  122.                 ];
  123.                 return $result;
  124.             case 'tinymce4':
  125.                 $result['template'] = '@FMElfinder/Elfinder/tinymce4.html.twig';
  126.                 $result['params']   = [
  127.                     'locale'        => $locale,
  128.                     'instance'      => $instance,
  129.                     'homeFolder'    => $homeFolder,
  130.                     'relative_path' => $relativePath,
  131.                     'prefix'        => $assetsPath,
  132.                     'theme'         => $theme,
  133.                     'pathPrefix'    => $pathPrefix,
  134.                     'onlyMimes'     => $onlyMimes,
  135.                 ];
  136.                 return $result;
  137.             case 'fm_tinymce':
  138.                 $result['template'] = '@FMElfinder/Elfinder/fm_tinymce.html.twig';
  139.                 $result['params']   = [
  140.                     'locale'        => $locale,
  141.                     'instance'      => $instance,
  142.                     'homeFolder'    => $homeFolder,
  143.                     'relative_path' => $relativePath,
  144.                     'prefix'        => $assetsPath,
  145.                     'theme'         => $theme,
  146.                     'pathPrefix'    => $pathPrefix,
  147.                     'onlyMimes'     => $onlyMimes,
  148.                 ];
  149.                 return $result;
  150.             case 'form':
  151.                 $result['template'] = '@FMElfinder/Elfinder/elfinder_type.html.twig';
  152.                 $result['params']   = [
  153.                     'locale'        => $locale,
  154.                     'fullscreen'    => $fullScreen,
  155.                     'instance'      => $instance,
  156.                     'homeFolder'    => $homeFolder,
  157.                     'id'            => $formTypeId,
  158.                     'relative_path' => $relativePath,
  159.                     'prefix'        => $assetsPath,
  160.                     'theme'         => $theme,
  161.                     'pathPrefix'    => $pathPrefix,
  162.                     'onlyMimes'     => $onlyMimes,
  163.                 ];
  164.                 return $result;
  165.             default:
  166.                 $result['template'] = '@FMElfinder/Elfinder/simple.html.twig';
  167.                 $result['params']   = [
  168.                     'locale'        => $locale,
  169.                     'fullscreen'    => $fullScreen,
  170.                     'instance'      => $instance,
  171.                     'homeFolder'    => $homeFolder,
  172.                     'prefix'        => $assetsPath,
  173.                     'onlyMimes'     => $onlyMimes,
  174.                     'theme'         => $theme,
  175.                     'pathPrefix'    => $pathPrefix,
  176.                 ];
  177.                 return $result;
  178.         }
  179.     }
  180.     public function load(SessionInterface $sessionHttpKernelInterface $httpKernelEventDispatcherInterface $eventDispatcherRequest $requeststring $instancestring $homeFolder): JsonResponse
  181.     {
  182.         $loader $this->loader;
  183.         $efParameters $this->params;
  184.         $loader->initBridge($instance$efParameters); // builds up the Bridge object for the loader with the given instance
  185.         if ($loader instanceof ElFinderLoader) {
  186.             $loader->setSession(new ElFinderSession($session));
  187.         }
  188.         $preExecutionEvent = new ElFinderPreExecutionEvent($request$httpKernel$instance$homeFolder);
  189.         $eventDispatcher->dispatch($preExecutionEvent);
  190.         $result $loader->load($request); // the instance is already set
  191.         $postExecutionEvent = new ElFinderPostExecutionEvent($request$httpKernel$instance$homeFolder$result);
  192.         $eventDispatcher->dispatch($postExecutionEvent);
  193.         // returning result (who may have been modified by a post execution event listener)
  194.         return new JsonResponse($postExecutionEvent->getResult());
  195.     }
  196.     public function mainJS()
  197.     {
  198.         $version = new EmptyVersionStrategy();
  199.         $package = new Package($version);
  200.         $mainUrl $package->getUrl('/bundles/fmelfinder/js');
  201.         return new Response(
  202.             $this->twig->render('@FMElfinder/Elfinder/helper/main.js.twig',['mainUrl' => $mainUrl]),
  203.             200,
  204.             [
  205.                 'Content-type' => 'text/javascript',
  206.             ]
  207.         );
  208.     }
  209. }