FolderUrlService.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. $item[]=$folder;
  27. }else{
  28. $folderPath = [];
  29. foreach($folderPathArray as $folderId) {
  30. $folderPath[] = $folders->get($folderId);
  31. }
  32. $folder['folder_path']=implode('/', $folderPath);
  33. $item[]=$folder;
  34. }
  35. }
  36. return $item;
  37. }
  38. public function filesFormat(Collection $files)
  39. {
  40. $folderIds = [];
  41. foreach ($files as $file) {
  42. $folderIds = [...$folderIds, ...explode(",", $file->folder?->path)];
  43. }
  44. $folders = Folder::query()->whereIn("id", array_unique(array_filter($folderIds)))->pluck("name", "id");
  45. $items = [];
  46. foreach ($files as $file) {
  47. $fileDownloadResource = (new FileDownloadResource($file))->toArray(request());
  48. $folderPath = [];
  49. foreach(array_filter(explode(",", $file->folder?->path)) as $folderId) {
  50. $folderPath[] = $folders->get($folderId);
  51. }
  52. $fileDownloadResource['folder_path'] = "/" . implode('/', $folderPath);
  53. $items[] = $fileDownloadResource;
  54. }
  55. return $items;
  56. }
  57. }