namespace BookStack\Entities\Repos;
-use BookStack\Actions\ActivityType;
+use BookStack\Activity\ActivityType;
use BookStack\Entities\Models\Book;
use BookStack\Entities\Models\Chapter;
use BookStack\Entities\Models\Entity;
use BookStack\Exceptions\PermissionsException;
use BookStack\Facades\Activity;
use BookStack\References\ReferenceStore;
+use BookStack\References\ReferenceUpdater;
use Exception;
use Illuminate\Pagination\LengthAwarePaginator;
class PageRepo
{
- protected BaseRepo $baseRepo;
- protected RevisionRepo $revisionRepo;
- protected ReferenceStore $references;
-
- /**
- * PageRepo constructor.
- */
- public function __construct(BaseRepo $baseRepo, RevisionRepo $revisionRepo, ReferenceStore $references)
- {
- $this->baseRepo = $baseRepo;
- $this->revisionRepo = $revisionRepo;
- $this->references = $references;
+ public function __construct(
+ protected BaseRepo $baseRepo,
+ protected RevisionRepo $revisionRepo,
+ protected ReferenceStore $referenceStore,
+ protected ReferenceUpdater $referenceUpdater
+ ) {
}
/**
*/
public function publishDraft(Page $draft, array $input): Page
{
- $this->updateTemplateStatusAndContentFromInput($draft, $input);
- $this->baseRepo->update($draft, $input);
-
$draft->draft = false;
$draft->revision_count = 1;
$draft->priority = $this->getNewPriority($draft);
- $draft->refreshSlug();
- $draft->save();
+ $this->updateTemplateStatusAndContentFromInput($draft, $input);
+ $this->baseRepo->update($draft, $input);
$this->revisionRepo->storeNewForPage($draft, trans('entities.pages_initial_revision'));
- $draft->indexForSearch();
- $this->references->updateForPage($draft);
+ $this->referenceStore->updateForPage($draft);
$draft->refresh();
Activity::add(ActivityType::PAGE_CREATE, $draft);
$this->updateTemplateStatusAndContentFromInput($page, $input);
$this->baseRepo->update($page, $input);
- $this->references->updateForPage($page);
+ $this->referenceStore->updateForPage($page);
// Update with new details
$page->revision_count++;
*/
public function restoreRevision(Page $page, int $revisionId): Page
{
+ $oldUrl = $page->getUrl();
$page->revision_count++;
/** @var PageRevision $revision */
$page->refreshSlug();
$page->save();
$page->indexForSearch();
- $this->references->updateForPage($page);
+ $this->referenceStore->updateForPage($page);
$summary = trans('entities.pages_revision_restored_from', ['id' => strval($revisionId), 'summary' => $revision->summary]);
$this->revisionRepo->storeNewForPage($page, $summary);
+ if ($oldUrl !== $page->getUrl()) {
+ $this->referenceUpdater->updateEntityPageReferences($page, $oldUrl);
+ }
+
Activity::add(ActivityType::PAGE_RESTORE, $page);
Activity::add(ActivityType::REVISION_RESTORE, $revision);