X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=application%2Fupdater%2FUpdater.php;h=11b6c051498381ad1b7d0e4c698ee381c82a18ea;hb=9b8c0a4560fa1d87cab1529099b1b4677e92e265;hp=4bbcb9f270664a8e11266716548f502368765aec;hpb=485b168a9677d160b0c0426e4f282b9bd0c632c1;p=github%2Fshaarli%2FShaarli.git diff --git a/application/updater/Updater.php b/application/updater/Updater.php index 4bbcb9f2..11b6c051 100644 --- a/application/updater/Updater.php +++ b/application/updater/Updater.php @@ -21,7 +21,7 @@ class Updater /** * @var BookmarkServiceInterface instance. */ - protected $linkServices; + protected $bookmarkService; /** * @var ConfigManager $conf Configuration Manager instance. @@ -38,6 +38,11 @@ class Updater */ protected $methods; + /** + * @var string $basePath Shaarli root directory (from HTTP Request) + */ + protected $basePath = null; + /** * Object constructor. * @@ -49,7 +54,7 @@ class Updater public function __construct($doneUpdates, $linkDB, $conf, $isLoggedIn) { $this->doneUpdates = $doneUpdates; - $this->linkServices = $linkDB; + $this->bookmarkService = $linkDB; $this->conf = $conf; $this->isLoggedIn = $isLoggedIn; @@ -62,13 +67,15 @@ class Updater * Run all new updates. * Update methods have to start with 'updateMethod' and return true (on success). * + * @param string $basePath Shaarli root directory (from HTTP Request) + * * @return array An array containing ran updates. * * @throws UpdaterException If something went wrong. */ - public function update() + public function update(string $basePath = null) { - $updatesRan = array(); + $updatesRan = []; // If the user isn't logged in, exit without updating. if ($this->isLoggedIn !== true) { @@ -81,7 +88,8 @@ class Updater foreach ($this->methods as $method) { // Not an update method or already done, pass. - if (! startsWith($method->getName(), 'updateMethod') + if ( + ! startsWith($method->getName(), 'updateMethod') || in_array($method->getName(), $this->doneUpdates) ) { continue; @@ -112,19 +120,62 @@ class Updater return $this->doneUpdates; } + public function readUpdates(string $updatesFilepath): array + { + return UpdaterUtils::readUpdatesFile($updatesFilepath); + } + + public function writeUpdates(string $updatesFilepath, array $updates): void + { + UpdaterUtils::writeUpdatesFile($updatesFilepath, $updates); + } + /** - * With the Slim routing system, default header link should be `./` instead of `?`. - * Otherwise you can not go back to the home page. Example: `/picture-wall` -> `/picture-wall?` instead of `/`. + * With the Slim routing system, default header link should be `/subfolder/` instead of `?`. + * Otherwise you can not go back to the home page. + * Example: `/subfolder/picture-wall` -> `/subfolder/picture-wall?` instead of `/subfolder/`. */ public function updateMethodRelativeHomeLink(): bool { - $link = trim($this->conf->get('general.header_link')); - if ($link[0] === '?') { - $link = './'. ltrim($link, '?'); + if ('?' === trim($this->conf->get('general.header_link'))) { + $this->conf->set('general.header_link', $this->basePath . '/', true, true); + } + + return true; + } - $this->conf->set('general.header_link', $link, true, true); + /** + * With the Slim routing system, note bookmarks URL formatted `?abcdef` + * should be replaced with `/shaare/abcdef` + */ + public function updateMethodMigrateExistingNotesUrl(): bool + { + $updated = false; + + foreach ($this->bookmarkService->search()->getBookmarks() as $bookmark) { + if ( + $bookmark->isNote() + && startsWith($bookmark->getUrl(), '?') + && 1 === preg_match('/^\?([a-zA-Z0-9-_@]{6})($|&|#)/', $bookmark->getUrl(), $match) + ) { + $updated = true; + $bookmark = $bookmark->setUrl('/shaare/' . $match[1]); + + $this->bookmarkService->set($bookmark, false); + } + } + + if ($updated) { + $this->bookmarkService->save(); } return true; } + + public function setBasePath(string $basePath): self + { + $this->basePath = $basePath; + + return $this; + } }