/**
  * @see    \wcf\system\like\IViewableLikeProvider::prepare()
  */
 public function prepare(array $likes)
 {
     $entryIDs = array();
     foreach ($likes as $like) {
         $entryIDs[] = $like->objectID;
     }
     // fetch entries
     $entryList = new EntryList();
     $entryList->setObjectIDs($entryIDs);
     $entryList->readObjects();
     $entries = $entryList->getObjects();
     // set message
     foreach ($likes as $like) {
         if (isset($entries[$like->objectID])) {
             $entry = $entries[$like->objectID];
             // check permissions
             if (!$entry->canRead()) {
                 continue;
             }
             $like->setIsAccessible();
             // short output
             $text = WCF::getLanguage()->getDynamicVariable('wcf.like.title.de.incendium.cms.like.likeableNews', array('entry' => $entry, 'like' => $like));
             $like->setTitle($text);
             // output
             $like->setDescription($entry->getExcerpt());
         }
     }
 }
 /**
  * @see	\wcf\system\message\quote\AbstractMessageQuoteHandler::getMessages()
  */
 protected function getMessages(array $data)
 {
     // read entries
     $entryList = new EntryList();
     $entryList->getConditionBuilder()->add("news_entry.entryID IN (?)", array(array_keys($data)));
     $entryList->readObjects();
     $entries = $entryList->getObjects();
     $quotedMessages = $validEntryIDs = array();
     // create QuotedMessage objects
     foreach ($entries as $entry) {
         $validEntryIDs[] = $entry->entryID;
         $message = new QuotedMessage($entry);
         foreach (array_keys($data[$entry->entryID]) as $quoteID) {
             $message->addQuote($quoteID, MessageQuoteManager::getInstance()->getQuote($quoteID, false), MessageQuoteManager::getInstance()->getQuote($quoteID, true));
         }
         $quotedMessages[] = $message;
     }
     // check for orphaned quotes
     if (count($validEntryIDs) != count($data)) {
         $orphanedQuoteIDs = array();
         foreach ($data as $entryID => $quoteIDs) {
             if (!in_array($entryID, $validEntryIDs)) {
                 foreach (array_keys($quoteIDs) as $quoteID) {
                     $orphanedQuoteIDs[] = $quoteID;
                 }
             }
         }
         MessageQuoteManager::getInstance()->removeOrphanedQuotes($orphanedQuoteIDs);
     }
     return $quotedMessages;
 }
 /**
  * @see	\wcf\data\DatabaseObjectList::readObjects()
  */
 public function readObjects()
 {
     parent::readObjects();
     // get attachments
     if ($this->attachmentLoading) {
         foreach ($this->objects as $entry) {
             if ($entry->attachments) {
                 $this->attachmentObjectIDs[] = $entry->entryID;
             }
         }
         $this->readAttachments();
     }
     if ($this->loadDeleteNote) {
         $objectIDs = array();
         foreach ($this->objects as $object) {
             if ($object->isDeleted) {
                 $objectIDs[] = $object->entryID;
             }
         }
         // load deletion data
         if (!empty($objectIDs)) {
             $this->logList = new NewsEntryListModificationLogList();
             $this->logList->setEntryData($objectIDs, 'trash');
             $this->logList->readObjects();
             foreach ($this->logList as $logEntry) {
                 foreach ($this->objects as $object) {
                     if ($object->entryID == $logEntry->objectID) {
                         $object->setLogEntry($logEntry);
                     }
                 }
             }
         }
     }
 }
 /**
  * Loads the news entries.
  */
 protected function loadEntries()
 {
     $this->entry = array();
     if (empty($this->entryIDs)) {
         return;
     }
     $this->entryIDs = array_unique($this->entryIDs);
     $categoryIDs = NewsCategory::getAccessibleCategoryIDs();
     if (empty($categoryIDs)) {
         return;
     }
     $entryList = new EntryList();
     $entryList->getConditionBuilder()->add('news_entry.entryID IN (?)', array($this->entryIDs));
     $entryList->getConditionBuilder()->add('news_entry.entryID IN (SELECT entryID FROM cms' . WCF_N . '_news_entry_to_category WHERE categoryID IN (?))', array($categoryIDs));
     $entryList->getConditionBuilder()->add('news_entry.isDisabled = 0 AND news_entry.isDeleted = 0 AND news_entry.isPublished = 1');
     $entryList->readObjects();
     $this->entry = $entryList->getObjects();
 }
 /**
  * @see	wcf\system\cronjob\ICronjob::execute()
  */
 public function execute(Cronjob $cronjob)
 {
     parent::execute($cronjob);
     // get delayed news
     $entryList = new EntryList();
     $entryList->getConditionBuilder()->add('news_entry.isPublished = 0');
     $entryList->getConditionBuilder()->add('news_entry.publicationDate <= ?', array(TIME_NOW));
     $entryList->readObjects();
     if (count($entryList->getObjects())) {
         // publish news
         $action = new EntryAction($entryList->getObjects(), 'publish');
         $action->executeAction();
     }
     // get outdated news
     $entryList = new EntryList();
     $entryList->getConditionBuilder()->add('news_entry.isArchived = 0');
     $entryList->getConditionBuilder()->add('news_entry.time <= ?', array(TIME_NOW - CMS_NEWS_DAYS_TO_ARCHIVE * 86400));
     $entryList->readObjects();
     if (count($entryList->getObjects())) {
         // archivate news
         $action = new EntryAction($entryList->getObjects(), 'archive');
         $action->executeAction();
     }
     // get outdated news in archive
     if (CMS_NEWS_DAYS_TO_DELETE_ARCHIVE) {
         $entryList = new NewsList();
         $entryList->getConditionBuilder()->add('news_entry.isArchived = 1');
         $entryList->getConditionBuilder()->add('news_entry.time <= ?', array(TIME_NOW - CMS_NEWS_DAYS_TO_ARCHIVE * 86400 - CMS_NEWS_DAYS_TO_DELETE_ARCHIVE * 86400));
         $entryList->readObjects();
         if (count($entryList->getObjects())) {
             // delete news
             $action = new EntryAction($entryList->getObjects(), 'delete');
             $action->executeAction();
         }
     }
 }
 /**
  * @see	\wcf\system\moderation\queue\IModerationQueueHandler::populate()
  */
 public function populate(array $queues)
 {
     $objectIDs = array();
     foreach ($queues as $object) {
         $objectIDs[] = $object->objectID;
     }
     // fetch news entries
     $entryList = new EntryList();
     $entryList->setObjectIDs($objectIDs);
     $entryList->readObjects();
     $entry = $entryList->getObjects();
     foreach ($queues as $object) {
         if (isset($entry[$object->objectID])) {
             $object->setAffectedObject($entry[$object->objectID]);
         }
     }
 }
 /**
  * @see    \wcf\system\like\IViewableLikeProvider::prepare()
  */
 public function prepare(array $likes)
 {
     if (!WCF::getSession()->getPermission('user.news.canReadEntry')) {
         return;
     }
     $commentLikeObjectType = ObjectTypeCache::getInstance()->getObjectTypeByName('com.woltlab.wcf.like.likeableObject', 'com.woltlab.wcf.comment');
     $commentIDs = $responseIDs = array();
     foreach ($likes as $like) {
         if ($like->objectTypeID == $commentLikeObjectType->objectTypeID) {
             $commentIDs[] = $like->objectID;
         } else {
             $responseIDs[] = $like->objectID;
         }
     }
     // fetch response
     $userIDs = $responses = array();
     if (!empty($responseIDs)) {
         $responseList = new CommentResponseList();
         $responseList->getConditionBuilder()->add("comment_response.responseID IN (?)", array($responseIDs));
         $responseList->readObjects();
         $responses = $responseList->getObjects();
         foreach ($responses as $response) {
             $commentIDs[] = $response->commentID;
             if ($response->userID) {
                 $userIDs[] = $response->userID;
             }
         }
     }
     // fetch comments
     $commentList = new CommentList();
     $commentList->getConditionBuilder()->add("comment.commentID IN (?)", array($commentIDs));
     $commentList->readObjects();
     $comments = $commentList->getObjects();
     // fetch users
     $users = array();
     $entryIDs = array();
     foreach ($comments as $comment) {
         $entryIDs[] = $comment->objectID;
         if ($comment->userID) {
             $userIDs[] = $comment->userID;
         }
     }
     if (!empty($userIDs)) {
         $users = UserProfile::getUserProfiles(array_unique($userIDs));
     }
     $entries = array();
     if (!empty($entryIDs)) {
         $entryList = new EntryList();
         $entryList->setObjectIDs($entryIDs);
         $entryList->readObjects();
         $entries = $entryList->getObjects();
     }
     // set message
     foreach ($likes as $like) {
         if ($like->objectTypeID == $commentLikeObjectType->objectTypeID) {
             // comment like
             if (isset($comments[$like->objectID])) {
                 $comment = $comments[$like->objectID];
                 if (isset($entries[$comment->objectID]) && $entries[$comment->objectID]->canRead()) {
                     $like->setIsAccessible();
                     // short output
                     $text = WCF::getLanguage()->getDynamicVariable('wcf.like.title.de.incendium.cms.news.comment', array('commentAuthor' => $comment->userID ? $users[$comment->userID] : null, 'entry' => $entries[$comment->objectID], 'like' => $like));
                     $like->setTitle($text);
                     // output
                     $like->setDescription($comment->getExcerpt());
                 }
             }
         } else {
             // response like
             if (isset($responses[$like->objectID])) {
                 $response = $responses[$like->objectID];
                 $comment = $comments[$response->commentID];
                 if (isset($entries[$comment->objectID]) && $entries[$comment->objectID]->canRead()) {
                     $like->setIsAccessible();
                     // short output
                     $text = WCF::getLanguage()->getDynamicVariable('wcf.like.title.de.incendium.cms.news.comment.response', array('responseAuthor' => $comment->userID ? $users[$response->userID] : null, 'commentAuthor' => $comment->userID ? $users[$comment->userID] : null, 'entry' => $entries[$comment->objectID], 'like' => $like));
                     $like->setTitle($text);
                     // output
                     $like->setDescription($response->getExcerpt());
                 }
             }
         }
     }
 }