]> BookStack Code Mirror - bookstack/blob - app/Http/Controllers/FileController.php
Started work on attachments
[bookstack] / app / Http / Controllers / FileController.php
1 <?php
2
3 namespace BookStack\Http\Controllers;
4
5 use BookStack\Exceptions\FileUploadException;
6 use BookStack\File;
7 use BookStack\Page;
8 use BookStack\Repos\PageRepo;
9 use BookStack\Services\FileService;
10 use Illuminate\Http\Request;
11
12 use BookStack\Http\Requests;
13
14 class FileController extends Controller
15 {
16     protected $fileService;
17     protected $file;
18     protected $pageRepo;
19
20     /**
21      * FileController constructor.
22      * @param FileService $fileService
23      * @param File $file
24      * @param PageRepo $pageRepo
25      */
26     public function __construct(FileService $fileService, File $file, PageRepo $pageRepo)
27     {
28         $this->fileService = $fileService;
29         $this->file = $file;
30         $this->pageRepo = $pageRepo;
31     }
32
33
34     /**
35      * Endpoint at which files are uploaded to.
36      * @param Request $request
37      */
38     public function upload(Request $request)
39     {
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.
43
44         $this->validate($request, [
45             'uploaded_to' => 'required|integer|exists:pages,id'
46         ]);
47
48         $uploadedFile = $request->file('file');
49         $pageId = $request->get('uploaded_to');
50
51         try {
52             $file = $this->fileService->saveNewUpload($uploadedFile, $pageId);
53         } catch (FileUploadException $e) {
54             return response($e->getMessage(), 500);
55         }
56
57         return response()->json($file);
58     }
59
60     /**
61      * Get the files for a specific page.
62      * @param $pageId
63      * @return mixed
64      */
65     public function getFilesForPage($pageId)
66     {
67         // TODO - check view permission on page?
68         $page = $this->pageRepo->getById($pageId);
69         return response()->json($page->files);
70     }
71
72     /**
73      * Update the file sorting.
74      * @param $pageId
75      * @param Request $request
76      * @return mixed
77      */
78     public function sortFilesForPage($pageId, Request $request)
79     {
80         $this->validate($request, [
81             'files' => 'required|array',
82             'files.*.id' => 'required|integer',
83         ]);
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']);
88     }
89
90
91 }