FolderUrlService.php 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <?php
  2. /**
  3. * Created by IntelliJ IDEA.
  4. * User: kelyliang
  5. * Date: 2024/5/8
  6. * Time: 下午 03:47
  7. */
  8. namespace App\Services\File;
  9. use App\Http\Resources\API\FileDownloadResource;
  10. use App\Models\Folder;
  11. use Illuminate\Support\Collection;
  12. use App\Models\Enums\FileObjectType;
  13. use function Nette\Utils\isEmpty;
  14. class FolderUrlService
  15. {
  16. public function folderFormat(Collection $folders){
  17. $item=[];
  18. foreach ($folders as $folder){
  19. $folderIds=[];
  20. $folderIds = [...$folderIds, ...explode(",", $folder->path)];
  21. //排除自己的文件夹
  22. $folderPathArray = array_unique(array_diff($folderIds, [$folder->id]));
  23. $folders = Folder::query()->whereIn("id", $folderPathArray)->pluck("name", "id");
  24. if($folders->isEmpty()){
  25. $folder['folder_path']='/';
  26. $folder['type']='folder';
  27. $item[]=$folder;
  28. }else{
  29. $folderPath = [];
  30. foreach($folderPathArray as $folderId) {
  31. $folderPath[] = $folders->get($folderId);
  32. }
  33. $folder['folder_path']=implode('/', $folderPath);
  34. $folder['type']='folder';
  35. $item[]=$folder;
  36. }
  37. }
  38. return $item;
  39. }
  40. public function filesFormat(Collection $files)
  41. {
  42. $folderIds = [];
  43. foreach ($files as $file) {
  44. $folderIds = [...$folderIds, ...explode(",", $file->folder?->path)];
  45. }
  46. $folders = Folder::query()->whereIn("id", array_unique(array_filter($folderIds)))->pluck("name", "id");
  47. $items = [];
  48. foreach ($files as $file) {
  49. $fileDownloadResource = (new FileDownloadResource($file))->toArray(request());
  50. $folderPath = [];
  51. foreach(array_filter(explode(",", $file->folder?->path)) as $folderId) {
  52. $folderPath[] = $folders->get($folderId);
  53. }
  54. $fileDownloadResource['folder_path'] = "/" . implode('/', $folderPath);
  55. $fileDownloadResource['type']='file';
  56. $items[] = $fileDownloadResource;
  57. }
  58. return $items;
  59. }
  60. }