mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-18 16:22:14 +00:00
it move file to another folder in upload request
This commit is contained in:
5
resources/js/store/modules/fileFunctions.js
vendored
5
resources/js/store/modules/fileFunctions.js
vendored
@@ -58,7 +58,10 @@ const actions = {
|
|||||||
if (!noSelectedItem) commit('CLIPBOARD_CLEAR')
|
if (!noSelectedItem) commit('CLIPBOARD_CLEAR')
|
||||||
|
|
||||||
// Get route
|
// Get route
|
||||||
let route = getters.sharedDetail ? `/api/editor/move/${router.currentRoute.params.token}` : '/api/move'
|
let route = {
|
||||||
|
RequestUpload: `/api/upload-request/${router.currentRoute.params.token}/move`,
|
||||||
|
Public: `/api/editor/move/${router.currentRoute.params.token}`,
|
||||||
|
}[router.currentRoute.name] || '/api/move'
|
||||||
|
|
||||||
let moveToId = null
|
let moveToId = null
|
||||||
|
|
||||||
|
|||||||
@@ -3,22 +3,27 @@
|
|||||||
use Domain\UploadRequest\Controllers\CreateFolderController;
|
use Domain\UploadRequest\Controllers\CreateFolderController;
|
||||||
use Domain\UploadRequest\Controllers\DeleteFileOrFolderController;
|
use Domain\UploadRequest\Controllers\DeleteFileOrFolderController;
|
||||||
use Domain\UploadRequest\Controllers\GetFolderTreeForUploadRequestController;
|
use Domain\UploadRequest\Controllers\GetFolderTreeForUploadRequestController;
|
||||||
|
use Domain\UploadRequest\Controllers\MoveItemInUploadRequestController;
|
||||||
use Tests\Domain\UploadRequest\RenameFileOrFolderController;
|
use Tests\Domain\UploadRequest\RenameFileOrFolderController;
|
||||||
use Domain\UploadRequest\Controllers\GetUploadRequestController;
|
use Domain\UploadRequest\Controllers\GetUploadRequestController;
|
||||||
use Domain\UploadRequest\Controllers\CreateUploadRequestController;
|
use Domain\UploadRequest\Controllers\CreateUploadRequestController;
|
||||||
use Domain\UploadRequest\Controllers\SetUploadRequestAsFilledController;
|
use Domain\UploadRequest\Controllers\SetUploadRequestAsFilledController;
|
||||||
use Domain\UploadRequest\Controllers\UploadFilesForUploadRequestController;
|
use Domain\UploadRequest\Controllers\UploadFilesForUploadRequestController;
|
||||||
|
|
||||||
Route::get('/{uploadRequest}', GetUploadRequestController::class);
|
Route::group(['middleware' => 'upload-request'], function() {
|
||||||
Route::delete('/{uploadRequest}', SetUploadRequestAsFilledController::class);
|
Route::get('/{uploadRequest}', GetUploadRequestController::class);
|
||||||
Route::post('/{uploadRequest}/upload', UploadFilesForUploadRequestController::class);
|
Route::delete('/{uploadRequest}', SetUploadRequestAsFilledController::class);
|
||||||
|
Route::post('/{uploadRequest}/upload', UploadFilesForUploadRequestController::class);
|
||||||
|
|
||||||
// Edit
|
// Edit
|
||||||
Route::patch('/{uploadRequest}/rename/{id}', RenameFileOrFolderController::class);
|
Route::patch('/{uploadRequest}/rename/{id}', RenameFileOrFolderController::class);
|
||||||
Route::post('/{uploadRequest}/create-folder', CreateFolderController::class);
|
Route::post('/{uploadRequest}/create-folder', CreateFolderController::class);
|
||||||
Route::post('/{uploadRequest}/remove', DeleteFileOrFolderController::class);
|
Route::post('/{uploadRequest}/remove', DeleteFileOrFolderController::class);
|
||||||
|
|
||||||
Route::get('/{uploadRequest}/navigation', GetFolderTreeForUploadRequestController::class);
|
// Browsing
|
||||||
|
Route::get('/{uploadRequest}/navigation', GetFolderTreeForUploadRequestController::class);
|
||||||
|
Route::post('/{uploadRequest}/move', MoveItemInUploadRequestController::class);
|
||||||
|
});
|
||||||
|
|
||||||
Route::group(['middleware' => ['auth:sanctum']], function () {
|
Route::group(['middleware' => ['auth:sanctum']], function () {
|
||||||
Route::post('/', CreateUploadRequestController::class);
|
Route::post('/', CreateUploadRequestController::class);
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace App\Http;
|
namespace App\Http;
|
||||||
|
|
||||||
|
use Domain\UploadRequest\Middleware\ProtectUploadRequestRoutes;
|
||||||
use Fruitcake\Cors\HandleCors;
|
use Fruitcake\Cors\HandleCors;
|
||||||
use Support\Middleware\TrimStrings;
|
use Support\Middleware\TrimStrings;
|
||||||
use Support\Middleware\TrustProxies;
|
use Support\Middleware\TrustProxies;
|
||||||
@@ -75,5 +76,6 @@ class Kernel extends HttpKernel
|
|||||||
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
|
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
|
||||||
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
|
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
|
||||||
'setup-wizard' => ProtectSetupWizardRoutes::class,
|
'setup-wizard' => ProtectSetupWizardRoutes::class,
|
||||||
|
'upload-request' => ProtectUploadRequestRoutes::class,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,11 +19,6 @@ class CreateFolderController
|
|||||||
|
|
||||||
public function __invoke(CreateFolderRequest $request, UploadRequest $uploadRequest)
|
public function __invoke(CreateFolderRequest $request, UploadRequest $uploadRequest)
|
||||||
{
|
{
|
||||||
// Check if upload request is active
|
|
||||||
if ($uploadRequest->status !== 'active') {
|
|
||||||
return response('Gone', 410);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check privileges
|
// Check privileges
|
||||||
if (! in_array($request->input('parent_id'), getChildrenFolderIds($uploadRequest->id))) {
|
if (! in_array($request->input('parent_id'), getChildrenFolderIds($uploadRequest->id))) {
|
||||||
return response('Access Denied', 403);
|
return response('Access Denied', 403);
|
||||||
|
|||||||
@@ -7,18 +7,12 @@ use Domain\Folders\Models\Folder;
|
|||||||
use Domain\Items\Requests\DeleteItemRequest;
|
use Domain\Items\Requests\DeleteItemRequest;
|
||||||
use Domain\UploadRequest\Models\UploadRequest;
|
use Domain\UploadRequest\Models\UploadRequest;
|
||||||
use Illuminate\Support\Arr;
|
use Illuminate\Support\Arr;
|
||||||
use Illuminate\Support\Facades\Log;
|
|
||||||
use Illuminate\Support\Facades\Storage;
|
use Illuminate\Support\Facades\Storage;
|
||||||
|
|
||||||
class DeleteFileOrFolderController
|
class DeleteFileOrFolderController
|
||||||
{
|
{
|
||||||
public function __invoke(DeleteItemRequest $request, UploadRequest $uploadRequest)
|
public function __invoke(DeleteItemRequest $request, UploadRequest $uploadRequest)
|
||||||
{
|
{
|
||||||
// Check if upload request is active
|
|
||||||
if ($uploadRequest->status !== 'active') {
|
|
||||||
return response('Gone', 410);
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($request->input('items') as $file) {
|
foreach ($request->input('items') as $file) {
|
||||||
// Get file or folder item
|
// Get file or folder item
|
||||||
$item = get_item($file['type'], $file['id']);
|
$item = get_item($file['type'], $file['id']);
|
||||||
|
|||||||
@@ -5,16 +5,14 @@ namespace Domain\UploadRequest\Controllers;
|
|||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use Domain\Folders\Models\Folder;
|
use Domain\Folders\Models\Folder;
|
||||||
use Domain\UploadRequest\Models\UploadRequest;
|
use Domain\UploadRequest\Models\UploadRequest;
|
||||||
|
use Illuminate\Contracts\Foundation\Application;
|
||||||
|
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||||
|
use Illuminate\Http\Response;
|
||||||
|
|
||||||
class GetFolderTreeForUploadRequestController extends Controller
|
class GetFolderTreeForUploadRequestController extends Controller
|
||||||
{
|
{
|
||||||
public function __invoke(UploadRequest $uploadRequest)
|
public function __invoke(UploadRequest $uploadRequest): Application|ResponseFactory|Response|array
|
||||||
{
|
{
|
||||||
// Check if upload request is active
|
|
||||||
if ($uploadRequest->status !== 'active') {
|
|
||||||
return response('Gone', 410);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get folders
|
// Get folders
|
||||||
$folders = Folder::with('folders:id,parent_id,name')
|
$folders = Folder::with('folders:id,parent_id,name')
|
||||||
->whereParentId($uploadRequest->id)
|
->whereParentId($uploadRequest->id)
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Domain\UploadRequest\Controllers;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Domain\Items\Requests\MoveItemRequest;
|
||||||
|
use Domain\UploadRequest\Models\UploadRequest;
|
||||||
|
|
||||||
|
class MoveItemInUploadRequestController extends Controller
|
||||||
|
{
|
||||||
|
public function __invoke(
|
||||||
|
MoveItemRequest $request,
|
||||||
|
UploadRequest $uploadRequest,
|
||||||
|
) {
|
||||||
|
foreach ($request->input('items') as $item) {
|
||||||
|
$item = get_item($item['type'], $item['id']);
|
||||||
|
|
||||||
|
// Check privileges
|
||||||
|
if (! in_array($item['parent_id'], getChildrenFolderIds($uploadRequest->id))) {
|
||||||
|
return response('Access Denied', 403);
|
||||||
|
}
|
||||||
|
|
||||||
|
$item->update(['parent_id' => $request->input('to_id')]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return response('Done.', 204);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -21,11 +21,6 @@ class UploadFilesForUploadRequestController
|
|||||||
*/
|
*/
|
||||||
public function __invoke(\Domain\Files\Requests\UploadRequest $request, UploadRequest $uploadRequest)
|
public function __invoke(\Domain\Files\Requests\UploadRequest $request, UploadRequest $uploadRequest)
|
||||||
{
|
{
|
||||||
// Check if upload request is active
|
|
||||||
if ($uploadRequest->status !== 'active') {
|
|
||||||
return response('Gone', 410);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get upload request root folder query
|
// Get upload request root folder query
|
||||||
$folder = Folder::where('id', $uploadRequest->id);
|
$folder = Folder::where('id', $uploadRequest->id);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
namespace Domain\UploadRequest\Middleware;
|
||||||
|
|
||||||
|
use Closure;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class ProtectUploadRequestRoutes
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Prevent access for setup wizard controllers after initial app installation.
|
||||||
|
*/
|
||||||
|
public function handle(Request $request, Closure $next): mixed
|
||||||
|
{
|
||||||
|
// Check if upload request is active
|
||||||
|
if ($request->route()->parameter('uploadRequest')->status !== 'active') {
|
||||||
|
return response('Gone', 410);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $next($request);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -289,4 +289,48 @@ class UploadRequestEditingTest extends TestCase
|
|||||||
// Assert primary file was deleted
|
// Assert primary file was deleted
|
||||||
Storage::assertMissing("files/$user->id/fake-file.pdf");
|
Storage::assertMissing("files/$user->id/fake-file.pdf");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_move_file_to_another_folder_in_upload_request()
|
||||||
|
{
|
||||||
|
$user = User::factory()
|
||||||
|
->hasSettings()
|
||||||
|
->create();
|
||||||
|
|
||||||
|
$uploadRequest = UploadRequest::factory()
|
||||||
|
->create([
|
||||||
|
'status' => 'active',
|
||||||
|
'user_id' => $user->id,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$folder = Folder::factory()
|
||||||
|
->create([
|
||||||
|
'id' => $uploadRequest->id,
|
||||||
|
'user_id' => $user->id,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$file = File::factory()
|
||||||
|
->create([
|
||||||
|
'parent_id' => $uploadRequest->id,
|
||||||
|
'user_id' => $user->id,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this
|
||||||
|
->postJson("/api/upload-request/$uploadRequest->id/move", [
|
||||||
|
'to_id' => $folder->id,
|
||||||
|
'items' => [
|
||||||
|
[
|
||||||
|
'type' => 'file',
|
||||||
|
'id' => $file->id,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
])->assertStatus(204);
|
||||||
|
|
||||||
|
$this->assertDatabaseHas('files', [
|
||||||
|
'id' => $file->id,
|
||||||
|
'parent_id' => $folder->id,
|
||||||
|
]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user