Exemple #1
0
 /**
  * Determine the current locale of a managed document.
  *
  * If the document is not translatable, null is returned.
  *
  * If the document is translatable and the locale is mapped onto a document
  * field, the value of that field is returned. Otherwise the UnitOfWork
  * information on locales for documents without a locale mapping is
  * consulted.
  *
  * If nothing matches (for example when this is a detached document), the
  * default locale of the LocaleChooserStrategy is returned.
  *
  * @param object        $document the managed document to get the locale for
  * @param ClassMetadata $metadata document metadata, optional
  *
  * @return string|null the current locale of $document or null if it is not translatable
  */
 public function getCurrentLocale($document, ClassMetadata $metadata = null)
 {
     if (null === $metadata) {
         $metadata = $this->dm->getClassMetadata(get_class($document));
     }
     if (!$this->isDocumentTranslatable($metadata)) {
         return null;
     }
     if ($metadata->localeMapping && (!$document instanceof Proxy || $document->__isInitialized())) {
         $locale = $metadata->reflFields[$metadata->localeMapping]->getValue($document);
         if ($locale) {
             return $locale;
         }
     }
     $oid = spl_object_hash($document);
     if (isset($this->documentLocales[$oid]['current'])) {
         return $this->documentLocales[$oid]['current'];
     }
     return $this->dm->getLocaleChooserStrategy()->getLocale();
 }
 /**
  * {@inheritDoc}
  */
 public function getQuery(QueryBuilder $builder)
 {
     $this->aliasWithTranslatedFields = array();
     $this->locale = $builder->getLocale();
     if (null === $this->locale && $this->dm->hasLocaleChooserStrategy()) {
         $this->locale = $this->dm->getLocaleChooserStrategy()->getLocale();
     }
     $from = $builder->getChildrenOfType(QBConstants::NT_FROM);
     if (!$from) {
         throw new RuntimeException('No From (source) node in query');
     }
     $dispatches = array(QBConstants::NT_FROM, QBConstants::NT_SELECT, QBConstants::NT_WHERE, QBConstants::NT_ORDER_BY);
     foreach ($dispatches as $dispatchType) {
         $this->dispatchMany($builder->getChildrenOfType($dispatchType));
     }
     if (count($this->sourceDocumentNodes) > 1 && null === $builder->getPrimaryAlias()) {
         throw new InvalidArgumentException('You must specify a primary alias when selecting from multiple document sources' . 'e.g. $qb->from(\'a\') ...');
     }
     // for each document source add phpcr:{class,classparents} restrictions
     foreach ($this->sourceDocumentNodes as $sourceNode) {
         $documentFqn = $this->aliasMetadata[$sourceNode->getAlias()]->getName();
         $odmClassConstraints = $this->qomf->orConstraint($this->qomf->comparison($this->qomf->propertyValue($sourceNode->getAlias(), 'phpcr:class'), QOMConstants::JCR_OPERATOR_EQUAL_TO, $this->qomf->literal($documentFqn)), $this->qomf->comparison($this->qomf->propertyValue($sourceNode->getAlias(), 'phpcr:classparents'), QOMConstants::JCR_OPERATOR_EQUAL_TO, $this->qomf->literal($documentFqn)));
         if ($this->constraint) {
             $this->constraint = $this->qomf->andConstraint($this->constraint, $odmClassConstraints);
         } else {
             $this->constraint = $odmClassConstraints;
         }
     }
     foreach (array_keys($this->aliasWithTranslatedFields) as $alias) {
         $this->translator[$alias]->alterQueryForTranslation($this->qomf, $this->from, $this->constraint, $alias, $this->locale);
     }
     $phpcrQuery = $this->qomf->createQuery($this->from, $this->constraint, $this->orderings, $this->columns);
     $query = new Query($phpcrQuery, $this->dm, $builder->getPrimaryAlias());
     if ($firstResult = $builder->getFirstResult()) {
         $query->setFirstResult($firstResult);
     }
     if ($maxResults = $builder->getMaxResults()) {
         $query->setMaxResults($maxResults);
     }
     return $query;
 }
 /**
  * {@inheritDoc}
  */
 public function getLocaleChooserStrategy()
 {
     return $this->wrapped->getLocaleChooserStrategy();
 }