76 lines
2.5 KiB
PHP
76 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Http\Requests\StoreFolderRequest;
|
|
use App\Http\Requests\StoreFileRequest;
|
|
use App\Http\Resources\FileResource;
|
|
use App\Models\File;
|
|
use Inertia\Inertia;
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
|
class FileController extends Controller
|
|
{
|
|
// render user's files
|
|
public function userFiles(string $folder = null) {
|
|
// validate passed in $folder param
|
|
// if passed in,
|
|
if ($folder) {
|
|
$folder = File::query()
|
|
->where('created_by', Auth::id()) // ensure matching user for access
|
|
->where('path', $folder) // ensure that the specified folder exists in the database
|
|
->firstOrFail(); // if none found, fail
|
|
}
|
|
else {
|
|
// use root folder if $folder not passed in
|
|
$folder = $this->getRoot();
|
|
}
|
|
// get all files and folders where parent_id = root
|
|
$files = File::query()->where('parent_id', $folder->id)
|
|
// that are created by the current user
|
|
->where('created_by', Auth::id())
|
|
// that have not been deleted
|
|
->whereNull('deleted_at')
|
|
// order by folders first
|
|
->orderByDesc('is_folder')
|
|
// then order by creation date
|
|
->orderByDesc('created_at')
|
|
// return x amount (default 8)
|
|
->paginate(8);
|
|
|
|
$files = FileResource::collection($files);
|
|
|
|
$ancestors = FileResource::collection([...$folder->ancestors, $folder]);
|
|
|
|
$folder = new FileResource($folder);
|
|
|
|
return Inertia::render('UserFiles', compact('files', 'folder', 'ancestors'));
|
|
}
|
|
|
|
// create new folder based on passed in StoreFolderRequest
|
|
public function newFolder(StoreFolderRequest $request) {
|
|
// get validated data
|
|
$data = $request->validated();
|
|
// get parent folder from StoreFolderRequest
|
|
$parent = $request->parent;
|
|
// check for parent
|
|
if (!$parent) {
|
|
$parent = $this->getRoot();
|
|
}
|
|
$file = new File();
|
|
$file->is_folder = 1;
|
|
$file->name = $data['name'];
|
|
$parent->appendNode($file);
|
|
}
|
|
|
|
public function upload(StoreFileRequest $request) {
|
|
// get validated data
|
|
$data = $request->validated();
|
|
// get parent folder from StoreFolderRequest
|
|
dd ($data);
|
|
}
|
|
|
|
private function getRoot() {
|
|
return File::query()->whereIsRoot()->where('created_by', Auth::id())->firstOrFail();
|
|
}
|
|
}
|