mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-28 19:10:40 +00:00
added it_zip_folder_with_content_within_and_download test
This commit is contained in:
@@ -333,7 +333,7 @@ class EditItemsController extends Controller
|
|||||||
* @param $id
|
* @param $id
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function user_zip_folder(Request $request,$id)
|
public function user_zip_folder(Request $request, $id)
|
||||||
{
|
{
|
||||||
// Get user id
|
// Get user id
|
||||||
$user_id = Auth::id();
|
$user_id = Auth::id();
|
||||||
@@ -365,7 +365,7 @@ class EditItemsController extends Controller
|
|||||||
return response([
|
return response([
|
||||||
'url' => route('zip', $zip->id),
|
'url' => route('zip', $zip->id),
|
||||||
'name' => $zip->basename,
|
'name' => $zip->basename,
|
||||||
], 200);
|
], 201);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+19
-16
@@ -66,16 +66,16 @@ class Editor
|
|||||||
/**
|
/**
|
||||||
* Zip requested folder
|
* Zip requested folder
|
||||||
*
|
*
|
||||||
* @param $unique_id
|
* @param $id
|
||||||
* @param $shared
|
* @param $shared
|
||||||
* @return mixed
|
* @return mixed
|
||||||
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
|
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
|
||||||
*/
|
*/
|
||||||
public static function zip_folder($unique_id, $shared = null)
|
public static function zip_folder($id, $shared = null)
|
||||||
{
|
{
|
||||||
// Get folder
|
// Get folder
|
||||||
$requested_folder = Folder::with(['folders.files', 'files'])
|
$requested_folder = Folder::with(['folders.files', 'files'])
|
||||||
->where('unique_id', $unique_id)
|
->where('id', $id)
|
||||||
->where('user_id', Auth::id() ?? $shared->user_id)
|
->where('user_id', Auth::id() ?? $shared->user_id)
|
||||||
->with('folders')
|
->with('folders')
|
||||||
->first();
|
->first();
|
||||||
@@ -85,31 +85,34 @@ class Editor
|
|||||||
// Local storage instance
|
// Local storage instance
|
||||||
$disk_local = Storage::disk('local');
|
$disk_local = Storage::disk('local');
|
||||||
|
|
||||||
// Move file to local storage
|
// Move file to local storage from external storage service
|
||||||
if (!is_storage_driver('local')) {
|
if (!is_storage_driver('local')) {
|
||||||
|
$files->each(function ($file) use ($disk_local) {
|
||||||
foreach ($files as $file) {
|
|
||||||
try {
|
try {
|
||||||
$disk_local->put('temp/' . $file['basename'], Storage::get('files/' . $file['basename']));
|
$disk_local->put("temp/$file->basename", Storage::get("files/$file->user_id/$file->basename"));
|
||||||
} catch (FileNotFoundException $e) {
|
} catch (FileNotFoundException $e) {
|
||||||
throw new HttpException(404, 'File not found');
|
throw new HttpException(404, 'File not found');
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get zip path
|
// Get zip path
|
||||||
$zip_name = Str::random(16) . '-' . Str::slug($requested_folder->name) . '.zip';
|
$zip_name = Str::random(16) . '-' . Str::slug($requested_folder->name) . '.zip';
|
||||||
$zip_path = 'zip/' . $zip_name;
|
|
||||||
|
|
||||||
// Create zip
|
// Create zip
|
||||||
$zip = Madzipper::make(storage_path() . '/app/' . $zip_path);
|
$zip = Madzipper::make($disk_local->path("zip/$zip_name"));
|
||||||
|
|
||||||
// Get files folder on local storage drive
|
// Get files folder on local storage drive
|
||||||
$files_folder = is_storage_driver('local') ? 'file-manager' : 'temp';
|
$directory = is_storage_driver('local') ? 'files' : 'temp';
|
||||||
|
|
||||||
// Add files to zip
|
// Add files to zip
|
||||||
foreach ($files as $file) {
|
foreach ($files as $file) {
|
||||||
$zip->folder($file['folder_path'])->addString($file['name'], File::get(storage_path() . '/app/' . $files_folder . '/' . $file['basename']));
|
$zip
|
||||||
|
->folder($file['folder_path'])
|
||||||
|
->addString(
|
||||||
|
$file['name'],
|
||||||
|
File::get($disk_local->path("/$directory/$requested_folder->user_id/{$file['basename']}"))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close zip
|
// Close zip
|
||||||
@@ -224,18 +227,18 @@ class Editor
|
|||||||
* Rename item name
|
* Rename item name
|
||||||
*
|
*
|
||||||
* @param RenameItemRequest $request
|
* @param RenameItemRequest $request
|
||||||
* @param $unique_id
|
* @param $id
|
||||||
* @param null $shared
|
* @param null $shared
|
||||||
* @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model
|
* @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model
|
||||||
* @throws \Exception
|
* @throws \Exception
|
||||||
*/
|
*/
|
||||||
public static function rename_item($request, $unique_id, $shared = null)
|
public static function rename_item($request, $id, $shared = null)
|
||||||
{
|
{
|
||||||
// Get user id
|
// Get user id
|
||||||
$user_id = is_null($shared) ? Auth::id() : $shared->user_id;
|
$user_id = is_null($shared) ? Auth::id() : $shared->user_id;
|
||||||
|
|
||||||
// Get item
|
// Get item
|
||||||
$item = get_item($request->type, $unique_id, $user_id);
|
$item = get_item($request->type, $id, $user_id);
|
||||||
|
|
||||||
// Rename item
|
// Rename item
|
||||||
$item->update([
|
$item->update([
|
||||||
@@ -280,7 +283,7 @@ class Editor
|
|||||||
->delete();
|
->delete();
|
||||||
|
|
||||||
// Soft delete items
|
// Soft delete items
|
||||||
if (! $item['force_delete']) {
|
if (!$item['force_delete']) {
|
||||||
|
|
||||||
// Soft delete folder record
|
// Soft delete folder record
|
||||||
$folder->delete();
|
$folder->delete();
|
||||||
|
|||||||
+5
-2
@@ -94,11 +94,14 @@ Route::group(['middleware' => ['auth:sanctum']], function () {
|
|||||||
Route::patch('/rename/{id}', [EditItemsController::class, 'user_rename_item']);
|
Route::patch('/rename/{id}', [EditItemsController::class, 'user_rename_item']);
|
||||||
Route::post('/create-folder', [EditItemsController::class, 'user_create_folder']);
|
Route::post('/create-folder', [EditItemsController::class, 'user_create_folder']);
|
||||||
Route::post('/remove', [EditItemsController::class, 'user_delete_item']);
|
Route::post('/remove', [EditItemsController::class, 'user_delete_item']);
|
||||||
Route::post('/zip', [EditItemsController::class, 'user_zip_multiple_files']);
|
|
||||||
Route::get('/zip-folder/{unique_id}', [EditItemsController::class, 'user_zip_folder']);
|
|
||||||
Route::post('/upload', [EditItemsController::class, 'user_upload']);
|
Route::post('/upload', [EditItemsController::class, 'user_upload']);
|
||||||
Route::post('/move', [EditItemsController::class, 'user_move']);
|
Route::post('/move', [EditItemsController::class, 'user_move']);
|
||||||
|
|
||||||
|
Route::group(['prefix' => 'zip'], function () {
|
||||||
|
Route::post('/files', [EditItemsController::class, 'user_zip_multiple_files']);
|
||||||
|
Route::get('/folder/{unique_id}', [EditItemsController::class, 'user_zip_folder']);
|
||||||
|
});
|
||||||
|
|
||||||
//Get Emojis List
|
//Get Emojis List
|
||||||
Route::get('/emojis-list', [AppFunctionsController::class, 'get_emojis_list']);
|
Route::get('/emojis-list', [AppFunctionsController::class, 'get_emojis_list']);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -257,14 +257,11 @@ class FileTest extends TestCase
|
|||||||
])->assertStatus(204);
|
])->assertStatus(204);
|
||||||
|
|
||||||
$file_ids
|
$file_ids
|
||||||
->each(function ($id) {
|
->each(function ($id, $index) use ($user) {
|
||||||
|
|
||||||
$this->assertDatabaseMissing('files', [
|
$this->assertDatabaseMissing('files', [
|
||||||
'id' => $id,
|
'id' => $id,
|
||||||
]);
|
]);
|
||||||
});
|
|
||||||
|
|
||||||
collect([0, 1])
|
|
||||||
->each(function ($index) use ($user) {
|
|
||||||
|
|
||||||
Storage::disk('local')
|
Storage::disk('local')
|
||||||
->assertMissing(
|
->assertMissing(
|
||||||
@@ -302,7 +299,7 @@ class FileTest extends TestCase
|
|||||||
|
|
||||||
$file_ids = File::all()->pluck('id');
|
$file_ids = File::all()->pluck('id');
|
||||||
|
|
||||||
$this->postJson("/api/zip", [
|
$this->postJson("/api/zip/files", [
|
||||||
'items' => $file_ids,
|
'items' => $file_ids,
|
||||||
])->assertStatus(201);
|
])->assertStatus(201);
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ namespace Tests\Feature;
|
|||||||
use App\Models\File;
|
use App\Models\File;
|
||||||
use App\Models\Folder;
|
use App\Models\Folder;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
|
use App\Models\Zip;
|
||||||
use App\Services\SetupService;
|
use App\Services\SetupService;
|
||||||
use Illuminate\Foundation\Testing\DatabaseMigrations;
|
use Illuminate\Foundation\Testing\DatabaseMigrations;
|
||||||
use Illuminate\Http\UploadedFile;
|
use Illuminate\Http\UploadedFile;
|
||||||
@@ -456,8 +457,48 @@ class FolderTest extends TestCase
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public function it_zip_and_download_folder_with_content_within()
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_zip_folder_with_content_within_and_download()
|
||||||
{
|
{
|
||||||
|
Storage::fake('local');
|
||||||
|
|
||||||
|
$this->setup->create_directories();
|
||||||
|
|
||||||
|
$user = User::factory(User::class)
|
||||||
|
->create();
|
||||||
|
|
||||||
|
Sanctum::actingAs($user);
|
||||||
|
|
||||||
|
$folder = Folder::factory(Folder::class)
|
||||||
|
->create([
|
||||||
|
'user_id' => $user->id
|
||||||
|
]);
|
||||||
|
|
||||||
|
collect([0, 1])
|
||||||
|
->each(function ($index) use ($folder) {
|
||||||
|
|
||||||
|
$file = UploadedFile::fake()
|
||||||
|
->create("fake-file-$index.pdf", 1200, 'application/pdf');
|
||||||
|
|
||||||
|
$this->postJson('/api/upload', [
|
||||||
|
'file' => $file,
|
||||||
|
'folder_id' => $folder->id,
|
||||||
|
'is_last' => true,
|
||||||
|
])->assertStatus(201);
|
||||||
|
});
|
||||||
|
|
||||||
|
$this->getJson("/api/zip/folder/$folder->id")
|
||||||
|
->assertStatus(201);
|
||||||
|
|
||||||
|
$this->assertDatabaseHas('zips', [
|
||||||
|
'user_id' => $user->id
|
||||||
|
]);
|
||||||
|
|
||||||
|
Storage::disk('local')
|
||||||
|
->assertExists(
|
||||||
|
'zip/' . Zip::first()->basename
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user