diff options
Diffstat (limited to 'application/updater/Updater.php')
-rw-r--r-- | application/updater/Updater.php | 75 |
1 files changed, 70 insertions, 5 deletions
diff --git a/application/updater/Updater.php b/application/updater/Updater.php index 95654d81..88a7bc7b 100644 --- a/application/updater/Updater.php +++ b/application/updater/Updater.php | |||
@@ -2,8 +2,8 @@ | |||
2 | 2 | ||
3 | namespace Shaarli\Updater; | 3 | namespace Shaarli\Updater; |
4 | 4 | ||
5 | use Shaarli\Config\ConfigManager; | ||
6 | use Shaarli\Bookmark\BookmarkServiceInterface; | 5 | use Shaarli\Bookmark\BookmarkServiceInterface; |
6 | use Shaarli\Config\ConfigManager; | ||
7 | use Shaarli\Updater\Exception\UpdaterException; | 7 | use Shaarli\Updater\Exception\UpdaterException; |
8 | 8 | ||
9 | /** | 9 | /** |
@@ -21,7 +21,7 @@ class Updater | |||
21 | /** | 21 | /** |
22 | * @var BookmarkServiceInterface instance. | 22 | * @var BookmarkServiceInterface instance. |
23 | */ | 23 | */ |
24 | protected $linkServices; | 24 | protected $bookmarkService; |
25 | 25 | ||
26 | /** | 26 | /** |
27 | * @var ConfigManager $conf Configuration Manager instance. | 27 | * @var ConfigManager $conf Configuration Manager instance. |
@@ -39,6 +39,11 @@ class Updater | |||
39 | protected $methods; | 39 | protected $methods; |
40 | 40 | ||
41 | /** | 41 | /** |
42 | * @var string $basePath Shaarli root directory (from HTTP Request) | ||
43 | */ | ||
44 | protected $basePath = null; | ||
45 | |||
46 | /** | ||
42 | * Object constructor. | 47 | * Object constructor. |
43 | * | 48 | * |
44 | * @param array $doneUpdates Updates which are already done. | 49 | * @param array $doneUpdates Updates which are already done. |
@@ -49,7 +54,7 @@ class Updater | |||
49 | public function __construct($doneUpdates, $linkDB, $conf, $isLoggedIn) | 54 | public function __construct($doneUpdates, $linkDB, $conf, $isLoggedIn) |
50 | { | 55 | { |
51 | $this->doneUpdates = $doneUpdates; | 56 | $this->doneUpdates = $doneUpdates; |
52 | $this->linkServices = $linkDB; | 57 | $this->bookmarkService = $linkDB; |
53 | $this->conf = $conf; | 58 | $this->conf = $conf; |
54 | $this->isLoggedIn = $isLoggedIn; | 59 | $this->isLoggedIn = $isLoggedIn; |
55 | 60 | ||
@@ -62,13 +67,15 @@ class Updater | |||
62 | * Run all new updates. | 67 | * Run all new updates. |
63 | * Update methods have to start with 'updateMethod' and return true (on success). | 68 | * Update methods have to start with 'updateMethod' and return true (on success). |
64 | * | 69 | * |
70 | * @param string $basePath Shaarli root directory (from HTTP Request) | ||
71 | * | ||
65 | * @return array An array containing ran updates. | 72 | * @return array An array containing ran updates. |
66 | * | 73 | * |
67 | * @throws UpdaterException If something went wrong. | 74 | * @throws UpdaterException If something went wrong. |
68 | */ | 75 | */ |
69 | public function update() | 76 | public function update(string $basePath = null) |
70 | { | 77 | { |
71 | $updatesRan = array(); | 78 | $updatesRan = []; |
72 | 79 | ||
73 | // If the user isn't logged in, exit without updating. | 80 | // If the user isn't logged in, exit without updating. |
74 | if ($this->isLoggedIn !== true) { | 81 | if ($this->isLoggedIn !== true) { |
@@ -111,4 +118,62 @@ class Updater | |||
111 | { | 118 | { |
112 | return $this->doneUpdates; | 119 | return $this->doneUpdates; |
113 | } | 120 | } |
121 | |||
122 | public function readUpdates(string $updatesFilepath): array | ||
123 | { | ||
124 | return UpdaterUtils::read_updates_file($updatesFilepath); | ||
125 | } | ||
126 | |||
127 | public function writeUpdates(string $updatesFilepath, array $updates): void | ||
128 | { | ||
129 | UpdaterUtils::write_updates_file($updatesFilepath, $updates); | ||
130 | } | ||
131 | |||
132 | /** | ||
133 | * With the Slim routing system, default header link should be `/subfolder/` instead of `?`. | ||
134 | * Otherwise you can not go back to the home page. | ||
135 | * Example: `/subfolder/picture-wall` -> `/subfolder/picture-wall?` instead of `/subfolder/`. | ||
136 | */ | ||
137 | public function updateMethodRelativeHomeLink(): bool | ||
138 | { | ||
139 | if ('?' === trim($this->conf->get('general.header_link'))) { | ||
140 | $this->conf->set('general.header_link', $this->basePath . '/', true, true); | ||
141 | } | ||
142 | |||
143 | return true; | ||
144 | } | ||
145 | |||
146 | /** | ||
147 | * With the Slim routing system, note bookmarks URL formatted `?abcdef` | ||
148 | * should be replaced with `/shaare/abcdef` | ||
149 | */ | ||
150 | public function updateMethodMigrateExistingNotesUrl(): bool | ||
151 | { | ||
152 | $updated = false; | ||
153 | |||
154 | foreach ($this->bookmarkService->search() as $bookmark) { | ||
155 | if ($bookmark->isNote() | ||
156 | && startsWith($bookmark->getUrl(), '?') | ||
157 | && 1 === preg_match('/^\?([a-zA-Z0-9-_@]{6})($|&|#)/', $bookmark->getUrl(), $match) | ||
158 | ) { | ||
159 | $updated = true; | ||
160 | $bookmark = $bookmark->setUrl('/shaare/' . $match[1]); | ||
161 | |||
162 | $this->bookmarkService->set($bookmark, false); | ||
163 | } | ||
164 | } | ||
165 | |||
166 | if ($updated) { | ||
167 | $this->bookmarkService->save(); | ||
168 | } | ||
169 | |||
170 | return true; | ||
171 | } | ||
172 | |||
173 | public function setBasePath(string $basePath): self | ||
174 | { | ||
175 | $this->basePath = $basePath; | ||
176 | |||
177 | return $this; | ||
178 | } | ||
114 | } | 179 | } |