mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-28 02:50:39 +00:00
paginator refactoring and implementation into the routes
This commit is contained in:
@@ -4,7 +4,7 @@ namespace Domain\Browsing\Controllers;
|
||||
use Str;
|
||||
use Domain\Files\Models\File;
|
||||
use Domain\Folders\Models\Folder;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Domain\Files\Resources\FilesCollection;
|
||||
use Domain\Folders\Resources\FolderResource;
|
||||
use Domain\Folders\Resources\FolderCollection;
|
||||
@@ -13,33 +13,49 @@ class BrowseFolderController
|
||||
{
|
||||
public function __invoke(
|
||||
string $id,
|
||||
): array {
|
||||
$root_id = Str::isUuid($id) ? $id : null;
|
||||
): JsonResponse {
|
||||
$rootId = Str::isUuid($id)
|
||||
? $id
|
||||
: null;
|
||||
|
||||
$folderQuery = [
|
||||
'parent_id' => $root_id,
|
||||
'team_folder' => false,
|
||||
'user_id' => Auth::id(),
|
||||
'deleted_at' => null,
|
||||
$page = request()->has('page')
|
||||
? request()->input('page')
|
||||
: 'all';
|
||||
|
||||
// Prepare folder & file db query
|
||||
$query = [
|
||||
'folder' => [
|
||||
'where' => [
|
||||
'parent_id' => $rootId,
|
||||
'team_folder' => false,
|
||||
'user_id' => auth()->id(),
|
||||
'deleted_at' => null,
|
||||
],
|
||||
],
|
||||
'file' => [
|
||||
'where' => [
|
||||
'parent_id' => $rootId,
|
||||
'user_id' => auth()->id(),
|
||||
'deleted_at' => null,
|
||||
],
|
||||
],
|
||||
'with' => [
|
||||
'parent:id,name',
|
||||
'shared:token,id,item_id,permission,is_protected,expire_in',
|
||||
],
|
||||
];
|
||||
|
||||
$fileQuery = [
|
||||
'parent_id' => $root_id,
|
||||
'user_id' => Auth::id(),
|
||||
'deleted_at' => null,
|
||||
];
|
||||
[$foldersTake, $foldersSkip, $filesTake, $filesSkip, $totalEntries] = getRecordsCount($query, $page);
|
||||
|
||||
list($foldersTake, $foldersSkip, $filesTake, $filesSkip, $totalItemsCount) = getRecordsCount($folderQuery, $fileQuery, request()->input('page'));
|
||||
|
||||
$folders = Folder::with(['parent:id,name', 'shared:token,id,item_id,permission,is_protected,expire_in'])
|
||||
->where($folderQuery)
|
||||
$folders = Folder::with($query['with'])
|
||||
->where($query['folder']['where'])
|
||||
->sortable()
|
||||
->skip($foldersSkip)
|
||||
->take($foldersTake)
|
||||
->get();
|
||||
|
||||
$files = File::with(['parent:id,name', 'shared:token,id,item_id,permission,is_protected,expire_in'])
|
||||
->where($fileQuery)
|
||||
$files = File::with($query['with'])
|
||||
->where($query['file']['where'])
|
||||
->sortable()
|
||||
->skip($filesSkip)
|
||||
->take($filesTake)
|
||||
@@ -50,15 +66,15 @@ class BrowseFolderController
|
||||
$files ? json_decode((new FilesCollection($files))->toJson(), true) : null,
|
||||
])->collapse();
|
||||
|
||||
list($paginate, $links) = generatePaginationCounts($totalItemsCount);
|
||||
[$paginate, $links] = formatPaginatorMetadata($totalEntries);
|
||||
|
||||
return [
|
||||
return response()->json([
|
||||
'data' => $entries,
|
||||
'links' => $links,
|
||||
'meta' => [
|
||||
'paginate' => $paginate,
|
||||
'root' => $root_id ? new FolderResource(Folder::findOrFail($root_id)) : null,
|
||||
'root' => $rootId ? new FolderResource(Folder::findOrFail($rootId)) : null,
|
||||
],
|
||||
];
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,29 +1,58 @@
|
||||
<?php
|
||||
namespace Domain\Browsing\Controllers;
|
||||
|
||||
use App\Users\Models\User;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use DB;
|
||||
use Domain\Files\Models\File;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Domain\Files\Resources\FilesCollection;
|
||||
|
||||
class BrowseLatestFilesController
|
||||
{
|
||||
public function __invoke(Request $request): array
|
||||
public function __invoke(): JsonResponse
|
||||
{
|
||||
$user = User::with([
|
||||
'latestUploads' => fn ($query) => $query->sortable(['created_at' => 'desc']),
|
||||
])
|
||||
->where('id', Auth::id())
|
||||
->first();
|
||||
$entriesPerPage = config('vuefilemanager.paginate.perPage');
|
||||
|
||||
list($data, $paginate, $links) = groupPaginate($request, null, $user->latestUploads);
|
||||
$page = request()->has('page')
|
||||
? request()->input('page')
|
||||
: 'all';
|
||||
|
||||
return [
|
||||
'data' => $data,
|
||||
$totalFiles = DB::table('files')
|
||||
->where('user_id', auth()->id())
|
||||
->whereNull('deleted_at')
|
||||
->count();
|
||||
|
||||
$getWith = [
|
||||
'parent:id,name',
|
||||
'shared:token,id,item_id,permission,is_protected,expire_in',
|
||||
];
|
||||
|
||||
// Get paginator data
|
||||
[$paginate, $links] = formatPaginatorMetadata($totalFiles);
|
||||
|
||||
// Get all files
|
||||
if ($page === 'all') {
|
||||
$files = File::with($getWith)
|
||||
->where('user_id', auth()->id())
|
||||
->sortable(['created_at' => 'desc'])
|
||||
->get();
|
||||
}
|
||||
|
||||
// Get certain page
|
||||
if ($page !== 'all') {
|
||||
$files = File::with($getWith)
|
||||
->where('user_id', auth()->id())
|
||||
->sortable(['created_at' => 'desc'])
|
||||
->skip($entriesPerPage * ($page - 1))
|
||||
->take($entriesPerPage)
|
||||
->get();
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'data' => new FilesCollection($files),
|
||||
'links' => $links,
|
||||
'meta' => [
|
||||
'paginate' => $paginate,
|
||||
'root' => null,
|
||||
],
|
||||
];
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
<?php
|
||||
namespace Domain\Browsing\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Domain\Files\Models\File;
|
||||
use Domain\Sharing\Models\Share;
|
||||
use Domain\Folders\Models\Folder;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Domain\Files\Resources\FilesCollection;
|
||||
use Domain\Folders\Resources\FolderCollection;
|
||||
|
||||
class BrowseSharedController
|
||||
{
|
||||
public function __invoke(Request $request): JsonResponse
|
||||
{
|
||||
$userId = auth()->id();
|
||||
|
||||
$page = request()->has('page')
|
||||
? request()->input('page')
|
||||
: 'all';
|
||||
|
||||
// Get shared folders and files
|
||||
$parentIds = Share::where('user_id', $userId)
|
||||
->where('type', 'folder')
|
||||
->pluck('item_id')
|
||||
->toArray();
|
||||
|
||||
$fileIds = Share::where('user_id', $userId)
|
||||
->where('type', '!=', 'folder')
|
||||
->pluck('item_id')
|
||||
->toArray();
|
||||
|
||||
$query = [
|
||||
'folder' => [
|
||||
'where' => [
|
||||
'user_id' => $userId,
|
||||
],
|
||||
'whereIn' => [
|
||||
'id' => $parentIds,
|
||||
],
|
||||
],
|
||||
'file' => [
|
||||
'where' => [
|
||||
'user_id' => $userId,
|
||||
],
|
||||
'whereIn' => [
|
||||
'id' => $fileIds,
|
||||
],
|
||||
],
|
||||
'with' => [
|
||||
'parent',
|
||||
'shared:token,id,item_id,permission,is_protected,expire_in',
|
||||
],
|
||||
];
|
||||
|
||||
[$foldersTake, $foldersSkip, $filesTake, $filesSkip, $totalEntries] = getRecordsCount($query, $page);
|
||||
|
||||
$folders = Folder::with($query['with'])
|
||||
->where($query['folder']['where'])
|
||||
->whereIn('id', $parentIds, )
|
||||
->sortable()
|
||||
->skip($foldersSkip)
|
||||
->take($foldersTake)
|
||||
->get();
|
||||
|
||||
$files = File::with($query['with'])
|
||||
->where($query['file']['where'])
|
||||
->whereIn('id', $fileIds)
|
||||
->sortable()
|
||||
->skip($filesSkip)
|
||||
->take($filesTake)
|
||||
->get();
|
||||
|
||||
// Collect entries
|
||||
$entries = collect([
|
||||
$folders ? json_decode((new FolderCollection($folders))->toJson(), true) : null,
|
||||
$files ? json_decode((new FilesCollection($files))->toJson(), true) : null,
|
||||
])->collapse();
|
||||
|
||||
// Get paginator metadata
|
||||
[$paginate, $links] = formatPaginatorMetadata($totalEntries);
|
||||
|
||||
// Collect folders and files to single array
|
||||
return response()->json([
|
||||
'data' => $entries,
|
||||
'links' => $links,
|
||||
'meta' => [
|
||||
'paginate' => $paginate,
|
||||
'root' => null,
|
||||
],
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -1,50 +0,0 @@
|
||||
<?php
|
||||
namespace Domain\Browsing\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Domain\Files\Models\File;
|
||||
use Domain\Sharing\Models\Share;
|
||||
use Domain\Folders\Models\Folder;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class BrowseSharedItemsController
|
||||
{
|
||||
public function __invoke(Request $request): array
|
||||
{
|
||||
$user_id = Auth::id();
|
||||
|
||||
// Get shared folders and files
|
||||
$parent_ids = Share::where('user_id', $user_id)
|
||||
->where('type', 'folder')
|
||||
->pluck('item_id');
|
||||
|
||||
$file_ids = Share::where('user_id', $user_id)
|
||||
->where('type', '!=', 'folder')
|
||||
->pluck('item_id');
|
||||
|
||||
// Get folders and files
|
||||
$folders = Folder::with(['parent', 'shared:token,id,item_id,permission,is_protected,expire_in'])
|
||||
->where('user_id', $user_id)
|
||||
->whereIn('id', $parent_ids)
|
||||
->sortable()
|
||||
->get();
|
||||
|
||||
$files = File::with(['parent', 'shared:token,id,item_id,permission,is_protected,expire_in'])
|
||||
->where('user_id', $user_id)
|
||||
->whereIn('id', $file_ids)
|
||||
->sortable()
|
||||
->get();
|
||||
|
||||
list($data, $paginate, $links) = groupPaginate($request, $folders, $files);
|
||||
|
||||
// Collect folders and files to single array
|
||||
return [
|
||||
'data' => $data,
|
||||
'links' => $links,
|
||||
'meta' => [
|
||||
'paginate' => $paginate,
|
||||
'root' => null,
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,76 +0,0 @@
|
||||
<?php
|
||||
namespace Domain\Browsing\Controllers;
|
||||
|
||||
use Str;
|
||||
use Domain\Files\Models\File;
|
||||
use Domain\Folders\Models\Folder;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Domain\Files\Resources\FilesCollection;
|
||||
use Domain\Folders\Resources\FolderCollection;
|
||||
|
||||
class BrowseTrashContentController
|
||||
{
|
||||
public function __invoke(string $id): array
|
||||
{
|
||||
$userId = Auth::id();
|
||||
$rootId = Str::isUuid($id) ? $id : null;
|
||||
|
||||
$requestedFolder = $rootId
|
||||
? Folder::withTrashed()
|
||||
->findOrFail($rootId)
|
||||
: null;
|
||||
|
||||
if ($rootId) {
|
||||
// Get folders and files
|
||||
$folders = Folder::onlyTrashed()
|
||||
->with('parent')
|
||||
->where('parent_id', $rootId)
|
||||
->sortable()
|
||||
->get();
|
||||
|
||||
$files = File::onlyTrashed()
|
||||
->with('parent')
|
||||
->where('parent_id', $rootId)
|
||||
->sortable()
|
||||
->get();
|
||||
|
||||
// Collect folders and files to single array
|
||||
return [
|
||||
'folders' => new FolderCollection($folders),
|
||||
'files' => new FilesCollection($files),
|
||||
'root' => $requestedFolder,
|
||||
];
|
||||
}
|
||||
|
||||
// Get folders and files
|
||||
$folders_trashed = Folder::onlyTrashed()
|
||||
->with(['trashedFolders', 'parent'])
|
||||
->where('user_id', $userId)
|
||||
->get(['parent_id', 'id', 'name']);
|
||||
|
||||
$folders = Folder::onlyTrashed()
|
||||
->with(['parent'])
|
||||
->where('user_id', $userId)
|
||||
->whereIn('id', filter_folders_ids($folders_trashed))
|
||||
->sortable()
|
||||
->get();
|
||||
|
||||
// Get files trashed
|
||||
$files_trashed = File::onlyTrashed()
|
||||
->with(['parent'])
|
||||
->where('user_id', $userId)
|
||||
->where(function ($query) use ($folders_trashed) {
|
||||
$query->whereNull('parent_id');
|
||||
$query->orWhereNotIn('parent_id', array_values(array_unique(recursiveFind($folders_trashed->toArray(), 'id'))));
|
||||
})
|
||||
->sortable()
|
||||
->get();
|
||||
|
||||
// Collect folders and files to single array
|
||||
return [
|
||||
'folders' => new FolderCollection($folders),
|
||||
'files' => new FilesCollection($files_trashed),
|
||||
'root' => $requestedFolder,
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,140 @@
|
||||
<?php
|
||||
namespace Domain\Browsing\Controllers;
|
||||
|
||||
use Str;
|
||||
use Domain\Files\Models\File;
|
||||
use Domain\Folders\Models\Folder;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Domain\Files\Resources\FilesCollection;
|
||||
use Domain\Folders\Resources\FolderCollection;
|
||||
|
||||
class BrowseTrashController
|
||||
{
|
||||
public function __invoke(
|
||||
string $id
|
||||
): JsonResponse {
|
||||
$userId = auth()->id();
|
||||
|
||||
$rootId = Str::isUuid($id)
|
||||
? $id
|
||||
: null;
|
||||
|
||||
$requestedFolder = $rootId
|
||||
? Folder::withTrashed()
|
||||
->findOrFail($rootId)
|
||||
: null;
|
||||
|
||||
$page = request()->has('page')
|
||||
? request()->input('page')
|
||||
: 'all';
|
||||
|
||||
// Load trashed folder content
|
||||
if ($rootId) {
|
||||
// Prepare folder & file db query
|
||||
$query = [
|
||||
'folder' => [
|
||||
'where' => [
|
||||
'parent_id' => $rootId,
|
||||
],
|
||||
],
|
||||
'file' => [
|
||||
'where' => [
|
||||
'parent_id' => $rootId,
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
[$foldersTake, $foldersSkip, $filesTake, $filesSkip, $totalEntries] = getRecordsCount($query, $page);
|
||||
|
||||
// Get folders and files
|
||||
$folders = Folder::onlyTrashed()
|
||||
->with('parent')
|
||||
->where($query['folder']['where'])
|
||||
->sortable()
|
||||
->skip($foldersSkip)
|
||||
->take($foldersTake)
|
||||
->get();
|
||||
|
||||
$files = File::onlyTrashed()
|
||||
->with('parent')
|
||||
->where($query['file']['where'])
|
||||
->sortable()
|
||||
->skip($filesSkip)
|
||||
->take($filesTake)
|
||||
->get();
|
||||
|
||||
$entries = collect([
|
||||
$folders ? json_decode((new FolderCollection($folders))->toJson(), true) : null,
|
||||
$files ? json_decode((new FilesCollection($files))->toJson(), true) : null,
|
||||
])->collapse();
|
||||
|
||||
[$paginate, $links] = formatPaginatorMetadata($totalEntries);
|
||||
}
|
||||
|
||||
// Load trash root
|
||||
if (! $rootId) {
|
||||
// Get folders and files
|
||||
$folders_trashed = Folder::onlyTrashed()
|
||||
->with(['trashedFolders', 'parent'])
|
||||
->where('user_id', $userId)
|
||||
->get(['parent_id', 'id', 'name']);
|
||||
|
||||
// Prepare folder & file db query
|
||||
$query = [
|
||||
'folder' => [
|
||||
'where' => [
|
||||
'user_id' => $userId,
|
||||
],
|
||||
'whereIn' => [
|
||||
'id' => filter_folders_ids($folders_trashed),
|
||||
],
|
||||
],
|
||||
'file' => [
|
||||
'where' => function ($query) use ($folders_trashed, $userId) {
|
||||
$query
|
||||
->where('user_id', $userId)
|
||||
->whereNull('parent_id')
|
||||
->orWhereNotIn('parent_id', array_values(array_unique(recursiveFind($folders_trashed->toArray(), 'id'))));
|
||||
},
|
||||
],
|
||||
];
|
||||
|
||||
[$foldersTake, $foldersSkip, $filesTake, $filesSkip, $totalEntries] = getRecordsCount($query, $page, true);
|
||||
|
||||
$folders = Folder::onlyTrashed()
|
||||
->with(['parent'])
|
||||
->where($query['folder']['where'])
|
||||
->whereIn('id', filter_folders_ids($folders_trashed))
|
||||
->sortable()
|
||||
->skip($foldersSkip)
|
||||
->take($foldersTake)
|
||||
->get();
|
||||
|
||||
$files = File::onlyTrashed()
|
||||
->with(['parent'])
|
||||
->where($query['file']['where'])
|
||||
->sortable()
|
||||
->skip($filesSkip)
|
||||
->take($filesTake)
|
||||
->get();
|
||||
|
||||
// Collect folders and files to single array
|
||||
$entries = collect([
|
||||
$folders ? json_decode((new FolderCollection($folders))->toJson(), true) : null,
|
||||
$files ? json_decode((new FilesCollection($files))->toJson(), true) : null,
|
||||
])->collapse();
|
||||
|
||||
[$paginate, $links] = formatPaginatorMetadata($totalEntries);
|
||||
}
|
||||
|
||||
// Collect folders and files to single array
|
||||
return response()->json([
|
||||
'data' => $entries,
|
||||
'links' => $links,
|
||||
'meta' => [
|
||||
'paginate' => $paginate,
|
||||
'root' => $requestedFolder,
|
||||
],
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -35,24 +35,57 @@ class VisitorBrowseFolderController
|
||||
// Get requested folder
|
||||
$requestedFolder = Folder::findOrFail($id);
|
||||
|
||||
// Get files and folders
|
||||
$folders = Folder::where('user_id', $shared->user_id)
|
||||
->where('parent_id', $id)
|
||||
$page = request()->has('page')
|
||||
? request()->input('page')
|
||||
: 'all';
|
||||
|
||||
// Prepare folder & file db query
|
||||
$query = [
|
||||
'folder' => [
|
||||
'where' => [
|
||||
'parent_id' => $id,
|
||||
'user_id' => $shared->user_id,
|
||||
],
|
||||
],
|
||||
'file' => [
|
||||
'where' => [
|
||||
'parent_id' => $id,
|
||||
'user_id' => $shared->user_id,
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
[$foldersTake, $foldersSkip, $filesTake, $filesSkip, $totalEntries] = getRecordsCount($query, $page);
|
||||
|
||||
$folders = Folder::where($query['folder']['where'])
|
||||
->sortable()
|
||||
->skip($foldersSkip)
|
||||
->take($foldersTake)
|
||||
->get();
|
||||
|
||||
$files = File::where('user_id', $shared->user_id)
|
||||
->where('parent_id', $id)
|
||||
$files = File::where($query['file']['where'])
|
||||
->sortable()
|
||||
->skip($filesSkip)
|
||||
->take($filesTake)
|
||||
->get();
|
||||
|
||||
// Set thumbnail links for public files
|
||||
$files->map(fn ($file) => $file->setSharedPublicUrl($shared->token));
|
||||
|
||||
$entries = collect([
|
||||
$folders ? json_decode((new FolderCollection($folders))->toJson(), true) : null,
|
||||
$files ? json_decode((new FilesCollection($files))->toJson(), true) : null,
|
||||
])->collapse();
|
||||
|
||||
[$paginate, $links] = formatPaginatorMetadata($totalEntries);
|
||||
|
||||
return response()->json([
|
||||
'folders' => new FolderCollection($folders),
|
||||
'files' => new FilesCollection($files),
|
||||
'root' => new FolderResource($requestedFolder),
|
||||
'data' => $entries,
|
||||
'links' => $links,
|
||||
'meta' => [
|
||||
'paginate' => $paginate,
|
||||
'root' => new FolderResource($requestedFolder),
|
||||
],
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,9 +4,9 @@ namespace Domain\Files\Controllers;
|
||||
use Gate;
|
||||
use Domain\Files\Models\File;
|
||||
use Domain\Sharing\Models\Share;
|
||||
use Illuminate\Auth\Access\AuthorizationException;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Domain\Files\Resources\FileResource;
|
||||
use Illuminate\Auth\Access\AuthorizationException;
|
||||
|
||||
/**
|
||||
* Get shared file record
|
||||
|
||||
@@ -4,8 +4,6 @@ namespace Domain\Invoices\Controllers;
|
||||
use Domain\Settings\Models\Setting;
|
||||
use Illuminate\Contracts\View\View;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Contracts\View\Factory;
|
||||
use Illuminate\Contracts\Foundation\Application;
|
||||
use App\Users\Actions\FormatUsageEstimatesAction;
|
||||
use VueFileManager\Subscription\Domain\Transactions\Models\Transaction;
|
||||
|
||||
|
||||
+1
-1
@@ -2,11 +2,11 @@
|
||||
namespace Domain\RemoteUpload\Controllers;
|
||||
|
||||
use Domain\Folders\Models\Folder;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Domain\UploadRequest\Models\UploadRequest;
|
||||
use Domain\RemoteUpload\Requests\RemoteUploadRequest;
|
||||
use Domain\RemoteUpload\Actions\GetContentFromExternalSource;
|
||||
use Domain\UploadRequest\Actions\CreateUploadRequestRootFolderAction;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
class UploadFilesRemotelyForUploadRequestController
|
||||
{
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
<?php
|
||||
|
||||
namespace Domain\Settings\Controllers;
|
||||
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace Domain\Settings\Controllers;
|
||||
|
||||
use Domain\Settings\Events\TestWebsocketConnectionEvent;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Domain\Settings\Events\TestWebsocketConnectionEvent;
|
||||
|
||||
class TestWebsocketConnectionController
|
||||
{
|
||||
@@ -14,8 +13,8 @@ class TestWebsocketConnectionController
|
||||
);
|
||||
|
||||
return response()->json([
|
||||
'type' => 'success',
|
||||
'type' => 'success',
|
||||
'message' => 'The websocket test event was successfully dispatched.',
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -103,7 +103,7 @@ class StoreAppSettingsController extends Controller
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'type' => 'success',
|
||||
'type' => 'success',
|
||||
'message' => 'The app settings was set successfully',
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@ namespace Domain\SetupWizard\Controllers;
|
||||
use DB;
|
||||
use Artisan;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Response;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Doctrine\DBAL\Driver\PDOException;
|
||||
use Symfony\Component\HttpKernel\Exception\HttpException;
|
||||
|
||||
@@ -195,7 +195,7 @@ class StoreEnvironmentSettingsController extends Controller
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'type' => 'success',
|
||||
'type' => 'success',
|
||||
'message' => 'The environment was set successfully',
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -6,55 +6,125 @@ use Gate;
|
||||
use Illuminate\Http\Request;
|
||||
use Domain\Files\Models\File;
|
||||
use Domain\Folders\Models\Folder;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Domain\Files\Resources\FilesCollection;
|
||||
use Domain\Folders\Resources\FolderResource;
|
||||
use Domain\Folders\Resources\FolderCollection;
|
||||
|
||||
class BrowseSharedWithMeController
|
||||
{
|
||||
public function __invoke(Request $request, $id): array
|
||||
{
|
||||
$id = Str::isUuid($id) ? $id : null;
|
||||
public function __invoke(
|
||||
Request $request,
|
||||
string $id,
|
||||
): JsonResponse {
|
||||
// Get root ID
|
||||
$id = Str::isUuid($id)
|
||||
? $id
|
||||
: null;
|
||||
|
||||
// Get page number
|
||||
$page = request()->has('page')
|
||||
? request()->input('page')
|
||||
: 'all';
|
||||
|
||||
if ($id) {
|
||||
$teamFolder = Folder::findOrFail($id)->getLatestParent();
|
||||
|
||||
if (! Gate::any(['can-edit', 'can-view'], [$teamFolder, null])) {
|
||||
abort(403, 'Access Denied');
|
||||
}
|
||||
|
||||
$folders = Folder::with(['parent:id,name'])
|
||||
->where('parent_id', $id)
|
||||
->sortable()
|
||||
->get();
|
||||
|
||||
$files = File::with(['parent:id,name'])
|
||||
->where('parent_id', $id)
|
||||
->sortable()
|
||||
->get();
|
||||
[$teamFolder, $folders, $files, $totalEntries] = $this->getSingleSharedWithMeFolderContent($id, $page);
|
||||
} else {
|
||||
[$folders, $files, $totalEntries] = $this->getRootFolders($page);
|
||||
}
|
||||
|
||||
if (! $id) {
|
||||
$sharedFolderIds = DB::table('team_folder_members')
|
||||
->where('user_id', Auth::id())
|
||||
->whereIn('permission', ['can-edit', 'can-view'])
|
||||
->pluck('parent_id');
|
||||
// Get paginator data
|
||||
[$paginate, $links] = formatPaginatorMetadata($totalEntries);
|
||||
|
||||
$folders = Folder::whereIn('id', $sharedFolderIds)
|
||||
->sortable()
|
||||
->get();
|
||||
// Collect entries
|
||||
$entries = collect([
|
||||
$folders ? json_decode((new FolderCollection($folders))->toJson(), true) : null,
|
||||
$files ? json_decode((new FilesCollection($files))->toJson(), true) : null,
|
||||
])->collapse();
|
||||
|
||||
return response()->json([
|
||||
'data' => $entries,
|
||||
'links' => $links,
|
||||
'meta' => [
|
||||
'paginate' => $paginate,
|
||||
'teamFolder' => $id
|
||||
? new FolderResource($teamFolder)
|
||||
: null,
|
||||
'root' => $id
|
||||
? new FolderResource(Folder::findOrFail($id))
|
||||
: null,
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
private function getRootFolders(mixed $page): array
|
||||
{
|
||||
$entriesPerPage = config('vuefilemanager.paginate.perPage');
|
||||
|
||||
$sharedFolderIds = DB::table('team_folder_members')
|
||||
->where('user_id', auth()->id())
|
||||
->whereIn('permission', ['can-edit', 'can-view'])
|
||||
->pluck('parent_id');
|
||||
|
||||
$folders = Folder::whereIn('id', $sharedFolderIds)
|
||||
->sortable()
|
||||
->skip($entriesPerPage * ($page - 1))
|
||||
->take($entriesPerPage)
|
||||
->get();
|
||||
|
||||
$totalEntries = DB::table('folders')
|
||||
->whereIn('id', $sharedFolderIds)
|
||||
->count();
|
||||
|
||||
$files = null;
|
||||
|
||||
return [$folders, $files, $totalEntries];
|
||||
}
|
||||
|
||||
private function getSingleSharedWithMeFolderContent(string|null $id, mixed $page): array
|
||||
{
|
||||
$teamFolder = Folder::findOrFail($id)
|
||||
->getLatestParent();
|
||||
|
||||
if (! Gate::any(['can-edit', 'can-view'], [$teamFolder, null])) {
|
||||
abort(
|
||||
response()->json(accessDeniedError(), 403)
|
||||
);
|
||||
}
|
||||
|
||||
list($data, $paginate, $links) = groupPaginate($request, $folders, $files ?? null);
|
||||
|
||||
return [
|
||||
'data' => $data,
|
||||
'teamFolder' => $id ? new FolderResource($teamFolder) : null,
|
||||
'links' => $links,
|
||||
'meta' => [
|
||||
'paginate' => $paginate,
|
||||
'root' => $id ? new FolderResource(Folder::findOrFail($id)) : null,
|
||||
$query = [
|
||||
'folder' => [
|
||||
'where' => [
|
||||
'parent_id' => $id,
|
||||
],
|
||||
],
|
||||
'file' => [
|
||||
'where' => [
|
||||
'parent_id' => $id,
|
||||
],
|
||||
],
|
||||
'with' => [
|
||||
'parent:id,name',
|
||||
],
|
||||
];
|
||||
|
||||
[$foldersTake, $foldersSkip, $filesTake, $filesSkip, $totalEntries] = getRecordsCount($query, $page);
|
||||
|
||||
$folders = Folder::with($query['with'])
|
||||
->where($query['folder']['where'])
|
||||
->sortable()
|
||||
->skip($foldersSkip)
|
||||
->take($foldersTake)
|
||||
->get();
|
||||
|
||||
$files = File::with($query['with'])
|
||||
->where($query['file']['where'])
|
||||
->sortable()
|
||||
->skip($filesSkip)
|
||||
->take($filesTake)
|
||||
->get();
|
||||
|
||||
return [$teamFolder, $folders, $files, $totalEntries];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
namespace Domain\Teams\Controllers;
|
||||
|
||||
use Domain\Folders\Models\Folder;
|
||||
use Illuminate\Auth\Access\AuthorizationException;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Gate;
|
||||
use Domain\Teams\Models\TeamFolderMember;
|
||||
use Domain\Folders\Resources\FolderResource;
|
||||
use Illuminate\Auth\Access\AuthorizationException;
|
||||
use Domain\Teams\Requests\ConvertIntoTeamFolderRequest;
|
||||
use Domain\Teams\Actions\InviteMembersIntoTeamFolderAction;
|
||||
use Domain\Teams\Actions\SetTeamFolderPropertyForAllChildrenAction;
|
||||
|
||||
@@ -2,17 +2,17 @@
|
||||
namespace Domain\Teams\Controllers;
|
||||
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Http\Request;
|
||||
use Domain\Files\Models\File;
|
||||
use Domain\Folders\Models\Folder;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Domain\Teams\Models\TeamFolderMember;
|
||||
use Domain\Teams\DTO\CreateTeamFolderData;
|
||||
use Domain\Files\Resources\FilesCollection;
|
||||
use Domain\Folders\Resources\FolderResource;
|
||||
use Domain\Teams\Actions\UpdateMembersAction;
|
||||
use Domain\Folders\Resources\FolderCollection;
|
||||
use Domain\Teams\Actions\UpdateInvitationsAction;
|
||||
use Domain\Teams\Requests\CreateTeamFolderRequest;
|
||||
use Domain\Teams\Requests\UpdateTeamFolderMembersRequest;
|
||||
@@ -27,41 +27,97 @@ class TeamFoldersController extends Controller
|
||||
) {
|
||||
}
|
||||
|
||||
public function show(Request $request, $id): array
|
||||
public function show($id): JsonResponse
|
||||
{
|
||||
$id = Str::isUuid($id) ? $id : null;
|
||||
// Get root ID
|
||||
$id = Str::isUuid($id)
|
||||
? $id
|
||||
: null;
|
||||
|
||||
// Get page number
|
||||
$page = request()->has('page')
|
||||
? request()->input('page')
|
||||
: 'all';
|
||||
|
||||
$entriesPerPage = config('vuefilemanager.paginate.perPage');
|
||||
|
||||
// TODO: check privileges
|
||||
|
||||
if ($id) {
|
||||
$folders = Folder::where('parent_id', $id)
|
||||
->where('team_folder', true)
|
||||
$query = [
|
||||
'folder' => [
|
||||
'where' => [
|
||||
'parent_id' => $id,
|
||||
'team_folder' => true,
|
||||
],
|
||||
],
|
||||
'file' => [
|
||||
'where' => [
|
||||
'parent_id' => $id,
|
||||
],
|
||||
],
|
||||
'with' => [
|
||||
'parent:id,name',
|
||||
'shared:token,id,item_id,permission,is_protected,expire_in',
|
||||
],
|
||||
];
|
||||
|
||||
[$foldersTake, $foldersSkip, $filesTake, $filesSkip, $totalEntries] = getRecordsCount($query, $page);
|
||||
|
||||
$folders = Folder::with($query['with'])
|
||||
->where($query['folder']['where'])
|
||||
->sortable()
|
||||
->skip($foldersSkip)
|
||||
->take($foldersTake)
|
||||
->get();
|
||||
|
||||
$files = File::where('parent_id', $id)
|
||||
$files = File::with($query['with'])
|
||||
->where($query['file']['where'])
|
||||
->sortable()
|
||||
->skip($filesSkip)
|
||||
->take($filesTake)
|
||||
->get();
|
||||
}
|
||||
|
||||
if (! $id) {
|
||||
$folders = Folder::where('parent_id', null)
|
||||
->where('team_folder', true)
|
||||
->where('user_id', Auth::id())
|
||||
->where('user_id', auth()->id())
|
||||
->sortable()
|
||||
->skip($entriesPerPage * ($page - 1))
|
||||
->take($entriesPerPage)
|
||||
->get();
|
||||
|
||||
$totalEntries = DB::table('folders')
|
||||
->where('parent_id', null)
|
||||
->where('team_folder', true)
|
||||
->where('user_id', auth()->id())
|
||||
->count();
|
||||
|
||||
$files = null;
|
||||
}
|
||||
|
||||
list($data, $paginate, $links) = groupPaginate($request, $folders, $files ?? null);
|
||||
[$paginate, $links] = formatPaginatorMetadata($totalEntries);
|
||||
|
||||
$entries = collect([
|
||||
$folders ? json_decode((new FolderCollection($folders))->toJson(), true) : null,
|
||||
$files ? json_decode((new FilesCollection($files))->toJson(), true) : null,
|
||||
])->collapse();
|
||||
|
||||
// Collect folders and files to single array
|
||||
return [
|
||||
'data' => $data,
|
||||
'teamFolder' => $id ? new FolderResource(Folder::findOrFail($id)->getLatestParent()) : null,
|
||||
return response()->json([
|
||||
'data' => $entries,
|
||||
'links' => $links,
|
||||
'meta' => [
|
||||
'paginate' => $paginate,
|
||||
'root' => $id ? new FolderResource(Folder::findOrFail($id)) : null,
|
||||
'teamFolder' => $id
|
||||
? new FolderResource(Folder::findOrFail($id)->getLatestParent())
|
||||
: null,
|
||||
'root' => $id
|
||||
? new FolderResource(Folder::findOrFail($id))
|
||||
: null,
|
||||
],
|
||||
];
|
||||
]);
|
||||
}
|
||||
|
||||
public function store(
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
namespace Domain\Transactions\Controllers;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Domain\Transactions\Resources\TransactionCollection;
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace Domain\UploadRequest\Controllers;
|
||||
use Illuminate\Support\Str;
|
||||
use Domain\Files\Models\File;
|
||||
use Domain\Folders\Models\Folder;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Domain\Files\Resources\FilesCollection;
|
||||
use Domain\Folders\Resources\FolderResource;
|
||||
@@ -12,9 +13,13 @@ use Domain\UploadRequest\Models\UploadRequest;
|
||||
|
||||
class BrowseUploadRequestController extends Controller
|
||||
{
|
||||
public function __invoke(UploadRequest $uploadRequest, $id): array
|
||||
{
|
||||
$rootId = Str::isUuid($id) ? $id : $uploadRequest->id;
|
||||
public function __invoke(
|
||||
UploadRequest $uploadRequest,
|
||||
string $id,
|
||||
): JsonResponse {
|
||||
$rootId = Str::isUuid($id)
|
||||
? $id
|
||||
: $uploadRequest->id;
|
||||
|
||||
$folders = Folder::with(['parent:id,name'])
|
||||
->where('parent_id', $rootId)
|
||||
@@ -30,11 +35,16 @@ class BrowseUploadRequestController extends Controller
|
||||
->get()
|
||||
->each(fn ($file) => $file->setUploadRequestPublicUrl($uploadRequest->id));
|
||||
|
||||
// Collect folders and files to single array
|
||||
return [
|
||||
'folders' => new FolderCollection($folders),
|
||||
'files' => new FilesCollection($files),
|
||||
'root' => new FolderResource(Folder::find($rootId)),
|
||||
];
|
||||
$entries = collect([
|
||||
$folders ? json_decode((new FolderCollection($folders))->toJson(), true) : null,
|
||||
$files ? json_decode((new FilesCollection($files))->toJson(), true) : null,
|
||||
])->collapse();
|
||||
|
||||
return response()->json([
|
||||
'data' => $entries,
|
||||
'meta' => [
|
||||
'root' => new FolderResource(Folder::find($rootId)),
|
||||
],
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<?php
|
||||
namespace Domain\UploadRequest\Controllers;
|
||||
|
||||
use App\Users\Models\User;
|
||||
use Gate;
|
||||
use Notification;
|
||||
use App\Users\Models\User;
|
||||
use Domain\Folders\Models\Folder;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<?php
|
||||
namespace Domain\UploadRequest\Controllers;
|
||||
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Domain\Folders\Models\Folder;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Domain\UploadRequest\Models\UploadRequest;
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ class MoveItemInUploadRequestController extends Controller
|
||||
}
|
||||
|
||||
$item->update([
|
||||
'parent_id' => $request->input('to_id') ?? $uploadRequest->id
|
||||
'parent_id' => $request->input('to_id') ?? $uploadRequest->id,
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
<?php
|
||||
namespace Domain\UploadRequest\Controllers;
|
||||
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Domain\Files\Resources\FileResource;
|
||||
use Domain\Folders\Resources\FolderResource;
|
||||
use Domain\Items\Requests\RenameItemRequest;
|
||||
use Domain\UploadRequest\Models\UploadRequest;
|
||||
use Domain\Folders\Actions\UpdateFolderPropertyAction;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Support\Demo\Actions\FakeRenameFileOrFolderAction;
|
||||
|
||||
class RenameFileOrFolderController extends Controller
|
||||
|
||||
@@ -67,7 +67,7 @@ class UploadRequestNotification extends Notification implements ShouldQueue
|
||||
'type' => 'url',
|
||||
'params' => [
|
||||
'target' => 'blank',
|
||||
'url' => url("/request/{$this->uploadRequest->id}/upload"),
|
||||
'url' => url("/request/{$this->uploadRequest->id}/upload"),
|
||||
'button' => __t('upload_files'),
|
||||
],
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user