diff --git a/lib/Alchemy/Phrasea/Kernel.php b/lib/Alchemy/Phrasea/Kernel.php new file mode 100644 index 0000000000..e1b8bc08ad --- /dev/null +++ b/lib/Alchemy/Phrasea/Kernel.php @@ -0,0 +1,103 @@ +bootstrap(); + + $this['EM'] = $this->share(function() + { + $doctrine = new Kernel\Service\Doctrine(); + return $doctrine->getEntityManager(); + }); + + /** + * Gatekeeper + */ + $this['gatekeeper'] = $this->share(function() + { + return new \gatekeeper(); + }); + + + /** + * Event Dispatcher + */ + $this['dispatcher'] = $this->share(function () + { + $dispatcher = new \Symfony\Component\EventDispatcher\EventDispatcher(); + }); + + /** + * Initialize Request + */ + $this['request'] = $this->share(function() + { + $app['request'] = \Symfony\Component\HttpFoundation\Request::createFromGlobals(); + }); + + + return; + } + + protected function phraseaAutoload($class_name) + { + if (file_exists(__DIR__ .'/../../../config/classes/' + . str_replace('_', '/', $class_name) . '.class.php')) + { + require_once __DIR__ .'/../../../config/classes/' + . str_replace('_', '/', $class_name) . '.class.php'; + } + elseif (file_exists(__DIR__ . '/../../classes/' + . str_replace('_', '/', $class_name) . '.class.php')) + { + require_once __DIR__ . '/../../classes/' + . str_replace('_', '/', $class_name) . '.class.php'; + } + + return; + } + + protected function bootstrap() + { + require_once __DIR__ . '/../../vendor/symfony/src/Symfony/Component/ClassLoader/UniversalClassLoader.php'; + + $loader = new \Symfony\Component\ClassLoader\UniversalClassLoader(); + + spl_autoload_register(array($this, 'phraseaAutoload')); + + $loader->registerNamespaces(array( + 'Alchemy' => __DIR__. '/../../', + )); + + $loader->register(); + + return; + } + +} diff --git a/lib/Alchemy/Phrasea/Kernel/Service/Doctrine.php b/lib/Alchemy/Phrasea/Kernel/Service/Doctrine.php new file mode 100644 index 0000000000..2c02ce4f3d --- /dev/null +++ b/lib/Alchemy/Phrasea/Kernel/Service/Doctrine.php @@ -0,0 +1,161 @@ +setMetadataCacheImpl(new \Doctrine\Common\Cache\ApcCache); + + $chainDriverImpl = new \Doctrine\ORM\Mapping\Driver\DriverChain(); + + $driverYaml = new \Doctrine\ORM\Mapping\Driver\YamlDriver( + array(__DIR__ . '/../../../../conf.d/Doctrine') + ); + + $chainDriverImpl->addDriver($driverYaml, 'Entities'); + + $chainDriverImpl->addDriver($driverYaml, 'Gedmo\Timestampable'); + + $config->setMetadataDriverImpl($chainDriverImpl); + + $config->setProxyDir(realpath(__DIR__ . '/../../../../Doctrine/Proxies')); + + $config->setProxyNamespace('Proxies'); + + require __DIR__ . '/../../../../../config/connexion.inc'; + + $connectionOptions = array( + 'dbname' => $dbname, + 'user' => $user, + 'password' => $password, + 'host' => $hostname, + 'driver' => 'pdo_mysql', + ); + + $evm = new \Doctrine\Common\EventManager(); + + $evm->addEventSubscriber(new \Gedmo\Timestampable\TimestampableListener()); + + $this->entityManager = \Doctrine\ORM\EntityManager::create($connectionOptions, $config, $evm); + + $this->addTypes(); + + return $this; + } + + public function getEntityManager() + { + return $this->entityManager; + } + + public function getVersion() + { + return \Doctrine\Common\Version::VERSION; + } + + protected static function loadClasses() + { + + $classLoader = new \Doctrine\Common\ClassLoader( + 'Doctrine\ORM' + , realpath(__DIR__ . '/../../../../vendor/doctrine2-orm/lib') + ); + $classLoader->register(); + + $classLoader = new \Doctrine\Common\ClassLoader( + 'Doctrine\DBAL' + , realpath(__DIR__ . '/../../../../vendor/doctrine2-orm/lib/vendor/doctrine-dbal/lib') + ); + $classLoader->register(); + + $classLoader = new \Doctrine\Common\ClassLoader( + 'Doctrine\Common' + , realpath(__DIR__ . '/../../../../vendor/doctrine2-orm/lib/vendor/doctrine-common/lib') + ); + $classLoader->register(); + + $classLoader = new \Doctrine\Common\ClassLoader( + 'Entities' + , realpath(__DIR__ . '/../../../../Doctrine') + ); + $classLoader->register(); + + $classLoader = new \Doctrine\Common\ClassLoader( + 'Proxies' + , realpath(__DIR__ . '/../../../../Doctrine') + ); + $classLoader->register(); + + $classLoader = new \Doctrine\Common\ClassLoader( + 'Symfony' + , realpath(__DIR__ . '/../../../../vendor/doctrine2-orm/lib/vendor') + ); + + $classLoader->register(); + + $classLoader = new \Doctrine\Common\ClassLoader( + 'Types' + , realpath(__DIR__ . '/../../../../Doctrine') + ); + + $classLoader->register(); + + $classLoader = new \Doctrine\Common\ClassLoader( + 'Gedmo' + , __DIR__ . "/../../../../vendor/doctrine2-gedmo/lib" + ); + $classLoader->register(); + + + return; + } + + protected function addTypes() + { + + $platform = $this->entityManager->getConnection()->getDatabasePlatform(); + + Type::addType('blob', 'Types\Blob'); + Type::addType('enum', 'Types\Enum'); + Type::addType('longblob', 'Types\LongBlob'); + Type::addType('varbinary', 'Types\VarBinary'); + + $platform->registerDoctrineTypeMapping('enum', 'enum'); + $platform->registerDoctrineTypeMapping('blob', 'blob'); + $platform->registerDoctrineTypeMapping('longblob', 'longblob'); + $platform->registerDoctrineTypeMapping('varbinary', 'varbinary'); + + return; + } + +} \ No newline at end of file