mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-06 02:33:48 +00:00
Transfer Content Ownership To Team Folder Owner after member was deleted by author of team folder
This commit is contained in:
@@ -10,11 +10,11 @@ use Domain\Teams\Controllers\ConvertFolderIntoTeamFolderController;
|
||||
Route::apiResource('/invitations', InvitationsController::class);
|
||||
|
||||
Route::group(['middleware' => ['auth:sanctum']], function () {
|
||||
Route::get('/shared-with-me/{id}', BrowseSharedWithMeController::class);
|
||||
Route::apiResource('/folders', TeamFoldersController::class);
|
||||
|
||||
Route::post('/folders/{folder}/convert', ConvertFolderIntoTeamFolderController::class);
|
||||
Route::delete('/folders/{folder}/leave', LeaveTeamFolderController::class);
|
||||
Route::get('/folders/{folder}/tree', NavigationTreeController::class);
|
||||
|
||||
Route::get('/shared-with-me/{id}', BrowseSharedWithMeController::class);
|
||||
});
|
||||
|
||||
@@ -6,7 +6,10 @@ use Domain\Folders\Models\Folder;
|
||||
|
||||
class UpdateMembersAction
|
||||
{
|
||||
// TODO: after removing user from team folder from administrator, set file owner
|
||||
public function __construct(
|
||||
public TransferContentOwnershipToTeamFolderOwnerAction $transferContentOwnership,
|
||||
) {}
|
||||
|
||||
public function __invoke(Folder $folder, $members): void
|
||||
{
|
||||
$existingMembers = $folder
|
||||
@@ -24,6 +27,9 @@ class UpdateMembersAction
|
||||
->where('parent_id', $folder->id)
|
||||
->whereIn('user_id', $deletedMembers->toArray())
|
||||
->delete();
|
||||
|
||||
// Transfer files/folders ownership to team folder owner
|
||||
$deletedMembers->each(fn ($memberId) => ($this->transferContentOwnership)($folder, $memberId));
|
||||
}
|
||||
|
||||
// Update privileges
|
||||
|
||||
@@ -296,8 +296,10 @@ class TeamManagementTest extends TestCase
|
||||
$user = User::factory()
|
||||
->create();
|
||||
|
||||
$members = User::factory()
|
||||
->count(2)
|
||||
$member = User::factory()
|
||||
->create();
|
||||
|
||||
$deletedMember = User::factory()
|
||||
->create();
|
||||
|
||||
$folder = Folder::factory()
|
||||
@@ -306,26 +308,45 @@ class TeamManagementTest extends TestCase
|
||||
'team_folder' => 1,
|
||||
]);
|
||||
|
||||
// Create fake file record
|
||||
File::factory()
|
||||
->create([
|
||||
'name' => 'Member File',
|
||||
'basename' => 'fake-file.zip',
|
||||
'parent_id' => $folder->id,
|
||||
'user_id' => $deletedMember->id,
|
||||
'type' => 'file',
|
||||
]);
|
||||
|
||||
// Create fake file
|
||||
$fakeFile = UploadedFile::fake()
|
||||
->create('fake-file.zip', 2000, 'application/zip');
|
||||
|
||||
// Put fake file into correct directory
|
||||
Storage::putFileAs("files/{$deletedMember->id}", $fakeFile, 'fake-file.zip');
|
||||
|
||||
// Attach members to the team folder
|
||||
DB::table('team_folder_members')
|
||||
->insert([
|
||||
[
|
||||
'parent_id' => $folder->id,
|
||||
'user_id' => $members[0]->id,
|
||||
'user_id' => $member->id,
|
||||
'permission' => 'can-edit',
|
||||
],
|
||||
[
|
||||
'parent_id' => $folder->id,
|
||||
'user_id' => $members[1]->id,
|
||||
'user_id' => $deletedMember->id,
|
||||
'permission' => 'can-edit',
|
||||
],
|
||||
]);
|
||||
|
||||
// Update team folder members
|
||||
$this
|
||||
->actingAs($user)
|
||||
->patchJson("/api/teams/folders/{$folder->id}", [
|
||||
'members' => [
|
||||
[
|
||||
'id' => $members[0]->id,
|
||||
'id' => $member->id,
|
||||
'permission' => 'can-edit',
|
||||
],
|
||||
],
|
||||
@@ -333,10 +354,14 @@ class TeamManagementTest extends TestCase
|
||||
])
|
||||
->assertCreated();
|
||||
|
||||
// Check if file was moved from member directory to owner directory
|
||||
Storage::assertMissing("files/{$deletedMember->id}/fake-file.zip");
|
||||
Storage::assertExists("files/{$user->id}/fake-file.zip");
|
||||
|
||||
$this
|
||||
->assertDatabaseCount('team_folder_members', 1)
|
||||
->assertDatabaseMissing('team_folder_members', [
|
||||
'user_id' => $members[1]->id,
|
||||
'user_id' => $deletedMember->id,
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user