Exemple #1
0
 /**
  * Generates the filter SQL for a given entity and table alias.
  *
  * @param ClassMetadata $targetEntity Metadata of the target entity.
  * @param string $targetTableAlias The table alias of the joined/selected table.
  *
  * @return string The SQL query part to add to a query.
  */
 private function generateFilterConditionSQL(ClassMetadata $targetEntity, $targetTableAlias)
 {
     if (!$this->em->hasFilters()) {
         return '';
     }
     switch ($targetEntity->inheritanceType) {
         case ClassMetadata::INHERITANCE_TYPE_NONE:
             break;
         case ClassMetadata::INHERITANCE_TYPE_JOINED:
             // The classes in the inheritance will be added to the query one by one,
             // but only the root node is getting filtered
             if ($targetEntity->name !== $targetEntity->rootEntityName) {
                 return '';
             }
             break;
         case ClassMetadata::INHERITANCE_TYPE_SINGLE_TABLE:
             // With STI the table will only be queried once, make sure that the filters
             // are added to the root entity
             $targetEntity = $this->em->getClassMetadata($targetEntity->rootEntityName);
             break;
         default:
             //@todo: throw exception?
             return '';
             break;
     }
     $filterClauses = array();
     foreach ($this->em->getFilters()->getEnabledFilters() as $filter) {
         if ('' !== ($filterExpr = $filter->addFilterConstraint($targetEntity, $targetTableAlias))) {
             $filterClauses[] = '(' . $filterExpr . ')';
         }
     }
     return implode(' AND ', $filterClauses);
 }
 /**
  * Makes a block shared and creates a pointer block in it's place
  *
  * This method performs the change and persists/flushes to the database.
  *
  * @param integer $id
  * @param integer $rootVersion
  *
  * @return BlockPointer
  */
 public function makeBlockShared($id)
 {
     if ($this->em->getFilters()->isEnabled('draftversion')) {
         $this->em->getFilters()->disable('draftversion');
     }
     $block = $this->find($id);
     $version = $this->getNewVersion($block);
     // Duplicate some of the settings to the pointer
     $pointer = new PointerBlock();
     $pointer->setOwner($block->getOwner());
     $pointer->setParent($block->getParent());
     $pointer->setReference($block);
     $pointer->setRootVersion($version);
     // Detach and make shared
     $block->setShared(true);
     $block->setParent(null);
     $block->setOwner(null);
     $block->setPosition(0);
     $block->setSort(0);
     $block->setRootVersion($version);
     $this->killLoggableListener();
     $this->save($block)->save($pointer);
     return $pointer;
 }