示例#1
0
 protected function resolveLevelChangeByType($levelType, GameLevel $currentGameLevel, $pointSumsIndexedByType)
 {
     assert('is_string($levelType) && $levelType != null');
     assert('is_array($pointSumsIndexedByType)');
     //If the user has not reached level one, the model has not been saved yet
     if ($currentGameLevel->id < 0) {
         $className = $levelType . 'GameLevelRules';
         $nextLevelPointValue = $className::getMinimumPointsForLevel(1);
         $nextLevelValue = 1;
     } else {
         $nextLevelPointValue = GameLevelUtil::getNextLevelPointValueByTypeAndCurrentLevel($levelType, $currentGameLevel);
         $nextLevelValue = GameLevelUtil::getNextLevelByTypeAndCurrentLevel($levelType, $currentGameLevel);
     }
     if ($nextLevelValue !== false && static::resolveSummationValueByLevelTypeAndPointSums($levelType, $pointSumsIndexedByType) > $nextLevelPointValue) {
         $currentGameLevel->value = $nextLevelValue;
         $saved = $currentGameLevel->save();
         if (!$saved) {
             throw new FailedToSaveModelException();
         }
         GameLevel::processBonusPointsOnLevelChange($currentGameLevel, Yii::app()->user->userModel);
         if ($levelType == GameLevel::TYPE_GENERAL && $this->modalNotificationsEnabled) {
             static::processLevelChangeGameNotification($nextLevelValue);
         }
     }
 }
 /**
  * @param User $user
  * @param $levelType
  * @return array
  */
 public static function getStatisticsDataForAGivenLevelType(User $user, $levelType)
 {
     assert('is_string($levelType) && $levelType != null');
     $rulesClassName = $levelType . 'GameLevelRules';
     $currentGameLevel = GameLevel::resolveByTypeAndPerson($levelType, $user);
     $currentPointsData = GamePoint::getSummationPointsDataByLevelTypeAndUser($user, $levelType);
     if ($currentPointsData != null) {
         $currentPoints = $currentPointsData['sum'];
     } else {
         $currentPoints = 0;
     }
     //If the user has not reached level one, the model has not been saved yet
     if ($currentGameLevel->id < 0) {
         $nextLevel = 1;
         $trueCurrentGameLevel = 0;
         $className = $levelType . 'GameLevelRules';
         $nextLevelPointValue = $className::getMinimumPointsForLevel(1);
         $currentLevelMinimumPointValue = 0;
     } else {
         $nextLevelPointValue = GameLevelUtil::getNextLevelPointValueByTypeAndCurrentLevel($levelType, $currentGameLevel);
         $nextLevel = GameLevelUtil::getNextLevelByTypeAndCurrentLevel($levelType, $currentGameLevel);
         $currentLevelMinimumPointValue = $rulesClassName::getMinimumPointsForLevel(intval($currentGameLevel->value));
         $trueCurrentGameLevel = $currentGameLevel->value;
     }
     if ($nextLevel !== false) {
         $pointsCollectedTowardsNextLevel = $currentPoints - $currentLevelMinimumPointValue;
         if ($pointsCollectedTowardsNextLevel == 0) {
             $nextLevelPercentageComplete = 0;
         } else {
             $nextLevelPercentageComplete = $pointsCollectedTowardsNextLevel / ($nextLevelPointValue - $currentLevelMinimumPointValue) * 100;
         }
     } else {
         $nextLevelPercentageComplete = null;
     }
     $rankingData = array('level' => (int) $trueCurrentGameLevel, 'points' => (int) $currentPoints, 'nextLevelPercentageComplete' => round($nextLevelPercentageComplete), 'levelTypeLabel' => $rulesClassName::getDisplayLabel());
     return $rankingData;
 }
 public function actionGameDashboard($id)
 {
     $user = User::getById(intval($id));
     UserAccessUtil::resolveAccessingASystemUser($user);
     $title = Zurmo::t('ZurmoModule', 'Dashboard');
     $badgeData = GameBadge::getAllByPersonIndexedByType($user);
     $generalLevelData = GameLevelUtil::getStatisticsDataForAGivenLevelType($user, GameLevel::TYPE_GENERAL);
     $rankingData = GamePointUtil::getUserRankingData($user);
     $statisticsData = GameLevelUtil::getUserStatisticsData($user);
     $collectionData = GameCollection::resolvePersonAndAvailableTypes($user, GameCollection::getAvailableTypes());
     $dashboardView = new UserGameDashboardView($this, $user, $generalLevelData, $badgeData, $rankingData, $statisticsData, $collectionData);
     $view = new AjaxPageView($dashboardView);
     echo $view->render();
 }
示例#4
0
 public function testGetUserStatisticsData()
 {
     $super = User::getByUsername('super');
     Yii::app()->user->userModel = $super;
     $data = GameLevelUtil::getUserStatisticsData($super);
     $this->assertEquals(6, count($data));
 }
示例#5
0
 public function actionDetails($id)
 {
     $user = User::getById(intval($id));
     UserAccessUtil::resolveAccessingASystemUser($user);
     $title = Zurmo::t('UsersModule', 'Profile');
     $breadcrumbLinks = array(strval($user) => array('default/details', 'id' => $id), $title);
     AuditEvent::logAuditEvent('ZurmoModule', ZurmoModule::AUDIT_EVENT_ITEM_VIEWED, array(strval($user), 'UsersModule'), $user);
     $params = array('controllerId' => $this->getId(), 'relationModuleId' => $this->getModule()->getId(), 'relationModel' => $user, 'rankingData' => GamePointUtil::getUserRankingData($user), 'statisticsData' => GameLevelUtil::getUserStatisticsData($user), 'badgeData' => GameBadge::getAllByPersonIndexedByType($user));
     $detailsAndRelationsView = new UserDetailsAndRelationsView($this->getId(), $this->getModule()->getId(), $params);
     $view = new UsersPageView($this->resolveZurmoDefaultOrAdminView($detailsAndRelationsView, $breadcrumbLinks, 'UserBreadCrumbView'));
     echo $view->render();
 }