示例#1
0
 /**
  * @brief Filtring message wall data and spliting it to parents and childs
  *
  * @param Title $title title object instance
  * @param array $res a referance to array returned from recent changes
  *
  * @return array | boolean returns false if ArticleComment class does not exist
  *
  * @author Andrzej 'nAndy' Łukaszewski
  */
 public function wikiActivityFilterMessageWall($title, &$res)
 {
     wfProfileIn(__METHOD__);
     $item = array();
     $item['type'] = 'new';
     $item['wall'] = true;
     $item['ns'] = $res['ns'];
     $item['timestamp'] = $res['timestamp'];
     $item['wall-comment'] = $res['rc_params']['intro'];
     $item['article-id'] = $title->getArticleID();
     $wmessage = new WallMessage($title);
     $parent = $wmessage->getTopParentObj();
     if (!in_array(true, array($wmessage->isAdminDelete(), $wmessage->isRemove()))) {
         $item['wall-title'] = $wmessage->getArticleTitle()->getPrefixedText();
         $owner = $wmessage->getWallOwner();
         $item['wall-owner'] = $owner->getName();
         $item['wall-msg'] = '';
         if (empty($parent)) {
             // parent
             $metaTitle = $wmessage->getMetaTitle();
             if (!empty($metaTitle)) {
                 $item['title'] = $metaTitle;
             } else {
                 $wmessage->load();
                 $metaTitle = $wmessage->getMetaTitle();
                 $item['title'] = empty($metaTitle) ? wfMessage('wall-no-title')->escaped() : $metaTitle;
             }
             $item['url'] = $wmessage->getMessagePageUrl();
             $res['title'] = 'message-wall-thread-#' . $title->getArticleID();
             $item['wall-msg'] = wfMessage('wall-wiki-activity-on', $item['wall-title'], $item['wall-owner'])->parse();
         } else {
             // child
             $parent->load();
             if (!in_array(true, array($parent->isRemove(), $parent->isAdminDelete()))) {
                 $title = wfMessage('wall-no-title')->escaped();
                 // in case metadata does not include title field
                 if (isset($parent->mMetadata['title'])) {
                     $title = $wmessage->getMetaTitle();
                 }
                 $this->mapParentData($item, $parent, $title);
                 $res['title'] = 'message-wall-thread-#' . $parent->getTitle()->getArticleID();
                 $item['wall-msg'] = wfMessage('wall-wiki-activity-on', $item['wall-title'], $item['wall-owner'])->parse();
             } else {
                 // message was removed or deleted
                 $item = array();
             }
         }
     } else {
         // message was removed or deleted
         $item = array();
     }
     wfRunHooks('AfterWallWikiActivityFilter', array(&$item, $wmessage));
     wfProfileOut(__METHOD__);
     return $item;
 }
 public function index()
 {
     JSMessages::enqueuePackage('Wall', JSMessages::EXTERNAL);
     $title = $this->getContext()->getTitle();
     $this->isThreadLevel = $this->request->getVal('threadLevelHistory', false);
     $path = array();
     if ($this->isThreadLevel) {
         $threadId = intval($title->getDBkey());
         $title = Title::newFromId($threadId);
     }
     $this->historyPreExecute();
     $page = $this->request->getVal('page', 1);
     $page = ($page = intval($page)) === 0 ? 1 : $page;
     $this->response->setVal('sortingOptions', $this->getSortingOptions());
     $this->response->setVal('sortingSelected', $this->getSortingSelectedText());
     $this->response->setVal('wallHistoryMsg', $this->getHistoryMessagesArray());
     $this->response->setVal('currentPage', $page);
     $this->response->setVal('isThreadLevelHistory', $this->isThreadLevel);
     if (!$title instanceof Title || $this->isThreadLevel && !in_array(MWNamespace::getSubject($title->getNamespace()), $this->wg->WallNS)) {
         // paranoia -- why the message is not in DB
         $this->response->setVal('wallmessageNotFound', true);
         return;
     }
     if ($this->isThreadLevel) {
         $wallMessage = new WallMessage($title);
         $wallMessage->load();
         $perPage = 50;
         $wallHistory = new WallHistory();
         $wallHistory->setPage($page, $perPage);
         $count = $wallHistory->getCount(null, $threadId);
         $sort = $this->getSortingSelected();
         $history = $wallHistory->get(null, $sort, $threadId);
         $this->response->setVal('wallHistory', $this->getFormatedHistoryData($history, $threadId));
         $path[] = array('title' => $wallMessage->getMetatitle(), 'url' => $wallMessage->getMessagePageUrl());
         $wallUrl = $wallMessage->getArticleTitle()->getFullUrl();
         $wallOwnerName = $wallMessage->getArticleTitle()->getText();
         $this->response->setVal('wallHistoryUrl', $wallMessage->getMessagePageUrl(true) . '?action=history&sort=' . $sort);
     } else {
         $perPage = 100;
         $wallHistory = new WallHistory();
         $wallHistory->setPage($page, $perPage);
         $sort = $this->getSortingSelected();
         if ($title->exists()) {
             $count = $wallHistory->getCount($title->getArticleId(), null, false);
             $history = $wallHistory->get($title->getArticleId(), $sort, null, false);
         } else {
             $count = 0;
             $history = array();
         }
         $wallUrl = $title->getFullUrl();
         $wallOwnerName = $title->getText();
         $this->response->setVal('wallHistory', $this->getFormatedHistoryData($history));
         $this->response->setVal('wallHistoryUrl', $title->getFullURL(array('action' => 'history', 'sort' => $sort)));
     }
     $path = array_merge(array(array('title' => wfMessage('wall-message-elseswall', array($wallOwnerName))->escaped(), 'url' => $wallUrl)), $path);
     $this->response->setVal('wallOwnerName', $wallOwnerName);
     if ($this->isThreadLevel) {
         $this->response->setVal('pageTitle', wfMessage('wall-thread-history-title')->escaped());
         wfRunHooks('WallHistoryThreadHeader', array($title, $wallMessage, &$path, &$this->response, &$this->request));
     } else {
         $this->response->setVal('pageTitle', wfMessage('wall-history-title')->escaped());
         wfRunHooks('WallHistoryHeader', array($title, &$path, &$this->response, &$this->request));
     }
     $this->response->setVal('path', $path);
     $this->response->setVal('totalItems', $count);
     $this->response->setVal('itemsPerPage', $perPage);
     $this->response->setVal('showPager', $count > $perPage);
 }
 private function setArticleTitleData(stdClass $data, WallMessage $wm)
 {
     $wallTitle = $wm->getArticleTitle();
     if (!empty($wallTitle) && $wallTitle->exists()) {
         $data->article_title_ns = $wallTitle->getNamespace();
         $data->article_title_text = $wallTitle->getText();
         $data->article_title_dbkey = $wallTitle->getDBkey();
         $data->article_title_id = $wallTitle->getArticleId();
         $data->parent_page_id = $data->article_title_id;
     } else {
         $data->article_title_ns = null;
         $data->article_title_text = null;
         $data->article_title_dbkey = null;
         $data->article_title_id = null;
         $data->parent_page_id = null;
     }
 }