mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-28 02:50:39 +00:00
Transfer Content Ownership To Team Folder Owner
This commit is contained in:
@@ -17,7 +17,7 @@ class SetTeamFolderPropertyForAllChildrenAction
|
||||
|
||||
// Set all children as team_folder = true
|
||||
DB::table('folders')
|
||||
->whereIn('id', Arr::flatten([filter_folders_ids($childrenFolderIds)]))
|
||||
->whereIn('id', Arr::flatten(filter_folders_ids($childrenFolderIds)))
|
||||
->update(['team_folder' => $isTeamFolder]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
|
||||
namespace Domain\Teams\Actions;
|
||||
|
||||
use Domain\Folders\Models\Folder;
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
class TransferContentOwnershipToTeamFolderOwnerAction
|
||||
{
|
||||
public function __invoke(Folder $folder, $leavingUserId)
|
||||
{
|
||||
// Find and delete attached member from team folder
|
||||
DB::table('team_folder_members')
|
||||
->where('parent_id', $folder->id)
|
||||
->where('user_id', $leavingUserId)
|
||||
->delete();
|
||||
|
||||
// Get all inherited folder from team folder
|
||||
$childrenFolderIds = Folder::with('folders:id,parent_id')
|
||||
->where('id', $folder->id)
|
||||
->get('id');
|
||||
|
||||
$teamFolderIds = Arr::flatten(filter_folders_ids($childrenFolderIds));
|
||||
|
||||
// Replace leaver content ownership for author of team folder
|
||||
DB::table('files')
|
||||
->whereIn('parent_id', $teamFolderIds)
|
||||
->where('user_id', $leavingUserId)
|
||||
->cursor()
|
||||
->each(fn ($file) =>
|
||||
$this->move_files_to_the_new_destination($file, $folder)
|
||||
);
|
||||
|
||||
DB::table('files')
|
||||
->whereIn('parent_id', $teamFolderIds)
|
||||
->where('user_id', $leavingUserId)
|
||||
->update(['user_id' => $folder->user_id]);
|
||||
|
||||
DB::table('folders')
|
||||
->whereIn('id', $teamFolderIds)
|
||||
->where('user_id', $leavingUserId)
|
||||
->update(['user_id' => $folder->user_id]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $file
|
||||
* @param Folder $folder
|
||||
*/
|
||||
private function move_files_to_the_new_destination($file, Folder $folder): void
|
||||
{
|
||||
// Move image thumbnails
|
||||
if ($file->type === 'image') {
|
||||
|
||||
// Get image thumbnail list
|
||||
$thumbnailList = get_thumbnail_file_list($file->basename);
|
||||
|
||||
// move thumbnails to the new location
|
||||
$thumbnailList->each(function ($basename) use ($file, $folder) {
|
||||
|
||||
$oldPath = "files/$file->user_id/$basename";
|
||||
$newPath = "files/$folder->user_id/$basename";
|
||||
|
||||
if (Storage::exists($oldPath)) Storage::move($oldPath, $newPath);
|
||||
});
|
||||
}
|
||||
|
||||
// Move single file
|
||||
Storage::move("files/$file->user_id/$file->basename", "files/$folder->user_id/$file->basename");
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,7 @@ use Domain\Folders\Models\Folder;
|
||||
|
||||
class UpdateMembersAction
|
||||
{
|
||||
// TODO: after removing user from team folder from administrator, set file owner
|
||||
public function __invoke(Folder $folder, $members): void
|
||||
{
|
||||
$existingMembers = $folder
|
||||
|
||||
@@ -1,23 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace Domain\Teams\Controllers;
|
||||
|
||||
use Auth;
|
||||
use Gate;
|
||||
use Illuminate\Http\Response;
|
||||
use Domain\Folders\Models\Folder;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Contracts\Foundation\Application;
|
||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||
use Domain\Teams\Actions\TransferContentOwnershipToTeamFolderOwnerAction;
|
||||
|
||||
class LeaveTeamFolderController extends Controller
|
||||
{
|
||||
public function __invoke(Folder $folder): Response | Application | ResponseFactory
|
||||
public function __construct(
|
||||
public TransferContentOwnershipToTeamFolderOwnerAction $transferContentOwnership,
|
||||
) {}
|
||||
|
||||
public function __invoke(Folder $folder): Response|Application|ResponseFactory
|
||||
{
|
||||
// Find and delete attached member from team folder
|
||||
DB::table('team_folder_members')
|
||||
->where('parent_id', $folder->id)
|
||||
->where('user_id', Auth::id())
|
||||
->delete();
|
||||
// Authorize action
|
||||
if (! Gate::any(['can-edit', 'can-view'], [$folder, null])) {
|
||||
abort(403, 'Access Denied');
|
||||
}
|
||||
|
||||
// Transfer files/folders ownership to team folder owner
|
||||
($this->transferContentOwnership)($folder, Auth::id());
|
||||
|
||||
return response('Done.', 204);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user