Merge pull request #3270 from owncloud/convert-oc_config
Convert OC_Config to object so it can be used for DIremotes/origin/stable6
commit
3abe68176f
@ -0,0 +1,27 @@ |
||||
<?php |
||||
/** |
||||
* Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl> |
||||
* This file is licensed under the Affero General Public License version 3 or |
||||
* later. |
||||
* See the COPYING-README file. |
||||
*/ |
||||
|
||||
namespace OC; |
||||
|
||||
class HintException extends \Exception { |
||||
|
||||
private $hint; |
||||
|
||||
public function __construct($message, $hint = '', $code = 0, Exception $previous = null) { |
||||
$this->hint = $hint; |
||||
parent::__construct($message, $code, $previous); |
||||
} |
||||
|
||||
public function __toString() { |
||||
return __CLASS__ . ": [{$this->code}]: {$this->message} ({$this->hint})\n"; |
||||
} |
||||
|
||||
public function getHint() { |
||||
return $this->hint; |
||||
} |
||||
} |
||||
@ -0,0 +1,103 @@ |
||||
<?php |
||||
/** |
||||
* ownCloud |
||||
* |
||||
* @author Frank Karlitschek |
||||
* @author Jakob Sack |
||||
* @copyright 2012 Frank Karlitschek frank@owncloud.org |
||||
* |
||||
* This library is free software; you can redistribute it and/or |
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE |
||||
* License as published by the Free Software Foundation; either |
||||
* version 3 of the License, or any later version. |
||||
* |
||||
* This library is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU AFFERO GENERAL PUBLIC LICENSE for more details. |
||||
* |
||||
* You should have received a copy of the GNU Affero General Public |
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>. |
||||
* |
||||
*/ |
||||
/* |
||||
* |
||||
* An example of config.php |
||||
* |
||||
* <?php |
||||
* $CONFIG = array( |
||||
* "database" => "mysql", |
||||
* "firstrun" => false, |
||||
* "pi" => 3.14 |
||||
* ); |
||||
* ?> |
||||
* |
||||
*/ |
||||
|
||||
/** |
||||
* This class is responsible for reading and writing config.php, the very basic |
||||
* configuration file of ownCloud. |
||||
*/ |
||||
OC_Config::$object = new \OC\Config(OC::$SERVERROOT.'/config/'); |
||||
class OC_Config { |
||||
|
||||
/** |
||||
* @var \OC\Config |
||||
*/ |
||||
public static $object; |
||||
|
||||
/** |
||||
* @brief Lists all available config keys |
||||
* @return array with key names |
||||
* |
||||
* This function returns all keys saved in config.php. Please note that it |
||||
* does not return the values. |
||||
*/ |
||||
public static function getKeys() { |
||||
return self::$object->getKeys(); |
||||
} |
||||
|
||||
/** |
||||
* @brief Gets a value from config.php |
||||
* @param string $key key |
||||
* @param string $default = null default value |
||||
* @return string the value or $default |
||||
* |
||||
* This function gets the value from config.php. If it does not exist, |
||||
* $default will be returned. |
||||
*/ |
||||
public static function getValue($key, $default = null) { |
||||
return self::$object->getValue($key, $default); |
||||
} |
||||
|
||||
/** |
||||
* @brief Sets a value |
||||
* @param string $key key |
||||
* @param string $value value |
||||
* |
||||
* This function sets the value and writes the config.php. |
||||
* |
||||
*/ |
||||
public static function setValue($key, $value) { |
||||
try { |
||||
self::$object->setValue($key, $value); |
||||
} catch (\OC\HintException $e) { |
||||
\OC_Template::printErrorPage($e->getMessage(), $e->getHint()); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* @brief Removes a key from the config |
||||
* @param string $key key |
||||
* |
||||
* This function removes a key from the config.php. |
||||
* |
||||
*/ |
||||
public static function deleteKey($key) { |
||||
try { |
||||
self::$object->deleteKey($key); |
||||
} catch (\OC\HintException $e) { |
||||
\OC_Template::printErrorPage($e->getMessage(), $e->getHint()); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,105 @@ |
||||
<?php |
||||
/** |
||||
* Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl> |
||||
* This file is licensed under the Affero General Public License version 3 or |
||||
* later. |
||||
* See the COPYING-README file. |
||||
*/ |
||||
|
||||
class Test_Config extends PHPUnit_Framework_TestCase { |
||||
const CONFIG_FILE = 'static://config.php'; |
||||
const CONFIG_DIR = 'static://'; |
||||
const TESTCONTENT = '<?php $CONFIG=array("foo"=>"bar");'; |
||||
|
||||
/** |
||||
* @var \OC\Config |
||||
*/ |
||||
private $config; |
||||
|
||||
function setUp() { |
||||
file_put_contents(self::CONFIG_FILE, self::TESTCONTENT); |
||||
$this->config = new OC\Config(self::CONFIG_DIR); |
||||
} |
||||
|
||||
public function testReadData() { |
||||
$config = new OC\Config('/non-existing'); |
||||
$this->assertAttributeEquals(array(), 'cache', $config); |
||||
|
||||
$this->assertAttributeEquals(array('foo' => 'bar'), 'cache', $this->config); |
||||
} |
||||
|
||||
public function testGetKeys() { |
||||
$this->assertEquals(array('foo'), $this->config->getKeys()); |
||||
} |
||||
|
||||
public function testGetValue() { |
||||
$this->assertEquals('bar', $this->config->getValue('foo')); |
||||
$this->assertEquals(null, $this->config->getValue('bar')); |
||||
$this->assertEquals('moo', $this->config->getValue('bar', 'moo')); |
||||
} |
||||
|
||||
public function testSetValue() { |
||||
$this->config->setDebugMode(false); |
||||
$this->config->setValue('foo', 'moo'); |
||||
$this->assertAttributeEquals(array('foo' => 'moo'), 'cache', $this->config); |
||||
$content = file_get_contents(self::CONFIG_FILE); |
||||
$this->assertEquals(<<<EOL |
||||
<?php |
||||
\$CONFIG = array ( |
||||
'foo' => 'moo', |
||||
); |
||||
|
||||
EOL |
||||
, $content); |
||||
$this->config->setValue('bar', 'red'); |
||||
$this->assertAttributeEquals(array('foo' => 'moo', 'bar' => 'red'), 'cache', $this->config); |
||||
$content = file_get_contents(self::CONFIG_FILE); |
||||
$this->assertEquals(<<<EOL |
||||
<?php |
||||
\$CONFIG = array ( |
||||
'foo' => 'moo', |
||||
'bar' => 'red', |
||||
); |
||||
|
||||
EOL |
||||
, $content); |
||||
} |
||||
|
||||
public function testDeleteKey() { |
||||
$this->config->setDebugMode(false); |
||||
$this->config->deleteKey('foo'); |
||||
$this->assertAttributeEquals(array(), 'cache', $this->config); |
||||
$content = file_get_contents(self::CONFIG_FILE); |
||||
$this->assertEquals(<<<EOL |
||||
<?php |
||||
\$CONFIG = array ( |
||||
); |
||||
|
||||
EOL |
||||
, $content); |
||||
} |
||||
|
||||
public function testSavingDebugMode() { |
||||
$this->config->setDebugMode(true); |
||||
$this->config->deleteKey('foo'); // change something so we save to the config file |
||||
$this->assertAttributeEquals(array(), 'cache', $this->config); |
||||
$this->assertAttributeEquals(true, 'debugMode', $this->config); |
||||
$content = file_get_contents(self::CONFIG_FILE); |
||||
$this->assertEquals(<<<EOL |
||||
<?php |
||||
define('DEBUG',true); |
||||
\$CONFIG = array ( |
||||
); |
||||
|
||||
EOL |
||||
, $content); |
||||
} |
||||
|
||||
/** |
||||
* @expectedException \OC\HintException |
||||
*/ |
||||
public function testWriteData() { |
||||
$config = new OC\Config('/non-writable'); |
||||
$config->setValue('foo', 'bar'); |
||||
} |
||||
} |
||||
Loading…
Reference in new issue