]> git.immae.eu Git - github/shaarli/Shaarli.git/blobdiff - application/Updater.php
Update method to use the new ID system, which replaces linkdate primary keys.
[github/shaarli/Shaarli.git] / application / Updater.php
index b8940e4126261c04fa323241874d89e5f6fd4110..94b639903c7fdead5816c52fc8a358f534700d80 100644 (file)
@@ -37,7 +37,7 @@ class Updater
      *
      * @param array         $doneUpdates Updates which are already done.
      * @param LinkDB        $linkDB      LinkDB instance.
-     * @oaram ConfigManager $conf        Configuration Manager instance.
+     * @param ConfigManager $conf        Configuration Manager instance.
      * @param boolean       $isLoggedIn  True if the user is logged in.
      */
     public function __construct($doneUpdates, $linkDB, $conf, $isLoggedIn)
@@ -114,8 +114,8 @@ class Updater
      */
     public function updateMethodMergeDeprecatedConfigFile()
     {
-        if (is_file($this->conf->get('path.data_dir') . '/options.php')) {
-            include $this->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);
@@ -126,7 +126,7 @@ class Updater
                 }
             }
             $this->conf->write($this->isLoggedIn);
-            unlink($this->conf->get('path.data_dir').'/options.php');
+            unlink($this->conf->get('resource.data_dir').'/options.php');
         }
 
         return true;
@@ -138,12 +138,12 @@ class Updater
     public function updateMethodRenameDashTags()
     {
         $linklist = $this->linkDB->filterSearch();
-        foreach ($linklist as $link) {
+        foreach ($linklist as $key => $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[$key] = $link;
         }
-        $this->linkDB->savedb($this->conf->get('path.page_cache'));
+        $this->linkDB->save($this->conf->get('resource.page_cache'));
         return true;
     }
 
@@ -198,16 +198,16 @@ class Updater
      * Escape settings which have been manually escaped in every request in previous versions:
      *   - general.title
      *   - general.header_link
-     *   - extras.redirector
+     *   - redirector.url
      *
      * @return bool true if the update is successful, false otherwise.
      */
-    public function escapeUnescapedConfig()
+    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('extras.redirector', escape($this->conf->get('extras.redirector')));
+            $this->conf->set('redirector.url', escape($this->conf->get('redirector.url')));
             $this->conf->write($this->isLoggedIn);
         } catch (Exception $e) {
             error_log($e->getMessage());
@@ -215,6 +215,48 @@ class Updater
         }
         return true;
     }
+
+    /**
+     * Update the database to use the new ID system, which replaces linkdate primary keys.
+     * Also, creation and update dates are now DateTime objects.
+     *
+     * Since this update is very sensitve (changing the whole database), the datastore will be
+     * automatically backed up into the file datastore.<datetime>.php.
+     *
+     * @return bool true if the update is successful, false otherwise.
+     */
+    public function updateMethodDatastoreIds()
+    {
+        // up to date database
+        if (isset($this->linkDB[0])) {
+            return true;
+        }
+
+        $save = $this->conf->get('resource.data_dir') .'/datastore.'. date('YmdHis') .'.php';
+        copy($this->conf->get('resource.datastore'), $save);
+
+        $links = array();
+        foreach ($this->linkDB as $offset => $value) {
+            $links[] = $value;
+            unset($this->linkDB[$offset]);
+        }
+        $links = array_reverse($links);
+        $cpt = 0;
+        foreach ($links as $l) {
+            $l['created'] = DateTime::createFromFormat('Ymd_His', $l['linkdate']);
+            if (! empty($l['updated'])) {
+                $l['updated'] = DateTime::createFromFormat('Ymd_His', $l['updated']);
+            }
+            unset($l['linkdate']);
+            $l['id'] = $cpt;
+            $this->linkDB[$cpt++] = $l;
+        }
+
+        $this->linkDB->save($this->conf->get('resource.page_cache'));
+        $this->linkDB->reorder();
+
+        return true;
+    }
 }
 
 /**