added it_delete_multiple_folder_softly

This commit is contained in:
Peter Papp
2021-02-27 10:43:11 +01:00
parent 27675d7f38
commit 5225673163
4 changed files with 76 additions and 40 deletions

View File

@@ -188,8 +188,7 @@ class EditItemsController extends Controller
return Demo::response_204();
}
foreach ($request->input('data') as $file) {
$unique_id = $file['unique_id'];
foreach ($request->input('items') as $file) {
// Check permission to delete item for authenticated editor
if ($request->user()->tokenCan('editor')) {
@@ -204,18 +203,18 @@ class EditItemsController extends Controller
$shared = get_shared($request->cookie('shared_token'));
// Get file|folder item
$item = get_item($file['type'], $unique_id, Auth::id());
$item = get_item($file['type'], $file['id']);
// Check access to requested directory
if ($file['type'] === 'folder') {
Guardian::check_item_access($item->unique_id, $shared);
Guardian::check_item_access($item->id, $shared);
} else {
Guardian::check_item_access($item->folder_id, $shared);
}
}
// Delete item
Editor::delete_item($file, $unique_id);
Editor::delete_item($file, $file['id']);
}
return response(null, 204);

View File

@@ -12,6 +12,7 @@ use App\Models\Zip;
use Aws\Exception\MultipartUploadException;
use Aws\S3\MultipartUploader;
use Carbon\Carbon;
use DB;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\File;
@@ -269,30 +270,24 @@ class Editor
/**
* Delete file or folder
*
* @param $request
* @param $unique_id
* @param $item
* @param $id
* @param null $shared
* @throws \Exception
*/
public static function delete_item($file, $unique_id, $shared = null)
public static function delete_item($item, $id, $shared = null)
{
// Get user id
$user = is_null($shared) ? Auth::user() : User::findOrFail($shared->user_id);
// Delete folder
if ($file['type'] === 'folder') {
if ($item['type'] === 'folder') {
// Get folder
$folder = Folder::withTrashed()
->with(['folders'])
->where('user_id', $user->id)
->where('unique_id', $unique_id)
->first();
->with('folders')
->find($id);
// Get folder shared record
$shared = Share::where('user_id', $user->id)
->where('type', '=', 'folder')
->where('item_id', $unique_id)
$shared = Share::where('type', 'folder')
->where('item_id', $id)
->first();
// Delete folder shared record
@@ -300,8 +295,20 @@ class Editor
$shared->delete();
}
// Soft delete items
if (! $item['force_delete']) {
// Remove folder from user favourites
DB::table('favourite_folder')
->where('folder_id', $folder->id)
->delete();
// Soft delete folder record
$folder->delete();
}
// Force delete children files
if ($file['force_delete']) {
if ($item['force_delete']) {
// Get children folder ids
$child_folders = filter_folders_ids($folder->trashed_folders, 'unique_id');
@@ -328,20 +335,10 @@ class Editor
// Delete folder record
$folder->forceDelete();
}
// Soft delete items
if (!$file['force_delete']) {
// Remove folder from user favourites
$user->favourite_folders()->detach($unique_id);
// Soft delete folder record
$folder->delete();
}
}
// Delete item
if ($file['type'] !== 'folder') {
if ($item['type'] !== 'folder') {
// Get file
$item = File::withTrashed()

View File

@@ -93,7 +93,7 @@ Route::group(['middleware' => ['auth:sanctum']], function () {
// Edit items
Route::patch('/rename/{id}', [EditItemsController::class, 'user_rename_item']);
Route::post('/create-folder', [EditItemsController::class, 'user_create_folder']);
Route::post('/remove-item', [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']);

View File

@@ -174,7 +174,6 @@ class FolderTest extends TestCase
$this->assertEquals(
$root->id, Folder::find($children->id)->parent_id
);
}
/**
@@ -202,19 +201,55 @@ class FolderTest extends TestCase
]);
}
public function it_zip_and_download_folder_with_content_within()
/**
* @test
*/
public function it_delete_multiple_folder_softly()
{
$user = User::factory(User::class)
->create();
}
$folder_1 = Folder::factory(Folder::class)
->create();
public function it_delete_single_folder()
{
$folder_2 = Folder::factory(Folder::class)
->create();
}
$user->favourite_folders()->attach($folder_1->id);
$user->favourite_folders()->attach($folder_2->id);
public function it_delete_multiple_folder()
{
Sanctum::actingAs($user);
$this->postJson("/api/remove", [
'items' => [
[
'id' => $folder_1->id,
'type' => 'folder',
'force_delete' => false,
],
[
'id' => $folder_2->id,
'type' => 'folder',
'force_delete' => false,
],
],
])->assertStatus(204);
$this->assertSoftDeleted('folders', [
'id' => $folder_1->id,
]);
$this->assertSoftDeleted('folders', [
'id' => $folder_2->id,
]);
$this->assertDatabaseMissing('favourite_folder', [
'folder_id' => $folder_1->id,
]);
$this->assertDatabaseMissing('favourite_folder', [
'folder_id' => $folder_2->id,
]);
}
public function it_delete_folder_softly()
@@ -236,4 +271,9 @@ class FolderTest extends TestCase
{
}
public function it_zip_and_download_folder_with_content_within()
{
}
}