class ChapterRepo extends EntityRepo
{
+ protected $pageRepo;
+
+ /**
+ * ChapterRepo constructor.
+ * @param $pageRepo
+ */
+ public function __construct(PageRepo $pageRepo)
+ {
+ $this->pageRepo = $pageRepo;
+ parent::__construct();
+ }
+
/**
* Base query for getting chapters, Takes permissions into account.
* @return mixed
public function getBySearch($term, $whereTerms = [], $count = 20, $paginationAppends = [])
{
$terms = $this->prepareSearchTerms($term);
- $chapters = $this->permissionService->enforceChapterRestrictions($this->chapter->fullTextSearchQuery(['name', 'description'], $terms, $whereTerms))
- ->paginate($count)->appends($paginationAppends);
+ $chapterQuery = $this->permissionService->enforceChapterRestrictions($this->chapter->fullTextSearchQuery(['name', 'description'], $terms, $whereTerms));
+ $chapterQuery = $this->addAdvancedSearchQueries($chapterQuery, $term);
+ $chapters = $chapterQuery->paginate($count)->appends($paginationAppends);
$words = join('|', explode(' ', preg_quote(trim($term), '/')));
foreach ($chapters as $chapter) {
//highlight
public function changeBook($bookId, Chapter $chapter)
{
$chapter->book_id = $bookId;
+ // Update related activity
foreach ($chapter->activity as $activity) {
$activity->book_id = $bookId;
$activity->save();
}
$chapter->slug = $this->findSuitableSlug($chapter->name, $bookId, $chapter->id);
$chapter->save();
+ // Update all child pages
+ foreach ($chapter->pages as $page) {
+ $this->pageRepo->changeBook($bookId, $page);
+ }
+ // Update permissions
+ $chapter->load('book');
+ $this->permissionService->buildJointPermissionsForEntity($chapter->book);
+
return $chapter;
}