]> BookStack Code Mirror - bookstack/blob - app/Entities/Tools/Cloner.php
3ce4dff2064ee64deebff78610d4360c991e1b9d
[bookstack] / app / Entities / Tools / Cloner.php
1 <?php
2
3 namespace BookStack\Entities\Tools;
4
5 use BookStack\Entities\Models\Entity;
6 use BookStack\Entities\Models\Page;
7 use BookStack\Entities\Repos\PageRepo;
8
9 class Cloner
10 {
11
12     /**
13      * @var PageRepo
14      */
15     protected $pageRepo;
16
17     public function __construct(PageRepo $pageRepo)
18     {
19         $this->pageRepo = $pageRepo;
20     }
21
22     /**
23      * Clone the given page into the given parent using the provided name.
24      */
25     public function clonePage(Page $original, Entity $parent, string $newName): Page
26     {
27         $copyPage = $this->pageRepo->getNewDraftPage($parent);
28         $pageData = $original->getAttributes();
29
30         // Update name
31         $pageData['name'] = $newName;
32
33         // Copy tags from previous page if set
34         if ($original->tags) {
35             $pageData['tags'] = [];
36             foreach ($original->tags as $tag) {
37                 $pageData['tags'][] = ['name' => $tag->name, 'value' => $tag->value];
38             }
39         }
40
41         return $this->pageRepo->publishDraft($copyPage, $pageData);
42     }
43
44 }