Beispiel #1
0
function bootstrapAddTreeExtension($evm, $cachedAnnotationReader)
{
    $treeListener = new Gedmo\Tree\TreeListener();
    $treeListener->setAnnotationReader($cachedAnnotationReader);
    $evm->addEventSubscriber($treeListener);
    $evm->addEventSubscriber(new Doctrine\DBAL\Event\Listeners\MysqlSessionInit());
}
Beispiel #2
0
 public function onBootstrap(Event $e)
 {
     $application = $e->getApplication();
     $eventManager = $application->getEventManager();
     $eventManager->attach(MvcEvent::EVENT_DISPATCH, array($this, 'setApplicationSection'));
     $eventManager->attach(MvcEvent::EVENT_DISPATCH, array($this, 'setLayout'), 31);
     $eventManager->attach(MvcEvent::EVENT_DISPATCH_ERROR, array($this, 'setLayout'), 31);
     $app = $e->getParam('application');
     $sm = $app->getServiceManager();
     $evm = $sm->get('doctrine.eventmanager.orm_default');
     $config = $sm->get('Config');
     $tablePrefix = isset($config['doctrine']['connection']['orm_default']['params']['table_prefix']) ? $config['doctrine']['connection']['orm_default']['params']['table_prefix'] : FALSE;
     if ($tablePrefix) {
         $tablePrefix = new \Dxapp\Doctrine\Extension\TablePrefix($tablePrefix);
         $evm->addEventListener(\Doctrine\ORM\Events::loadClassMetadata, $tablePrefix);
     }
     $cache = $sm->get('doctrine.cache.memcache');
     $annotationReader = new \Doctrine\Common\Annotations\AnnotationReader();
     $cachedAnnotationReader = new \Doctrine\Common\Annotations\CachedReader($annotationReader, $cache);
     $em = $sm->get('doctrine.entitymanager.orm_default');
     \Doctrine\DBAL\Types\Type::overrideType('datetime', 'Dxapp\\Doctrine\\Types\\UTCDatetimeType');
     //		$em->getConnection()->getDatabasePlatform()->registerDoctrineTypeMapping('Datetime', 'datetime');
     $sluggableListener = new \Gedmo\Sluggable\SluggableListener();
     $sluggableListener->setAnnotationReader($cachedAnnotationReader);
     $evm->addEventSubscriber($sluggableListener);
     $treeListener = new \Gedmo\Tree\TreeListener();
     $treeListener->setAnnotationReader($cachedAnnotationReader);
     $evm->addEventSubscriber($treeListener);
     $timestampableListener = new \Gedmo\Timestampable\TimestampableListener();
     $timestampableListener->setAnnotationReader($cachedAnnotationReader);
     $evm->addEventSubscriber($timestampableListener);
     $translatableListener = new \Gedmo\Translatable\TranslatableListener();
     $translatableListener->setAnnotationReader($cachedAnnotationReader);
     $translatableListener->setTranslatableLocale('en');
     $translatableListener->setDefaultLocale('en');
     $evm->addEventSubscriber($translatableListener);
 }
Beispiel #3
0
// this can be based on production config.
// register metadata driver
$config->setMetadataDriverImpl($driverChain);
// use our allready initialized cache driver
$config->setMetadataCacheImpl($cache);
$config->setQueryCacheImpl($cache);
// Third, create event manager and hook prefered extension listeners
$evm = new Doctrine\Common\EventManager();
// gedmo extension listeners
// sluggable
$sluggableListener = new Gedmo\Sluggable\SluggableListener();
// you should set the used annotation reader to listener, to avoid creating new one for mapping drivers
$sluggableListener->setAnnotationReader($cachedAnnotationReader);
$evm->addEventSubscriber($sluggableListener);
// tree
$treeListener = new Gedmo\Tree\TreeListener();
$treeListener->setAnnotationReader($cachedAnnotationReader);
$evm->addEventSubscriber($treeListener);
// loggable, not used in example
//$loggableListener = new Gedmo\Loggable\LoggableListener;
//$loggableListener->setAnnotationReader($cachedAnnotationReader);
//$loggableListener->setUsername('admin');
//$evm->addEventSubscriber($loggableListener);
// timestampable
$timestampableListener = new Gedmo\Timestampable\TimestampableListener();
$timestampableListener->setAnnotationReader($cachedAnnotationReader);
$evm->addEventSubscriber($timestampableListener);
// blameable
$blameableListener = new \Gedmo\Blameable\BlameableListener();
$blameableListener->setAnnotationReader($cachedAnnotationReader);
$blameableListener->setUserValue('MyUsername');
Beispiel #4
0
    /**
     * Init doctrine method
     *
     * @return Shopware\Components\Model\ModelManager
     */
    public function initModels()
    {
       /** @var $config \Doctrine\ORM\Configuration */
        $config = $this->getResource('ModelConfig');

        $cacheResource = $this->getResource('Cache');

        // Check if native Doctrine ApcCache may be used
        if ($cacheResource->getBackend() instanceof Zend_Cache_Backend_Apc) {
            $cache = new Doctrine\Common\Cache\ApcCache();
        } else {
            $cache = new Shopware\Components\Model\Cache($cacheResource);
        }

        // register standard doctrine annotations
        Doctrine\Common\Annotations\AnnotationRegistry::registerFile(
            'Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php'
        );

        // register symfony validation annotions
        Doctrine\Common\Annotations\AnnotationRegistry::registerAutoloadNamespace(
            'Symfony\Component\Validator\Constraint'
        );

        // register gedmo annotions
        Doctrine\Common\Annotations\AnnotationRegistry::registerFile(
            'Gedmo/Mapping/Annotation/All.php'
        );

        $cachedAnnotationReader = new Doctrine\Common\Annotations\CachedReader(
            new Doctrine\Common\Annotations\AnnotationReader,
            $cache
        );

        $annotationDriver = new Doctrine\ORM\Mapping\Driver\AnnotationDriver(
            $cachedAnnotationReader, array(
            $this->Application()->Loader()->isReadable('Gedmo/Tree/Entity/MappedSuperclass'),
            $this->Application()->AppPath('Models')
        ));

        // create a driver chain for metadata reading
        $driverChain = new Doctrine\ORM\Mapping\Driver\DriverChain();

        // register annotation driver for our application
        $driverChain->addDriver($annotationDriver, 'Gedmo');
        $driverChain->addDriver($annotationDriver, 'Shopware\\Models\\');
        $driverChain->addDriver($annotationDriver, 'Shopware\\CustomModels\\');

        $this->registerResource('ModelAnnotations', $annotationDriver);

        $config->setMetadataDriverImpl($driverChain);

        // Create event Manager
        $eventManager = new \Doctrine\Common\EventManager();

        $treeListener = new Gedmo\Tree\TreeListener;
        $treeListener->setAnnotationReader($cachedAnnotationReader);
        $eventManager->addEventSubscriber($treeListener);

        // Create new shopware event subscriber to handle the entity lifecycle events.
        $liveCycleSubscriber = new \Shopware\Components\Model\EventSubscriber(
            $this->Application()->Events()
        );
        $eventManager->addEventSubscriber($liveCycleSubscriber);

        // now create the entity manager and use the connection
        // settings we defined in our application.ini
        $conn = \Doctrine\DBAL\DriverManager::getConnection(
            array('pdo' => $this->Application()->Db()->getConnection()),
            $config,
            $eventManager
        );

        $entityManager = Shopware\Components\Model\ModelManager::create($conn, $config, $eventManager);

        //if (!is_readable(rtrim($config->getProxyDir(), '/') . '/__CG__ShopwareModelsShopShop.php')) {
        //    $metadata     = $entityManager->getMetadataFactory()->getAllMetadata();
        //    $proxyFactory = $entityManager->getProxyFactory();
        //    $proxyFactory->generateProxyClasses($metadata);
        //}

        return $entityManager;
    }
Beispiel #5
0
 private static function newConnect()
 {
     $dir = __DIR__ . '/../../libs/Doctrine/';
     $vendorPath = realpath($dir);
     $ExtensionPath = realpath($dir . '/DoctrineExtensions');
     require_once $vendorPath . '/Doctrine/Common/ClassLoader.php';
     // autoload all vendors
     $loader = new Doctrine\Common\ClassLoader('Doctrine\\Common', $vendorPath);
     $loader->register();
     $loader = new Doctrine\Common\ClassLoader('Doctrine\\DBAL', $vendorPath);
     $loader->register();
     $loader = new Doctrine\Common\ClassLoader('Doctrine\\ORM', $vendorPath);
     $loader->register();
     // gedmo extensions
     $loader = new Doctrine\Common\ClassLoader('Gedmo', $ExtensionPath);
     $loader->register();
     // Pagefanta
     $classLoader = new Doctrine\Common\ClassLoader("Pagerfanta", $ExtensionPath);
     $classLoader->register();
     //MYSQL Functions
     $classLoader = new \Doctrine\Common\ClassLoader('DoctrineExtensions', realpath($dir));
     $classLoader->register();
     // autoloader for Entity namespace
     $loader = new Doctrine\Common\ClassLoader('Entities', $dir);
     $loader->register();
     // ensure standard doctrine annotations are registered
     Doctrine\Common\Annotations\AnnotationRegistry::registerFile($vendorPath . '/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php');
     // Second configure ORM
     // globally used cache driver
     $cache = new Doctrine\Common\Cache\ArrayCache();
     $reader = new \Doctrine\Common\Annotations\AnnotationReader();
     Doctrine\Common\Annotations\AnnotationRegistry::registerAutoloadNamespace('Gedmo\\Mapping\\Annotation', $ExtensionPath);
     $driverChain = new \Doctrine\ORM\Mapping\Driver\DriverChain();
     $annotationDriver = new Doctrine\ORM\Mapping\Driver\AnnotationDriver($reader, array($dir . 'Entities', $ExtensionPath . '/Gedmo/Tree/Entity'));
     // drivers
     $driverChain->addDriver($annotationDriver, 'Gedmo\\Tree\\Entity');
     $driverChain->addDriver($annotationDriver, 'Entities');
     // general ORM configuration
     $config = new Doctrine\ORM\Configuration();
     //$config->setProxyDir(sys_get_temp_dir());
     $config->setProxyDir($dir . '/Proxies');
     $config->setProxyNamespace('Proxy');
     $config->setAutoGenerateProxyClasses(true);
     // this can be based on production config. FALSE
     // register metadata driver
     $config->setMetadataDriverImpl($driverChain);
     // use our allready initialized cache driver
     $config->setMetadataCacheImpl($cache);
     $config->setQueryCacheImpl($cache);
     // Third, create event manager and hook prefered extension listeners
     $evm = new Doctrine\Common\EventManager();
     // gedmo extension listeners
     // tree
     $treeListener = new Gedmo\Tree\TreeListener();
     $treeListener->setAnnotationReader($reader);
     $evm->addEventSubscriber($treeListener);
     // timestampable
     $timestampableListener = new Gedmo\Timestampable\TimestampableListener();
     $timestampableListener->setAnnotationReader($reader);
     $evm->addEventSubscriber($timestampableListener);
     // mysql set names UTF-8 if required
     $evm->addEventSubscriber(new Doctrine\DBAL\Event\Listeners\MysqlSessionInit());
     // Finally, create entity manager
     $connection = array('dbname' => DB_DATABASE, 'user' => DB_USER, 'password' => DB_PASSWORD, 'host' => DB_HOST, 'driver' => 'pdo_mysql');
     $config->addCustomDatetimeFunction('YEAR', 'DoctrineExtensions\\Query\\Mysql\\Year');
     $config->addCustomDatetimeFunction('MONTH', 'DoctrineExtensions\\Query\\Mysql\\Month');
     $config->addCustomDatetimeFunction('DAY', 'DoctrineExtensions\\Query\\Mysql\\Day');
     $config->addCustomDatetimeFunction('HOUR', 'DoctrineExtensions\\Query\\Mysql\\Hour');
     $config->addCustomDatetimeFunction('DATE', 'DoctrineExtensions\\Query\\Mysql\\Date');
     $config->addCustomDatetimeFunction('DATEDIFF', 'DoctrineExtensions\\Query\\MySql\\DateDiff');
     try {
         $em = Doctrine\ORM\EntityManager::create($connection, $config, $evm);
     } catch (Exception $e) {
     }
     self::$EntityManager = $em;
 }
