]> _ Git - fluidbook-toolbox.git/commitdiff
wip #5718 @1.5
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Thu, 9 Feb 2023 08:53:08 +0000 (09:53 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Thu, 9 Feb 2023 08:53:08 +0000 (09:53 +0100)
.docker/docker-compose.yml
app/Http/Controllers/Admin/FilesController.php [new file with mode: 0644]
resources/views/files/files.blade.php [new file with mode: 0644]
resources/views/vendor/backpack/base/inc/sidebar_content.blade.php
routes/web.php

index a90d3d0e24f3a379d63166ec6ede4d3bd24806b5..8bea06a33a2a332ac7e71e5a4beeacf09daa2052 100644 (file)
@@ -11,6 +11,7 @@ services:
       - '/home/extranet/share:/application/share'
       - '/home/toolbox/www:/application'
       - '/home/toolbox/www/storage/app/public/:/application/public/storage/'
+      - '/data/extranet/ftp/:/application/ftp/'
       - '/mnt/sshfs/godzilla/data/fluidbook/docs/:/application/protected/fluidbookpublication/docs/'
       - '/data/extranet/www/fluidbook/books/working/:/application/protected/fluidbookpublication/working/'
       - '/home/extranet:/home/extranet'
@@ -71,6 +72,7 @@ services:
       - '/home/extranet/share:/application/share'
       - '/home/toolbox/www:/application'
       - '/home/toolbox/www/storage/app/public/:/application/public/storage/'
+      - '/data/extranet/ftp/:/application/ftp/'
       - '/mnt/sshfs/godzilla/data/fluidbook/docs/:/application/protected/fluidbookpublication/docs/'
       - '/data/extranet/www/fluidbook/books/working/:/application/protected/fluidbookpublication/working/'
       - '/home/extranet:/home/extranet'
diff --git a/app/Http/Controllers/Admin/FilesController.php b/app/Http/Controllers/Admin/FilesController.php
new file mode 100644 (file)
index 0000000..683f2df
--- /dev/null
@@ -0,0 +1,102 @@
+<?php
+
+namespace App\Http\Controllers\Admin;
+
+use App\Http\Controllers\Controller;
+use App\Models\User;
+use Cubedesigners\UserDatabase\Permissions;
+use Cubist\Util\Files\Files;
+
+class FilesController extends Controller
+{
+    protected function files($id = 'me')
+    {
+        if (!can('files:read')) {
+            abort(404);
+        }
+        return view('files.files', ['files' => $this->getFiles($id), 'id' => $id]);
+    }
+
+    protected function getFiles($id = 'me')
+    {
+        if ($id === 'me' || !can('files:admin')) {
+            return $this->_getFiles(backpack_user()->id);
+        }
+        return $this->_getFiles($id);
+    }
+
+    protected function _getFiles($id)
+    {
+        /** @var User $user */
+        $user = User::withoutGlobalScopes()->find($id);
+        if (null === $user) {
+            abort(404);
+        }
+        $users = $user->getManagedUsers();
+        $files = [];
+        foreach ($users as $user) {
+            $this->_listFilesOfUser($user, $files);
+        }
+        usort($files, function ($a, $b) {
+            return -($a['mtime'] - $b['mtime']);
+        });
+        return $files;
+    }
+
+    protected function _listFilesOfUser($id, &$files)
+    {
+        $uFiles = cache()->remember('files_list_user_' . $id, 86400, function () use ($id) {
+            return $this->___listFilesOfUser($id);
+        });
+
+        foreach ($uFiles as $path => $uFile) {
+            if (isset($files[$path])) {
+                continue;
+            }
+            $files[$path] = $uFile;
+        }
+    }
+
+    protected function ___listFilesOfUser($id)
+    {
+
+        $path = '/application/ftp/' . $id;
+        if (!file_exists($path) || !is_dir($path)) {
+            return [];
+        }
+        $res = [];
+        $userFiles = Files::getRecursiveDirectoryIterator($path);
+        foreach ($userFiles as $file) {
+            /** @var $file \SplFileInfo */
+            if ($file->isDir()) {
+                continue;
+            }
+
+            $pathname = $file->getPathname();
+            if (isset($files[$pathname])) {
+                continue;
+            }
+
+            if (preg_match('|\.in\/(\d)+\/|', $pathname, $matches)) {
+                $from = $matches[1];
+                $to = $id;
+            } else {
+                $from = $id;
+                $to = false;
+            }
+
+            $res[$pathname] = [
+                'path' => $pathname,
+                'name' => $file->getFilename(),
+                'ext' => mb_strtolower($file->getExtension()),
+                'mtime' => $file->getMTime(),
+                'date' => date('Y/m/d', $file->getMTime()),
+                'size' => Files::humanReadableSize($file->getSize()),
+                'from' => $from,
+                'to' => $to,
+            ];
+        }
+
+        return $res;
+    }
+}
diff --git a/resources/views/files/files.blade.php b/resources/views/files/files.blade.php
new file mode 100644 (file)
index 0000000..d87afcc
--- /dev/null
@@ -0,0 +1,2 @@
+{{$id}}
+{!! print_r($files,true)!!}
index c394a11b527e04b5e5fa19c81b5e319a1f8cfb3a..c776422502cc56f4a882c16a4513e7560afec628 100644 (file)
             class='nav-icon la la-dashboard'></i>{{ trans('backpack::base.dashboard') }}
     </a></li>
 
+@can('files:read')
 <li class="nav-item"><a class="nav-link" href="{{ backpack_url('files') }}"><i
             class='nav-icon las la-cloud'></i>{{ __('Partage de fichiers') }}
     </a></li>
+@endcan
 
 @canany(['quiz:read','quiztranslation:read','elearning_media:read'])
     <li {!! sidebarState('elearning',true) !!}><a class='nav-link nav-dropdown-toggle' href='#'><i
index 079110f27f98ec0d949fae52b29da03b519cb147..270a37e4b758921084804731c9ea4e7465987d96 100644 (file)
@@ -22,6 +22,7 @@ Route::group([
     Route::get('fluidbookthemepreview/{id}-burger.jpg', 'FluidbookThemePreviewController@previewBurger');
     Route::get('fluidbookthemepreview/{id}-menu.jpg', 'FluidbookThemePreviewController@previewMenu');
     Route::get('fluidbookthemepreview/{id}.jpg', 'FluidbookThemePreviewController@preview');
+    Route::get('files/{id?}', 'FilesController@files');
 });
 
 Route::group([