Ejemplo n.º 1
0
 /**
  * Add discriminator values to class MetaData when a content class is loaded
  * Occur on classcontent.include events.
  *
  * @param Event $event
  */
 public static function onInclude(Event $event)
 {
     $dispatcher = $event->getDispatcher();
     if (null !== $dispatcher->getApplication()) {
         $em = $dispatcher->getApplication()->getEntityManager();
         $shortClassname = AbstractClassContent::getShortClassname($event->getTarget());
         $fullClassname = AbstractClassContent::getFullClassname($event->getTarget());
         foreach (class_parents($fullClassname) as $classname) {
             $em->getClassMetadata($classname)->addDiscriminatorMapClass($shortClassname, $fullClassname);
             if ('BackBee\\ClassContent\\AbstractClassContent' === $classname) {
                 break;
             }
         }
     }
 }
Ejemplo n.º 2
0
 /**
  * @expectedException \InvalidArgumentException
  */
 public function testGetFullClassnameWithUnknownClass()
 {
     AbstractClassContent::getFullClassname('FakeClassName');
 }
Ejemplo n.º 3
0
 /**
  * @param Page  $page
  * @param array $classnames
  *
  * @return AbstractContent
  */
 public function getLastByMainnode(Page $page, $classnames = array())
 {
     try {
         $q = $this->createQueryBuilder('c');
         foreach ($classnames as $classname) {
             $q->orWhere('c INSTANCE OF ' . AbstractClassContent::getFullClassname($classname));
         }
         $q->andWhere('c._mainnode = :node')->orderby('c._modified', 'desc')->setMaxResults(1)->setParameters(array('node' => $page));
         $entity = $q->getQuery()->getSingleResult();
     } catch (\Exception $e) {
         $entity = null;
     }
     return $entity;
 }
 /**
  * Delete a Class Content
  *
  * @param AbstractClassContent $content
  * @param bool                 $mainContent if it's a main content, delete recursively under contents
  *
  * @return
  */
 public function deleteContent(AbstractClassContent $content, $mainContent = true)
 {
     if (!$this->getEntityManager()->contains($content)) {
         // Ensure $content is managed
         $content = $this->getEntityManager()->getRepository(AbstractClassContent::getFullClassname($content))->find($content->getUid());
     }
     if (null === $content) {
         return;
     }
     $parents = $this->getParentContents($content);
     $media = $this->_em->getRepository('BackBee\\NestedNode\\Media')->findOneBy(['_content' => $content->getUid()]);
     if (1 >= count($parents) && null === $media || true === $mainContent) {
         foreach ($content->getData() as $element) {
             if ($element instanceof AbstractClassContent) {
                 $this->deleteContent($element, false);
             }
         }
         if ($content instanceof ContentSet) {
             $content->clear();
         }
         foreach ($parents as $parent) {
             if (true === $mainContent && !$parent instanceof ContentSet && !$this->_em->getUnitOfWork()->isScheduledForDelete($parent)) {
                 foreach ($parent->getData() as $key => $element) {
                     if ($element instanceof AbstractClassContent && $element === $content) {
                         $classname = get_class($element);
                         $newContent = new $classname();
                         $this->_em->persist($newContent);
                         $parent->{$key} = $newContent;
                     }
                 }
             } else {
                 $parent->unsetSubContent($content);
             }
         }
         $this->cleanUpContentHardDelete($content);
         $this->_em->remove($content->setMainNode(null));
     }
 }
Ejemplo n.º 5
0
 /**
  * Resolves $content value.
  *
  * @param  ContentSet $content
  * @param  array      $matches
  *
  * @return mixed
  */
 private function resolveContentSet(ContentSet $content, array $matches)
 {
     if ('ContentSet' === $matches[1]) {
         return $content->item($matches[3]);
     }
     $index = intval($matches[3]);
     $classname = AbstractClassContent::getFullClassname(str_replace('/', NAMESPACE_SEPARATOR, $matches[1]));
     foreach ($content as $subcontent) {
         if (get_class($subcontent) !== $classname) {
             continue;
         }
         if (0 === $index) {
             return $subcontent;
         }
         $index--;
     }
     return $content;
 }