/** * @param object $document * @param ClassMetadata $metadata * @throws PHPCRException */ private function doRemoveAllTranslations($document, ClassMetadata $metadata) { if (!$this->isDocumentTranslatable($metadata)) { return; } $node = $this->session->getNode($this->getDocumentId($document)); $strategy = $this->dm->getTranslationStrategy($metadata->translator); $strategy->removeAllTranslations($document, $node, $metadata); }
public function testQueryBuilder() { $strategy = $this->dm->getTranslationStrategy('child'); $this->dm->setLocaleChooserStrategy(new LocaleChooser(array('en' => array('fr'), 'fr' => array('en')), 'en')); // First save some translations $data = array(); $data['topic'] = 'Some interesting subject'; $data['text'] = 'Lorem ipsum...'; $data['settings'] = array('is-active' => 'true', 'url' => 'great-article-in-english.html'); $node = $this->getTestNode(); $node->setProperty('author', 'John Doe'); $node->setProperty('phpcr:class', 'Doctrine\\Tests\\Models\\Translation\\ChildTranslationArticle'); $strategy->saveTranslation($data, $node, $this->metadata, 'en'); // Save translation in another language $data['topic'] = 'Un sujet intéressant'; $data['settings'] = array('is-active' => 'true', 'url' => 'super-article-en-francais.html'); $strategy->saveTranslation($data, $node, $this->metadata, 'fr'); $this->dm->flush(); $qb = $this->dm->createQueryBuilder(); $qb->from()->document('Doctrine\\Tests\\Models\\Translation\\ChildTranslationArticle', 'a'); $qb->where()->eq()->field('a.topic')->literal('Not Exist')->end(); $res = $qb->getQuery()->execute(); $this->assertCount(0, $res); $qb = $this->dm->createQueryBuilder(); $qb->from()->document('Doctrine\\Tests\\Models\\Translation\\ChildTranslationArticle', 'a'); $qb->where()->eq()->field('a.topic')->literal('Un sujet intéressant')->end(); $res = $qb->getQuery()->execute(); $this->assertCount(0, $res); $qb = $this->dm->createQueryBuilder(); $qb->setLocale(false); $qb->from()->document('Doctrine\\Tests\\Models\\Translation\\ChildTranslationArticle', 'a'); $qb->where()->eq()->field('a.topic')->literal('Un sujet intéressant')->end(); $res = $qb->getQuery()->execute(); $this->assertCount(0, $res); $qb = $this->dm->createQueryBuilder(); $qb->from()->document('Doctrine\\Tests\\Models\\Translation\\ChildTranslationArticle', 'a'); $qb->where()->eq()->field('a.topic')->literal('Some interesting subject')->end(); $res = $qb->getQuery()->execute(); $this->assertCount(1, $res); $qb = $this->dm->createQueryBuilder(); $qb->setLocale('fr'); $qb->from()->document('Doctrine\\Tests\\Models\\Translation\\ChildTranslationArticle', 'a'); $qb->where()->eq()->field('a.topic')->literal('Un sujet intéressant')->end(); $res = $qb->getQuery()->execute(); $this->assertCount(1, $res); }
protected function walkSourceDocument(SourceDocument $node) { $alias = $node->getAlias(); $documentFqn = $node->getDocumentFqn(); // make sure we add the phpcr:{class,classparents} constraints // From is dispatched first, so these will always be the primary // constraints. $this->sourceDocumentNodes[$alias] = $node; // cache the metadata for this document /** @var $meta ClassMetadata */ $meta = $this->mdf->getMetadataFor($documentFqn); if (null === $meta->getName()) { throw new \RuntimeException(sprintf('%s is not a mapped document', $documentFqn)); } $this->aliasMetadata[$alias] = $meta; if ($this->locale && $meta->translator) { $this->translator[$alias] = $this->dm->getTranslationStrategy($meta->translator); } $nodeType = $meta->getNodeType(); // get the PHPCR Alias $alias = $this->qomf->selector($alias, $nodeType); return $alias; }