- /**
- * Move deprecated options.php to config.php.
- *
- * Milestone 0.9 (old versioning) - shaarli/Shaarli#41:
- * options.php is not supported anymore.
- */
- public function updateMethodMergeDeprecatedConfigFile()
- {
- 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)) {
- $this->conf->set($key, $value);
- }
- }
- $this->conf->write($this->isLoggedIn);
- unlink($this->conf->get('resource.data_dir') . '/options.php');
- }
-
- return true;
- }
-
- /**
- * Move old configuration in PHP to the new config system in JSON format.
- *
- * Will rename 'config.php' into 'config.save.php' and create 'config.json.php'.
- * It will also convert legacy setting keys to the new ones.
- */
- public function updateMethodConfigToJson()
- {
- // JSON config already exists, nothing to do.
- if ($this->conf->getConfigIO() instanceof ConfigJson) {
- return true;
- }
-
- $configPhp = new ConfigPhp();
- $configJson = new ConfigJson();
- $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) {
- $this->conf->set($legacyMap[$key], $oldConfig[$key]);
- }
-
- // Set sub config keys (config and plugins)
- $subConfig = array('config', 'plugins');
- foreach ($subConfig as $sub) {
- foreach ($oldConfig[$sub] as $key => $value) {
- if (isset($legacyMap[$sub . '.' . $key])) {
- $configKey = $legacyMap[$sub . '.' . $key];
- } else {
- $configKey = $sub . '.' . $key;
- }
- $this->conf->set($configKey, $value);
- }
- }
-
- try {
- $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->write($this->isLoggedIn);
- } catch (Exception $e) {
- error_log($e->getMessage());
- return false;
- }
- 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 (done by LinkDB).
- *
- * Since this update is very sensitve (changing the whole database), the datastore will be
- * automatically backed up into the file datastore.<datetime>.php.
- *
- * LinkDB also adds the field 'shorturl' with the precedent format (linkdate smallhash),
- * which will be saved by this method.
- *
- * @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) {
- unset($l['linkdate']);
- $l['id'] = $cpt;
- $this->linkDB[$cpt++] = $l;
- }
-
- $this->linkDB->save($this->conf->get('resource.page_cache'));
- $this->linkDB->reorder();
-
- return true;
- }
-
- /**
- * Rename tags starting with a '-' to work with tag exclusion search.
- */
- public function updateMethodRenameDashTags()