public function collectItems(CollectItemsEvent $event)
 {
     $item = $event->getParentItem();
     if ($item->getType() == 'page') {
         $table = \PageModel::getTable();
         $columns = array("{$table}.pid=?");
         if (!BE_USER_LOGGED_IN) {
             $time = time();
             $columns[] = "({$table}.start='' OR {$table}.start<{$time}) AND ({$table}.stop='' OR {$table}.stop>{$time}) AND {$table}.published=1";
         }
         $pages = \PageModel::findBy($columns, array($item->getExtra('id')), array('order' => 'sorting'));
         if ($pages) {
             $factory = $event->getFactory();
             foreach ($pages as $page) {
                 $factory->createItem('page', $page->id, $item);
             }
         }
     }
     if ($item->getType() == 'pages') {
         $ids = explode(',', $item->getName());
         $ids = array_filter($ids);
         $table = \PageModel::getTable();
         $columns = array('(' . implode(' OR ', array_fill(0, count($ids), "{$table}.id=?")) . ')');
         $sorting = "FIELD({$table}.id, " . implode(', ', array_fill(0, count($ids), "?")) . ")";
         if (!BE_USER_LOGGED_IN) {
             $time = time();
             $columns[] = "({$table}.start='' OR {$table}.start<{$time}) AND ({$table}.stop='' OR {$table}.stop>{$time}) AND {$table}.published=1";
         }
         $pages = \PageModel::findBy($columns, array_merge($ids, $ids), array('order' => $sorting));
         if ($pages) {
             $factory = $event->getFactory();
             foreach ($pages as $page) {
                 $factory->createItem('page', $page->id, $item);
             }
         }
     }
 }
 public function collectItems(CollectItemsEvent $event)
 {
     $item = $event->getParentItem();
     if ($item->getType() == 'page') {
         if (empty($this->columns)) {
             return;
         }
         $columnWildcards = array_fill(0, count($this->columns), '?');
         $columnWildcards = implode(',', $columnWildcards);
         $t = \ArticleModel::getTable();
         $arrColumns = array("{$t}.pid=?", "{$t}.inColumn IN ({$columnWildcards})");
         if (!BE_USER_LOGGED_IN) {
             $time = time();
             $arrColumns[] = "({$t}.start='' OR {$t}.start<{$time}) AND ({$t}.stop='' OR {$t}.stop>{$time}) AND {$t}.published=1";
         }
         $articles = \ArticleModel::findBy($arrColumns, array_merge(array($item->getName()), $this->columns), array('order' => 'sorting'));
         if ($articles) {
             $factory = $event->getFactory();
             foreach ($articles as $article) {
                 $factory->createItem('article', $article->id, $item);
             }
         }
     }
 }
 /**
  * Collect all metamodels items and create navigation items.
  * @param CollectItemsEvent $event
  */
 public function collectItems(CollectItemsEvent $event)
 {
     $item = $event->getParentItem();
     // match pointing point
     if ($item->getType() != $this->getParentType() || $item->getName() != $this->getParentName()) {
         return;
     }
     $collection = $this->fetchMetaModelsItems();
     $factory = $event->getFactory();
     foreach ($collection as $model) {
         $table = $model->getMetaModel()->getTableName();
         $name = sprintf('%s::%s::%s', $table, $model->get('id'), $this->providerId);
         static::$cache[$name] = $model;
         $factory->createItem('metamodels', $name, $item);
     }
 }
 public function collectItems(CollectItemsEvent $event)
 {
     $item = $event->getParentItem();
     if ($item->getType() == 'article') {
         $t = \ContentModel::getTable();
         $arrColumns = array("{$t}.pid=?", "({$t}.ptable='' OR {$t}.ptable='tl_article')", "{$t}.cssID!=''");
         if (!BE_USER_LOGGED_IN) {
             $time = time();
             $arrColumns[] = "({$t}.start='' OR {$t}.start<{$time}) AND ({$t}.stop='' OR {$t}.stop>{$time}) AND {$t}.invisible=''";
         }
         $contents = \ContentModel::findBy($arrColumns, array($item->getName()), array('order' => 'sorting'));
         if ($contents) {
             $factory = $event->getFactory();
             $reachedLevel = 7;
             foreach ($contents as $content) {
                 $headline = deserialize($content->headline, true);
                 $cssID = deserialize($content->cssID, true);
                 if (!empty($headline['value']) && !empty($headline['unit']) && !empty($cssID[0])) {
                     $elementLevel = (int) substr($headline['unit'], 1);
                     if ($elementLevel <= $reachedLevel) {
                         $factory->createItem('content', $content->id, $item);
                         $reachedLevel = $elementLevel;
                     }
                 }
             }
         }
     } else {
         if ($item->getType() == 'content') {
             $thisHeadline = deserialize($item->getExtra('headline'), true);
             if (!empty($thisHeadline['unit'])) {
                 $expectedLevel = intval(substr($thisHeadline['unit'], 1)) + 1;
                 $t = \ContentModel::getTable();
                 $arrColumns = array("{$t}.pid=?", "({$t}.ptable='' OR {$t}.ptable='tl_article')", "{$t}.cssID!=''", "{$t}.sorting > ?");
                 if (!BE_USER_LOGGED_IN) {
                     $time = time();
                     $arrColumns[] = "({$t}.start='' OR {$t}.start<{$time}) AND ({$t}.stop='' OR {$t}.stop>{$time}) AND {$t}.invisible=''";
                 }
                 $contents = \ContentModel::findBy($arrColumns, array($item->getExtra('pid'), $item->getExtra('sorting')), array('order' => 'sorting'));
                 if ($contents) {
                     $factory = $event->getFactory();
                     $reachedLevel = 7;
                     foreach ($contents as $content) {
                         $headline = deserialize($content->headline, true);
                         $cssID = deserialize($content->cssID, true);
                         if (!empty($headline['value']) && !empty($headline['unit']) && !empty($cssID[0])) {
                             $elementLevel = (int) substr($headline['unit'], 1);
                             // level is one down
                             if ($elementLevel >= $expectedLevel && $elementLevel <= $reachedLevel) {
                                 $factory->createItem('content', $content->id, $item);
                                 $reachedLevel = $elementLevel;
                             } else {
                                 if ($elementLevel < $expectedLevel) {
                                     break;
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
 }