From 6e925057bae12d49ac525b23599855d281ee5b53 Mon Sep 17 00:00:00 2001 From: Jan Peca Date: Fri, 22 Feb 2019 12:19:31 +0100 Subject: [PATCH] Respect skipFiles and allowFileTypes from media source Resolves #145 --- .../fred/model/fred/src/Endpoint/ElFinder.php | 80 +++++++++++++++---- 1 file changed, 64 insertions(+), 16 deletions(-) diff --git a/core/components/fred/model/fred/src/Endpoint/ElFinder.php b/core/components/fred/model/fred/src/Endpoint/ElFinder.php index 0e21811d..f70bbbaf 100644 --- a/core/components/fred/model/fred/src/Endpoint/ElFinder.php +++ b/core/components/fred/model/fred/src/Endpoint/ElFinder.php @@ -11,6 +11,7 @@ namespace Fred\Endpoint; use Firebase\JWT\JWT; +use Fred\Utils; class ElFinder extends Endpoint { @@ -82,7 +83,7 @@ public function run() $readOnly = false; if (isset($properties['fredReadOnly']) && ($properties['fredReadOnly']['value'] === true)) $readOnly = true; - + $roots[] = [ 'id' => 'ms' . $mediaSource->id, 'driver' => 'LocalFileSystem', @@ -93,21 +94,7 @@ public function run() 'startPath' => $path, 'disabled' => $readOnly ? array('rename', 'rm', 'cut', 'copy') : [], 'uploadDeny' => ['text/x-php'], - 'attributes' => [ - [ - 'pattern' => '/.php/', - 'read' => false, - 'write' => false, - 'locked' => true, - 'hidden' => true, - ], - [ - 'pattern' => '/.*/', - 'read' => true, - 'write' => !$readOnly, - 'locked' => false - ] - ] + 'attributes' => $this->getRootAttributes($properties) ]; } @@ -117,4 +104,65 @@ public function run() $connector = new \elFinderConnector(new \elFinder($options)); $connector->run(); } + + private function getRootAttributes($properties) + { + $readOnly = false; + if (isset($properties['fredReadOnly']) && ($properties['fredReadOnly']['value'] === true)) $readOnly = true; + + $skipFiles = isset($properties['skipFiles']) ? $properties['skipFiles']['value'] : ''; + $skipFiles = Utils::explodeAndClean($skipFiles); + + $allowedFileTypes = isset($properties['allowedFileTypes']) ? $properties['allowedFileTypes']['value'] : ''; + $allowedFileTypes = Utils::explodeAndClean($allowedFileTypes); + + $attributes = []; + + if (!empty($allowedFileTypes)) { + foreach ($allowedFileTypes as $fileType) { + $attributes[] = [ + 'pattern' => '/.' . $fileType . '/', + 'read' => true, + 'write' => !$readOnly, + 'locked' => false, + 'hidden' => false, + ]; + } + + $attributes[] = [ + 'pattern' => '/\..*/', + 'read' => false, + 'write' => false, + 'locked' => true, + 'hidden' => true, + ]; + } else { + $attributes[] = [ + 'pattern' => '/.php/', + 'read' => false, + 'write' => false, + 'locked' => true, + 'hidden' => true, + ]; + + foreach ($skipFiles as $file) { + $attributes[] = [ + 'pattern' => '/' . $file . '/', + 'read' => false, + 'write' => false, + 'locked' => true, + 'hidden' => true, + ]; + } + + $attributes[] = [ + 'pattern' => '/.*/', + 'read' => true, + 'write' => !$readOnly, + 'locked' => false + ]; + } + + return $attributes; + } } \ No newline at end of file