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;
 }
Ejemplo n.º 2
0
 /**
  * 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;
 }