FolderUrlService.php 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. $index=1;
  19. foreach ($folders as $folder){
  20. $folderIds=[];
  21. $folderIds = [...$folderIds, ...explode(",", $folder->path)];
  22. //排除自己的文件夹
  23. $folderPathArray = array_unique(array_diff($folderIds, [$folder->id]));
  24. $folders = Folder::query()->whereIn("id", $folderPathArray)->pluck("name", "id");
  25. if($folders->isEmpty()){
  26. $folder['folder_path']='/';
  27. $folder['type']='folder';
  28. $folder['display_id'] = (string)$index++;
  29. $item[]=$folder;
  30. }else{
  31. $folderPath = [];
  32. foreach($folderPathArray as $folderId) {
  33. $folderPath[] = $folders->get($folderId);
  34. }
  35. $folder['folder_path']=implode('/', $folderPath);
  36. $folder['type']='folder';
  37. $folder['display_id'] = (string)$index++;
  38. $item[]=$folder;
  39. }
  40. }
  41. return $item;
  42. }
  43. public function filesFormat(Collection $files,$folderCount)
  44. {
  45. $folderIds = [];
  46. foreach ($files as $file) {
  47. $folderIds = [...$folderIds, ...explode(",", $file->folder?->path)];
  48. }
  49. $folders = Folder::query()->whereIn("id", array_unique(array_filter($folderIds)))->pluck("name", "id");
  50. $items = [];
  51. foreach ($files as $file) {
  52. $fileDownloadResource = (new FileDownloadResource($file))->toArray(request());
  53. $folderPath = [];
  54. foreach(array_filter(explode(",", $file->folder?->path)) as $folderId) {
  55. $folderPath[] = $folders->get($folderId);
  56. }
  57. $fileDownloadResource['folder_path'] = "/" . implode('/', $folderPath);
  58. $fileDownloadResource['type']='file';
  59. $fileDownloadResource['display_id']=$folderCount++;
  60. $items[] = $fileDownloadResource;
  61. }
  62. return $items;
  63. }
  64. }