3 * Functions related to configuration management.
7 * Re-write configuration file according to given array.
8 * Requires mandatory fields listed in $MANDATORY_FIELDS.
10 * @param array $config contains all configuration fields.
11 * @param bool $isLoggedIn true if user is logged in.
15 * @throws MissingFieldConfigException: a mandatory field has not been provided in $config.
16 * @throws UnauthorizedConfigException: user is not authorize to change configuration.
17 * @throws Exception: an error occured while writing the new config file.
19 function writeConfig($config, $isLoggedIn)
21 // These fields are required in configuration.
22 $MANDATORY_FIELDS = array(
23 'login', 'hash', 'salt', 'timezone', 'title', 'titleLink',
24 'redirector', 'disablesessionprotection', 'privateLinkByDefault'
27 if (!isset($config['config']['CONFIG_FILE'])) {
28 throw new MissingFieldConfigException('CONFIG_FILE');
31 // Only logged in user can alter config.
32 if (is_file($config['config']['CONFIG_FILE']) && !$isLoggedIn) {
33 throw new UnauthorizedConfigException();
36 // Check that all mandatory fields are provided in $config.
37 foreach ($MANDATORY_FIELDS as $field) {
38 if (!isset($config[$field])) {
39 throw new MissingFieldConfigException($field);
43 $configStr = '<?php '. PHP_EOL
;
44 $configStr .= '$GLOBALS[\'login\'] = '.var_export($config['login'], true).';'. PHP_EOL
;
45 $configStr .= '$GLOBALS[\'hash\'] = '.var_export($config['hash'], true).';'. PHP_EOL
;
46 $configStr .= '$GLOBALS[\'salt\'] = '.var_export($config['salt'], true).'; '. PHP_EOL
;
47 $configStr .= '$GLOBALS[\'timezone\'] = '.var_export($config['timezone'], true).';'. PHP_EOL
;
48 $configStr .= 'date_default_timezone_set('.var_export($config['timezone'], true).');'. PHP_EOL
;
49 $configStr .= '$GLOBALS[\'title\'] = '.var_export($config['title'], true).';'. PHP_EOL
;
50 $configStr .= '$GLOBALS[\'titleLink\'] = '.var_export($config['titleLink'], true).'; '. PHP_EOL
;
51 $configStr .= '$GLOBALS[\'redirector\'] = '.var_export($config['redirector'], true).'; '. PHP_EOL
;
52 $configStr .= '$GLOBALS[\'disablesessionprotection\'] = '.var_export($config['disablesessionprotection'], true).'; '. PHP_EOL
;
53 $configStr .= '$GLOBALS[\'privateLinkByDefault\'] = '.var_export($config['privateLinkByDefault'], true).'; '. PHP_EOL
;
55 // Store all $config['config']
56 foreach ($config['config'] as $key => $value) {
57 $configStr .= '$GLOBALS[\'config\'][\''. $key .'\'] = '.var_export($config['config'][$key], true).';'. PHP_EOL
;
60 if (isset($config['plugins'])) {
61 foreach ($config['plugins'] as $key => $value) {
62 $configStr .= '$GLOBALS[\'plugins\'][\''. $key .'\'] = '.var_export($config['plugins'][$key], true).';'. PHP_EOL
;
66 if (!file_put_contents($config['config']['CONFIG_FILE'], $configStr)
67 || strcmp(file_get_contents($config['config']['CONFIG_FILE']), $configStr) != 0
70 'Shaarli could not create the config file.
71 Please make sure Shaarli has the right to write in the folder is it installed in.'
77 * Milestone 0.9 - shaarli/Shaarli#41: options.php is not supported anymore.
78 * ==> if user is loggedIn, merge its content with config.php, then delete options.php.
80 * @param array $config contains all configuration fields.
81 * @param bool $isLoggedIn true if user is logged in.
85 function mergeDeprecatedConfig($config, $isLoggedIn)
87 $config_file = $config['config']['CONFIG_FILE'];
89 if (is_file($config['config']['DATADIR'].'/options.php') && $isLoggedIn) {
90 include $config['config']['DATADIR'].'/options.php';
92 // Load GLOBALS into config
93 foreach ($GLOBALS as $key => $value) {
94 $config[$key] = $value;
96 $config['config']['CONFIG_FILE'] = $config_file;
97 writeConfig($config, $isLoggedIn);
99 unlink($config['config']['DATADIR'].'/options.php');
104 * Exception used if a mandatory field is missing in given configuration.
106 class MissingFieldConfigException
extends Exception
111 * Construct exception.
113 * @param string $field field name missing.
115 public function __construct($field)
117 $this->field
= $field;
118 $this->message
= 'Configuration value is required for '. $this->field
;
123 * Exception used if an unauthorized attempt to edit configuration has been made.
125 class UnauthorizedConfigException
extends Exception
128 * Construct exception.
130 public function __construct()
132 $this->message
= 'You are not authorized to alter config.';