X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/fcfb9470c96c9bff054dbc28a7dea1d7b87ccb91..refs/pull/139/head:/app/Repos/PageRepo.php diff --git a/app/Repos/PageRepo.php b/app/Repos/PageRepo.php index ef50b7181..de050e1c7 100644 --- a/app/Repos/PageRepo.php +++ b/app/Repos/PageRepo.php @@ -3,6 +3,7 @@ use Activity; use BookStack\Book; use BookStack\Chapter; +use BookStack\Entity; use BookStack\Exceptions\NotFoundException; use Carbon\Carbon; use DOMDocument; @@ -14,14 +15,17 @@ class PageRepo extends EntityRepo { protected $pageRevision; + protected $tagRepo; /** * PageRepo constructor. * @param PageRevision $pageRevision + * @param TagRepo $tagRepo */ - public function __construct(PageRevision $pageRevision) + public function __construct(PageRevision $pageRevision, TagRepo $tagRepo) { $this->pageRevision = $pageRevision; + $this->tagRepo = $tagRepo; parent::__construct(); } @@ -142,6 +146,11 @@ class PageRepo extends EntityRepo { $draftPage->fill($input); + // Save page tags if present + if(isset($input['tags'])) { + $this->tagRepo->saveTagsToEntity($draftPage, $input['tags']); + } + $draftPage->slug = $this->findSuitableSlug($draftPage->name, $draftPage->book->id); $draftPage->html = $this->formatHtml($input['html']); $draftPage->text = strip_tags($draftPage->html); @@ -242,8 +251,9 @@ class PageRepo extends EntityRepo public function getBySearch($term, $whereTerms = [], $count = 20, $paginationAppends = []) { $terms = $this->prepareSearchTerms($term); - $pages = $this->permissionService->enforcePageRestrictions($this->page->fullTextSearchQuery(['name', 'text'], $terms, $whereTerms)) - ->paginate($count)->appends($paginationAppends); + $pageQuery = $this->permissionService->enforcePageRestrictions($this->page->fullTextSearchQuery(['name', 'text'], $terms, $whereTerms)); + $pageQuery = $this->addAdvancedSearchQueries($pageQuery, $term); + $pages = $pageQuery->paginate($count)->appends($paginationAppends); // Add highlights to page text. $words = join('|', explode(' ', preg_quote(trim($term), '/'))); @@ -308,6 +318,11 @@ class PageRepo extends EntityRepo $page->slug = $this->findSuitableSlug($input['name'], $book_id, $page->id); } + // Save page tags if present + if(isset($input['tags'])) { + $this->tagRepo->saveTagsToEntity($page, $input['tags']); + } + // Update with new details $userId = auth()->user()->id; $page->fill($input); @@ -558,6 +573,22 @@ class PageRepo extends EntityRepo return $page; } + + /** + * Change the page's parent to the given entity. + * @param Page $page + * @param Entity $parent + */ + public function changePageParent(Page $page, Entity $parent) + { + $book = $parent->isA('book') ? $parent : $parent->book; + $page->chapter_id = $parent->isA('chapter') ? $parent->id : 0; + $page->save(); + $page = $this->changeBook($book->id, $page); + $page->load('book'); + $this->permissionService->buildJointPermissionsForEntity($book); + } + /** * Gets a suitable slug for the resource * @param $name @@ -582,7 +613,7 @@ class PageRepo extends EntityRepo { Activity::removeEntity($page); $page->views()->delete(); - $page->attributes()->delete(); + $page->tags()->delete(); $page->revisions()->delete(); $page->permissions()->delete(); $this->permissionService->deleteJointPermissionsForEntity($page);