diff --git a/public/mix-manifest.json b/public/mix-manifest.json index db859873..d768de09 100644 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -95,33 +95,5 @@ "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~25aaad73.js": "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~25aaad73.js?id=0de519ac9b2c2754e0c2", "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~81c8aec0.js": "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~81c8aec0.js?id=ca3b57f70682c1c315f7", "/vendors~chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser~chunks/shared/single-file.js": "/vendors~chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser~chunks/shared/single-file.js?id=9d10953d3b088324dfe3", - "/vendors~chunks/platform~chunks/shared.js": "/vendors~chunks/platform~chunks/shared.js?id=7d09e0b0658e140a7ffa", - "/js/main.29b1db514065867abc6e.hot-update.js": "/js/main.29b1db514065867abc6e.hot-update.js", - "/chunks/files~chunks/platform~chunks/shared/file-browser.29b1db514065867abc6e.hot-update.js": "/chunks/files~chunks/platform~chunks/shared/file-browser.29b1db514065867abc6e.hot-update.js", - "/chunks/files~chunks/shared/file-browser.29b1db514065867abc6e.hot-update.js": "/chunks/files~chunks/shared/file-browser.29b1db514065867abc6e.hot-update.js", - "/js/main.a35d30fac2d16216b86b.hot-update.js": "/js/main.a35d30fac2d16216b86b.hot-update.js", - "/chunks/files~chunks/platform~chunks/shared/file-browser.a35d30fac2d16216b86b.hot-update.js": "/chunks/files~chunks/platform~chunks/shared/file-browser.a35d30fac2d16216b86b.hot-update.js", - "/chunks/files~chunks/shared/file-browser.a35d30fac2d16216b86b.hot-update.js": "/chunks/files~chunks/shared/file-browser.a35d30fac2d16216b86b.hot-update.js", - "/chunks/files~chunks/platform~chunks/shared/file-browser.78259380a9090454fa1b.hot-update.js": "/chunks/files~chunks/platform~chunks/shared/file-browser.78259380a9090454fa1b.hot-update.js", - "/chunks/files~chunks/platform~chunks/shared/file-browser.868cd8e2afa2b86a9374.hot-update.js": "/chunks/files~chunks/platform~chunks/shared/file-browser.868cd8e2afa2b86a9374.hot-update.js", - "/chunks/files~chunks/platform~chunks/shared/file-browser.a0fbbcb6c956e5bdac49.hot-update.js": "/chunks/files~chunks/platform~chunks/shared/file-browser.a0fbbcb6c956e5bdac49.hot-update.js", - "/chunks/files~chunks/platform~chunks/shared/file-browser.8cdb9c1731262fd3d181.hot-update.js": "/chunks/files~chunks/platform~chunks/shared/file-browser.8cdb9c1731262fd3d181.hot-update.js", - "/chunks/files~chunks/platform~chunks/shared/file-browser.ab5c0362135b8b6fe427.hot-update.js": "/chunks/files~chunks/platform~chunks/shared/file-browser.ab5c0362135b8b6fe427.hot-update.js", - "/chunks/files~chunks/platform~chunks/shared/file-browser.340112ae61a8b9ce6110.hot-update.js": "/chunks/files~chunks/platform~chunks/shared/file-browser.340112ae61a8b9ce6110.hot-update.js", - "/chunks/files~chunks/platform~chunks/shared/file-browser.58b8245b1f0e6a721ff4.hot-update.js": "/chunks/files~chunks/platform~chunks/shared/file-browser.58b8245b1f0e6a721ff4.hot-update.js", - "/chunks/admin~chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser.aa9baee94452c24b21d0.hot-update.js": "/chunks/admin~chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser.aa9baee94452c24b21d0.hot-update.js", - "/chunks/files~chunks/platform~chunks/shared/file-browser.4b806ec1b5b517245810.hot-update.js": "/chunks/files~chunks/platform~chunks/shared/file-browser.4b806ec1b5b517245810.hot-update.js", - "/chunks/files~chunks/platform~chunks/shared/file-browser.ce2beb020aca0c9f7cf2.hot-update.js": "/chunks/files~chunks/platform~chunks/shared/file-browser.ce2beb020aca0c9f7cf2.hot-update.js", - "/chunks/admin~chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser.039b5712d893577cf232.hot-update.js": "/chunks/admin~chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser.039b5712d893577cf232.hot-update.js", - "/chunks/admin~chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser.f3ae241d12e4ba858751.hot-update.js": "/chunks/admin~chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser.f3ae241d12e4ba858751.hot-update.js", - "/chunks/admin~chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser.881f616bd31cda542385.hot-update.js": "/chunks/admin~chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser.881f616bd31cda542385.hot-update.js", - "/chunks/admin~chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser.9c4919d40a1488c83a81.hot-update.js": "/chunks/admin~chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser.9c4919d40a1488c83a81.hot-update.js", - "/chunks/admin~chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser.27d1450d2125a2e70884.hot-update.js": "/chunks/admin~chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser.27d1450d2125a2e70884.hot-update.js", - "/chunks/admin~chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser.28ddde9b749317d9b79a.hot-update.js": "/chunks/admin~chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser.28ddde9b749317d9b79a.hot-update.js", - "/chunks/admin~chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser.69c351619c1fd8472185.hot-update.js": "/chunks/admin~chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser.69c351619c1fd8472185.hot-update.js", - "/chunks/admin~chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser.1ba0f82548a5468503f1.hot-update.js": "/chunks/admin~chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser.1ba0f82548a5468503f1.hot-update.js", - "/chunks/admin~chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser.3f6c62e390194c1dbe82.hot-update.js": "/chunks/admin~chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser.3f6c62e390194c1dbe82.hot-update.js", - "/chunks/files~chunks/platform~chunks/shared/file-browser.173db6e1bb84da9e26ee.hot-update.js": "/chunks/files~chunks/platform~chunks/shared/file-browser.173db6e1bb84da9e26ee.hot-update.js", - "/chunks/files~chunks/platform~chunks/shared/file-browser.0bb6d99710b584b6f333.hot-update.js": "/chunks/files~chunks/platform~chunks/shared/file-browser.0bb6d99710b584b6f333.hot-update.js", - "/chunks/files~chunks/platform~chunks/shared/file-browser.cde9df15dc66f7ab9473.hot-update.js": "/chunks/files~chunks/platform~chunks/shared/file-browser.cde9df15dc66f7ab9473.hot-update.js" + "/vendors~chunks/platform~chunks/shared.js": "/vendors~chunks/platform~chunks/shared.js?id=7d09e0b0658e140a7ffa" } diff --git a/src/Domain/Files/Actions/CreateFolderStructureAction.php b/src/Domain/Files/Actions/CreateFolderStructureAction.php new file mode 100644 index 00000000..164d8ecc --- /dev/null +++ b/src/Domain/Files/Actions/CreateFolderStructureAction.php @@ -0,0 +1,126 @@ +with('parent')->get(); + + // If file have some parent folders + if( count($folders) > 0) { + + // If uploading structure has same lenght as a already existed structure + if( count($folders) === count($structure) ) { + + // Get correct file parent from the already craeted structure + $last_folder = $this->get_file_parent($structure, $folders); + + } else if ( count($folders) !== count($structure) ) { + + + if( count($structure) > 0 ) { + + // Check what folders are missed in structure and return missed folder with last created folder in structure + $data = $this->check_exist_folders($structure, $folders); + + $folders = $data[0]; + + $parent_id = $data[1]; + + } + + // Create folders + foreach($folders as $folder) { + + $new_folder = Folder::create([ + 'name' => $folder, + 'parent_id' => $parent_id, + 'user_id' => $user_id, + ]); + + $parent_id = $new_folder->id; + + $last_folder = $new_folder->id; + }; + } + } + + return $last_folder; + } + + /** + * Find the file parent folder in already existed structure + */ + private function get_file_parent($structure, $folders) + { + $parent_name = ''; + + foreach(array_reverse($folders) as $folder) { + + $item = $structure->where('name', $folder); + + $parent = $item->pluck('parent')->pluck('name')[0]; + + // Check if folder have valid parent name + if( $parent && $folder === $parent_name || $parent_name == '') { + + $parent_name = $parent; + } + + return $structure->where('name', $folders[array_key_last($folders)])->first()->id; + } + } + /** + * Return the folders that is need to create in already created structure and last created parent + */ + private function check_exist_folders($structure, $folders) + { + + $create_folders = []; + $last_parent = ''; + + foreach($folders as $folder) { + + // Filter folders that is need to create + if(! $structure->where('name', $folder)->first()) { + + array_push($create_folders, $folder); + }else { + + // Find last created folder + $last_parent = $structure->where('name', $folder)->first()->id; + } + } + + return [$create_folders, $last_parent]; + } +} + diff --git a/src/Domain/Files/Actions/UploadFileAction.php b/src/Domain/Files/Actions/UploadFileAction.php index f9979419..533a3721 100644 --- a/src/Domain/Files/Actions/UploadFileAction.php +++ b/src/Domain/Files/Actions/UploadFileAction.php @@ -2,13 +2,14 @@ namespace Domain\Files\Actions; use Domain\Sharing\Models\Share; -use Domain\Folders\Models\Folder; +// use Domain\Folders\Models\Folder; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\File; use Illuminate\Support\Facades\Storage; use Domain\Files\Requests\UploadRequest; use Domain\Files\Models\File as UserFile; use Domain\Traffic\Actions\RecordUploadAction; +use Domain\Files\Actions\CreateFolderStructureAction; use App\Users\Actions\CheckStorageCapacityAction; class UploadFileAction @@ -17,6 +18,7 @@ class UploadFileAction public RecordUploadAction $recordUpload, public CheckStorageCapacityAction $checkStorageCapacity, public CreateImageThumbnailAction $createImageThumbnail, + public CreateFolderStructureAction $createFolderStructure, public MoveFileToExternalStorageAction $moveFileToExternalStorage, ) { } @@ -31,8 +33,6 @@ class UploadFileAction // Get parent_id from request $file = $request->file('file'); - // dd($this->createFolderStructure($request->input('path'), $request->input('folder_id'))); - // File name $disk_file_name = basename('chunks/' . $file->getClientOriginalName(), '.part'); $temp_filename = $file->getClientOriginalName(); @@ -89,7 +89,7 @@ class UploadFileAction return UserFile::create([ 'mimetype' => get_file_type_from_mimetype($file_mimetype), 'type' => get_file_type($file_mimetype), - 'folder_id' => $this->create_folder_structure($request->input('path'), $request->input('folder_id'), $user_id), + 'folder_id' => ($this->createFolderStructure)($request->input('path'), $request->input('folder_id'), $user_id), 'metadata' => $metadata, 'name' => $request->input('filename'), 'basename' => $disk_file_name, @@ -100,121 +100,4 @@ class UploadFileAction ]); } } - - /** - * Create structure fot the Folder upload - */ - private function create_folder_structure ($path, $parent, $user_id) - { - $folders = array_slice(explode('/', $path), 1, -1); - - $parent_id = $parent; - - $last_folder = $parent; - - // Get already created structure of the file parents - $structure = Folder::whereIn('name', $folders)->with('parent')->get(); - - // If file have some parent folders - if( count($folders) > 0) { - - - if(count($folders) === count($structure) ) { - - // Check if file parents are equal to already existed folder structure - $last_folder = $this->check_folder_structure($structure, $folders); - - } else if (count($folders) !== count($structure)) { - - - if(count($structure) > 0) { - - // Check what folders are missed in structure and return missed folder with last created folder in structure - $data = $this->check_exist_folders($structure, $folders); - - $folders = $data[0]; - - $parent_id = $data[1]; - - } - - foreach($folders as $folder) { - - $new_folder = Folder::create([ - 'name' => $folder, - 'parent_id' => $parent_id, - 'user_id' => $user_id, - ]); - - $parent_id = $new_folder->id; - - $last_folder = $new_folder->id; - }; - } - } - - return $last_folder; - } - - /** - * Check if is the structure correct - */ - private function check_folder_structure($structure, $folders) - { - - $parent_name = ''; - - $validate = false; - - foreach(array_reverse($folders) as $folder) { - - $item = $structure->where('name', $folder); - - $parent = $item->pluck('parent')->pluck('name')[0]; - - // Check if folder have valid parent name - if( $parent && $folder === $parent_name || $parent_name == '') { - - $parent_name = $parent; - - $validate = true; - - } else if ($parent && $folder != $parent_name || $parent_name == ''){ - - $validate = false; - } - } - - if($validate) { - return $structure->where('name', $folders[array_key_last($folders)])->first()->id; - - } else { - return false; - } - - } - - /** - * Return the folders that is need to create in already created structure and last created parent - */ - private function check_exist_folders($structure, $folders) - { - - $create_folders = []; - $last_parent = ''; - - foreach($folders as $folder) { - - // Filter folders that is need to create - if(! $structure->where('name', $folder)->first()) { - array_push($create_folders, $folder); - }else { - - // Find last created folder - $last_parent = $structure->where('name', $folder)->first()->id; - } - } - - return [$create_folders, $last_parent]; - } }