private function loadOwnerBadges() { global $wgCityId, $wgExternalSharedDB; global $wgEnableAchievementsStoreLocalData; wfProfileIn(__METHOD__); $where = array('user_id' => $this->mUserOwner->getId()); if (empty($wgEnableAchievementsStoreLocalData)) { $dbr = wfGetDB(DB_SLAVE, array(), $wgExternalSharedDB); $where['wiki_id'] = $wgCityId; } else { $dbr = wfGetDB(DB_SLAVE); } $res = $dbr->select('ach_user_badges', 'badge_type_id, badge_lap', $where, __METHOD__, array('ORDER BY' => 'date DESC, badge_lap DESC')); while ($row = $dbr->fetchObject($res)) { if (AchConfig::getInstance()->isInTrack($row->badge_type_id)) { // in track if (!isset($this->mOwnerBadgesExtended[$row->badge_type_id])) { $this->mOwnerBadgesExtended[$row->badge_type_id] = array(); } $this->mOwnerBadgesExtended[$row->badge_type_id][] = $row->badge_lap; } else { // not in track if (!isset($this->mOwnerBadgesExtended[$row->badge_type_id])) { $this->mOwnerBadgesExtended[$row->badge_type_id] = 0; } $this->mOwnerBadgesExtended[$row->badge_type_id]++; } $badge = new AchBadge($row->badge_type_id, $row->badge_lap); $to_get = ''; if (is_array($this->mViewerCounters)) { if (AchConfig::getInstance()->isInTrack($row->badge_type_id)) { // in track if (!isset($this->mViewerBadgesExtended[$row->badge_type_id]) || !in_array($row->badge_lap, $this->mViewerBadgesExtended[$row->badge_type_id])) { if (!isset($this->mViewerBadgesExtended[$row->badge_type_id])) { $eventsCounter = 0; } else { if ($row->badge_type_id == BADGE_LOVE) { $eventsCounter = $this->mViewerCounters[$row->badge_type_id][COUNTERS_COUNTER]; } else { if ($row->badge_type_id == BADGE_BLOGCOMMENT) { $eventsCounter = count($this->mViewerCounters[$row->badge_type_id]); } else { $eventsCounter = $this->mViewerCounters[$row->badge_type_id]; } } } $to_get = $badge->getToGet(AchConfig::getInstance()->getRequiredEvents($row->badge_type_id, $row->badge_lap) - $eventsCounter); } } else { // not in track if (!isset($this->mViewerBadgesExtended[$row->badge_type_id])) { $to_get = $badge->getToGet(); } } } $this->mOwnerBadgesSimple[] = array('badge' => $badge, 'to_get' => $to_get); } wfProfileOut(__METHOD__); }
public function getChallengesAnnotated() { wfProfileIn(__METHOD__); $achConfig = AchConfig::getInstance(); $notInTrackCommunityPlatinum = $achConfig->getNotInTrackCommunityPlatinum(); $inTrackStatic = $achConfig->getInTrackStatic(); $inTrackEditPlusCategory = $achConfig->getInTrackEditPlusCategory(); $ownerByType = $this->owner->getBadgesByType(); $ownerCounters = $this->owner->getCounters(); $challenges = array(); // PLATINUM BADGES foreach ($notInTrackCommunityPlatinum as $badge_type_id => $badge_config) { if ($badge_config['enabled']) { if (!isset($ownerByType[$badge_type_id])) { $challenges[$badge_type_id] = null; } } } // IN TRACK BADGES (only those for which user already has at least lap 0) foreach ($ownerByType as $badge_type_id => $typeData) { $badgeType = $achConfig->getBadgeType($badge_type_id); if ($badgeType == BADGE_TYPE_INTRACKEDITPLUSCATEGORY) { if ($achConfig->isEnabled($badge_type_id)) { $challenges[$badge_type_id] = $typeData['count']; } } else { if ($badgeType == BADGE_TYPE_INTRACKSTATIC) { if ($inTrackStatic[$badge_type_id]['infinite']) { $challenges[$badge_type_id] = $typeData['count']; } else { if ($typeData['count'] < count($inTrackStatic[$badge_type_id]['laps'])) { $challenges[$badge_type_id] = $typeData['count']; } } } } } $challengesOrder = array(BADGE_WELCOME, BADGE_INTRODUCTION, BADGE_EDIT, 0, BADGE_PICTURE, BADGE_SAYHI, BADGE_BLOGCOMMENT, BADGE_CATEGORY, BADGE_BLOGPOST, BADGE_LOVE); foreach ($challengesOrder as $badge_type_id) { if ($badge_type_id == 0) { foreach ($inTrackEditPlusCategory as $badge_type_id_2 => $badge_config) { if ($badge_config['enabled']) { if (!isset($ownerByType[$badge_type_id_2]) && !isset($challenges[$badge_type_id_2])) { $challenges[$badge_type_id_2] = 0; } } } } else { if (!isset($ownerByType[$badge_type_id]) && !isset($challenges[$badge_type_id])) { $challenges[$badge_type_id] = $achConfig->isInTrack($badge_type_id) ? 0 : null; } } } global $wgEnableAchievementsForSharing; $challengesAnnotated = array(); foreach ($challenges as $badge_type_id => $badge_lap) { $badge = new AchBadge($badge_type_id, $badge_lap); if ($badge_lap === null) { $toGet = $badge->getToGet(); } else { if (!isset($ownerCounters[$badge_type_id])) { $eventsCounter = 0; } else { if ($badge_type_id == BADGE_LOVE) { $eventsCounter = $ownerCounters[$badge_type_id][COUNTERS_COUNTER]; } else { if ($badge_type_id == BADGE_BLOGCOMMENT) { $eventsCounter = count($ownerCounters[$badge_type_id]); } else { $eventsCounter = $ownerCounters[$badge_type_id]; } } } $requiredEvents = $achConfig->getRequiredEvents($badge_type_id, $badge_lap); $toGet = $badge->getToGet($requiredEvents); if ($badge_type_id != BADGE_SHARING) { $toGet .= " ({$eventsCounter}/{$requiredEvents})"; } else { if (empty($wgEnableAchievementsForSharing)) { continue; } } } $challengesAnnotated[] = array('badge' => $badge, 'to_get' => $toGet); } wfProfileOut(__METHOD__); return $challengesAnnotated; }