2016-05-18 21:43:59 +02:00
|
|
|
<?php
|
2017-03-03 23:06:12 +01:00
|
|
|
namespace Shaarli\Config;
|
2016-05-18 21:43:59 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Class ConfigPhp (ConfigIO implementation)
|
|
|
|
*
|
|
|
|
* Handle Shaarli's legacy PHP configuration file.
|
|
|
|
* Note: this is only designed to support the transition to JSON configuration.
|
|
|
|
*/
|
|
|
|
class ConfigPhp implements ConfigIO
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* @var array List of config key without group.
|
|
|
|
*/
|
|
|
|
public static $ROOT_KEYS = array(
|
|
|
|
'login',
|
|
|
|
'hash',
|
|
|
|
'salt',
|
|
|
|
'timezone',
|
|
|
|
'title',
|
|
|
|
'titleLink',
|
|
|
|
'redirector',
|
|
|
|
'disablesessionprotection',
|
|
|
|
'privateLinkByDefault',
|
|
|
|
);
|
|
|
|
|
2016-05-29 16:10:32 +02:00
|
|
|
/**
|
|
|
|
* Map legacy config keys with the new ones.
|
|
|
|
* If ConfigPhp is used, getting <newkey> will actually look for <legacykey>.
|
|
|
|
* The Updater will use this array to transform keys when switching to JSON.
|
|
|
|
*
|
|
|
|
* @var array current key => legacy key.
|
|
|
|
*/
|
|
|
|
public static $LEGACY_KEYS_MAPPING = array(
|
|
|
|
'credentials.login' => 'login',
|
|
|
|
'credentials.hash' => 'hash',
|
|
|
|
'credentials.salt' => 'salt',
|
2016-06-11 09:08:02 +02:00
|
|
|
'resource.data_dir' => 'config.DATADIR',
|
|
|
|
'resource.config' => 'config.CONFIG_FILE',
|
|
|
|
'resource.datastore' => 'config.DATASTORE',
|
|
|
|
'resource.updates' => 'config.UPDATES_FILE',
|
|
|
|
'resource.log' => 'config.LOG_FILE',
|
|
|
|
'resource.update_check' => 'config.UPDATECHECK_FILENAME',
|
|
|
|
'resource.raintpl_tpl' => 'config.RAINTPL_TPL',
|
2016-12-07 11:58:25 +01:00
|
|
|
'resource.theme' => 'config.theme',
|
2016-06-11 09:08:02 +02:00
|
|
|
'resource.raintpl_tmp' => 'config.RAINTPL_TMP',
|
|
|
|
'resource.thumbnails_cache' => 'config.CACHEDIR',
|
|
|
|
'resource.page_cache' => 'config.PAGECACHE',
|
|
|
|
'resource.ban_file' => 'config.IPBANS_FILENAME',
|
2016-05-29 16:10:32 +02:00
|
|
|
'security.session_protection_disabled' => 'disablesessionprotection',
|
|
|
|
'security.ban_after' => 'config.BAN_AFTER',
|
|
|
|
'security.ban_duration' => 'config.BAN_DURATION',
|
|
|
|
'general.title' => 'title',
|
|
|
|
'general.timezone' => 'timezone',
|
|
|
|
'general.header_link' => 'titleLink',
|
2016-06-11 09:08:02 +02:00
|
|
|
'updates.check_updates' => 'config.ENABLE_UPDATECHECK',
|
|
|
|
'updates.check_updates_branch' => 'config.UPDATECHECK_BRANCH',
|
|
|
|
'updates.check_updates_interval' => 'config.UPDATECHECK_INTERVAL',
|
|
|
|
'privacy.default_private_links' => 'privateLinkByDefault',
|
|
|
|
'feed.rss_permalinks' => 'config.ENABLE_RSS_PERMALINKS',
|
2016-05-29 16:10:32 +02:00
|
|
|
'general.links_per_page' => 'config.LINKS_PER_PAGE',
|
2016-06-11 09:08:02 +02:00
|
|
|
'thumbnail.enable_thumbnails' => 'config.ENABLE_THUMBNAILS',
|
|
|
|
'thumbnail.enable_localcache' => 'config.ENABLE_LOCALCACHE',
|
2016-05-29 16:10:32 +02:00
|
|
|
'general.enabled_plugins' => 'config.ENABLED_PLUGINS',
|
2016-06-11 09:08:02 +02:00
|
|
|
'redirector.url' => 'redirector',
|
|
|
|
'redirector.encode_url' => 'config.REDIRECTOR_URLENCODE',
|
|
|
|
'feed.show_atom' => 'config.SHOW_ATOM',
|
|
|
|
'privacy.hide_public_links' => 'config.HIDE_PUBLIC_LINKS',
|
|
|
|
'privacy.hide_timestamps' => 'config.HIDE_TIMESTAMPS',
|
|
|
|
'security.open_shaarli' => 'config.OPEN_SHAARLI',
|
2016-05-29 16:10:32 +02:00
|
|
|
);
|
|
|
|
|
2016-05-18 21:43:59 +02:00
|
|
|
/**
|
|
|
|
* @inheritdoc
|
|
|
|
*/
|
2017-01-05 19:33:06 +01:00
|
|
|
public function read($filepath)
|
2016-05-18 21:43:59 +02:00
|
|
|
{
|
|
|
|
if (! file_exists($filepath) || ! is_readable($filepath)) {
|
|
|
|
return array();
|
|
|
|
}
|
|
|
|
|
|
|
|
include $filepath;
|
|
|
|
|
|
|
|
$out = array();
|
|
|
|
foreach (self::$ROOT_KEYS as $key) {
|
2018-01-25 19:55:31 +01:00
|
|
|
$out[$key] = isset($GLOBALS[$key]) ? $GLOBALS[$key] : '';
|
2016-05-18 21:43:59 +02:00
|
|
|
}
|
2018-01-25 19:55:31 +01:00
|
|
|
$out['config'] = isset($GLOBALS['config']) ? $GLOBALS['config'] : [];
|
|
|
|
$out['plugins'] = isset($GLOBALS['plugins']) ? $GLOBALS['plugins'] : [];
|
2016-05-18 21:43:59 +02:00
|
|
|
return $out;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @inheritdoc
|
|
|
|
*/
|
2017-01-05 19:33:06 +01:00
|
|
|
public function write($filepath, $conf)
|
2016-05-18 21:43:59 +02:00
|
|
|
{
|
|
|
|
$configStr = '<?php '. PHP_EOL;
|
|
|
|
foreach (self::$ROOT_KEYS as $key) {
|
|
|
|
if (isset($conf[$key])) {
|
|
|
|
$configStr .= '$GLOBALS[\'' . $key . '\'] = ' . var_export($conf[$key], true) . ';' . PHP_EOL;
|
|
|
|
}
|
|
|
|
}
|
2016-12-07 11:58:25 +01:00
|
|
|
|
2016-05-18 21:43:59 +02:00
|
|
|
// Store all $conf['config']
|
|
|
|
foreach ($conf['config'] as $key => $value) {
|
|
|
|
$configStr .= '$GLOBALS[\'config\'][\''. $key .'\'] = '.var_export($conf['config'][$key], true).';'. PHP_EOL;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (isset($conf['plugins'])) {
|
|
|
|
foreach ($conf['plugins'] as $key => $value) {
|
|
|
|
$configStr .= '$GLOBALS[\'plugins\'][\''. $key .'\'] = '.var_export($conf['plugins'][$key], true).';'. PHP_EOL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!file_put_contents($filepath, $configStr)
|
|
|
|
|| strcmp(file_get_contents($filepath), $configStr) != 0
|
|
|
|
) {
|
2017-03-03 23:06:12 +01:00
|
|
|
throw new \IOException(
|
2016-05-18 21:43:59 +02:00
|
|
|
$filepath,
|
2017-05-09 18:12:15 +02:00
|
|
|
t('Shaarli could not create the config file. '.
|
|
|
|
'Please make sure Shaarli has the right to write in the folder is it installed in.')
|
2016-05-18 21:43:59 +02:00
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @inheritdoc
|
|
|
|
*/
|
2017-01-05 19:33:06 +01:00
|
|
|
public function getExtension()
|
2016-05-18 21:43:59 +02:00
|
|
|
{
|
|
|
|
return '.php';
|
|
|
|
}
|
|
|
|
}
|