/** * @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; } }