/** * Creates the AccessibleNewsList object. */ public function __construct() { parent::__construct(); // accessible news categories $accessibleCategoryIDs = NewsCategory::getAccessibleCategoryIDs(); if (!empty($accessibleCategoryIDs)) { $this->getConditionBuilder()->add('news.newsID IN (SELECT newsID FROM news' . WCF_N . '_news_to_category WHERE categoryID IN (?))', array($accessibleCategoryIDs)); } else { $this->getConditionBuilder()->add('1=0'); } // default conditions if (!WCF::getSession()->getPermission('mod.news.canReadDeactivatedNews')) { $this->getConditionBuilder()->add('news.isActive = 1'); } if (!WCF::getSession()->getPermission('mod.news.canReadDeletedNews')) { $this->getConditionBuilder()->add('news.isDeleted = 0'); } if (!WCF::getSession()->getPermission('mod.news.canReadFutureNews')) { if (WCF::getUser()->userID) { $this->getConditionBuilder()->add('(news.isPublished = 1 OR news.userID = ?)', array(WCF::getUser()->userID)); } else { $this->getConditionBuilder()->add('news.isPublished = 1'); } } // apply language filter if (LanguageFactory::getInstance()->multilingualismEnabled() && count(WCF::getUser()->getLanguageIDs())) { $this->getConditionBuilder()->add('(news.languageID IN (?) OR news.languageID IS NULL)', array(WCF::getUser()->getLanguageIDs())); } }
/** * Loads the news entries. */ protected function loadNews() { $this->news = array(); if (empty($this->newsIDs)) { return; } $this->newsIDs = array_unique($this->newsIDs); $categoryIDs = NewsCategory::getAccessibleCategoryIDs(); if (empty($categoryIDs)) { return; } $newsList = new NewsList(); $newsList->getConditionBuilder()->add('news.newsID IN (?)', array($this->newsIDs)); $newsList->getConditionBuilder()->add('news.newsID IN (SELECT newsID FROM news' . WCF_N . '_news_to_category WHERE categoryID IN (?))', array($categoryIDs)); // default conditions if (!WCF::getSession()->getPermission('mod.news.canReadDeactivatedNews')) { $newsList->getConditionBuilder()->add('news.isActive = 1'); } if (!WCF::getSession()->getPermission('mod.news.canReadDeletedNews')) { $newsList->getConditionBuilder()->add('news.isDeleted = 0'); } if (!WCF::getSession()->getPermission('mod.news.canReadFutureNews')) { if (WCF::getUser()->userID) { $newsList->getConditionBuilder()->add('(news.isPublished = 1 OR news.userID = ?)', array(WCF::getUser()->userID)); } else { $newsList->getConditionBuilder()->add('news.isPublished = 1'); } } $newsList->readObjects(); $this->news = $newsList->getObjects(); }
/** * Creates a new DeletedEntryList object. */ public function __construct() { parent::__construct(); // accessible news categories $accessibleCategoryIDs = NewsCategory::getAccessibleCategoryIDs(); if (!empty($accessibleCategoryIDs)) { $this->getConditionBuilder()->add('news.newsID IN (SELECT newsID FROM news' . WCF_N . '_news_to_category WHERE categoryID IN (?))', array($accessibleCategoryIDs)); } else { $this->getConditionBuilder()->add('1=0'); } // load only deleted news $this->getConditionBuilder()->add('news.isDeleted = ?', array(1)); }
/** * Creates a new TaggedNewsList object. * * @param \wcf\data\tag\Tag $tag */ public function __construct(Tag $tag) { ViewableNewsList::__construct(); $this->getConditionBuilder()->add('tag_to_object.objectTypeID = ? AND tag_to_object.languageID = ? AND tag_to_object.tagID = ?', array(TagEngine::getInstance()->getObjectTypeID('de.voolia.news.entry'), $tag->languageID, $tag->tagID)); $this->getConditionBuilder()->add('news.newsID = tag_to_object.objectID'); // accessible news categories $accessibleCategoryIDs = NewsCategory::getAccessibleCategoryIDs(); if (!empty($accessibleCategoryIDs)) { $this->getConditionBuilder()->add('news.newsID IN (SELECT newsID FROM news' . WCF_N . '_news_to_category WHERE categoryID IN (?))', array(NewsCategory::getAccessibleCategoryIDs())); } else { $this->getConditionBuilder()->add('1=0'); } }
/** * @see \wcf\page\IPage::readParameters() */ public function readParameters() { parent::readParameters(); if (empty($this->objectIDs)) { $this->objectIDs = NewsCategory::getAccessibleCategoryIDs(); } else { foreach ($this->objectIDs as $objectID) { // get category $category = NewsCategory::getCategory($objectID); // check permissions and category if (!$category->isAccessible()) { throw new PermissionDeniedException(); } if ($category === null) { throw new IllegalLinkException(); } } } }
/** * @see \wcf\system\search\ISearchableObjectType::getConditions() */ public function getConditions(IForm $form = null) { $conditionBuilder = new PreparedStatementConditionBuilder(); // accessible news category ids $categoryIDs = NewsCategory::getAccessibleCategoryIDs(); if (empty($categoryIDs)) { throw new PermissionDeniedException(); } $conditionBuilder->add($this->getTableName() . '.newsID IN (SELECT newsID FROM news' . WCF_N . '_news_to_category WHERE categoryID IN (?))', array($categoryIDs)); // set default conditions for news $conditionBuilder->add($this->getTableName() . '.isActive = 1'); $conditionBuilder->add($this->getTableName() . '.isDeleted = 0'); if (WCF::getUser()->userID) { if (!WCF::getSession()->getPermission('mod.news.canReadFutureNews')) { $conditionBuilder->add($this->getTableName() . '.isPublished = 1 OR ' . $this->getTableName() . '.userID = ?', array(WCF::getUser()->userID)); } } else { $conditionBuilder->add($this->getTableName() . '.isPublished = 1'); } return $conditionBuilder; }
/** * @see wcf\system\menu\page\PageMenuItemProvider::getNotifications() */ public function getNotifications() { if ($this->notifications === null) { $this->notifications = 0; if (WCF::getUser()->userID) { // load the user storage data UserStorageHandler::getInstance()->loadStorage(array(WCF::getUser()->userID)); // get the news ids $data = UserStorageHandler::getInstance()->getStorage(array(WCF::getUser()->userID), 'newsUnreadEntries'); // cache does not exist or is outdated if ($data[WCF::getUser()->userID] === null) { $categoryIDs = NewsCategory::getAccessibleCategoryIDs(); if (!empty($categoryIDs)) { $conditionBuilder = new PreparedStatementConditionBuilder(); $conditionBuilder->add("news.newsID IN (SELECT newsID FROM news" . WCF_N . "_news_to_category WHERE categoryID IN (?))", array($categoryIDs)); $conditionBuilder->add("news.time > ?", array(VisitTracker::getInstance()->getVisitTime('de.voolia.news.entry'))); $conditionBuilder->add("news.isActive = 1 AND news.isDeleted = 0 AND news.isPublished = 1"); $conditionBuilder->add("tracked_visit.visitTime IS NULL"); // apply language filter if (LanguageFactory::getInstance()->multilingualismEnabled() && count(WCF::getUser()->getLanguageIDs())) { $conditionBuilder->add('(news.languageID IN (?) OR news.languageID IS NULL)', array(WCF::getUser()->getLanguageIDs())); } // count news $sql = "SELECT \t\tCOUNT(*) AS count\n\t\t\t\t\t\t\tFROM \t\tnews" . WCF_N . "_news news\n\t\t\t\t\t\t\tLEFT JOIN \twcf" . WCF_N . "_tracked_visit tracked_visit\n\t\t\t\t\t\t\tON \t\t(tracked_visit.objectTypeID = " . VisitTracker::getInstance()->getObjectTypeID('de.voolia.news.entry') . " AND tracked_visit.objectID = news.newsID AND tracked_visit.userID = " . WCF::getUser()->userID . ")\n\t\t\t\t\t\t\t" . $conditionBuilder; $statement = WCF::getDB()->prepareStatement($sql); $statement->execute($conditionBuilder->getParameters()); $row = $statement->fetchArray(); $this->notifications = $row['count']; } // update the user storage data UserStorageHandler::getInstance()->update(WCF::getUser()->userID, 'newsUnreadEntries', $this->notifications); } else { $this->notifications = $data[WCF::getUser()->userID]; } } } return $this->notifications; }
/** * @see \wcf\page\MultipleLinkPage::initObjectList() */ protected function initObjectList() { if ($this->categoryID) { $this->objectList = new NewsCategoryList(array($this->categoryID)); } else { if (NEWS_INDEX_CATEGORIES) { $categoryIDs = array_intersect(explode("\n", NEWS_INDEX_CATEGORIES), NewsCategory::getAccessibleCategoryIDs()); $this->objectList = new NewsCategoryList($categoryIDs); } else { parent::initObjectList(); if ($this->user) { $this->objectList->getConditionBuilder()->add('news.userID = ?', array($this->user->userID)); } } } // exclude archives news from overview. $this->objectList->getConditionBuilder()->add('news.isArchived = 0'); if (!empty($this->letter)) { if ($this->letter == '#') { $this->objectList->getConditionBuilder()->add("SUBSTRING(news.subject,1,1) IN ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')"); } else { $this->objectList->getConditionBuilder()->add("news.subject LIKE ?", array($this->letter . '%')); } } }