]> git.immae.eu Git - github/shaarli/Shaarli.git/blobdiff - application/Updater.php
LinkDB: update datastore method names
[github/shaarli/Shaarli.git] / application / Updater.php
index 31630ff55d94dd548557817d4e1cb4e28eb9980c..36eddd4f12e100f86b1cc97b66f0844fd9ed643f 100644 (file)
@@ -17,6 +17,11 @@ class Updater
      */
     protected $linkDB;
 
+    /**
+     * @var ConfigManager $conf Configuration Manager instance.
+     */
+    protected $conf;
+
     /**
      * @var bool True if the user is logged in, false otherwise.
      */
@@ -30,14 +35,16 @@ class Updater
     /**
      * Object constructor.
      *
-     * @param array   $doneUpdates Updates which are already done.
-     * @param LinkDB  $linkDB      LinkDB instance.
-     * @param boolean $isLoggedIn  True if the user is logged in.
+     * @param array         $doneUpdates Updates which are already done.
+     * @param LinkDB        $linkDB      LinkDB instance.
+     * @param ConfigManager $conf        Configuration Manager instance.
+     * @param boolean       $isLoggedIn  True if the user is logged in.
      */
-    public function __construct($doneUpdates, $linkDB, $isLoggedIn)
+    public function __construct($doneUpdates, $linkDB, $conf, $isLoggedIn)
     {
         $this->doneUpdates = $doneUpdates;
         $this->linkDB = $linkDB;
+        $this->conf = $conf;
         $this->isLoggedIn = $isLoggedIn;
 
         // Retrieve all update methods.
@@ -107,21 +114,19 @@ class Updater
      */
     public function updateMethodMergeDeprecatedConfigFile()
     {
-        $conf = ConfigManager::getInstance();
-
-        if (is_file($conf->get('path.data_dir') . '/options.php')) {
-            include $conf->get('path.data_dir') . '/options.php';
+        if (is_file($this->conf->get('resource.data_dir') . '/options.php')) {
+            include $this->conf->get('resource.data_dir') . '/options.php';
 
             // Load GLOBALS into config
             $allowedKeys = array_merge(ConfigPhp::$ROOT_KEYS);
             $allowedKeys[] = 'config';
             foreach ($GLOBALS as $key => $value) {
                 if (in_array($key, $allowedKeys)) {
-                    $conf->set($key, $value);
+                    $this->conf->set($key, $value);
                 }
             }
-            $conf->write($this->isLoggedIn);
-            unlink($conf->get('path.data_dir').'/options.php');
+            $this->conf->write($this->isLoggedIn);
+            unlink($this->conf->get('resource.data_dir').'/options.php');
         }
 
         return true;
@@ -132,14 +137,13 @@ class Updater
      */
     public function updateMethodRenameDashTags()
     {
-        $conf = ConfigManager::getInstance();
         $linklist = $this->linkDB->filterSearch();
         foreach ($linklist as $link) {
             $link['tags'] = preg_replace('/(^| )\-/', '$1', $link['tags']);
             $link['tags'] = implode(' ', array_unique(LinkFilter::tagsStrToArray($link['tags'], true)));
             $this->linkDB[$link['linkdate']] = $link;
         }
-        $this->linkDB->savedb($conf->get('path.page_cache'));
+        $this->linkDB->save($this->conf->get('resource.page_cache'));
         return true;
     }
 
@@ -151,23 +155,21 @@ class Updater
      */
     public function updateMethodConfigToJson()
     {
-        $conf = ConfigManager::getInstance();
-
         // JSON config already exists, nothing to do.
-        if ($conf->getConfigIO() instanceof ConfigJson) {
+        if ($this->conf->getConfigIO() instanceof ConfigJson) {
             return true;
         }
 
         $configPhp = new ConfigPhp();
         $configJson = new ConfigJson();
-        $oldConfig = $configPhp->read($conf::$CONFIG_FILE . '.php');
-        rename($conf->getConfigFile(), $conf::$CONFIG_FILE . '.save.php');
-        $conf->setConfigIO($configJson);
-        $conf->reload();
+        $oldConfig = $configPhp->read($this->conf->getConfigFile() . '.php');
+        rename($this->conf->getConfigFileExt(), $this->conf->getConfigFile() . '.save.php');
+        $this->conf->setConfigIO($configJson);
+        $this->conf->reload();
 
         $legacyMap = array_flip(ConfigPhp::$LEGACY_KEYS_MAPPING);
         foreach (ConfigPhp::$ROOT_KEYS as $key) {
-            $conf->set($legacyMap[$key], $oldConfig[$key]);
+            $this->conf->set($legacyMap[$key], $oldConfig[$key]);
         }
 
         // Set sub config keys (config and plugins)
@@ -179,18 +181,40 @@ class Updater
                 } else {
                     $configKey = $sub .'.'. $key;
                 }
-                $conf->set($configKey, $value);
+                $this->conf->set($configKey, $value);
             }
         }
 
         try{
-            $conf->write($this->isLoggedIn);
+            $this->conf->write($this->isLoggedIn);
             return true;
         } catch (IOException $e) {
             error_log($e->getMessage());
             return false;
         }
     }
+
+    /**
+     * Escape settings which have been manually escaped in every request in previous versions:
+     *   - general.title
+     *   - general.header_link
+     *   - redirector.url
+     *
+     * @return bool true if the update is successful, false otherwise.
+     */
+    public function updateMethodEscapeUnescapedConfig()
+    {
+        try {
+            $this->conf->set('general.title', escape($this->conf->get('general.title')));
+            $this->conf->set('general.header_link', escape($this->conf->get('general.header_link')));
+            $this->conf->set('redirector.url', escape($this->conf->get('redirector.url')));
+            $this->conf->write($this->isLoggedIn);
+        } catch (Exception $e) {
+            error_log($e->getMessage());
+            return false;
+        }
+        return true;
+    }
 }
 
 /**