X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/b12e2ceada9b1b8a382b76c896fc392adcdf5b84..refs/pull/524/head:/app/Repos/EntityRepo.php diff --git a/app/Repos/EntityRepo.php b/app/Repos/EntityRepo.php index 7865de772..c2899b136 100644 --- a/app/Repos/EntityRepo.php +++ b/app/Repos/EntityRepo.php @@ -137,10 +137,15 @@ class EntityRepo * @param string $type * @param integer $id * @param bool $allowDrafts + * @param bool $ignorePermissions * @return Entity */ - public function getById($type, $id, $allowDrafts = false) + public function getById($type, $id, $allowDrafts = false, $ignorePermissions = false) { + if ($ignorePermissions) { + $entity = $this->getEntity($type); + return $entity->newQuery()->find($id); + } return $this->entityQuery($type, $allowDrafts)->find($id); } @@ -571,7 +576,7 @@ class EntityRepo $draftPage->slug = $this->findSuitableSlug('page', $draftPage->name, false, $draftPage->book->id); $draftPage->html = $this->formatHtml($input['html']); - $draftPage->text = $this->pageToPlainText($draftPage->html); + $draftPage->text = $this->pageToPlainText($draftPage); $draftPage->draft = false; $draftPage->revision_count = 1; @@ -671,9 +676,10 @@ class EntityRepo /** * Render the page for viewing, Parsing and performing features such as page transclusion. * @param Page $page + * @param bool $ignorePermissions * @return mixed|string */ - public function renderPage(Page $page) + public function renderPage(Page $page, $ignorePermissions = false) { $content = $page->html; $matches = []; @@ -685,19 +691,19 @@ class EntityRepo $pageId = intval($splitInclude[0]); if (is_nan($pageId)) continue; - $page = $this->getById('page', $pageId); - if ($page === null) { + $matchedPage = $this->getById('page', $pageId, false, $ignorePermissions); + if ($matchedPage === null) { $content = str_replace($matches[0][$index], '', $content); continue; } if (count($splitInclude) === 1) { - $content = str_replace($matches[0][$index], $page->html, $content); + $content = str_replace($matches[0][$index], $matchedPage->html, $content); continue; } $doc = new DOMDocument(); - $doc->loadHTML(mb_convert_encoding(''.$page->html.'', 'HTML-ENTITIES', 'UTF-8')); + $doc->loadHTML(mb_convert_encoding(''.$matchedPage->html.'', 'HTML-ENTITIES', 'UTF-8')); $matchingElem = $doc->getElementById($splitInclude[1]); if ($matchingElem === null) { $content = str_replace($matches[0][$index], '', $content); @@ -944,7 +950,7 @@ class EntityRepo $revision = $page->revisions()->where('id', '=', $revisionId)->first(); $page->fill($revision->toArray()); $page->slug = $this->findSuitableSlug('page', $page->name, $page->id, $book->id); - $page->text = $this->pageToPlainText($page->html); + $page->text = $this->pageToPlainText($page); $page->updated_by = user()->id; $page->save(); $this->searchService->indexEntity($page); @@ -964,7 +970,7 @@ class EntityRepo if ($page->draft) { $page->fill($data); if (isset($data['html'])) { - $page->text = $this->pageToPlainText($data['html']); + $page->text = $this->pageToPlainText($page); } $page->save(); return $page;