protected function reallyGetTitleMtimes(ResourceLoaderContext $context) { wfProfileIn(__METHOD__); $dbr = $this->getDB(); if (!$dbr) { // We're dealing with a subclass that doesn't have a DB wfProfileOut(__METHOD__); return array(); } $mtimes = array(); $local = array(); $byWiki = array(); $pages = $this->getPages($context); foreach ($pages as $titleText => $options) { $title = $this->createTitle($titleText, $options); if ($title instanceof GlobalTitle) { $byWiki[$title->getCityId()][] = array($title, $titleText, $options); } else { $local[] = array($title, $titleText, $options); } } if (!empty($local)) { $batch = new LinkBatch(); foreach ($local as $page) { list($title, $titleText, $options) = $page; $batch->addObj($title); } if (!$batch->isEmpty()) { $res = $dbr->select('page', array('page_namespace', 'page_title', 'page_touched'), $batch->constructSet('page', $dbr), __METHOD__); foreach ($res as $row) { $title = Title::makeTitle($row->page_namespace, $row->page_title); $mtimes[$title->getPrefixedDBkey()] = wfTimestamp(TS_UNIX, $row->page_touched); } } } foreach ($byWiki as $cityId => $pages) { // $pages[0][0] has to be GlobalTitle $dbName = $pages[0][0]->getDatabaseName(); $dbr = wfGetDB(DB_SLAVE, array(), $dbName); $pagesData = array(); foreach ($pages as $page) { list($title, $titleText, $options) = $page; /** @var $title GlobalTitle */ $pagesData[$title->getNamespace()][$title->getDBkey()] = true; } $res = $dbr->select('page', array('page_namespace', 'page_title', 'page_touched'), $dbr->makeWhereFrom2d($pagesData, 'page_namespace', 'page_title'), __METHOD__); foreach ($res as $row) { $title = GlobalTitle::newFromTextCached($row->page_title, $row->page_namespace, $cityId); $mtimes[$dbName . '::' . $title->getPrefixedDBkey()] = wfTimestamp(TS_UNIX, $row->page_touched); } } wfProfileOut(__METHOD__); return $mtimes; }
/** * Get user info ( user name, avatar url, user page url ) on given wiki * if the user has avatar * @param integer $userId * @param integer $wikiId * @param integer $avatarSize * @param callable $checkUserCallback * @return array userInfo * */ public function getUserInfo($userId, $wikiId, $avatarSize, $checkUserCallback) { $userInfo = array(); $user = User::newFromId($userId); if ($user instanceof User && $checkUserCallback($user)) { $username = $user->getName(); $userInfo['avatarUrl'] = AvatarService::getAvatarUrl($user, $avatarSize); $userInfo['edits'] = 0; $userInfo['name'] = $username; /** @var $userProfileTitle GlobalTitle */ $userProfileTitle = GlobalTitle::newFromTextCached($username, NS_USER, $wikiId); $userInfo['userPageUrl'] = $userProfileTitle instanceof Title ? $userProfileTitle->getFullURL() : '#'; $userContributionsTitle = GlobalTitle::newFromTextCached('Contributions/' . $username, NS_SPECIAL, $wikiId); $userInfo['userContributionsUrl'] = $userContributionsTitle instanceof Title ? $userContributionsTitle->getFullURL() : '#'; $userInfo['userId'] = $userId; $userStatsService = new UserStatsService($userId); $stats = $userStatsService->getGlobalStats($wikiId); if (!empty($stats['date'])) { $date = getdate(strtotime($stats['date'])); } else { $date = getdate(strtotime('2005-06-01')); } $userInfo['lastRevision'] = $stats['lastRevision']; $userInfo['since'] = F::App()->wg->Lang->getMonthAbbreviation($date['mon']) . ' ' . $date['year']; } return $userInfo; }