<?php
+use Shaarli\Config\ConfigJson;
+use Shaarli\Config\ConfigPhp;
+use Shaarli\Config\ConfigManager;
/**
* Class Updater.
*/
protected $isLoggedIn;
+ /**
+ * @var array $_SESSION
+ */
+ protected $session;
+
/**
* @var ReflectionMethod[] List of current class methods.
*/
* @param LinkDB $linkDB LinkDB instance.
* @param ConfigManager $conf Configuration Manager instance.
* @param boolean $isLoggedIn True if the user is logged in.
+ * @param array $session $_SESSION (by reference)
+ *
+ * @throws ReflectionException
*/
- public function __construct($doneUpdates, $linkDB, $conf, $isLoggedIn)
+ public function __construct($doneUpdates, $linkDB, $conf, $isLoggedIn, &$session = [])
{
$this->doneUpdates = $doneUpdates;
$this->linkDB = $linkDB;
$this->conf = $conf;
$this->isLoggedIn = $isLoggedIn;
+ $this->session = &$session;
// Retrieve all update methods.
$class = new ReflectionClass($this);
}
if ($this->methods === null) {
- throw new UpdaterException('Couldn\'t retrieve Updater class methods.');
+ throw new UpdaterException(t('Couldn\'t retrieve Updater class methods.'));
}
foreach ($this->methods as $method) {
return rename('inc/user.css', 'data/user.css');
}
+
+ /**
+ * * `markdown_escape` is a new setting, set to true as default.
+ *
+ * If the markdown plugin was already enabled, escaping is disabled to avoid
+ * breaking existing entries.
+ */
+ public function updateMethodEscapeMarkdown()
+ {
+ if ($this->conf->exists('security.markdown_escape')) {
+ return true;
+ }
+
+ if (in_array('markdown', $this->conf->get('general.enabled_plugins'))) {
+ $this->conf->set('security.markdown_escape', false);
+ } else {
+ $this->conf->set('security.markdown_escape', true);
+ }
+ $this->conf->write($this->isLoggedIn);
+
+ return true;
+ }
+
+ /**
+ * Add 'http://' to Piwik URL the setting is set.
+ *
+ * @return bool true if the update is successful, false otherwise.
+ */
+ public function updateMethodPiwikUrl()
+ {
+ if (! $this->conf->exists('plugins.PIWIK_URL') || startsWith($this->conf->get('plugins.PIWIK_URL'), 'http')) {
+ return true;
+ }
+
+ $this->conf->set('plugins.PIWIK_URL', 'http://'. $this->conf->get('plugins.PIWIK_URL'));
+ $this->conf->write($this->isLoggedIn);
+
+ return true;
+ }
+
+ /**
+ * Use ATOM feed as default.
+ */
+ public function updateMethodAtomDefault()
+ {
+ if (!$this->conf->exists('feed.show_atom') || $this->conf->get('feed.show_atom') === true) {
+ return true;
+ }
+
+ $this->conf->set('feed.show_atom', true);
+ $this->conf->write($this->isLoggedIn);
+
+ return true;
+ }
+
+ /**
+ * Update updates.check_updates_branch setting.
+ *
+ * If the current major version digit matches the latest branch
+ * major version digit, we set the branch to `latest`,
+ * otherwise we'll check updates on the `stable` branch.
+ *
+ * No update required for the dev version.
+ *
+ * Note: due to hardcoded URL and lack of dependency injection, this is not unit testable.
+ *
+ * FIXME! This needs to be removed when we switch to first digit major version
+ * instead of the second one since the versionning process will change.
+ */
+ public function updateMethodCheckUpdateRemoteBranch()
+ {
+ if (SHAARLI_VERSION === 'dev' || $this->conf->get('updates.check_updates_branch') === 'latest') {
+ return true;
+ }
+
+ // Get latest branch major version digit
+ $latestVersion = ApplicationUtils::getLatestGitVersionCode(
+ 'https://raw.githubusercontent.com/shaarli/Shaarli/latest/shaarli_version.php',
+ 5
+ );
+ if (preg_match('/(\d+)\.\d+$/', $latestVersion, $matches) === false) {
+ return false;
+ }
+ $latestMajor = $matches[1];
+
+ // Get current major version digit
+ preg_match('/(\d+)\.\d+$/', SHAARLI_VERSION, $matches);
+ $currentMajor = $matches[1];
+
+ if ($currentMajor === $latestMajor) {
+ $branch = 'latest';
+ } else {
+ $branch = 'stable';
+ }
+ $this->conf->set('updates.check_updates_branch', $branch);
+ $this->conf->write($this->isLoggedIn);
+ return true;
+ }
+
+ /**
+ * Reset history store file due to date format change.
+ */
+ public function updateMethodResetHistoryFile()
+ {
+ if (is_file($this->conf->get('resource.history'))) {
+ unlink($this->conf->get('resource.history'));
+ }
+ return true;
+ }
+
+ /**
+ * Save the datastore -> the link order is now applied when links are saved.
+ */
+ public function updateMethodReorderDatastore()
+ {
+ $this->linkDB->save($this->conf->get('resource.page_cache'));
+ return true;
+ }
+
+ /**
+ * Change privateonly session key to visibility.
+ */
+ public function updateMethodVisibilitySession()
+ {
+ if (isset($_SESSION['privateonly'])) {
+ unset($_SESSION['privateonly']);
+ $_SESSION['visibility'] = 'private';
+ }
+ return true;
+ }
+
+ /**
+ * Add download size and timeout to the configuration file
+ *
+ * @return bool true if the update is successful, false otherwise.
+ */
+ public function updateMethodDownloadSizeAndTimeoutConf()
+ {
+ if ($this->conf->exists('general.download_max_size')
+ && $this->conf->exists('general.download_timeout')
+ ) {
+ return true;
+ }
+
+ if (! $this->conf->exists('general.download_max_size')) {
+ $this->conf->set('general.download_max_size', 1024*1024*4);
+ }
+
+ if (! $this->conf->exists('general.download_timeout')) {
+ $this->conf->set('general.download_timeout', 30);
+ }
+
+ $this->conf->write($this->isLoggedIn);
+ return true;
+ }
+
+ /**
+ * * Move thumbnails management to WebThumbnailer, coming with new settings.
+ */
+ public function updateMethodWebThumbnailer()
+ {
+ if ($this->conf->exists('thumbnails.enabled')) {
+ return true;
+ }
+
+ $thumbnailsEnabled = $this->conf->get('thumbnail.enable_thumbnails', true);
+ $this->conf->set('thumbnails.enabled', $thumbnailsEnabled);
+ $this->conf->set('thumbnails.width', 125);
+ $this->conf->set('thumbnails.height', 90);
+ $this->conf->remove('thumbnail');
+ $this->conf->write(true);
+
+ if ($thumbnailsEnabled) {
+ $this->session['warnings'][] = t(
+ 'You have enabled thumbnails. <a href="?do=thumbs_update">Please synchonize them</a>.'
+ );
+ }
+
+ return true;
+ }
}
/**
}
if (! empty($this->method)) {
- $out .= 'An error occurred while running the update '. $this->method . PHP_EOL;
+ $out .= t('An error occurred while running the update ') . $this->method . PHP_EOL;
}
if (! empty($this->previous)) {
function write_updates_file($updatesFilepath, $updates)
{
if (empty($updatesFilepath)) {
- throw new Exception('Updates file path is not set, can\'t write updates.');
+ throw new Exception(t('Updates file path is not set, can\'t write updates.'));
}
$res = file_put_contents($updatesFilepath, implode(';', $updates));
if ($res === false) {
- throw new Exception('Unable to write updates in '. $updatesFilepath . '.');
+ throw new Exception(t('Unable to write updates in '. $updatesFilepath . '.'));
}
}