mirror of
				https://github.com/BookStackApp/BookStack.git
				synced 2025-10-29 16:09:29 +03:00 
			
		
		
		
	Merge branch 'master' of git://github.com/osmansorkar/BookStack into osmansorkar-master
This commit is contained in:
		
							
								
								
									
										113
									
								
								app/Http/Controllers/Api/BookshelfApiController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								app/Http/Controllers/Api/BookshelfApiController.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,113 @@ | |||||||
|  | <?php namespace BookStack\Http\Controllers\Api; | ||||||
|  |  | ||||||
|  | use BookStack\Facades\Activity; | ||||||
|  | use BookStack\Entities\Repos\BookshelfRepo; | ||||||
|  | use BookStack\Entities\Bookshelf; | ||||||
|  | use Exception; | ||||||
|  | use Illuminate\Http\Request; | ||||||
|  | use Illuminate\Validation\ValidationException; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class BookshelfApiController extends ApiController | ||||||
|  | { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @var BookshelfRepo | ||||||
|  |      */ | ||||||
|  |     protected $bookshelfRepo; | ||||||
|  |  | ||||||
|  |     protected $rules = [ | ||||||
|  |         'create' => [ | ||||||
|  |             'name' => 'required|string|max:255', | ||||||
|  |             'description' => 'string|max:1000', | ||||||
|  |         ], | ||||||
|  |         'update' => [ | ||||||
|  |             'name' => 'string|min:1|max:255', | ||||||
|  |             'description' => 'string|max:1000', | ||||||
|  |         ], | ||||||
|  |     ]; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * BookshelfApiController constructor. | ||||||
|  |      * @param BookshelfRepo $bookshelfRepo | ||||||
|  |      */ | ||||||
|  |     public function __construct(BookshelfRepo $bookshelfRepo) | ||||||
|  |     { | ||||||
|  |         $this->bookshelfRepo = $bookshelfRepo; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Get a listing of shelves visible to the user. | ||||||
|  |      */ | ||||||
|  |     public function list() | ||||||
|  |     { | ||||||
|  |         $shelves = Bookshelf::visible(); | ||||||
|  |         return $this->apiListingResponse($shelves, [ | ||||||
|  |             'id', 'name', 'slug', 'description', 'created_at', 'updated_at', 'created_by', 'updated_by', 'image_id', | ||||||
|  |         ]); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Create a new shelf in the system. | ||||||
|  |      * @throws ValidationException | ||||||
|  |      */ | ||||||
|  |     public function create(Request $request) | ||||||
|  |     { | ||||||
|  |         $this->checkPermission('bookshelf-create-all'); | ||||||
|  |         $requestData = $this->validate($request, $this->rules['create']); | ||||||
|  |  | ||||||
|  |         $bookIds = $request->get('books', []); | ||||||
|  |  | ||||||
|  |         $shelf = $this->bookshelfRepo->create($requestData,$bookIds); | ||||||
|  |         Activity::add($shelf, 'bookshelf_create', $shelf->id); | ||||||
|  |  | ||||||
|  |         return response()->json($shelf); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * View the details of a single shelf. | ||||||
|  |      */ | ||||||
|  |     public function read(string $id) | ||||||
|  |     { | ||||||
|  |         $shelf = Bookshelf::visible()->with(['tags', 'cover', 'createdBy', 'updatedBy'])->findOrFail($id); | ||||||
|  |         return response()->json($shelf); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Update the details of a single shelf. | ||||||
|  |      * @throws ValidationException | ||||||
|  |      */ | ||||||
|  |     public function update(Request $request, string $id) | ||||||
|  |     { | ||||||
|  |         $shelf = Bookshelf::visible()->findOrFail($id); | ||||||
|  |         $this->checkOwnablePermission('bookshelf-update', $shelf); | ||||||
|  |  | ||||||
|  |         $requestData = $this->validate($request, $this->rules['update']); | ||||||
|  |  | ||||||
|  |         $bookIds = $request->get('books', []); | ||||||
|  |  | ||||||
|  |         $shelf = $this->bookshelfRepo->update($shelf, $requestData,$bookIds); | ||||||
|  |         Activity::add($shelf, 'bookshelf_update', $shelf->id); | ||||||
|  |  | ||||||
|  |         return response()->json($shelf); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Delete a single shelf from the system. | ||||||
|  |      * @param string $id | ||||||
|  |      * @return \Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response | ||||||
|  |      * @throws Exception | ||||||
|  |      */ | ||||||
|  |     public function delete(string $id) | ||||||
|  |     { | ||||||
|  |         $shelf = Bookshelf::visible()->findOrFail($id); | ||||||
|  |         $this->checkOwnablePermission('bookshelf-delete', $shelf); | ||||||
|  |  | ||||||
|  |         $this->bookshelfRepo->destroy($shelf); | ||||||
|  |         Activity::addMessage('bookshelf-delete', $shelf->name); | ||||||
|  |  | ||||||
|  |         return response('', 204); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -5,6 +5,10 @@ | |||||||
|  |  | ||||||
|     RewriteEngine On |     RewriteEngine On | ||||||
|  |  | ||||||
|  |     # Handle Authorization Header | ||||||
|  |     RewriteCond %{HTTP:Authorization} . | ||||||
|  |     RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] | ||||||
|  |  | ||||||
|     # Redirect Trailing Slashes If Not A Folder... |     # Redirect Trailing Slashes If Not A Folder... | ||||||
|     RewriteCond %{REQUEST_FILENAME} !-d |     RewriteCond %{REQUEST_FILENAME} !-d | ||||||
|     RewriteRule ^(.*)/$ /$1 [L,R=301] |     RewriteRule ^(.*)/$ /$1 [L,R=301] | ||||||
|   | |||||||
| @@ -14,3 +14,9 @@ Route::post('books', 'BooksApiController@create'); | |||||||
| Route::get('books/{id}', 'BooksApiController@read'); | Route::get('books/{id}', 'BooksApiController@read'); | ||||||
| Route::put('books/{id}', 'BooksApiController@update'); | Route::put('books/{id}', 'BooksApiController@update'); | ||||||
| Route::delete('books/{id}', 'BooksApiController@delete'); | Route::delete('books/{id}', 'BooksApiController@delete'); | ||||||
|  |  | ||||||
|  | Route::get('shelves', 'BookshelfApiController@list'); | ||||||
|  | Route::post('shelves', 'BookshelfApiController@create'); | ||||||
|  | Route::get('shelves/{id}', 'BookshelfApiController@read'); | ||||||
|  | Route::put('shelves/{id}', 'BookshelfApiController@update'); | ||||||
|  | Route::delete('shelves/{id}', 'BookshelfApiController@delete'); | ||||||
		Reference in New Issue
	
	Block a user