<?php namespace BookStack\Http\Controllers;
use Activity;
+use BookStack\Repos\UserRepo;
use Illuminate\Http\Request;
use BookStack\Http\Requests;
use BookStack\Repos\BookRepo;
protected $bookRepo;
protected $chapterRepo;
+ protected $userRepo;
/**
* ChapterController constructor.
- * @param $bookRepo
- * @param $chapterRepo
+ * @param BookRepo $bookRepo
+ * @param ChapterRepo $chapterRepo
+ * @param UserRepo $userRepo
*/
- public function __construct(BookRepo $bookRepo, ChapterRepo $chapterRepo)
+ public function __construct(BookRepo $bookRepo, ChapterRepo $chapterRepo, UserRepo $userRepo)
{
$this->bookRepo = $bookRepo;
$this->chapterRepo = $chapterRepo;
+ $this->userRepo = $userRepo;
parent::__construct();
}
$book = $this->bookRepo->getBySlug($bookSlug);
$this->checkOwnablePermission('chapter-create', $book);
- $chapter = $this->chapterRepo->newFromInput($request->all());
- $chapter->slug = $this->chapterRepo->findSuitableSlug($chapter->name, $book->id);
- $chapter->priority = $this->bookRepo->getNewPriority($book);
- $chapter->created_by = auth()->user()->id;
- $chapter->updated_by = auth()->user()->id;
- $book->chapters()->save($chapter);
+ $input = $request->all();
+ $input['priority'] = $this->bookRepo->getNewPriority($book);
+ $chapter = $this->chapterRepo->createFromInput($request->all(), $book);
Activity::add($chapter, 'chapter_create', $book->id);
return redirect($chapter->getUrl());
}
{
$book = $this->bookRepo->getBySlug($bookSlug);
$chapter = $this->chapterRepo->getBySlug($chapterSlug, $book->id);
+ $this->checkOwnablePermission('chapter-view', $chapter);
$sidebarTree = $this->bookRepo->getChildren($book);
Views::add($chapter);
$this->setPageTitle($chapter->getShortName());
- return view('chapters/show', ['book' => $book, 'chapter' => $chapter, 'current' => $chapter, 'sidebarTree' => $sidebarTree]);
+ $pages = $this->chapterRepo->getChildren($chapter);
+ return view('chapters/show', [
+ 'book' => $book,
+ 'chapter' => $chapter,
+ 'current' => $chapter,
+ 'sidebarTree' => $sidebarTree,
+ 'pages' => $pages
+ ]);
}
/**
$this->chapterRepo->destroy($chapter);
return redirect($book->getUrl());
}
+
+ /**
+ * Show the Restrictions view.
+ * @param $bookSlug
+ * @param $chapterSlug
+ * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
+ */
+ public function showRestrict($bookSlug, $chapterSlug)
+ {
+ $book = $this->bookRepo->getBySlug($bookSlug);
+ $chapter = $this->chapterRepo->getBySlug($chapterSlug, $book->id);
+ $this->checkOwnablePermission('restrictions-manage', $chapter);
+ $roles = $this->userRepo->getRestrictableRoles();
+ return view('chapters/restrictions', [
+ 'chapter' => $chapter,
+ 'roles' => $roles
+ ]);
+ }
+
+ /**
+ * Set the restrictions for this chapter.
+ * @param $bookSlug
+ * @param $chapterSlug
+ * @param Request $request
+ * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
+ */
+ public function restrict($bookSlug, $chapterSlug, Request $request)
+ {
+ $book = $this->bookRepo->getBySlug($bookSlug);
+ $chapter = $this->chapterRepo->getBySlug($chapterSlug, $book->id);
+ $this->checkOwnablePermission('restrictions-manage', $chapter);
+ $this->chapterRepo->updateEntityPermissionsFromRequest($request, $chapter);
+ session()->flash('success', 'Chapter Restrictions Updated');
+ return redirect($chapter->getUrl());
+ }
}