Reorgranised permission routes into their own controller
Also introduced helpers for getting entities by slugs since we do it in so many places.
This commit is contained in:
		
							parent
							
								
									06a7f1b54a
								
							
						
					
					
						commit
						bf591765c1
					
				| 
						 | 
					@ -3,7 +3,7 @@
 | 
				
			||||||
namespace BookStack\Console\Commands;
 | 
					namespace BookStack\Console\Commands;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use BookStack\Entities\Models\Bookshelf;
 | 
					use BookStack\Entities\Models\Bookshelf;
 | 
				
			||||||
use BookStack\Entities\Repos\BookshelfRepo;
 | 
					use BookStack\Entities\Tools\PermissionsUpdater;
 | 
				
			||||||
use Illuminate\Console\Command;
 | 
					use Illuminate\Console\Command;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class CopyShelfPermissions extends Command
 | 
					class CopyShelfPermissions extends Command
 | 
				
			||||||
| 
						 | 
					@ -25,19 +25,16 @@ class CopyShelfPermissions extends Command
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    protected $description = 'Copy shelf permissions to all child books';
 | 
					    protected $description = 'Copy shelf permissions to all child books';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    protected PermissionsUpdater $permissionsUpdater;
 | 
				
			||||||
     * @var BookshelfRepo
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    protected $bookshelfRepo;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Create a new command instance.
 | 
					     * Create a new command instance.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @return void
 | 
					     * @return void
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public function __construct(BookshelfRepo $repo)
 | 
					    public function __construct(PermissionsUpdater $permissionsUpdater)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $this->bookshelfRepo = $repo;
 | 
					        $this->permissionsUpdater = $permissionsUpdater;
 | 
				
			||||||
        parent::__construct();
 | 
					        parent::__construct();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -80,7 +77,7 @@ class CopyShelfPermissions extends Command
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        foreach ($shelves as $shelf) {
 | 
					        foreach ($shelves as $shelf) {
 | 
				
			||||||
            $this->bookshelfRepo->copyDownPermissions($shelf, false);
 | 
					            $this->permissionsUpdater->updateBookPermissionsFromShelf($shelf, false);
 | 
				
			||||||
            $this->info('Copied permissions for shelf [' . $shelf->id . ']');
 | 
					            $this->info('Copied permissions for shelf [' . $shelf->id . ']');
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -120,4 +120,13 @@ class Book extends Entity implements HasCoverImage
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $pages->concat($chapters)->sortBy('priority')->sortByDesc('draft');
 | 
					        return $pages->concat($chapters)->sortBy('priority')->sortByDesc('draft');
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Get a visible book by its slug.
 | 
				
			||||||
 | 
					     * @throws \Illuminate\Database\Eloquent\ModelNotFoundException
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static function getBySlug(string $slug): self
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return static::visible()->where('slug', '=', $slug)->firstOrFail();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -109,4 +109,13 @@ class Bookshelf extends Entity implements HasCoverImage
 | 
				
			||||||
        $maxOrder = $this->books()->max('order');
 | 
					        $maxOrder = $this->books()->max('order');
 | 
				
			||||||
        $this->books()->attach($book->id, ['order' => $maxOrder + 1]);
 | 
					        $this->books()->attach($book->id, ['order' => $maxOrder + 1]);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Get a visible shelf by its slug.
 | 
				
			||||||
 | 
					     * @throws \Illuminate\Database\Eloquent\ModelNotFoundException
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static function getBySlug(string $slug): self
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return static::visible()->where('slug', '=', $slug)->firstOrFail();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -58,4 +58,13 @@ class Chapter extends BookChild
 | 
				
			||||||
        ->orderBy('priority', 'asc')
 | 
					        ->orderBy('priority', 'asc')
 | 
				
			||||||
        ->get();
 | 
					        ->get();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Get a visible chapter by its book and page slugs.
 | 
				
			||||||
 | 
					     * @throws \Illuminate\Database\Eloquent\ModelNotFoundException
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static function getBySlugs(string $bookSlug, string $chapterSlug): self
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return static::visible()->whereSlugs($bookSlug, $chapterSlug)->firstOrFail();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -145,4 +145,13 @@ class Page extends BookChild
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $refreshed;
 | 
					        return $refreshed;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Get a visible page by its book and page slugs.
 | 
				
			||||||
 | 
					     * @throws \Illuminate\Database\Eloquent\ModelNotFoundException
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static function getBySlugs(string $bookSlug, string $pageSlug): self
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return static::visible()->whereSlugs($bookSlug, $pageSlug)->firstOrFail();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -134,31 +134,6 @@ class BookshelfRepo
 | 
				
			||||||
        $shelf->books()->sync($syncData);
 | 
					        $shelf->books()->sync($syncData);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Copy down the permissions of the given shelf to all child books.
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public function copyDownPermissions(Bookshelf $shelf, $checkUserPermissions = true): int
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        $shelfPermissions = $shelf->permissions()->get(['role_id', 'view', 'create', 'update', 'delete'])->toArray();
 | 
					 | 
				
			||||||
        $shelfBooks = $shelf->books()->get(['id', 'restricted', 'owned_by']);
 | 
					 | 
				
			||||||
        $updatedBookCount = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        /** @var Book $book */
 | 
					 | 
				
			||||||
        foreach ($shelfBooks as $book) {
 | 
					 | 
				
			||||||
            if ($checkUserPermissions && !userCan('restrictions-manage', $book)) {
 | 
					 | 
				
			||||||
                continue;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            $book->permissions()->delete();
 | 
					 | 
				
			||||||
            $book->restricted = $shelf->restricted;
 | 
					 | 
				
			||||||
            $book->permissions()->createMany($shelfPermissions);
 | 
					 | 
				
			||||||
            $book->save();
 | 
					 | 
				
			||||||
            $book->rebuildPermissions();
 | 
					 | 
				
			||||||
            $updatedBookCount++;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return $updatedBookCount;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Remove a bookshelf from the system.
 | 
					     * Remove a bookshelf from the system.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,6 +5,8 @@ namespace BookStack\Entities\Tools;
 | 
				
			||||||
use BookStack\Actions\ActivityType;
 | 
					use BookStack\Actions\ActivityType;
 | 
				
			||||||
use BookStack\Auth\Permissions\EntityPermission;
 | 
					use BookStack\Auth\Permissions\EntityPermission;
 | 
				
			||||||
use BookStack\Auth\User;
 | 
					use BookStack\Auth\User;
 | 
				
			||||||
 | 
					use BookStack\Entities\Models\Book;
 | 
				
			||||||
 | 
					use BookStack\Entities\Models\Bookshelf;
 | 
				
			||||||
use BookStack\Entities\Models\Entity;
 | 
					use BookStack\Entities\Models\Entity;
 | 
				
			||||||
use BookStack\Facades\Activity;
 | 
					use BookStack\Facades\Activity;
 | 
				
			||||||
use Illuminate\Http\Request;
 | 
					use Illuminate\Http\Request;
 | 
				
			||||||
| 
						 | 
					@ -67,4 +69,30 @@ class PermissionsUpdater
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $formatted;
 | 
					        return $formatted;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Copy down the permissions of the given shelf to all child books.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function updateBookPermissionsFromShelf(Bookshelf $shelf, $checkUserPermissions = true): int
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        // TODO - Fix for new format
 | 
				
			||||||
 | 
					        $shelfPermissions = $shelf->permissions()->get(['role_id', 'view', 'create', 'update', 'delete'])->toArray();
 | 
				
			||||||
 | 
					        $shelfBooks = $shelf->books()->get(['id', 'restricted', 'owned_by']);
 | 
				
			||||||
 | 
					        $updatedBookCount = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /** @var Book $book */
 | 
				
			||||||
 | 
					        foreach ($shelfBooks as $book) {
 | 
				
			||||||
 | 
					            if ($checkUserPermissions && !userCan('restrictions-manage', $book)) {
 | 
				
			||||||
 | 
					                continue;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            $book->permissions()->delete();
 | 
				
			||||||
 | 
					            $book->restricted = $shelf->restricted;
 | 
				
			||||||
 | 
					            $book->permissions()->createMany($shelfPermissions);
 | 
				
			||||||
 | 
					            $book->save();
 | 
				
			||||||
 | 
					            $book->rebuildPermissions();
 | 
				
			||||||
 | 
					            $updatedBookCount++;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return $updatedBookCount;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,7 +10,6 @@ use BookStack\Entities\Repos\BookRepo;
 | 
				
			||||||
use BookStack\Entities\Tools\BookContents;
 | 
					use BookStack\Entities\Tools\BookContents;
 | 
				
			||||||
use BookStack\Entities\Tools\Cloner;
 | 
					use BookStack\Entities\Tools\Cloner;
 | 
				
			||||||
use BookStack\Entities\Tools\HierarchyTransformer;
 | 
					use BookStack\Entities\Tools\HierarchyTransformer;
 | 
				
			||||||
use BookStack\Entities\Tools\PermissionsUpdater;
 | 
					 | 
				
			||||||
use BookStack\Entities\Tools\ShelfContext;
 | 
					use BookStack\Entities\Tools\ShelfContext;
 | 
				
			||||||
use BookStack\Exceptions\ImageUploadException;
 | 
					use BookStack\Exceptions\ImageUploadException;
 | 
				
			||||||
use BookStack\Exceptions\NotFoundException;
 | 
					use BookStack\Exceptions\NotFoundException;
 | 
				
			||||||
| 
						 | 
					@ -209,36 +208,6 @@ class BookController extends Controller
 | 
				
			||||||
        return redirect('/books');
 | 
					        return redirect('/books');
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Show the permissions view.
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public function showPermissions(string $bookSlug)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        $book = $this->bookRepo->getBySlug($bookSlug);
 | 
					 | 
				
			||||||
        $this->checkOwnablePermission('restrictions-manage', $book);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return view('books.permissions', [
 | 
					 | 
				
			||||||
            'book' => $book,
 | 
					 | 
				
			||||||
        ]);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Set the restrictions for this book.
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @throws Throwable
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public function permissions(Request $request, PermissionsUpdater $permissionsUpdater, string $bookSlug)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        $book = $this->bookRepo->getBySlug($bookSlug);
 | 
					 | 
				
			||||||
        $this->checkOwnablePermission('restrictions-manage', $book);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $permissionsUpdater->updateFromPermissionsForm($book, $request);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $this->showSuccessNotification(trans('entities.books_permissions_updated'));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return redirect($book->getUrl());
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Show the view to copy a book.
 | 
					     * Show the view to copy a book.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,7 +6,6 @@ use BookStack\Actions\ActivityQueries;
 | 
				
			||||||
use BookStack\Actions\View;
 | 
					use BookStack\Actions\View;
 | 
				
			||||||
use BookStack\Entities\Models\Book;
 | 
					use BookStack\Entities\Models\Book;
 | 
				
			||||||
use BookStack\Entities\Repos\BookshelfRepo;
 | 
					use BookStack\Entities\Repos\BookshelfRepo;
 | 
				
			||||||
use BookStack\Entities\Tools\PermissionsUpdater;
 | 
					 | 
				
			||||||
use BookStack\Entities\Tools\ShelfContext;
 | 
					use BookStack\Entities\Tools\ShelfContext;
 | 
				
			||||||
use BookStack\Exceptions\ImageUploadException;
 | 
					use BookStack\Exceptions\ImageUploadException;
 | 
				
			||||||
use BookStack\Exceptions\NotFoundException;
 | 
					use BookStack\Exceptions\NotFoundException;
 | 
				
			||||||
| 
						 | 
					@ -207,46 +206,4 @@ class BookshelfController extends Controller
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return redirect('/shelves');
 | 
					        return redirect('/shelves');
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Show the permissions view.
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public function showPermissions(string $slug)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        $shelf = $this->shelfRepo->getBySlug($slug);
 | 
					 | 
				
			||||||
        $this->checkOwnablePermission('restrictions-manage', $shelf);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return view('shelves.permissions', [
 | 
					 | 
				
			||||||
            'shelf' => $shelf,
 | 
					 | 
				
			||||||
        ]);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Set the permissions for this bookshelf.
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public function permissions(Request $request, PermissionsUpdater $permissionsUpdater, string $slug)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        $shelf = $this->shelfRepo->getBySlug($slug);
 | 
					 | 
				
			||||||
        $this->checkOwnablePermission('restrictions-manage', $shelf);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $permissionsUpdater->updateFromPermissionsForm($shelf, $request);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $this->showSuccessNotification(trans('entities.shelves_permissions_updated'));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return redirect($shelf->getUrl());
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Copy the permissions of a bookshelf to the child books.
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public function copyPermissions(string $slug)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        $shelf = $this->shelfRepo->getBySlug($slug);
 | 
					 | 
				
			||||||
        $this->checkOwnablePermission('restrictions-manage', $shelf);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $updateCount = $this->shelfRepo->copyDownPermissions($shelf);
 | 
					 | 
				
			||||||
        $this->showSuccessNotification(trans('entities.shelves_copy_permission_success', ['count' => $updateCount]));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return redirect($shelf->getUrl());
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,7 +9,6 @@ use BookStack\Entities\Tools\BookContents;
 | 
				
			||||||
use BookStack\Entities\Tools\Cloner;
 | 
					use BookStack\Entities\Tools\Cloner;
 | 
				
			||||||
use BookStack\Entities\Tools\HierarchyTransformer;
 | 
					use BookStack\Entities\Tools\HierarchyTransformer;
 | 
				
			||||||
use BookStack\Entities\Tools\NextPreviousContentLocator;
 | 
					use BookStack\Entities\Tools\NextPreviousContentLocator;
 | 
				
			||||||
use BookStack\Entities\Tools\PermissionsUpdater;
 | 
					 | 
				
			||||||
use BookStack\Exceptions\MoveOperationException;
 | 
					use BookStack\Exceptions\MoveOperationException;
 | 
				
			||||||
use BookStack\Exceptions\NotFoundException;
 | 
					use BookStack\Exceptions\NotFoundException;
 | 
				
			||||||
use BookStack\Exceptions\PermissionsException;
 | 
					use BookStack\Exceptions\PermissionsException;
 | 
				
			||||||
| 
						 | 
					@ -243,38 +242,6 @@ class ChapterController extends Controller
 | 
				
			||||||
        return redirect($chapterCopy->getUrl());
 | 
					        return redirect($chapterCopy->getUrl());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Show the Restrictions view.
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @throws NotFoundException
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public function showPermissions(string $bookSlug, string $chapterSlug)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        $chapter = $this->chapterRepo->getBySlug($bookSlug, $chapterSlug);
 | 
					 | 
				
			||||||
        $this->checkOwnablePermission('restrictions-manage', $chapter);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return view('chapters.permissions', [
 | 
					 | 
				
			||||||
            'chapter' => $chapter,
 | 
					 | 
				
			||||||
        ]);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Set the restrictions for this chapter.
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @throws NotFoundException
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public function permissions(Request $request, PermissionsUpdater $permissionsUpdater, string $bookSlug, string $chapterSlug)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        $chapter = $this->chapterRepo->getBySlug($bookSlug, $chapterSlug);
 | 
					 | 
				
			||||||
        $this->checkOwnablePermission('restrictions-manage', $chapter);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $permissionsUpdater->updateFromPermissionsForm($chapter, $request);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $this->showSuccessNotification(trans('entities.chapters_permissions_success'));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return redirect($chapter->getUrl());
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Convert the chapter to a book.
 | 
					     * Convert the chapter to a book.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,7 +11,6 @@ use BookStack\Entities\Tools\NextPreviousContentLocator;
 | 
				
			||||||
use BookStack\Entities\Tools\PageContent;
 | 
					use BookStack\Entities\Tools\PageContent;
 | 
				
			||||||
use BookStack\Entities\Tools\PageEditActivity;
 | 
					use BookStack\Entities\Tools\PageEditActivity;
 | 
				
			||||||
use BookStack\Entities\Tools\PageEditorData;
 | 
					use BookStack\Entities\Tools\PageEditorData;
 | 
				
			||||||
use BookStack\Entities\Tools\PermissionsUpdater;
 | 
					 | 
				
			||||||
use BookStack\Exceptions\NotFoundException;
 | 
					use BookStack\Exceptions\NotFoundException;
 | 
				
			||||||
use BookStack\Exceptions\PermissionsException;
 | 
					use BookStack\Exceptions\PermissionsException;
 | 
				
			||||||
use BookStack\References\ReferenceFetcher;
 | 
					use BookStack\References\ReferenceFetcher;
 | 
				
			||||||
| 
						 | 
					@ -452,37 +451,4 @@ class PageController extends Controller
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return redirect($pageCopy->getUrl());
 | 
					        return redirect($pageCopy->getUrl());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Show the Permissions view.
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @throws NotFoundException
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public function showPermissions(string $bookSlug, string $pageSlug)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        $page = $this->pageRepo->getBySlug($bookSlug, $pageSlug);
 | 
					 | 
				
			||||||
        $this->checkOwnablePermission('restrictions-manage', $page);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return view('pages.permissions', [
 | 
					 | 
				
			||||||
            'page' => $page,
 | 
					 | 
				
			||||||
        ]);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Set the permissions for this page.
 | 
					 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @throws NotFoundException
 | 
					 | 
				
			||||||
     * @throws Throwable
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public function permissions(Request $request, PermissionsUpdater $permissionsUpdater, string $bookSlug, string $pageSlug)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        $page = $this->pageRepo->getBySlug($bookSlug, $pageSlug);
 | 
					 | 
				
			||||||
        $this->checkOwnablePermission('restrictions-manage', $page);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $permissionsUpdater->updateFromPermissionsForm($page, $request);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        $this->showSuccessNotification(trans('entities.pages_permissions_success'));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return redirect($page->getUrl());
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,146 @@
 | 
				
			||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace BookStack\Http\Controllers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use BookStack\Entities\Models\Book;
 | 
				
			||||||
 | 
					use BookStack\Entities\Models\Bookshelf;
 | 
				
			||||||
 | 
					use BookStack\Entities\Models\Chapter;
 | 
				
			||||||
 | 
					use BookStack\Entities\Models\Page;
 | 
				
			||||||
 | 
					use BookStack\Entities\Tools\PermissionsUpdater;
 | 
				
			||||||
 | 
					use Illuminate\Http\Request;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class PermissionsController extends Controller
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    protected PermissionsUpdater $permissionsUpdater;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function __construct(PermissionsUpdater $permissionsUpdater)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $this->permissionsUpdater = $permissionsUpdater;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Show the Permissions view for a page.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function showForPage(string $bookSlug, string $pageSlug)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $page = Page::getBySlugs($bookSlug, $pageSlug);
 | 
				
			||||||
 | 
					        $this->checkOwnablePermission('restrictions-manage', $page);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return view('pages.permissions', [
 | 
				
			||||||
 | 
					            'page' => $page,
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Set the permissions for a page.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function updateForPage(Request $request, string $bookSlug, string $pageSlug)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $page = Page::getBySlugs($bookSlug, $pageSlug);
 | 
				
			||||||
 | 
					        $this->checkOwnablePermission('restrictions-manage', $page);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->permissionsUpdater->updateFromPermissionsForm($page, $request);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->showSuccessNotification(trans('entities.pages_permissions_success'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return redirect($page->getUrl());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Show the Restrictions view for a chapter.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function showForChapter(string $bookSlug, string $chapterSlug)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $chapter = Chapter::getBySlugs($bookSlug, $chapterSlug);
 | 
				
			||||||
 | 
					        $this->checkOwnablePermission('restrictions-manage', $chapter);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return view('chapters.permissions', [
 | 
				
			||||||
 | 
					            'chapter' => $chapter,
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Set the restrictions for a chapter.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function updateForChapter(Request $request, string $bookSlug, string $chapterSlug)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $chapter = Chapter::getBySlugs($bookSlug, $chapterSlug);
 | 
				
			||||||
 | 
					        $this->checkOwnablePermission('restrictions-manage', $chapter);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->permissionsUpdater->updateFromPermissionsForm($chapter, $request);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->showSuccessNotification(trans('entities.chapters_permissions_success'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return redirect($chapter->getUrl());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Show the permissions view for a book.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function showForBook(string $slug)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $book = Book::getBySlug($slug);
 | 
				
			||||||
 | 
					        $this->checkOwnablePermission('restrictions-manage', $book);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return view('books.permissions', [
 | 
				
			||||||
 | 
					            'book' => $book,
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Set the restrictions for a book.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function updateForBook(Request $request, string $slug)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $book = Book::getBySlug($slug);
 | 
				
			||||||
 | 
					        $this->checkOwnablePermission('restrictions-manage', $book);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->permissionsUpdater->updateFromPermissionsForm($book, $request);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->showSuccessNotification(trans('entities.books_permissions_updated'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return redirect($book->getUrl());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Show the permissions view for a shelf.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function showForShelf(string $slug)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $shelf = Bookshelf::getBySlug($slug);
 | 
				
			||||||
 | 
					        $this->checkOwnablePermission('restrictions-manage', $shelf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return view('shelves.permissions', [
 | 
				
			||||||
 | 
					            'shelf' => $shelf,
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Set the permissions for a shelf.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function updateForShelf(Request $request, string $slug)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $shelf = Bookshelf::getBySlug($slug);
 | 
				
			||||||
 | 
					        $this->checkOwnablePermission('restrictions-manage', $shelf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->permissionsUpdater->updateFromPermissionsForm($shelf, $request);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->showSuccessNotification(trans('entities.shelves_permissions_updated'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return redirect($shelf->getUrl());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Copy the permissions of a bookshelf to the child books.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function copyShelfPermissionsToBooks(string $slug)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $shelf = Bookshelf::getBySlug($slug);
 | 
				
			||||||
 | 
					        $this->checkOwnablePermission('restrictions-manage', $shelf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $updateCount = $this->permissionsUpdater->updateBookPermissionsFromShelf($shelf);
 | 
				
			||||||
 | 
					        $this->showSuccessNotification(trans('entities.shelves_copy_permission_success', ['count' => $updateCount]));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return redirect($shelf->getUrl());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -22,8 +22,7 @@ class ReferenceController extends Controller
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public function page(string $bookSlug, string $pageSlug)
 | 
					    public function page(string $bookSlug, string $pageSlug)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /** @var Page $page */
 | 
					        $page = Page::getBySlugs($bookSlug, $pageSlug);
 | 
				
			||||||
        $page = Page::visible()->whereSlugs($bookSlug, $pageSlug)->firstOrFail();
 | 
					 | 
				
			||||||
        $references = $this->referenceFetcher->getPageReferencesToEntity($page);
 | 
					        $references = $this->referenceFetcher->getPageReferencesToEntity($page);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return view('pages.references', [
 | 
					        return view('pages.references', [
 | 
				
			||||||
| 
						 | 
					@ -37,8 +36,7 @@ class ReferenceController extends Controller
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public function chapter(string $bookSlug, string $chapterSlug)
 | 
					    public function chapter(string $bookSlug, string $chapterSlug)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        /** @var Chapter $chapter */
 | 
					        $chapter = Chapter::getBySlugs($bookSlug, $chapterSlug);
 | 
				
			||||||
        $chapter = Chapter::visible()->whereSlugs($bookSlug, $chapterSlug)->firstOrFail();
 | 
					 | 
				
			||||||
        $references = $this->referenceFetcher->getPageReferencesToEntity($chapter);
 | 
					        $references = $this->referenceFetcher->getPageReferencesToEntity($chapter);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return view('chapters.references', [
 | 
					        return view('chapters.references', [
 | 
				
			||||||
| 
						 | 
					@ -52,7 +50,7 @@ class ReferenceController extends Controller
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public function book(string $slug)
 | 
					    public function book(string $slug)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $book = Book::visible()->where('slug', '=', $slug)->firstOrFail();
 | 
					        $book = Book::getBySlug($slug);
 | 
				
			||||||
        $references = $this->referenceFetcher->getPageReferencesToEntity($book);
 | 
					        $references = $this->referenceFetcher->getPageReferencesToEntity($book);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return view('books.references', [
 | 
					        return view('books.references', [
 | 
				
			||||||
| 
						 | 
					@ -66,7 +64,7 @@ class ReferenceController extends Controller
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public function shelf(string $slug)
 | 
					    public function shelf(string $slug)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $shelf = Bookshelf::visible()->where('slug', '=', $slug)->firstOrFail();
 | 
					        $shelf = Bookshelf::getBySlug($slug);
 | 
				
			||||||
        $references = $this->referenceFetcher->getPageReferencesToEntity($shelf);
 | 
					        $references = $this->referenceFetcher->getPageReferencesToEntity($shelf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return view('shelves.references', [
 | 
					        return view('shelves.references', [
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -19,6 +19,7 @@ use BookStack\Http\Controllers\PageController;
 | 
				
			||||||
use BookStack\Http\Controllers\PageExportController;
 | 
					use BookStack\Http\Controllers\PageExportController;
 | 
				
			||||||
use BookStack\Http\Controllers\PageRevisionController;
 | 
					use BookStack\Http\Controllers\PageRevisionController;
 | 
				
			||||||
use BookStack\Http\Controllers\PageTemplateController;
 | 
					use BookStack\Http\Controllers\PageTemplateController;
 | 
				
			||||||
 | 
					use BookStack\Http\Controllers\PermissionsController;
 | 
				
			||||||
use BookStack\Http\Controllers\RecycleBinController;
 | 
					use BookStack\Http\Controllers\RecycleBinController;
 | 
				
			||||||
use BookStack\Http\Controllers\ReferenceController;
 | 
					use BookStack\Http\Controllers\ReferenceController;
 | 
				
			||||||
use BookStack\Http\Controllers\RoleController;
 | 
					use BookStack\Http\Controllers\RoleController;
 | 
				
			||||||
| 
						 | 
					@ -61,9 +62,9 @@ Route::middleware('auth')->group(function () {
 | 
				
			||||||
    Route::get('/shelves/{slug}', [BookshelfController::class, 'show']);
 | 
					    Route::get('/shelves/{slug}', [BookshelfController::class, 'show']);
 | 
				
			||||||
    Route::put('/shelves/{slug}', [BookshelfController::class, 'update']);
 | 
					    Route::put('/shelves/{slug}', [BookshelfController::class, 'update']);
 | 
				
			||||||
    Route::delete('/shelves/{slug}', [BookshelfController::class, 'destroy']);
 | 
					    Route::delete('/shelves/{slug}', [BookshelfController::class, 'destroy']);
 | 
				
			||||||
    Route::get('/shelves/{slug}/permissions', [BookshelfController::class, 'showPermissions']);
 | 
					    Route::get('/shelves/{slug}/permissions', [PermissionsController::class, 'showForShelf']);
 | 
				
			||||||
    Route::put('/shelves/{slug}/permissions', [BookshelfController::class, 'permissions']);
 | 
					    Route::put('/shelves/{slug}/permissions', [PermissionsController::class, 'updateForShelf']);
 | 
				
			||||||
    Route::post('/shelves/{slug}/copy-permissions', [BookshelfController::class, 'copyPermissions']);
 | 
					    Route::post('/shelves/{slug}/copy-permissions', [PermissionsController::class, 'copyShelfPermissionsToBooks']);
 | 
				
			||||||
    Route::get('/shelves/{slug}/references', [ReferenceController::class, 'shelf']);
 | 
					    Route::get('/shelves/{slug}/references', [ReferenceController::class, 'shelf']);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Book Creation
 | 
					    // Book Creation
 | 
				
			||||||
| 
						 | 
					@ -79,8 +80,8 @@ Route::middleware('auth')->group(function () {
 | 
				
			||||||
    Route::delete('/books/{id}', [BookController::class, 'destroy']);
 | 
					    Route::delete('/books/{id}', [BookController::class, 'destroy']);
 | 
				
			||||||
    Route::get('/books/{slug}/sort-item', [BookSortController::class, 'showItem']);
 | 
					    Route::get('/books/{slug}/sort-item', [BookSortController::class, 'showItem']);
 | 
				
			||||||
    Route::get('/books/{slug}', [BookController::class, 'show']);
 | 
					    Route::get('/books/{slug}', [BookController::class, 'show']);
 | 
				
			||||||
    Route::get('/books/{bookSlug}/permissions', [BookController::class, 'showPermissions']);
 | 
					    Route::get('/books/{bookSlug}/permissions', [PermissionsController::class, 'showForBook']);
 | 
				
			||||||
    Route::put('/books/{bookSlug}/permissions', [BookController::class, 'permissions']);
 | 
					    Route::put('/books/{bookSlug}/permissions', [PermissionsController::class, 'updateForBook']);
 | 
				
			||||||
    Route::get('/books/{slug}/delete', [BookController::class, 'showDelete']);
 | 
					    Route::get('/books/{slug}/delete', [BookController::class, 'showDelete']);
 | 
				
			||||||
    Route::get('/books/{bookSlug}/copy', [BookController::class, 'showCopy']);
 | 
					    Route::get('/books/{bookSlug}/copy', [BookController::class, 'showCopy']);
 | 
				
			||||||
    Route::post('/books/{bookSlug}/copy', [BookController::class, 'copy']);
 | 
					    Route::post('/books/{bookSlug}/copy', [BookController::class, 'copy']);
 | 
				
			||||||
| 
						 | 
					@ -111,8 +112,8 @@ Route::middleware('auth')->group(function () {
 | 
				
			||||||
    Route::post('/books/{bookSlug}/page/{pageSlug}/copy', [PageController::class, 'copy']);
 | 
					    Route::post('/books/{bookSlug}/page/{pageSlug}/copy', [PageController::class, 'copy']);
 | 
				
			||||||
    Route::get('/books/{bookSlug}/page/{pageSlug}/delete', [PageController::class, 'showDelete']);
 | 
					    Route::get('/books/{bookSlug}/page/{pageSlug}/delete', [PageController::class, 'showDelete']);
 | 
				
			||||||
    Route::get('/books/{bookSlug}/draft/{pageId}/delete', [PageController::class, 'showDeleteDraft']);
 | 
					    Route::get('/books/{bookSlug}/draft/{pageId}/delete', [PageController::class, 'showDeleteDraft']);
 | 
				
			||||||
    Route::get('/books/{bookSlug}/page/{pageSlug}/permissions', [PageController::class, 'showPermissions']);
 | 
					    Route::get('/books/{bookSlug}/page/{pageSlug}/permissions', [PermissionsController::class, 'showForPage']);
 | 
				
			||||||
    Route::put('/books/{bookSlug}/page/{pageSlug}/permissions', [PageController::class, 'permissions']);
 | 
					    Route::put('/books/{bookSlug}/page/{pageSlug}/permissions', [PermissionsController::class, 'updateForPage']);
 | 
				
			||||||
    Route::get('/books/{bookSlug}/page/{pageSlug}/references', [ReferenceController::class, 'page']);
 | 
					    Route::get('/books/{bookSlug}/page/{pageSlug}/references', [ReferenceController::class, 'page']);
 | 
				
			||||||
    Route::put('/books/{bookSlug}/page/{pageSlug}', [PageController::class, 'update']);
 | 
					    Route::put('/books/{bookSlug}/page/{pageSlug}', [PageController::class, 'update']);
 | 
				
			||||||
    Route::delete('/books/{bookSlug}/page/{pageSlug}', [PageController::class, 'destroy']);
 | 
					    Route::delete('/books/{bookSlug}/page/{pageSlug}', [PageController::class, 'destroy']);
 | 
				
			||||||
| 
						 | 
					@ -138,12 +139,12 @@ Route::middleware('auth')->group(function () {
 | 
				
			||||||
    Route::post('/books/{bookSlug}/chapter/{chapterSlug}/copy', [ChapterController::class, 'copy']);
 | 
					    Route::post('/books/{bookSlug}/chapter/{chapterSlug}/copy', [ChapterController::class, 'copy']);
 | 
				
			||||||
    Route::get('/books/{bookSlug}/chapter/{chapterSlug}/edit', [ChapterController::class, 'edit']);
 | 
					    Route::get('/books/{bookSlug}/chapter/{chapterSlug}/edit', [ChapterController::class, 'edit']);
 | 
				
			||||||
    Route::post('/books/{bookSlug}/chapter/{chapterSlug}/convert-to-book', [ChapterController::class, 'convertToBook']);
 | 
					    Route::post('/books/{bookSlug}/chapter/{chapterSlug}/convert-to-book', [ChapterController::class, 'convertToBook']);
 | 
				
			||||||
    Route::get('/books/{bookSlug}/chapter/{chapterSlug}/permissions', [ChapterController::class, 'showPermissions']);
 | 
					    Route::get('/books/{bookSlug}/chapter/{chapterSlug}/permissions', [PermissionsController::class, 'showForPage']);
 | 
				
			||||||
    Route::get('/books/{bookSlug}/chapter/{chapterSlug}/export/pdf', [ChapterExportController::class, 'pdf']);
 | 
					    Route::get('/books/{bookSlug}/chapter/{chapterSlug}/export/pdf', [ChapterExportController::class, 'pdf']);
 | 
				
			||||||
    Route::get('/books/{bookSlug}/chapter/{chapterSlug}/export/html', [ChapterExportController::class, 'html']);
 | 
					    Route::get('/books/{bookSlug}/chapter/{chapterSlug}/export/html', [ChapterExportController::class, 'html']);
 | 
				
			||||||
    Route::get('/books/{bookSlug}/chapter/{chapterSlug}/export/markdown', [ChapterExportController::class, 'markdown']);
 | 
					    Route::get('/books/{bookSlug}/chapter/{chapterSlug}/export/markdown', [ChapterExportController::class, 'markdown']);
 | 
				
			||||||
    Route::get('/books/{bookSlug}/chapter/{chapterSlug}/export/plaintext', [ChapterExportController::class, 'plainText']);
 | 
					    Route::get('/books/{bookSlug}/chapter/{chapterSlug}/export/plaintext', [ChapterExportController::class, 'plainText']);
 | 
				
			||||||
    Route::put('/books/{bookSlug}/chapter/{chapterSlug}/permissions', [ChapterController::class, 'permissions']);
 | 
					    Route::put('/books/{bookSlug}/chapter/{chapterSlug}/permissions', [PermissionsController::class, 'updateForPage']);
 | 
				
			||||||
    Route::get('/books/{bookSlug}/chapter/{chapterSlug}/references', [ReferenceController::class, 'chapter']);
 | 
					    Route::get('/books/{bookSlug}/chapter/{chapterSlug}/references', [ReferenceController::class, 'chapter']);
 | 
				
			||||||
    Route::get('/books/{bookSlug}/chapter/{chapterSlug}/delete', [ChapterController::class, 'showDelete']);
 | 
					    Route::get('/books/{bookSlug}/chapter/{chapterSlug}/delete', [ChapterController::class, 'showDelete']);
 | 
				
			||||||
    Route::delete('/books/{bookSlug}/chapter/{chapterSlug}', [ChapterController::class, 'destroy']);
 | 
					    Route::delete('/books/{bookSlug}/chapter/{chapterSlug}', [ChapterController::class, 'destroy']);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue