]> BookStack Code Mirror - bookstack/commitdiff
Merge branch 'master' of git://github.com/rondaa/BookStack into rondaa-master
authorDan Brown <redacted>
Sat, 2 Jan 2021 16:25:59 +0000 (16:25 +0000)
committerDan Brown <redacted>
Sat, 2 Jan 2021 16:25:59 +0000 (16:25 +0000)
1  2 
app/Entities/Repos/PageRepo.php
resources/lang/en/entities.php

index 8840c06dba49c38d2c9058571fcb24370da1bb0f,1467feff5bbfa399545579ab9225dad7cb703746..60ae855109a469ab9e3b94508c0a57c85af0b1e7
@@@ -1,19 -1,17 +1,19 @@@
  <?php namespace BookStack\Entities\Repos;
  
 -use BookStack\Entities\Book;
 -use BookStack\Entities\Chapter;
 -use BookStack\Entities\Entity;
 -use BookStack\Entities\Managers\BookContents;
 -use BookStack\Entities\Managers\PageContent;
 -use BookStack\Entities\Managers\TrashCan;
 -use BookStack\Entities\Page;
 -use BookStack\Entities\PageRevision;
 +use BookStack\Actions\ActivityType;
 +use BookStack\Entities\Models\Book;
 +use BookStack\Entities\Models\Chapter;
 +use BookStack\Entities\Models\Entity;
 +use BookStack\Entities\Tools\BookContents;
 +use BookStack\Entities\Tools\PageContent;
 +use BookStack\Entities\Tools\TrashCan;
 +use BookStack\Entities\Models\Page;
 +use BookStack\Entities\Models\PageRevision;
  use BookStack\Exceptions\MoveOperationException;
  use BookStack\Exceptions\NotFoundException;
 -use BookStack\Exceptions\NotifyException;
  use BookStack\Exceptions\PermissionsException;
 +use BookStack\Facades\Activity;
 +use Exception;
  use Illuminate\Database\Eloquent\Builder;
  use Illuminate\Pagination\LengthAwarePaginator;
  use Illuminate\Support\Collection;
