*/
protected $methods;
+ /**
+ * @var string $basePath Shaarli root directory (from HTTP Request)
+ */
+ protected $basePath = null;
+
/**
* Object constructor.
*
* 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 = [];
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;
public function readUpdates(string $updatesFilepath): array
{
- return UpdaterUtils::read_updates_file($updatesFilepath);
+ return UpdaterUtils::readUpdatesFile($updatesFilepath);
}
public function writeUpdates(string $updatesFilepath, array $updates): void
{
- UpdaterUtils::write_updates_file($updatesFilepath, $updates);
+ 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, '?');
-
- $this->conf->set('general.header_link', $link, true, true);
+ if ('?' === trim($this->conf->get('general.header_link'))) {
+ $this->conf->set('general.header_link', $this->basePath . '/', true, true);
}
return true;
{
$updated = false;
- foreach ($this->bookmarkService->search() as $bookmark) {
- if ($bookmark->isNote()
+ foreach ($this->bookmarkService->search()->getBookmarks() as $bookmark) {
+ if (
+ $bookmark->isNote()
&& startsWith($bookmark->getUrl(), '?')
&& 1 === preg_match('/^\?([a-zA-Z0-9-_@]{6})($|&|#)/', $bookmark->getUrl(), $match)
) {
return true;
}
+
+ public function setBasePath(string $basePath): self
+ {
+ $this->basePath = $basePath;
+
+ return $this;
+ }
}