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

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