]> BookStack Code Mirror - bookstack/blobdiff - app/Entities/Repos/BaseRepo.php
respective book and chapter structure added.
[bookstack] / app / Entities / Repos / BaseRepo.php
index dbdaa921339b49595b5c8ca60dcc5a15f501c927..033350743e0dd824bc259254d67e80edee3c187c 100644 (file)
@@ -3,13 +3,17 @@
 namespace BookStack\Entities\Repos;
 
 use BookStack\Activity\TagRepo;
+use BookStack\Entities\Models\Book;
+use BookStack\Entities\Models\Chapter;
 use BookStack\Entities\Models\Entity;
 use BookStack\Entities\Models\HasCoverImage;
 use BookStack\Entities\Models\HasHtmlDescription;
+use BookStack\Entities\Queries\PageQueries;
 use BookStack\Exceptions\ImageUploadException;
 use BookStack\References\ReferenceStore;
 use BookStack\References\ReferenceUpdater;
 use BookStack\Uploads\ImageRepo;
+use BookStack\Util\HtmlDescriptionFilter;
 use Illuminate\Http\UploadedFile;
 
 class BaseRepo
@@ -19,6 +23,7 @@ class BaseRepo
         protected ImageRepo $imageRepo,
         protected ReferenceUpdater $referenceUpdater,
         protected ReferenceStore $referenceStore,
+        protected PageQueries $pageQueries,
     ) {
     }
 
@@ -74,7 +79,7 @@ class BaseRepo
         $this->referenceStore->updateForEntity($entity);
 
         if ($oldUrl !== $entity->getUrl()) {
-            $this->referenceUpdater->updateEntityPageReferences($entity, $oldUrl);
+            $this->referenceUpdater->updateEntityReferences($entity, $oldUrl);
         }
     }
 
@@ -103,6 +108,32 @@ class BaseRepo
         }
     }
 
+    /**
+     * Update the default page template used for this item.
+     * Checks that, if changing, the provided value is a valid template and the user
+     * has visibility of the provided page template id.
+     */
+    public function updateDefaultTemplate(Book|Chapter $entity, int $templateId): void
+    {
+        $changing = $templateId !== intval($entity->default_template_id);
+        if (!$changing) {
+            return;
+        }
+
+        if ($templateId === 0) {
+            $entity->default_template_id = null;
+            $entity->save();
+            return;
+        }
+
+        $templateExists = $this->pageQueries->visibleTemplates()
+            ->where('id', '=', $templateId)
+            ->exists();
+
+        $entity->default_template_id = $templateExists ? $templateId : null;
+        $entity->save();
+    }
+
     protected function updateDescription(Entity $entity, array $input): void
     {
         if (!in_array(HasHtmlDescription::class, class_uses($entity))) {
@@ -111,10 +142,11 @@ class BaseRepo
 
         /** @var HasHtmlDescription $entity */
         if (isset($input['description_html'])) {
-            $entity->description_html = $input['description_html'];
+            $entity->description_html = HtmlDescriptionFilter::filterFromString($input['description_html']);
             $entity->description = html_entity_decode(strip_tags($input['description_html']));
         } else if (isset($input['description'])) {
             $entity->description = $input['description'];
+            $entity->description_html = '';
             $entity->description_html = $entity->descriptionHtml();
         }
     }