3 namespace BookStack\Http\Controllers;
5 use BookStack\Exceptions\FileUploadException;
8 use BookStack\Repos\PageRepo;
9 use BookStack\Services\FileService;
10 use Illuminate\Http\Request;
12 use BookStack\Http\Requests;
14 class FileController extends Controller
16 protected $fileService;
21 * FileController constructor.
22 * @param FileService $fileService
24 * @param PageRepo $pageRepo
26 public function __construct(FileService $fileService, File $file, PageRepo $pageRepo)
28 $this->fileService = $fileService;
30 $this->pageRepo = $pageRepo;
35 * Endpoint at which files are uploaded to.
36 * @param Request $request
38 public function upload(Request $request)
40 // TODO - Add file upload permission check
41 // TODO - ensure user has permission to edit relevant page.
42 // TODO - ensure uploads are deleted on page delete.
44 $this->validate($request, [
45 'uploaded_to' => 'required|integer|exists:pages,id'
48 $uploadedFile = $request->file('file');
49 $pageId = $request->get('uploaded_to');
52 $file = $this->fileService->saveNewUpload($uploadedFile, $pageId);
53 } catch (FileUploadException $e) {
54 return response($e->getMessage(), 500);
57 return response()->json($file);
61 * Get the files for a specific page.
65 public function getFilesForPage($pageId)
67 // TODO - check view permission on page?
68 $page = $this->pageRepo->getById($pageId);
69 return response()->json($page->files);
73 * Update the file sorting.
75 * @param Request $request
78 public function sortFilesForPage($pageId, Request $request)
80 $this->validate($request, [
81 'files' => 'required|array',
82 'files.*.id' => 'required|integer',
84 $page = $this->pageRepo->getById($pageId);
85 $files = $request->get('files');
86 $this->fileService->updateFileOrderWithinPage($files, $pageId);
87 return response()->json(['message' => 'File order updated']);