Browse Source
Merge pull request #3270 from owncloud/convert-oc_config
Merge pull request #3270 from owncloud/convert-oc_config
Convert OC_Config to object so it can be used for DIremotes/origin/stable6
6 changed files with 328 additions and 105 deletions
-
155lib/config.php
-
27lib/hintexception.php
-
103lib/legacy/config.php
-
27lib/public/config.php
-
16lib/setup.php
-
105tests/lib/config.php
@ -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'); |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue