Example #1
0
 public function getRepository(Config $config)
 {
     $connection = DriverManager::getConnection($ops = ['user' => $config['db_username'], 'password' => $config['db_password'], 'host' => $config['db_host'], 'driver' => $config['db_driver'], 'dbname' => $config['db_name'], 'path' => $config['db_path']]);
     $factory = new RepositoryFactoryDoctrineDBAL();
     $repository = $factory->getRepository(['jackalope.doctrine_dbal_connection' => $connection]);
     return $repository;
 }
Example #2
0
 private function loadPhpcrOdm()
 {
     $this['psi_content_type.storage.doctrine.phpcr_odm.property_encoder'] = function ($container) {
         return new PropertyEncoder('psict', 'https://github.com/psiphp/content-type');
     };
     $this['psi_content_type.storage.doctrine.phpcr_odm.field_mapper'] = function ($container) {
         return new FieldMapper($container['psi_content_type.storage.doctrine.phpcr_odm.property_encoder'], $container['psi_content_type.field_loader']);
     };
     $this['psi_content_type.storage.doctrine.phpcr_odm.collection_updater'] = function ($container) {
         return new CollectionIdentifierUpdater($container['psi_content_type.metadata.factory'], $container['psi_content_type.storage.doctrine.phpcr_odm.property_encoder']);
     };
     $this['doctrine_phpcr.document_manager'] = function ($container) {
         $registerNodeTypes = false;
         // automatically setup the schema if the db doesn't exist yet.
         if (!file_exists($container['config']['db_path'])) {
             if (!file_exists($dir = dirname($container['config']['db_path']))) {
                 mkdir($dir);
             }
             $connection = $container['dbal.connection'];
             $schema = new RepositorySchema();
             foreach ($schema->toSql($connection->getDatabasePlatform()) as $sql) {
                 $connection->exec($sql);
             }
             $registerNodeTypes = true;
         }
         // register the phpcr session
         $factory = new RepositoryFactoryDoctrineDBAL();
         $repository = $factory->getRepository(['jackalope.doctrine_dbal_connection' => $container['dbal.connection']]);
         $session = $repository->login(new SimpleCredentials(null, null), 'default');
         if ($registerNodeTypes) {
             $typeRegistrator = new NodeTypeRegistrator();
             $typeRegistrator->registerNodeTypes($session);
             $ctTypeRegistrator = new CtNodeTypeRegistrator($container['psi_content_type.storage.doctrine.phpcr_odm.property_encoder']);
             $ctTypeRegistrator->registerNodeTypes($session);
         }
         // annotation driver
         $annotationDriver = new AnnotationDriver($container['annotation_reader'], [__DIR__ . '/../../vendor/doctrine/phpcr-odm/lib/Doctrine/ODM/PHPCR/Document', __DIR__ . '/Example']);
         $xmlDriver = new XmlDriver([__DIR__ . '/mappings']);
         $annotationDriver = new AnnotationDriver($container['annotation_reader'], [__DIR__ . '/../../vendor/doctrine/phpcr-odm/lib/Doctrine/ODM/PHPCR/Document', __DIR__ . '/Example']);
         $chain = new MappingDriverChain();
         $chain->addDriver($annotationDriver, 'Psi\\Bridge\\ContentType\\Doctrine\\PhpcrOdm\\Tests\\Functional\\Example');
         $chain->addDriver($xmlDriver, 'Psi\\Component\\ContentType\\Tests\\Functional\\Example\\Model');
         $chain->addDriver($annotationDriver, 'Doctrine');
         $config = new Configuration();
         $config->setMetadataDriverImpl($chain);
         $manager = DocumentManager::create($session, $config);
         $manager->getEventManager()->addEventSubscriber(new MetadataSubscriber($container['psi_content_type.metadata.factory'], $container['psi_content_type.field_loader'], $container['psi_content_type.storage.doctrine.phpcr_odm.field_mapper']));
         $manager->getEventManager()->addEventSubscriber(new CollectionSubscriber($container['psi_content_type.metadata.factory'], $container['psi_content_type.storage.doctrine.phpcr_odm.property_encoder']));
         return $manager;
     };
 }
Example #3
0
 /**
  * Returns the file system provider
  *
  * @return \League\Flysystem\FilesystemInterface File system provider
  */
 protected function getProvider()
 {
     if (!isset($this->fs)) {
         $config = $this->getConfig();
         if (!isset($config['root'])) {
             throw new Exception(sprintf('Configuration option "%1$s" missing', 'root'));
         }
         $conn = DriverManager::getConnection($config);
         $factory = new RepositoryFactoryDoctrineDBAL();
         $repo = $factory->getRepository(array('jackalope.doctrine_dbal_connection' => $conn));
         $session = $repo->login(new \PHPCR\SimpleCredentials(null, null));
         $this->fs = new Filesystem(new PhpcrAdapter($session, $config['root']));
     }
     return $this->fs;
 }
    private function getSession()
    {
        $connection = DriverManager::getConnection(array('driver' => 'pdo_sqlite', 'path' => ':memory:'));
        $factory = new RepositoryFactoryDoctrineDBAL();
        $repository = $factory->getRepository(array('jackalope.doctrine_dbal_connection' => $connection));
        $schema = new RepositorySchema(array('disable_fks' => true), $connection);
        $schema->reset();
        $session = $repository->login(new \PHPCR\SimpleCredentials('', ''));
        $cnd = <<<CND
<phpcr='http://www.doctrine-project.org/projects/phpcr_odm'>
[phpcr:managed]
mixin
- phpcr:class (STRING)
- phpcr:classparents (STRING) multiple
CND;
        $session->getWorkspace()->getNodeTypeManager()->registerNodeTypesCnd($cnd, true);
        return $session;
    }
    private static function createJackalopeDoctrineDbal()
    {
        $connection = self::createDbalConnection();
        $factory = new RepositoryFactoryDoctrineDBAL();
        $repository = $factory->getRepository(['jackalope.doctrine_dbal_connection' => $connection]);
        $credentials = new \PHPCR\SimpleCredentials(null, null);
        $session = $repository->login($credentials, 'default');
        $nodeTypeManager = $session->getWorkspace()->getNodeTypeManager();
        if (!$nodeTypeManager->hasNodeType('mix:test')) {
            $nodeTypeManager->registerNodeTypesCnd(<<<EOT
[mix:test] > mix:referenceable mix
EOT
, true);
        }
        $namespaceRegistry = $session->getWorkspace()->getNamespaceRegistry();
        $namespaceRegistry->registerNamespace('lsys', 'http://example.com/lsys');
        $namespaceRegistry->registerNamespace('nsys', 'http://example.com/nsys');
        $namespaceRegistry->registerNamespace('lcon', 'http://example.com/lcon');
        $namespaceRegistry->registerNamespace('ncon', 'http://example.com/ncon');
        return $session;
    }