]> BookStack Code Mirror - bookstack/commitdiff
Prevent duplicate slugs on sort
authorDan Brown <redacted>
Sat, 21 Nov 2015 18:11:46 +0000 (18:11 +0000)
committerDan Brown <redacted>
Sat, 21 Nov 2015 18:11:46 +0000 (18:11 +0000)
app/Http/Controllers/BookController.php
app/Repos/ChapterRepo.php
app/Repos/PageRepo.php

index e7ade577e0e3325a35ac93523b59480179c4efe4..682fc5415568ec3e81efbbe318f3da81b085625d 100644 (file)
@@ -185,7 +185,7 @@ class BookController extends Controller
             $isPage = $bookChild->type == 'page';
             $bookId = $this->bookRepo->exists($bookChild->book) ? $bookChild->book : $defaultBookId;
             $model = $isPage ? $this->pageRepo->getById($id) : $this->chapterRepo->getById($id);
-            $isPage ? $this->pageRepo->setBookId($bookId, $model) : $this->chapterRepo->setBookId($bookId, $model);
+            $isPage ? $this->pageRepo->changeBook($bookId, $model) : $this->chapterRepo->changeBook($bookId, $model);
             $model->priority = $index;
             if ($isPage) {
                 $model->chapter_id = ($bookChild->parentChapter === false) ? 0 : $bookChild->parentChapter;
index db2a72d96b49ee525bd537672a6edebfbf93e95e..c3d75ca9d8a829b001a50af6874994988f9c5f7c 100644 (file)
@@ -96,7 +96,7 @@ class ChapterRepo
     public function doesSlugExist($slug, $bookId, $currentId = false)
     {
         $query = $this->chapter->where('slug', '=', $slug)->where('book_id', '=', $bookId);
-        if($currentId) {
+        if ($currentId) {
             $query = $query->where('id', '!=', $currentId);
         }
         return $query->count() > 0;
@@ -113,7 +113,7 @@ class ChapterRepo
     public function findSuitableSlug($name, $bookId, $currentId = false)
     {
         $slug = Str::slug($name);
-        while($this->doesSlugExist($slug, $bookId, $currentId)) {
+        while ($this->doesSlugExist($slug, $bookId, $currentId)) {
             $slug .= '-' . substr(md5(rand(1, 500)), 0, 3);
         }
         return $slug;
@@ -139,18 +139,19 @@ class ChapterRepo
     }
 
     /**
-     * Sets a chapters book id.
+     * Changes the book relation of this chapter.
      * @param         $bookId
      * @param Chapter $chapter
      * @return Chapter
      */
-    public function setBookId($bookId, Chapter $chapter)
+    public function changeBook($bookId, Chapter $chapter)
     {
         $chapter->book_id = $bookId;
-        foreach($chapter->activity as $activity) {
+        foreach ($chapter->activity as $activity) {
             $activity->book_id = $bookId;
             $activity->save();
         }
+        $chapter->slug = $this->findSuitableSlug($chapter->name, $bookId, $chapter->id);
         $chapter->save();
         return $chapter;
     }
index 3f8f813947c262d456616d2d937438f3067ddb74..a52cecad3e75b79a7f66d9942b9e2b197872b9e4 100644 (file)
@@ -309,19 +309,20 @@ class PageRepo
     }
 
     /**
-     * Sets the book id for the specified page.
+     * Changes the related book for the specified page.
      * Changes the book id of any relations to the page that store the book id.
      * @param int  $bookId
      * @param Page $page
      * @return Page
      */
-    public function setBookId($bookId, Page $page)
+    public function changeBook($bookId, Page $page)
     {
         $page->book_id = $bookId;
         foreach ($page->activity as $activity) {
             $activity->book_id = $bookId;
             $activity->save();
         }
+        $page->slug = $this->findSuitableSlug($page->name, $bookId, $page->id);
         $page->save();
         return $page;
     }