* @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);
}
foreach ($entities as $entity) {
if ($entity->chapter_id === 0 || $entity->chapter_id === '0') continue;
$parentKey = 'BookStack\\Chapter:' . $entity->chapter_id;
+ if (!isset($parents[$parentKey])) {
+ $tree[] = $entity;
+ continue;
+ }
$chapter = $parents[$parentKey];
$chapter->pages->push($entity);
}
/**
* Alias method to update the book jointPermissions in the PermissionService.
- * @param Collection $collection collection on entities
+ * @param Book $book
*/
- public function buildJointPermissions(Collection $collection)
+ public function buildJointPermissionsForBook(Book $book)
{
- $this->permissionService->buildJointPermissionsForEntities($collection);
+ $this->permissionService->buildJointPermissionsForEntity($book);
}
/**
$draftPage->slug = $this->findSuitableSlug('page', $draftPage->name, false, $draftPage->book->id);
$draftPage->html = $this->formatHtml($input['html']);
- $draftPage->text = strip_tags($draftPage->html);
+ $draftPage->text = $this->pageToPlainText($draftPage);
$draftPage->draft = false;
+ $draftPage->revision_count = 1;
$draftPage->save();
$this->savePageRevision($draftPage, trans('entities.pages_initial_revision'));
$revision->created_at = $page->updated_at;
$revision->type = 'version';
$revision->summary = $summary;
+ $revision->revision_number = $page->revision_count;
$revision->save();
// Clear old revisions
/**
* 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 = [];
$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('<body>'.$page->html.'</body>', 'HTML-ENTITIES', 'UTF-8'));
+ $doc->loadHTML(mb_convert_encoding('<body>'.$matchedPage->html.'</body>', 'HTML-ENTITIES', 'UTF-8'));
$matchingElem = $doc->getElementById($splitInclude[1]);
if ($matchingElem === null) {
$content = str_replace($matches[0][$index], '', $content);
return $content;
}
+ /**
+ * Get the plain text version of a page's content.
+ * @param Page $page
+ * @return string
+ */
+ public function pageToPlainText(Page $page)
+ {
+ $html = $this->renderPage($page);
+ return strip_tags($html);
+ }
+
/**
* Get a new draft page instance.
* @param Book $book
if ($chapter) $page->chapter_id = $chapter->id;
$book->pages()->save($page);
+ $page = $this->page->find($page->id);
$this->permissionService->buildJointPermissionsForEntity($page);
return $page;
}
$userId = user()->id;
$page->fill($input);
$page->html = $this->formatHtml($input['html']);
- $page->text = strip_tags($page->html);
+ $page->text = $this->pageToPlainText($page);
if (setting('app-editor') !== 'markdown') $page->markdown = '';
$page->updated_by = $userId;
+ $page->revision_count++;
$page->save();
// Remove all update drafts for this user & page.
*/
public function restorePageRevision(Page $page, Book $book, $revisionId)
{
+ $page->revision_count++;
$this->savePageRevision($page);
$revision = $page->revisions()->where('id', '=', $revisionId)->first();
$page->fill($revision->toArray());
$page->slug = $this->findSuitableSlug('page', $page->name, $page->id, $book->id);
- $page->text = strip_tags($page->html);
+ $page->text = $this->pageToPlainText($page);
$page->updated_by = user()->id;
$page->save();
$this->searchService->indexEntity($page);
if ($page->draft) {
$page->fill($data);
if (isset($data['html'])) {
- $page->text = strip_tags($data['html']);
+ $page->text = $this->pageToPlainText($page);
}
$page->save();
return $page;