Beispiel #6
0
 /**
  * Bootstrap the app
  * @return void 
  */
 public static function bootstrap()
 {
     if (!class_exists("Doctrine\\Common\\Version", false)) {
         self::registerNamespaces();
     }
     $isDevMode = true;
     $entityPath = ROOT_PATH . '/entities';
     $proxyPath = ROOT_PATH . '/proxies';
     $reader = new \Doctrine\Common\Annotations\AnnotationReader();
     $annotationDriver = new \Doctrine\ORM\Mapping\Driver\AnnotationDriver($reader);
     \Doctrine\Common\Annotations\AnnotationRegistry::registerAutoloadNamespace('Gedmo\\Mapping\\Annotation', ROOT_PATH . '/vendor/doctrine-extension/lib');
     $driverChain = new \Doctrine\ORM\Mapping\Driver\DriverChain();
     $annotationDriver = new \Doctrine\ORM\Mapping\Driver\AnnotationDriver($reader, array(ROOT_PATH . '/entities/Entity', ROOT_PATH . '/vendor/doctrine-extension/lib/Gedmo/Translatable/Entity', ROOT_PATH . '/vendor/doctrine-extension/lib/Gedmo/Tree/Entity'));
     //Drivers
     $driverChain->addDriver($annotationDriver, 'Gedmo\\Translatable\\Entity');
     $driverChain->addDriver($annotationDriver, 'Gedmo\\Tree\\Entity');
     $driverChain->addDriver($annotationDriver, 'Entity');
     //Tell doctrine that we use annotations for entities
     $config = \Doctrine\ORM\Tools\Setup::createAnnotationMetadataConfiguration(array($entityPath), $isDevMode, $proxyPath);
     $config->setMetadataDriverImpl($driverChain);
     //Attach listener to the event system event manager
     $eventManager = new \Doctrine\Common\EventManager();
     $treeListener = new \Gedmo\Tree\TreeListener();
     $treeListener->setAnnotationReader($reader);
     $eventManager->addEventSubscriber($treeListener);
     $sluggableListener = new \Gedmo\Sluggable\SluggableListener();
     $sluggableListener->setAnnotationReader($reader);
     $eventManager->addEventSubscriber($sluggableListener);
     $translationListener = new \Gedmo\Translatable\TranslationListener();
     $translationListener->setAnnotationReader($reader);
     $translationListener->setTranslatableLocale('en_us');
     $eventManager->addEventSubscriber($translationListener);
     $timestampListener = new \Gedmo\Timestampable\TimestampableListener();
     $timestampListener->setAnnotationReader($reader);
     $eventManager->addEventSubscriber($timestampListener);
     $sortableListener = new \Gedmo\Sortable\SortableListener();
     $sortableListener->setAnnotationReader($reader);
     $eventManager->addEventSubscriber($sortableListener);
     //Obtaining the entity manager
     $entityManager = \Doctrine\ORM\EntityManager::create(self::getConnectionOptions(), $config, $eventManager);
     //Register app type
     \Doctrine\DBAL\Types\Type::addType('point', 'Statme\\ORM\\PointType');
     \Doctrine\DBAL\Types\Type::addType('enumgender', 'Statme\\ORM\\Enum\\GenderType');
     \Doctrine\DBAL\Types\Type::addType('enumthreadstatus', 'Statme\\ORM\\Enum\\ThreadStatusType');
     \Doctrine\DBAL\Types\Type::addType('enumunittype', 'Statme\\ORM\\Enum\\UnitType');
     \Doctrine\DBAL\Types\Type::addType('enumprivacy', 'Statme\\ORM\\Enum\\PrivacyType');
     \Doctrine\DBAL\Types\Type::addType('enumsubscriptionstatus', 'Statme\\ORM\\Enum\\SubscriptionStatusType');
     //Register point type for schema tool
     $platform = $entityManager->getConnection()->getDatabasePlatform();
     $platform->registerDoctrineTypeMapping('point', 'point');
     $platform->registerDoctrineTypeMapping('enum', 'string');
     $platform->registerDoctrineTypeMapping('enumgender', 'enumgender');
     $platform->registerDoctrineTypeMapping('enumthreadstatus', 'enumthreadstatus');
     $platform->registerDoctrineTypeMapping('enumunittype', 'enumunittype');
     $platform->registerDoctrineTypeMapping('enumprivacy', 'enumprivacy');
     $platform->registerDoctrineTypeMapping('enumsubscriptionstatus', 'enumsubscriptionstatus');
     self::$entityManager = $entityManager;
     return;
 }
 /**
  * Gets the 'gedmo.listener.tree' service.
  *
  * This service is shared.
  * This method always returns the same instance of the service.
  *
  * @return \Gedmo\Tree\TreeListener A Gedmo\Tree\TreeListener instance.
  */
 protected function getGedmo_Listener_TreeService()
 {
     $this->services['gedmo.listener.tree'] = $instance = new \Gedmo\Tree\TreeListener();
     $instance->setAnnotationReader($this->get('annotation_reader'));
     return $instance;
 }