From 8433c5d55500e87d4b64a6fc04e16efe94033c80 Mon Sep 17 00:00:00 2001 From: Manuel Raynaud Date: Tue, 26 Mar 2013 17:25:10 +0100 Subject: [PATCH] refactor propel configuration --- composer.json | 3 +- composer.lock | 49 +++++++++++- core/bootstrap.php | 7 +- .../Thelia/Config/DatabaseConfiguration.php | 69 ++++++++++++++++ core/lib/Thelia/Config/DefinePropel.php | 78 +++++++++++++++++++ core/lib/Thelia/Core/Thelia.php | 43 ++++++---- core/lib/Thelia/Tpex | 2 +- local/config/config_db.mysql.php | 16 ---- local/config/config_db.oracle.php | 16 ---- local/config/config_db.pgsql.php | 16 ---- local/config/config_db.sqlite.php | 15 ---- local/config/config_thelia.php | 18 ----- local/config/database.yml | 6 ++ 13 files changed, 237 insertions(+), 101 deletions(-) create mode 100644 core/lib/Thelia/Config/DatabaseConfiguration.php create mode 100644 core/lib/Thelia/Config/DefinePropel.php delete mode 100644 local/config/config_db.mysql.php delete mode 100644 local/config/config_db.oracle.php delete mode 100644 local/config/config_db.pgsql.php delete mode 100644 local/config/config_db.sqlite.php delete mode 100644 local/config/config_thelia.php create mode 100644 local/config/database.yml diff --git a/composer.json b/composer.json index bb242668b..7fd8f08d5 100644 --- a/composer.json +++ b/composer.json @@ -17,7 +17,8 @@ "symfony/dependency-injection" : "2.2.*", "symfony/event-dispatcher" : "2.2.*", "symfony/http-kernel" : "2.2.*", - "symfony/routing" : "2.2.*" + "symfony/routing" : "2.2.*", + "symfony/yaml" : "2.2.*" }, "minimum-stability": "stable", "config" : { diff --git a/composer.lock b/composer.lock index 4aba6d6c5..d171735aa 100644 --- a/composer.lock +++ b/composer.lock @@ -1,5 +1,5 @@ { - "hash": "b3f80466f5d4e8ce553b10dd65630a69", + "hash": "89f5db06d70dd16aa1ba0f4983c89335", "packages": [ { "name": "ircmaxell/password-compat", @@ -619,6 +619,53 @@ "description": "Symfony Routing Component", "homepage": "http://symfony.com", "time": "2013-02-11 11:24:47" + }, + { + "name": "symfony/yaml", + "version": "v2.2.0", + "target-dir": "Symfony/Component/Yaml", + "source": { + "type": "git", + "url": "https://github.com/symfony/Yaml.git", + "reference": "v2.2.0-RC3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/Yaml/zipball/v2.2.0-RC3", + "reference": "v2.2.0-RC3", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + } + }, + "autoload": { + "psr-0": { + "Symfony\\Component\\Yaml\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "http://symfony.com", + "time": "2013-01-27 16:49:19" } ], "packages-dev": [ diff --git a/core/bootstrap.php b/core/bootstrap.php index 8a8362a35..46ac5e9e4 100644 --- a/core/bootstrap.php +++ b/core/bootstrap.php @@ -13,8 +13,9 @@ $loader = require __DIR__ . "/vendor/autoload.php"; -if (file_exists(THELIA_ROOT . '/local/config/config_db.php')) { - require THELIA_ROOT . '/local/config/config_db.php'; -} else { +if (!file_exists(THELIA_ROOT . '/local/config/database.yml')) { define('THELIA_INSTALL_MODE',true); } +/*else { + define('THELIA_INSTALL_MODE',true); +}*/ diff --git a/core/lib/Thelia/Config/DatabaseConfiguration.php b/core/lib/Thelia/Config/DatabaseConfiguration.php new file mode 100644 index 000000000..753b19d46 --- /dev/null +++ b/core/lib/Thelia/Config/DatabaseConfiguration.php @@ -0,0 +1,69 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Config; + +use Symfony\Component\Config\Definition\ConfigurationInterface; +use Symfony\Component\Config\Definition\Builder\TreeBuilder; + +class DatabaseConfiguration implements ConfigurationInterface +{ + + /** + * Generates the configuration tree builder. + * + * @return \Symfony\Component\Config\Definition\Builder\TreeBuilder The tree builder + */ + public function getConfigTreeBuilder() + { + $treeBuilder = new TreeBuilder(); + $rootNode = $treeBuilder->root("database"); + + $rootNode + ->children() + ->arrayNode("connection") + ->children() + ->scalarNode("driver") + ->defaultValue("mysql") + ->validate() + ->ifNotInArray(array("mysql", "sqlite", "pgsql")) + ->thenInvalid("Invalid driver database %s") + ->end() + ->end() + ->scalarNode("user") + ->defaultValue("root") + ->end() + ->scalarNode("password") + ->defaultValue("") + ->end() + ->scalarNode("dsn") + ->cannotBeEmpty() + ->end() + ->end() + ->end() + ->end() + ; + + return $treeBuilder; + } +} \ No newline at end of file diff --git a/core/lib/Thelia/Config/DefinePropel.php b/core/lib/Thelia/Config/DefinePropel.php new file mode 100644 index 000000000..49a0fa7cb --- /dev/null +++ b/core/lib/Thelia/Config/DefinePropel.php @@ -0,0 +1,78 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace Thelia\Config; + +use Symfony\Component\Config\Definition\Processor; +use Symfony\Component\Config\Definition\ConfigurationInterface; + + +class DefinePropel { + + private $processorConfig; + + public function __construct(ConfigurationInterface $configuration, array $propelConf) + { + $processor = new Processor(); + $this->processorConfig = $processor->processConfiguration($configuration, $propelConf); + } + + public function getConfig() + { + $connection = $this->processorConfig["connection"]; + return $conf = array( + "datasources" => + array( + "thelia" => + array( + "adapter" => $connection["driver"], + "connection" => + array( + "dsn" => $connection["dsn"], + "user" => $connection["user"], + "password" => $connection["password"] + ) + ) + ) + ); + } + /* + * $conf = array ( + 'datasources' => + array ( + 'thelia' => + array ( + 'adapter' => THELIA_DB_ADAPTER, + 'connection' => + array ( + 'dsn' => THELIA_DB_DSN, + 'user' => THELIA_DB_USER, + 'password' => THELIA_DB_PASSWORD, + ), + ), + ), + 'generator_version' => '1.6.8', +); +return $conf; + */ +} \ No newline at end of file diff --git a/core/lib/Thelia/Core/Thelia.php b/core/lib/Thelia/Core/Thelia.php index a709e4937..c4c2d4c5e 100644 --- a/core/lib/Thelia/Core/Thelia.php +++ b/core/lib/Thelia/Core/Thelia.php @@ -34,10 +34,14 @@ namespace Thelia\Core; use Symfony\Component\HttpKernel\Kernel; use Symfony\Component\Config\Loader\LoaderInterface; +use Symfony\Component\Config\Definition\Processor; +use Symfony\Component\Yaml\Yaml; use Thelia\Core\Bundle; use Thelia\Log\Tlog; +use Thelia\Config\DatabaseConfiguration; +use Thelia\Config\DefinePropel; use Propel; use PropelConfiguration; @@ -47,27 +51,38 @@ class Thelia extends Kernel public function init() { - parent::init(); - + parent::init(); + if($this->debug) { + ini_set('display_errors', 1); + } $this->initPropel(); } protected function initPropel() { - if (file_exists(THELIA_ROOT . '/local/config/config_db.php') === false) { + if (file_exists(THELIA_ROOT . '/local/config/database.yml') === false) { return ; } - Propel::init(THELIA_CONF_DIR . "/config_thelia.php"); - - if ($this->isDebug()) { - Propel::setLogger(Tlog::getInstance()); - $config = Propel::getConfiguration(PropelConfiguration::TYPE_OBJECT); - $config->setParameter('debugpdo.logging.details.method.enabled', true); - $config->setParameter('debugpdo.logging.details.time.enabled', true); - $config->setParameter('debugpdo.logging.details.mem.enabled', true); - - $con = Propel::getConnection("thelia"); - $con->useDebug(true); + + if(! Propel::isInit()) { + + $definePropel = new DefinePropel(new DatabaseConfiguration(), + Yaml::parse(THELIA_ROOT . '/local/config/database.yml')); + + Propel::setConfiguration($definePropel->getConfig()); + + if ($this->isDebug()) { + Propel::setLogger(Tlog::getInstance()); + $config = Propel::getConfiguration(PropelConfiguration::TYPE_OBJECT); + $config->setParameter('debugpdo.logging.details.method.enabled', true); + $config->setParameter('debugpdo.logging.details.time.enabled', true); + $config->setParameter('debugpdo.logging.details.mem.enabled', true); + + $con = Propel::getConnection("thelia"); + $con->useDebug(true); + } + + Propel::initialize(); } } diff --git a/core/lib/Thelia/Tpex b/core/lib/Thelia/Tpex index 0a3c05356..ce3cc65f6 160000 --- a/core/lib/Thelia/Tpex +++ b/core/lib/Thelia/Tpex @@ -1 +1 @@ -Subproject commit 0a3c05356156204cef89554ef1811b914d300614 +Subproject commit ce3cc65f6ebf1a9a33c10f8683d3fbc7fe5733ac diff --git a/local/config/config_db.mysql.php b/local/config/config_db.mysql.php deleted file mode 100644 index e6ae36e8b..000000000 --- a/local/config/config_db.mysql.php +++ /dev/null @@ -1,16 +0,0 @@ - - array ( - 'thelia' => - array ( - 'adapter' => THELIA_DB_ADAPTER, - 'connection' => - array ( - 'dsn' => THELIA_DB_DSN, - 'user' => THELIA_DB_USER, - 'password' => THELIA_DB_PASSWORD, - ), - ), - ), - 'generator_version' => '1.6.8', -); -return $conf; \ No newline at end of file diff --git a/local/config/database.yml b/local/config/database.yml new file mode 100644 index 000000000..45dd422b7 --- /dev/null +++ b/local/config/database.yml @@ -0,0 +1,6 @@ +database: + connection: + driver: mysql + user: root + password: azerty + dsn: mysql:dbname=thelia;host:localhost