@ -57,6 +57,8 @@ class Config {
protected $configFilePath;
/** @var string */
protected $configFileName;
/** @var bool */
protected $isReadOnly;
/**
* @param string $configDir Path to the config dir, needs to end with '/'
@ -67,6 +69,7 @@ class Config {
$this->configFilePath = $this->configDir.$fileName;
$this->configFileName = $fileName;
$this->readData();
$this->isReadOnly = $this->getValue('config_is_read_only', false);
}
/**
@ -109,6 +112,7 @@ class Config {
*
* @param array $configs Associative array with `key => value` pairs
* If value is null, the config key will be deleted
* @throws HintException
*/
public function setValues(array $configs) {
$needsUpdate = false;
@ -131,6 +135,7 @@ class Config {
*
* @param string $key key
* @param mixed $value value
* @throws HintException
*/
public function setValue($key, $value) {
if ($this->set($key, $value)) {
@ -145,8 +150,11 @@ class Config {
* @param string $key key
* @param mixed $value value
* @return bool True if the file needs to be updated, false otherwise
* @throws HintException
*/
protected function set($key, $value) {
$this->checkReadOnly();
if (!isset($this->cache[$key]) || $this->cache[$key] !== $value) {
// Add change
$this->cache[$key] = $value;
@ -158,7 +166,9 @@ class Config {
/**
* Removes a key from the config and removes it from config.php if required
*
* @param string $key
* @throws HintException
*/
public function deleteKey($key) {
if ($this->delete($key)) {
@ -172,8 +182,11 @@ class Config {
*
* @param string $key
* @return bool True if the file needs to be updated, false otherwise
* @throws HintException
*/
protected function delete($key) {
$this->checkReadOnly();
if (isset($this->cache[$key])) {
// Delete key from cache
unset($this->cache[$key]);
@ -239,6 +252,8 @@ class Config {
* @throws \Exception If no file lock can be acquired
*/
private function writeData() {
$this->checkReadOnly();
// Create a php file ...
$content = "<?php \n ";
$content .= '$CONFIG = ';
@ -274,4 +289,15 @@ class Config {
@opcache_invalidate($this->configFilePath, true);
}
}
/**
* @throws HintException
*/
private function checkReadOnly(): void {
if ($this->isReadOnly) {
throw new HintException(
'Config is set to be read-only via option "config_is_read_only".',
'Unset "config_is_read_only" to allow changes to the config file.');
}
}
}