From 29007c5afac2785789eb49a422ae706c5830d62b Mon Sep 17 00:00:00 2001 From: Dominique Fournier Date: Sat, 5 Mar 2016 12:59:44 +0000 Subject: [PATCH] config : allow to have the defaults params in ->get() in case of array without defined key git-svn-id: https://svn.fournier38.fr/svn/ProgSVN/trunk@2648 bf3deb0d-5f1a-0410-827f-c0cc1f45334c --- Tests/configTest.php | 103 +++++++++++++++++++++++++++++++++++++++++++ config.php | 16 +++++++ 2 files changed, 119 insertions(+) diff --git a/Tests/configTest.php b/Tests/configTest.php index 70a9793..e68657c 100644 --- a/Tests/configTest.php +++ b/Tests/configTest.php @@ -151,4 +151,107 @@ class test_config extends PHPUnit_Framework_TestCase "tableprefix"=>false)); $this->assertSame (true, $res); } + + public function testGet6 () + { + $c = new config (); + $c->confFile = "/tmp/testconf.php"; + chmod ("/tmp/testconf.php", 0666); + $c->default = array ( + "database"=>array ( + "dsn"=>null, + "user"=>null, + "password"=>null, + "tableprefix"=>""), + "servers"=>array ( + "not configured"=>array ( + "type"=>"bind", + "username"=>"", + ), + ) + ); + $res = $c->get ("servers"); + $this->assertSame ($res, array ("not configured"=>array ( + "type"=>"bind", + "username"=>"", + ))); + } + + public function testSet7 () + { + $c = new config (); + $c->confFile = "/tmp/testconf.php"; + chmod ("/tmp/testconf.php", 0666); + $c->default = array ( + "database"=>array ( + "dsn"=>null, + "user"=>null, + "password"=>null, + "tableprefix"=>""), + "servers"=>array ( + "not configured"=>array ( + "type"=>"bind", + "username"=>"", + ), + ) + ); + $res = $c->set ("servers", array ( + "127.0.0.1"=>array ( + "type"=>"BIND", + "username"=>"toto", + ))); + } + public function testGet7 () + { + $c = new config (); + $c->confFile = "/tmp/testconf.php"; + chmod ("/tmp/testconf.php", 0666); + $c->default = array ( + "database"=>array ( + "dsn"=>null, + "user"=>null, + "password"=>null, + "tableprefix"=>""), + "servers"=>array ( + "not configured"=>array ( + "type"=>"bind", + "username"=>"", + ), + ) + ); + $res = $c->get ("servers"); + $this->assertSame ($res, array ( + "127.0.0.1"=>array ( + "type"=>"BIND", + "username"=>"toto", + ))); + } + + public function testGet8 () + { + $c = new config (); + $c->confFile = "/tmp/testconf.php"; + chmod ("/tmp/testconf.php", 0666); + $c->default = array ( + "database"=>array ( + "dsn"=>null, + "user"=>null, + "password"=>null, + "tableprefix"=>""), + "servers"=>array ( + "not configured"=>array ( + "type"=>"bind", + "username"=>"", + "password"=>"", + ), + ) + ); + $res = $c->get ("servers"); + $this->assertSame ($res, array ( + "127.0.0.1"=>array ( + "type"=>"BIND", + "username"=>"toto", + "password"=>"", + ))); + } } diff --git a/config.php b/config.php index 9201291..9ed0577 100644 --- a/config.php +++ b/config.php @@ -99,6 +99,22 @@ class config if (! isset ($conf[$param][$key])) $conf[$param][$key] = $val; } + foreach ($conf[$param] as $key=>$val) + { + if ($key === "not configured") + continue; + if (is_array ($val)) + { + if (! isset ($this->default[$param]["not configured"])) + throw new \Exception ("Invalid config provided : array provided ". + "without default values", 500); + foreach ($this->default[$param]["not configured"] as $k=>$v) + { + if (! array_key_exists ($k, $conf[$param][$key])) + $conf[$param][$key][$k] = $v; + } + } + } if (count ($conf[$param]) > 1 && isset ($conf[$param]["not configured"])) unset ($conf[$param]["not configured"]); return $conf[$param];