@@ -51,7 +51,7 @@
{{ nodes.name }}
diff --git a/resources/js/components/Spotlight/Spotlight.vue b/resources/js/components/Spotlight/Spotlight.vue
index b3a85276..1e08e1e4 100644
--- a/resources/js/components/Spotlight/Spotlight.vue
+++ b/resources/js/components/Spotlight/Spotlight.vue
@@ -788,37 +788,36 @@ export default {
},
})
} else if (file.data.attributes.isTeamFolder) {
- if (file.data.relationships.owner.data.id === this.user.data.id) {
- this.$router.push({
- name: 'TeamFolders',
- params: { id: file.data.id },
- })
- } else {
- this.$router.push({
- name: 'SharedWithMe',
- params: { id: file.data.id },
- })
- }
+ let route = file.data.relationships.user.data.id === this.user.data.id
+ ? 'TeamFolders'
+ : 'SharedWithMe'
+
+ this.$router.push({
+ name: route,
+ params: { id: file.data.id },
+ })
} else {
this.$router.push({
name: 'Files',
params: { id: file.data.id },
})
}
- } else {
- // Show file
- if (['video', 'audio', 'image'].includes(file.data.type) || file.data.attributes.mimetype === 'pdf') {
- this.$store.commit('ADD_TO_FAST_PREVIEW', file)
-
- events.$emit('file-preview:show')
- } else {
- this.$downloadFile(
- file.data.attributes.file_url,
- file.data.attributes.name + '.' + file.data.attributes.mimetype
- )
- }
}
+ if (file.data.type !== 'folder') {
+ // Show file
+ if (['video', 'audio', 'image'].includes(file.data.type) || file.data.attributes.mimetype === 'pdf') {
+ this.$store.commit('ADD_TO_FAST_PREVIEW', file)
+
+ events.$emit('file-preview:show')
+ } else {
+ this.$downloadFile(
+ file.data.attributes.file_url,
+ file.data.attributes.name + '.' + file.data.attributes.mimetype
+ )
+ }
+ }
+
this.exitSpotlight()
},
findResult: debounce(function (value) {
diff --git a/resources/js/views/User/Settings.vue b/resources/js/views/User/Settings.vue
index 336ae5dd..395b9d3a 100644
--- a/resources/js/views/User/Settings.vue
+++ b/resources/js/views/User/Settings.vue
@@ -268,7 +268,8 @@ export default {
this.$updateText(
'/user/settings',
'last_name',
- this.user.data.relationships.settings.data.attributes.last_name
+ this.user.data.relationships.settings.data.attributes.last_name,
+ true
)
},
},
diff --git a/src/App/Console/Commands/SetupDevEnvironment.php b/src/App/Console/Commands/SetupDevEnvironment.php
index b94cd0c5..f3a0fd39 100644
--- a/src/App/Console/Commands/SetupDevEnvironment.php
+++ b/src/App/Console/Commands/SetupDevEnvironment.php
@@ -213,7 +213,6 @@ class SetupDevEnvironment extends Command
'name' => $thumbnail['name'],
'basename' => $thumbnail['basename'],
'type' => 'image',
- 'author' => 'user',
'mimetype' => 'jpg',
'filesize' => rand(1000000, 4000000),
'created_at' => now()->subMinutes(rand(1, 5)),
@@ -329,7 +328,6 @@ class SetupDevEnvironment extends Command
$shared_folder = Folder::factory()
->create([
'user_id' => $user->id,
- 'author' => 'user',
'name' => 'Shared Folder',
'emoji' => [
'codes' => '1F680',
@@ -365,7 +363,6 @@ class SetupDevEnvironment extends Command
$random_pics = Folder::factory()
->create([
'user_id' => $user->id,
- 'author' => 'user',
'name' => 'Random Pics',
'emoji' => [
'codes' => '1F4F7',
@@ -414,7 +411,6 @@ class SetupDevEnvironment extends Command
$playable_media = Folder::factory()
->create([
'user_id' => $user->id,
- 'author' => 'user',
'name' => 'Playable Media',
'created_at' => now()->subMinutes(2),
]);
@@ -439,7 +435,6 @@ class SetupDevEnvironment extends Command
$multi_level = Folder::factory()
->create([
'user_id' => $user->id,
- 'author' => 'user',
'name' => 'Multi Level Folder',
'created_at' => now()->subMinutes(3),
]);
@@ -472,7 +467,6 @@ class SetupDevEnvironment extends Command
$documents = Folder::factory()
->create([
'user_id' => $user->id,
- 'author' => 'user',
'name' => 'Documents',
'created_at' => now()->subMinutes(4),
]);
@@ -492,7 +486,6 @@ class SetupDevEnvironment extends Command
$videohive = Folder::factory()
->create([
'user_id' => $user->id,
- 'author' => 'user',
'name' => 'Videohive',
'created_at' => now()->subMinutes(5),
]);
@@ -542,7 +535,6 @@ class SetupDevEnvironment extends Command
'name' => $file['name'],
'basename' => $basename,
'type' => 'file',
- 'author' => 'user',
'mimetype' => $file['mimetype'],
'filesize' => rand(1000000, 4000000),
'created_at' => now()->subMinutes(rand(1, 5)),
@@ -585,7 +577,6 @@ class SetupDevEnvironment extends Command
'name' => $file['name'],
'basename' => $basename,
'type' => 'file',
- 'author' => 'user',
'mimetype' => $file['mimetype'],
'filesize' => rand(1000000, 4000000),
'created_at' => now()->subMinutes(rand(1, 5)),
@@ -617,7 +608,6 @@ class SetupDevEnvironment extends Command
'name' => $file['name'],
'basename' => $basename,
'type' => 'file',
- 'author' => 'user',
'mimetype' => $file['mimetype'],
'filesize' => rand(1000000, 4000000),
'created_at' => now()->subMinutes(rand(1, 5)),
@@ -675,7 +665,6 @@ class SetupDevEnvironment extends Command
'name' => $file['name'],
'basename' => $basename,
'type' => 'file',
- 'author' => 'visitor',
'mimetype' => $file['mimetype'],
'filesize' => rand(1000000, 4000000),
'created_at' => now()->subMinutes(rand(1, 5)),
@@ -702,7 +691,6 @@ class SetupDevEnvironment extends Command
'name' => $file,
'basename' => $basename,
'type' => 'video',
- 'author' => 'user',
'mimetype' => 'mp4',
'filesize' => rand(1000000, 4000000),
'created_at' => now()->subMinutes(rand(1, 5)),
@@ -726,7 +714,6 @@ class SetupDevEnvironment extends Command
'name' => $file,
'basename' => $basename,
'type' => 'video',
- 'author' => 'user',
'mimetype' => 'mp4',
'filesize' => rand(1000000, 4000000),
'created_at' => now()->subMinutes(rand(1, 5)),
@@ -750,7 +737,6 @@ class SetupDevEnvironment extends Command
'name' => $file,
'basename' => $basename,
'type' => 'audio',
- 'author' => 'user',
'mimetype' => 'mp3',
'filesize' => rand(1000000, 4000000),
'created_at' => now()->subMinutes(rand(1, 5)),
@@ -781,7 +767,6 @@ class SetupDevEnvironment extends Command
'name' => $thumbnail['name'],
'basename' => $thumbnail['basename'],
'type' => 'image',
- 'author' => 'user',
'mimetype' => 'jpg',
'filesize' => rand(1000000, 4000000),
'created_at' => now()->subMinutes(rand(1, 5)),
@@ -808,7 +793,6 @@ class SetupDevEnvironment extends Command
'name' => $thumbnail['name'],
'basename' => $thumbnail['basename'],
'type' => 'image',
- 'author' => 'user',
'mimetype' => 'jpg',
'filesize' => rand(1000000, 4000000),
'created_at' => now()->subMinutes(rand(1, 5)),
@@ -839,7 +823,6 @@ class SetupDevEnvironment extends Command
'name' => $thumbnail['name'],
'basename' => $thumbnail['basename'],
'type' => 'image',
- 'author' => 'user',
'mimetype' => 'jpg',
'filesize' => rand(1000000, 4000000),
'created_at' => now()->subMinutes(rand(1, 5)),
@@ -901,7 +884,6 @@ class SetupDevEnvironment extends Command
'name' => $thumbnail['name'],
'basename' => $thumbnail['basename'],
'type' => 'image',
- 'author' => 'user',
'mimetype' => 'jpg',
'filesize' => rand(1000000, 4000000),
'created_at' => now()->subMinutes(rand(1, 5)),
@@ -924,7 +906,6 @@ class SetupDevEnvironment extends Command
'name' => $thumbnail['name'],
'basename' => $thumbnail['basename'],
'type' => 'image',
- 'author' => 'user',
'mimetype' => 'jpg',
'filesize' => rand(1000000, 4000000),
'created_at' => now()->subMinutes(rand(1, 5)),
@@ -972,7 +953,6 @@ class SetupDevEnvironment extends Command
'name' => $thumbnail['name'],
'basename' => $thumbnail['basename'],
'type' => 'image',
- 'author' => 'user',
'mimetype' => 'jpg',
'filesize' => rand(1000000, 4000000),
'created_at' => now()->subMinutes(rand(1, 5)),
@@ -995,7 +975,6 @@ class SetupDevEnvironment extends Command
'name' => $thumbnail['name'],
'basename' => $thumbnail['basename'],
'type' => 'image',
- 'author' => 'user',
'mimetype' => 'jpg',
'filesize' => rand(1000000, 4000000),
'created_at' => now()->subMinutes(rand(1, 5)),
@@ -1046,7 +1025,6 @@ class SetupDevEnvironment extends Command
'name' => $file['name'],
'basename' => $basename,
'type' => 'file',
- 'author' => 'user',
'mimetype' => $file['mimetype'],
'filesize' => rand(1000000, 4000000),
'created_at' => now()->subMinutes(rand(1, 5)),
@@ -1088,7 +1066,6 @@ class SetupDevEnvironment extends Command
'name' => $thumbnail['name'],
'basename' => $thumbnail['basename'],
'type' => 'image',
- 'author' => 'user',
'mimetype' => 'jpg',
'filesize' => rand(1000000, 4000000),
'created_at' => now()->subMinutes(rand(1, 5)),
@@ -1128,7 +1105,6 @@ class SetupDevEnvironment extends Command
'name' => $file['name'],
'basename' => $basename,
'type' => 'file',
- 'author' => 'user',
'mimetype' => $file['mimetype'],
'filesize' => rand(1000000, 4000000),
'created_at' => now()->subMinutes(rand(1, 5)),
@@ -1268,7 +1244,6 @@ class SetupDevEnvironment extends Command
'name' => $file,
'basename' => $basename,
'type' => 'video',
- 'author' => 'user',
'mimetype' => 'mp4',
'filesize' => rand(1000000, 4000000),
'created_at' => now()->subMinutes(rand(1, 5)),
@@ -1297,7 +1272,6 @@ class SetupDevEnvironment extends Command
'name' => $file['name'],
'basename' => $basename,
'type' => 'file',
- 'author' => 'user',
'mimetype' => $file['mimetype'],
'filesize' => rand(1000000, 4000000),
'created_at' => now()->subMinutes(rand(1, 5)),
@@ -1319,7 +1293,6 @@ class SetupDevEnvironment extends Command
'name' => $thumbnail['name'],
'basename' => $thumbnail['basename'],
'type' => 'image',
- 'author' => 'user',
'mimetype' => 'jpg',
'filesize' => rand(1000000, 4000000),
'created_at' => now()->subMinutes(rand(1, 5)),
@@ -1340,7 +1313,6 @@ class SetupDevEnvironment extends Command
'name' => $thumbnail['name'],
'basename' => $thumbnail['basename'],
'type' => 'image',
- 'author' => 'user',
'mimetype' => 'jpg',
'filesize' => rand(1000000, 4000000),
'created_at' => now()->subMinutes(rand(1, 5)),
@@ -1361,7 +1333,6 @@ class SetupDevEnvironment extends Command
'name' => $thumbnail['name'],
'basename' => $thumbnail['basename'],
'type' => 'image',
- 'author' => 'user',
'mimetype' => 'jpg',
'filesize' => rand(1000000, 4000000),
'created_at' => now()->subMinutes(rand(1, 5)),
diff --git a/src/App/Users/Requests/UpdateUserProfileSettingsRequest.php b/src/App/Users/Requests/UpdateUserProfileSettingsRequest.php
index 5d29835d..ad4d9abb 100644
--- a/src/App/Users/Requests/UpdateUserProfileSettingsRequest.php
+++ b/src/App/Users/Requests/UpdateUserProfileSettingsRequest.php
@@ -25,7 +25,7 @@ class UpdateUserProfileSettingsRequest extends FormRequest
return [
'avatar' => 'sometimes|file',
'name' => 'string',
- 'value' => 'string',
+ 'value' => 'string|nullable',
];
}
}
diff --git a/src/Domain/Files/Actions/UploadFileAction.php b/src/Domain/Files/Actions/UploadFileAction.php
index fb8fc781..5544d6dc 100644
--- a/src/Domain/Files/Actions/UploadFileAction.php
+++ b/src/Domain/Files/Actions/UploadFileAction.php
@@ -1,9 +1,8 @@
input('extension');
- // Get user data
- $user = $userId ? User::find($userId) : Auth::user();
+ // Get user
+ $user = $request->filled('parent_id')
+ ? Folder::find($request->input('parent_id'))->getLatestParent()->user
+ : auth()->user();
// File Info
$fileSize = $disk_local->size("chunks/$chunkName");
-
- $file_mimetype = $disk_local->mimeType("chunks/$chunkName");
+ $fileMimetype = $disk_local->mimeType("chunks/$chunkName");
// Check if user has enough space to upload file
if (! $user->canUpload($fileSize)) {
@@ -80,27 +80,24 @@ class UploadFileAction
// Create multiple image thumbnails
($this->createImageThumbnail)($fileName, $file, $user->id);
-
+
// Move files to external storage
if (! isStorageDriver('local')) {
($this->moveFileToExternalStorage)($fileName, $user->id);
}
- // Store user upload size
- ($this->recordUpload)($fileSize, $user->id);
-
// Create new file
$item = UserFile::create([
- 'mimetype' => get_file_type_from_mimetype($file_mimetype),
- 'type' => get_file_type($file_mimetype),
+ 'mimetype' => get_file_type_from_mimetype($fileMimetype),
+ 'type' => get_file_type($fileMimetype),
'parent_id' => ($this->getFileParentId)($request, $user->id),
'name' => $request->input('filename'),
'basename' => $fileName,
- 'author' => $userId ? 'visitor' : 'user',
'filesize' => $fileSize,
'user_id' => $user->id,
+ 'creator_id' => auth()->id(),
]);
-
+
// Store exif metadata for files
($this->storeExifMetadata)($item, $file);
diff --git a/src/Domain/Files/Controllers/FileAccess/GetFileController.php b/src/Domain/Files/Controllers/FileAccess/GetFileController.php
index cf1645db..6341218c 100644
--- a/src/Domain/Files/Controllers/FileAccess/GetFileController.php
+++ b/src/Domain/Files/Controllers/FileAccess/GetFileController.php
@@ -27,7 +27,7 @@ class GetFileController extends Controller
->firstOrFail();
// Check if user can download file
- if (! $file->owner->canDownload()) {
+ if (! $file->user->canDownload()) {
return response(userActionNotAllowedError(), 401);
}
diff --git a/src/Domain/Files/Models/File.php b/src/Domain/Files/Models/File.php
index 23ee40d3..11e7ea77 100644
--- a/src/Domain/Files/Models/File.php
+++ b/src/Domain/Files/Models/File.php
@@ -2,6 +2,7 @@
namespace Domain\Files\Models;
use App\Users\Models\User;
+use Domain\Traffic\Actions\RecordUploadAction;
use Illuminate\Support\Str;
use Laravel\Scout\Searchable;
use Domain\Sharing\Models\Share;
@@ -174,7 +175,12 @@ class File extends Model
return $this->hasOne(Share::class, 'item_id', 'id');
}
- public function owner(): HasOne
+ public function creator(): HasOne
+ {
+ return $this->hasOne(User::class, 'id', 'creator_id');
+ }
+
+ public function user(): HasOne
{
return $this->hasOne(User::class, 'id', 'user_id');
}
@@ -207,6 +213,9 @@ class File extends Model
static::creating(function ($file) {
$file->id = (string) Str::uuid();
+
+ // Store upload record
+ resolve(RecordUploadAction::class)($file->filesize, $file->user_id);
});
static::deleting(function ($file) {
diff --git a/src/Domain/Files/Resources/FileResource.php b/src/Domain/Files/Resources/FileResource.php
index 6472a903..498a9a0b 100644
--- a/src/Domain/Files/Resources/FileResource.php
+++ b/src/Domain/Files/Resources/FileResource.php
@@ -29,10 +29,10 @@ class FileResource extends JsonResource
'file_url' => $this->file_url,
'thumbnail' => $this->thumbnail,
'parent_id' => $this->parent_id,
- 'created_at' => set_time_by_user_timezone($this->owner, $this->created_at),
- 'updated_at' => set_time_by_user_timezone($this->owner, $this->updated_at),
+ 'created_at' => set_time_by_user_timezone($this->user, $this->created_at),
+ 'updated_at' => set_time_by_user_timezone($this->user, $this->updated_at),
'deleted_at' => $this->deleted_at
- ? set_time_by_user_timezone($this->owner, $this->deleted_at)
+ ? set_time_by_user_timezone($this->user, $this->deleted_at)
: null,
],
'relationships' => [
@@ -50,15 +50,15 @@ class FileResource extends JsonResource
],
],
]),
- $this->mergeWhen($this->owner, fn () => [
- 'owner' => [
+ $this->mergeWhen($this->creator, fn () => [
+ 'creator' => [
'data' => [
- 'type' => 'owner',
- 'id' => $this->user_id,
+ 'type' => 'creator',
+ 'id' => $this->creator->id,
'attributes' => [
- 'name' => $this->owner->settings->name,
- 'avatar' => $this->owner->settings->avatar,
- 'color' => $this->owner->settings->color,
+ 'name' => $this->creator->settings->name,
+ 'avatar' => $this->creator->settings->avatar,
+ 'color' => $this->creator->settings->color,
],
],
],
diff --git a/src/Domain/Folders/Actions/CreateFolderAction.php b/src/Domain/Folders/Actions/CreateFolderAction.php
index 5edd2d58..4d1ae07b 100644
--- a/src/Domain/Folders/Actions/CreateFolderAction.php
+++ b/src/Domain/Folders/Actions/CreateFolderAction.php
@@ -18,35 +18,31 @@ class CreateFolderAction
CreateFolderRequest $request,
?Share $shared = null,
): Folder|array {
- // Get user model
- $user = $shared
- ? $shared->user
- : Auth::user();
+ // Get stuff
+ $isFilledParentId = $request->filled('parent_id');
+ $parentId = $request->input('parent_id');
+
+ // Get user
+ $user = $isFilledParentId
+ ? Folder::find($parentId)->getLatestParent()->user
+ : auth()->user();
// Check if user can create folder
if (! $user->canCreateFolder()) {
throw new InvalidUserActionException();
}
- /*
- * Check if exist parent team folder, if yes,
- * then get the latest parent folder to detect whether it is team_folder
- */
- if ($request->has('parent_id')) {
- $isTeamFolder = Folder::find($request->input('parent_id'))
- ->getLatestParent()
- ->team_folder;
- }
-
// Create folder record
return Folder::create([
- 'parent_id' => $request->input('parent_id'),
+ 'parent_id' => $parentId,
'name' => $request->input('name'),
'color' => $request->input('color') ?? null,
'emoji' => $request->input('emoji') ?? null,
'author' => $shared ? 'visitor' : 'user',
'user_id' => $user->id,
- 'team_folder' => $isTeamFolder ?? false,
+ 'team_folder' => $isFilledParentId
+ ? Folder::find($parentId)->getLatestParent()->team_folder
+ : false
]);
}
}
diff --git a/src/Domain/Folders/Models/Folder.php b/src/Domain/Folders/Models/Folder.php
index 71c2474f..ec57c71c 100644
--- a/src/Domain/Folders/Models/Folder.php
+++ b/src/Domain/Folders/Models/Folder.php
@@ -192,7 +192,7 @@ class Folder extends Model
->withPivot('permission');
}
- public function owner(): HasOne
+ public function user(): HasOne
{
return $this->hasOne(User::class, 'id', 'user_id');
}
diff --git a/src/Domain/Folders/Resources/FolderResource.php b/src/Domain/Folders/Resources/FolderResource.php
index 47d22c6e..82962b3a 100644
--- a/src/Domain/Folders/Resources/FolderResource.php
+++ b/src/Domain/Folders/Resources/FolderResource.php
@@ -22,10 +22,10 @@ class FolderResource extends JsonResource
'isTeamFolder' => $this->team_folder,
'items' => $this->items,
'trashed_items' => $this->trashed_items,
- 'created_at' => set_time_by_user_timezone($this->owner, $this->created_at),
- 'updated_at' => set_time_by_user_timezone($this->owner, $this->updated_at),
+ 'created_at' => set_time_by_user_timezone($this->user, $this->created_at),
+ 'updated_at' => set_time_by_user_timezone($this->user, $this->updated_at),
'deleted_at' => $this->deleted_at
- ? set_time_by_user_timezone($this->owner, $this->deleted_at)
+ ? set_time_by_user_timezone($this->user, $this->deleted_at)
: null,
],
'relationships' => [
@@ -49,15 +49,15 @@ class FolderResource extends JsonResource
],
],
]),
- $this->mergeWhen($this->owner, fn () => [
- 'owner' => [
+ $this->mergeWhen($this->user, fn () => [
+ 'user' => [
'data' => [
- 'type' => 'owner',
+ 'type' => 'user',
'id' => $this->user_id,
'attributes' => [
- 'name' => $this->owner->settings->name,
- 'avatar' => $this->owner->settings->avatar,
- 'color' => $this->owner->settings->color,
+ 'name' => $this->user->settings->name,
+ 'avatar' => $this->user->settings->avatar,
+ 'color' => $this->user->settings->color,
],
],
],
diff --git a/src/Domain/Teams/Actions/TransferContentOwnershipToTeamFolderOwnerAction.php b/src/Domain/Teams/Actions/TransferContentOwnershipToTeamFolderOwnerAction.php
deleted file mode 100644
index 59abe6ec..00000000
--- a/src/Domain/Teams/Actions/TransferContentOwnershipToTeamFolderOwnerAction.php
+++ /dev/null
@@ -1,72 +0,0 @@
-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 = getThumbnailFileList($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");
- }
-}
diff --git a/src/Domain/Teams/Actions/UpdateMembersAction.php b/src/Domain/Teams/Actions/UpdateMembersAction.php
index e9c161f3..538a9abc 100644
--- a/src/Domain/Teams/Actions/UpdateMembersAction.php
+++ b/src/Domain/Teams/Actions/UpdateMembersAction.php
@@ -6,11 +6,6 @@ use Domain\Folders\Models\Folder;
class UpdateMembersAction
{
- public function __construct(
- public TransferContentOwnershipToTeamFolderOwnerAction $transferContentOwnership,
- ) {
- }
-
public function __invoke(Folder $folder, $members): void
{
$existingMembers = $folder
@@ -28,9 +23,6 @@ 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
diff --git a/src/Domain/Teams/Controllers/ConvertFolderIntoTeamFolderController.php b/src/Domain/Teams/Controllers/ConvertFolderIntoTeamFolderController.php
index f1fdb6be..8a4e3cd7 100644
--- a/src/Domain/Teams/Controllers/ConvertFolderIntoTeamFolderController.php
+++ b/src/Domain/Teams/Controllers/ConvertFolderIntoTeamFolderController.php
@@ -28,7 +28,7 @@ class ConvertFolderIntoTeamFolderController extends Controller
}
// Check if user didn't exceed max team members limit
- if (! $folder->owner->canInviteTeamMembers($request->input('invitations'))) {
+ if (! $folder->user->canInviteTeamMembers($request->input('invitations'))) {
return response([
'type' => 'error',
'message' => 'You exceed your members limit.',
diff --git a/src/Domain/Teams/Controllers/LeaveTeamFolderController.php b/src/Domain/Teams/Controllers/LeaveTeamFolderController.php
index 0e55e713..f4e9ea43 100644
--- a/src/Domain/Teams/Controllers/LeaveTeamFolderController.php
+++ b/src/Domain/Teams/Controllers/LeaveTeamFolderController.php
@@ -1,22 +1,16 @@
transferContentOwnership)($folder, Auth::id());
+ // Find and delete attached member from team folder
+ DB::table('team_folder_members')
+ ->where('parent_id', $folder->id)
+ ->where('user_id', auth()->id())
+ ->delete();
return response('Done.', 204);
}
diff --git a/src/Support/Demo/Actions/FakeUploadFileAction.php b/src/Support/Demo/Actions/FakeUploadFileAction.php
index 6a932698..8711615b 100644
--- a/src/Support/Demo/Actions/FakeUploadFileAction.php
+++ b/src/Support/Demo/Actions/FakeUploadFileAction.php
@@ -28,7 +28,6 @@ class FakeUploadFileAction
'basename' => $filename,
'mimetype' => $file->getClientOriginalExtension(),
'file_url' => 'https://vuefilemanager.hi5ve.digital/assets/vue-file-manager-preview.jpg',
- 'author' => $request->user() ? 'user' : 'visitor',
'created_at' => now()->format(__t('time')),
'updated_at' => now()->format(__t('time')),
'type' => $fileType,
diff --git a/tests/Domain/Browsing/BrowseTest.php b/tests/Domain/Browsing/BrowseTest.php
index 4486b88d..4a87d28f 100644
--- a/tests/Domain/Browsing/BrowseTest.php
+++ b/tests/Domain/Browsing/BrowseTest.php
@@ -158,7 +158,6 @@ class BrowseTest extends TestCase
'name' => 'Document',
'basename' => 'document.pdf',
'mimetype' => 'application/pdf',
- 'author' => 'user',
'type' => 'file',
'user_id' => $user->id,
]);
@@ -199,7 +198,6 @@ class BrowseTest extends TestCase
'name' => 'Document 1',
'basename' => 'document-1.pdf',
'mimetype' => 'application/pdf',
- 'author' => 'user',
'type' => 'file',
'user_id' => $user->id,
'created_at' => now(),
@@ -213,7 +211,6 @@ class BrowseTest extends TestCase
'name' => 'Document 2',
'basename' => 'document-2.pdf',
'mimetype' => 'application/pdf',
- 'author' => 'user',
'type' => 'file',
'user_id' => $user->id,
'created_at' => now(),
@@ -255,7 +252,6 @@ class BrowseTest extends TestCase
'name' => 'Document',
'basename' => 'document.pdf',
'mimetype' => 'application/pdf',
- 'author' => 'user',
'type' => 'file',
'user_id' => $user->id,
'deleted_at' => now(),
diff --git a/tests/Domain/Sharing/VisitorBrowseTest.php b/tests/Domain/Sharing/VisitorBrowseTest.php
index 04db6df7..a412fc6e 100644
--- a/tests/Domain/Sharing/VisitorBrowseTest.php
+++ b/tests/Domain/Sharing/VisitorBrowseTest.php
@@ -158,7 +158,6 @@ class VisitorBrowseTest extends TestCase
->create([
'parent_id' => $root->id,
'name' => 'Documents',
- 'author' => 'user',
'user_id' => $user->id,
]);
@@ -168,7 +167,6 @@ class VisitorBrowseTest extends TestCase
'name' => 'Document',
'basename' => 'document.pdf',
'mimetype' => 'application/pdf',
- 'author' => 'user',
'type' => 'file',
'user_id' => $user->id,
]);
@@ -238,7 +236,6 @@ class VisitorBrowseTest extends TestCase
->create([
'name' => 'level 2',
'parent_id' => $folder_level_1->id,
- 'author' => 'user',
'user_id' => $user->id,
]);
@@ -246,7 +243,6 @@ class VisitorBrowseTest extends TestCase
->create([
'name' => 'level 3',
'parent_id' => $folder_level_2->id,
- 'author' => 'user',
'user_id' => $user->id,
]);
@@ -254,7 +250,6 @@ class VisitorBrowseTest extends TestCase
->create([
'name' => 'level 2 Sibling',
'parent_id' => $folder_level_1->id,
- 'author' => 'user',
'user_id' => $user->id,
]);
diff --git a/tests/Domain/Sharing/VisitorManipulatingTest.php b/tests/Domain/Sharing/VisitorManipulatingTest.php
index 49382753..ea5df238 100644
--- a/tests/Domain/Sharing/VisitorManipulatingTest.php
+++ b/tests/Domain/Sharing/VisitorManipulatingTest.php
@@ -306,7 +306,6 @@ class VisitorManipulatingTest extends TestCase
$folder = Folder::factory()
->create([
'user_id' => $user->id,
- 'author' => 'user',
]);
$share = Share::factory()
@@ -350,10 +349,6 @@ class VisitorManipulatingTest extends TestCase
])->assertStatus(201);
}
- $this->assertDatabaseHas('files', [
- 'author' => 'visitor',
- ]);
-
$file = File::all()->last();
Storage::disk('local')
diff --git a/tests/Domain/Teams/TeamManagementTest.php b/tests/Domain/Teams/TeamManagementTest.php
index 34be6f64..cefdf36a 100644
--- a/tests/Domain/Teams/TeamManagementTest.php
+++ b/tests/Domain/Teams/TeamManagementTest.php
@@ -420,23 +420,6 @@ 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([
@@ -466,10 +449,6 @@ 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', [
@@ -709,57 +688,6 @@ class TeamManagementTest extends TestCase
'team_folder' => 1,
]);
- $folderWithin = Folder::factory()
- ->create([
- 'name' => 'Member Content',
- 'parent_id' => $folder->id,
- 'user_id' => $member->id,
- 'team_folder' => 1,
- ]);
-
- $file = File::factory()
- ->create([
- 'name' => 'Member File',
- 'basename' => 'fake-file.zip',
- 'parent_id' => $folderWithin->id,
- 'user_id' => $member->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/$member->id", $fakeFile, 'fake-file.zip');
-
- File::factory()
- ->create([
- 'name' => 'Good image',
- 'basename' => 'fake-image.jpeg',
- 'parent_id' => $folderWithin->id,
- 'user_id' => $member->id,
- 'type' => 'image',
- ]);
-
- // Create fake image
- $fakeFile = UploadedFile::fake()
- ->create('fake-image.jpeg', 2000, 'image/jpeg');
-
- // Put fake image into correct directory
- Storage::putFileAs("files/$member->id", $fakeFile, $fakeFile->name);
-
- $thumbnail_sizes = collect([config('vuefilemanager.image_sizes.later'), config('vuefilemanager.image_sizes.immediately')])->collapse();
-
- // Create fake image thumbnails
- $thumbnail_sizes
- ->each(function ($item) use ($member) {
- $fakeFile = UploadedFile::fake()
- ->create("{$item['name']}-fake-image.jpeg", 2000, 'image/jpeg');
-
- Storage::putFileAs("files/$member->id", $fakeFile, $fakeFile->name);
- });
-
// add member to the team folder
DB::table('team_folder_members')
->insert([
@@ -775,31 +703,11 @@ class TeamManagementTest extends TestCase
->deleteJson("/api/teams/folders/{$folder->id}/leave")
->assertNoContent();
- // Check if file was moved from member directory to owner directory
- Storage::assertMissing("files/$member->id/fake-file.zip");
- Storage::assertExists("files/$user->id/fake-file.zip");
-
- // Assert if image thumbnails was moved correctly to the new destination
- $thumbnail_sizes
- ->each(function ($item) use ($user) {
- Storage::assertExists("files/$user->id/{$item['name']}-fake-image.jpeg");
- });
-
$this
->assertDatabaseMissing('team_folder_members', [
'parent_id' => $folder->id,
'user_id' => $member->id,
'permission' => 'can-edit',
- ])
- ->assertDatabaseHas('files', [
- 'id' => $file->id,
- 'parent_id' => $folderWithin->id,
- 'user_id' => $user->id,
- ])
- ->assertDatabaseHas('folders', [
- 'id' => $folderWithin->id,
- 'parent_id' => $folder->id,
- 'user_id' => $user->id,
]);
}
diff --git a/tests/Domain/Teams/TeamsTest.php b/tests/Domain/Teams/TeamsTest.php
index 18d7d515..666a3026 100644
--- a/tests/Domain/Teams/TeamsTest.php
+++ b/tests/Domain/Teams/TeamsTest.php
@@ -1,6 +1,8 @@
$level_1->id,
]);
- $teamRoot = $level_2->getLatestParent();
-
- $this->assertEquals($teamFolder->id, $teamRoot->id);
+ $this->assertEquals($teamFolder->id, $level_2->getLatestParent()->id);
+ $this->assertEquals($teamFolder->id, $teamFolder->getLatestParent()->id);
}
/**
@@ -72,6 +73,7 @@ class TeamsTest extends TestCase
$this
->assertDatabaseHas('folders', [
+ 'user_id' => $user->id,
'name' => 'Company Project',
'team_folder' => 1,
])
@@ -96,6 +98,7 @@ class TeamsTest extends TestCase
$teamFolder = Folder::factory()
->create([
+ 'user_id' => $user->id,
'team_folder' => 1,
]);
@@ -108,6 +111,7 @@ class TeamsTest extends TestCase
->assertStatus(201)
->assertJsonFragment([
'isTeamFolder' => true,
+ 'id' => $user->id,
]);
}
@@ -254,4 +258,42 @@ class TeamsTest extends TestCase
'id' => $folders[0]->id,
]);
}
+
+ /**
+ * @test
+ */
+ public function team_member_upload_new_file()
+ {
+ $file = UploadedFile::fake()
+ ->create('fake-file.pdf', 12000000, 'application/pdf');
+
+ $user = User::factory()
+ ->hasSettings()
+ ->create();
+
+ $member = User::factory()
+ ->hasSettings()
+ ->create();
+
+ $folder = Folder::factory()
+ ->create([
+ 'user_id' => $user->id,
+ 'team_folder' => 1,
+ ]);
+
+ $this
+ ->actingAs($member)
+ ->postJson('/api/upload', [
+ 'filename' => $file->name,
+ 'file' => $file,
+ 'parent_id' => $folder->id,
+ 'path' => "/$file->name",
+ 'is_last' => 'true',
+ ])->assertStatus(201);
+
+ $this->assertDatabaseHas('files', [
+ 'user_id' => $user->id,
+ 'creator_id' => $member->id,
+ ]);
+ }
}