@@@ -35,9 -33,9 +35,9 @@@ class PageRep
       * Get a page by ID.
       * @throws NotFoundException
       */
 -    public function getById(int $id): Page
 +    public function getById(int $id, array $relations = ['book']): Page
      {
 -        $page = Page::visible()->with(['book'])->find($id);
 +        $page = Page::visible()->with($relations)->find($id);
  
          if (!$page) {
              throw new NotFoundException(trans('errors.page_not_found'));
          $page = (new Page())->forceFill([
              'name' => trans('entities.pages_initial_name'),
              'created_by' => user()->id,
 +            'owned_by' => user()->id,
              'updated_by' => user()->id,
              'draft' => true,
          ]);
      public function publishDraft(Page $draft, array $input): Page
      {
          $this->baseRepo->update($draft, $input);
 -        if (isset($input['template']) && userCan('templates-manage')) {
 -            $draft->template = ($input['template'] === 'true');
 -        }
 +        $this->updateTemplateStatusAndContentFromInput($draft, $input);
  
 -        $pageContent = new PageContent($draft);
 -        $pageContent->setNewHTML($input['html']);
          $draft->draft = false;
          $draft->revision_count = 1;
          $draft->priority = $this->getNewPriority($draft);
  
          $this->savePageRevision($draft, trans('entities.pages_initial_revision'));
          $draft->indexForSearch();
 -        return $draft->refresh();
 +        $draft->refresh();
 +
 +        Activity::addForEntity($draft, ActivityType::PAGE_CREATE);
 +        return $draft;
      }
  
      /**
          $oldHtml = $page->html;
          $oldName = $page->name;
  
 -        if (isset($input['template']) && userCan('templates-manage')) {
 -            $page->template = ($input['template'] === 'true');
 -        }
 -
 -        $pageContent = new PageContent($page);
 -        $pageContent->setNewHTML($input['html']);
 +        $this->updateTemplateStatusAndContentFromInput($page, $input);
          $this->baseRepo->update($page, $input);
  
          // Update with new details
              $this->savePageRevision($page, $summary);
          }
  
 +        Activity::addForEntity($page, ActivityType::PAGE_UPDATE);
          return $page;
      }
  
 +    protected function updateTemplateStatusAndContentFromInput(Page $page, array $input)
 +    {
 +        if (isset($input['template']) && userCan('templates-manage')) {
 +            $page->template = ($input['template'] === 'true');
 +        }
 +
 +        $pageContent = new PageContent($page);
 +        if (isset($input['html'])) {
 +            $pageContent->setNewHTML($input['html']);
 +        } else {
 +            $pageContent->setNewMarkdown($input['markdown']);
 +        }
 +    }
 +
      /**
       * Saves a page revision into the system.
       */
      {
          // If the page itself is a draft simply update that
          if ($page->draft) {
 -            $page->fill($input);
              if (isset($input['html'])) {
 -                $content = new PageContent($page);
 -                $content->setNewHTML($input['html']);
 +                (new PageContent($page))->setNewHTML($input['html']);
              }
 +            $page->fill($input);
              $page->save();
              return $page;
          }
  
      /**
       * Destroy a page from the system.
 -     * @throws NotifyException
 +     * @throws Exception
       */
      public function destroy(Page $page)
      {
          $trashCan = new TrashCan();
 -        $trashCan->destroyPage($page);
 +        $trashCan->softDestroyPage($page);
 +        Activity::addForEntity($page, ActivityType::PAGE_DELETE);
 +        $trashCan->autoClearOld();
      }
  
      /**
      public function restoreRevision(Page $page, int $revisionId): Page
      {
          $page->revision_count++;
-         $this->savePageRevision($page);
          $revision = $page->revisions()->where('id', '=', $revisionId)->first();
+         $summary = trans('entities.pages_revision_restored_from', ['id' => strval($revisionId), 'summary' => $revision->summary]);
+         $this->savePageRevision($page, $summary);
          $page->fill($revision->toArray());
          $content = new PageContent($page);
          $content->setNewHTML($revision->html);
          $page->save();
  
          $page->indexForSearch();
 +        Activity::addForEntity($page, ActivityType::PAGE_RESTORE);
          return $page;
      }
  
       * @throws MoveOperationException
       * @throws PermissionsException
       */
 -    public function move(Page $page, string $parentIdentifier): Book
 +    public function move(Page $page, string $parentIdentifier): Entity
      {
          $parent = $this->findParentByIdentifier($parentIdentifier);
          if ($parent === null) {
          $page->changeBook($parent instanceof Book ? $parent->id : $parent->book->id);
          $page->rebuildPermissions();
  
 -        return ($parent instanceof Book ? $parent : $parent->book);
 +        Activity::addForEntity($page, ActivityType::PAGE_MOVE);
 +        return $parent;
      }
  
      /**
       */
      public function copy(Page $page, string $parentIdentifier = null, string $newName = null): Page
      {
 -        $parent = $parentIdentifier ? $this->findParentByIdentifier($parentIdentifier) : $page->parent();
 +        $parent = $parentIdentifier ? $this->findParentByIdentifier($parentIdentifier) : $page->getParent();
          if ($parent === null) {
              throw new MoveOperationException('Book or chapter to move page into not found');
          }
          return $parentClass::visible()->where('id', '=', $entityId)->first();
      }
  
 -    /**
 -     * Update the permissions of a page.
 -     */
 -    public function updatePermissions(Page $page, bool $restricted, Collection $permissions = null)
 -    {
 -        $this->baseRepo->updatePermissions($page, $restricted, $permissions);
 -    }
 -
      /**
       * Change the page's parent to the given entity.
       */
       */
      protected function getNewPriority(Page $page): int
      {
 -        if ($page->parent() instanceof Chapter) {
 -            $lastPage = $page->parent()->pages('desc')->first();
 +        $parent = $page->getParent();
 +        if ($parent instanceof Chapter) {
 +            $lastPage = $parent->pages('desc')->first();
              return $lastPage ? $lastPage->priority + 1 : 0;
          }
  
index 6b0153844bce15016e301055f7bc2d513f33858f,6de8328afc864de3ac0fef1a72588c7d5ffb3c96..f668c618162c413b236c56f224bc8a5806d0ec88
@@@ -22,7 -22,6 +22,7 @@@ return 
      'meta_created_name' => 'Created :timeLength by :user',
      'meta_updated' => 'Updated :timeLength',
      'meta_updated_name' => 'Updated :timeLength by :user',
 +    'meta_owned_name' => 'Owned by :user',
      'entity_select' => 'Entity Select',
      'images' => 'Images',
      'my_recent_drafts' => 'My Recent Drafts',
@@@ -40,7 -39,6 +40,7 @@@
      'permissions_intro' => 'Once enabled, These permissions will take priority over any set role permissions.',
      'permissions_enable' => 'Enable Custom Permissions',
      'permissions_save' => 'Save Permissions',
 +    'permissions_owner' => 'Owner',
  
      // Search
      'search_results' => 'Search Results',
      'chapters_create' => 'Create New Chapter',
      'chapters_delete' => 'Delete Chapter',
      'chapters_delete_named' => 'Delete Chapter :chapterName',
 -    'chapters_delete_explain' => 'This will delete the chapter with the name \':chapterName\'. All pages will be removed and added directly to the parent book.',
 +    'chapters_delete_explain' => 'This will delete the chapter with the name \':chapterName\'. All pages that exist within this chapter will also be deleted.',
      'chapters_delete_confirm' => 'Are you sure you want to delete this chapter?',
      'chapters_edit' => 'Edit Chapter',
      'chapters_edit_named' => 'Edit Chapter :chapterName',
      'pages_revisions' => 'Page Revisions',
      'pages_revisions_named' => 'Page Revisions for :pageName',
      'pages_revision_named' => 'Page Revision for :pageName',
+     'pages_revision_restored_from' => 'Restored from #:id ":summary"',
      'pages_revisions_created_by' => 'Created By',
      'pages_revisions_date' => 'Revision Date',
      'pages_revisions_number' => '#',