コード例 #1
0
ファイル: GameHelper.php プロジェクト: sandeep1027/zurmo_
 /**
  * Called at the end of the page request.  Processes any new badges or badge grade changes for the current user.
  */
 public function resolveNewBadges()
 {
     if (!$this->enabled) {
         return;
     }
     $userBadgesByType = GameBadge::getAllByPersonIndexedByType(Yii::app()->user->userModel);
     $userPointsByType = GamePoint::getAllByPersonIndexedByType(Yii::app()->user->userModel);
     $userScoresByType = GameScore::getAllByPersonIndexedByType(Yii::app()->user->userModel);
     $badgeRulesClassNames = GameBadgeRules::getBadgeRulesData();
     foreach ($badgeRulesClassNames as $badgeRulesClassName) {
         $newBadge = false;
         $gradeChange = false;
         $badgeGrade = $badgeRulesClassName::badgeGradeUserShouldHaveByPointsAndScores($userPointsByType, $userScoresByType);
         if ($badgeGrade > 0) {
             if (isset($userBadgesByType[$badgeRulesClassName::getType()])) {
                 $gameBadge = $userBadgesByType[$badgeRulesClassName::getType()];
                 if ($badgeGrade > $gameBadge->grade) {
                     $gameBadge->grade = $badgeGrade;
                     $saved = $gameBadge->save();
                     if (!$saved) {
                         throw new NotSupportedException();
                     }
                     $gradeChange = true;
                 }
             } else {
                 $gameBadge = new GameBadge();
                 $gameBadge->type = $badgeRulesClassName::getType();
                 $gameBadge->person = Yii::app()->user->userModel;
                 $gameBadge->grade = 1;
                 $saved = $gameBadge->save();
                 if (!$saved) {
                     throw new NotSupportedException();
                 }
                 $newBadge = true;
             }
             if ($gradeChange || $newBadge) {
                 if ($gradeChange) {
                     $gradeChangeOrNewBadge = 'GradeChange';
                 } else {
                     $gradeChangeOrNewBadge = 'NewBadge';
                 }
                 GameBadge::processBonusPoints($gameBadge, Yii::app()->user->userModel, $gradeChangeOrNewBadge);
                 if ($this->modalNotificationsEnabled) {
                     $gameNotification = new GameNotification();
                     $gameNotification->user = Yii::app()->user->userModel;
                     if ($newBadge) {
                         $gameNotification->setNewBadgeByType($gameBadge->type);
                     } elseif ($gradeChange) {
                         $gameNotification->setBadgeGradeChangeByTypeAndNewGrade($gameBadge->type, $gameBadge->grade);
                     }
                     $saved = $gameNotification->save();
                     if (!$saved) {
                         throw new FailedToSaveModelException();
                     }
                 }
             }
         }
     }
 }
コード例 #2
0
 public function testScoreOnSaveModelForMissionMovingThroughStatusChanges()
 {
     $super = User::getByUsername('super');
     // asserting simpleUser score before taken/completed/accepted of mission
     $simpleUser = UserTestHelper::createBasicUser('simpleUser');
     $gamescore = GameScore::getAllByPersonIndexedByType($simpleUser);
     $this->assertEquals(0, count($gamescore));
     $scoreTypeMissionTaken = MissionGamificationRules::SCORE_TYPE_TAKE_MISSION;
     $gameScore = GameScore::resolveToGetByTypeAndPerson($scoreTypeMissionTaken, $simpleUser);
     $this->assertEquals(0, count($gamescore));
     $scoreTypeMissionComplete = MissionGamificationRules::SCORE_TYPE_COMPLETE_MISSION;
     $gameScore = GameScore::resolveToGetByTypeAndPerson($scoreTypeMissionComplete, $simpleUser);
     $this->assertEquals(0, count($gamescore));
     $scoreTypeMissionAccepted = MissionGamificationRules::SCORE_TYPE_ACCEPTED_MISSION;
     $gameScore = GameScore::resolveToGetByTypeAndPerson($scoreTypeMissionAccepted, $simpleUser);
     $this->assertEquals(0, count($gamescore));
     $missions = Mission::getAll();
     $this->assertEquals(0, count($missions));
     $mission = new Mission();
     $mission->owner = $super;
     $mission->takenByUser = $simpleUser;
     $mission->description = 'Test description';
     $mission->reward = 'Test reward';
     $mission->status = Mission::STATUS_AVAILABLE;
     $mission->save();
     //Confirm mission saved.
     $missions = Mission::getAll();
     $this->assertEquals(1, count($missions));
     $gamescore = GameScore::getAllByPersonIndexedByType($super);
     $this->assertEquals(1, count($gamescore));
     //Changing Status to Taken
     $mission = $missions[0];
     $mission->status = Mission::STATUS_TAKEN;
     $this->assertTrue($mission->save());
     $missions = Mission::getAll();
     $this->assertEquals(1, count($missions));
     $scoreTypeMissionTaken = MissionGamificationRules::SCORE_TYPE_TAKE_MISSION;
     $gameScore = GameScore::resolveToGetByTypeAndPerson($scoreTypeMissionTaken, $simpleUser);
     $this->assertEquals(1, count($gamescore));
     $gamescoreOfUser = GameScore::getAllByPersonIndexedByType($simpleUser);
     $this->assertEquals(1, count($gamescoreOfUser));
     //Changing Status to Completed
     $mission = $missions[0];
     $mission->status = Mission::STATUS_COMPLETED;
     $mission->save();
     $missions = Mission::getAll();
     $this->assertEquals(1, count($missions));
     $scoreTypeMissionComplete = MissionGamificationRules::SCORE_TYPE_COMPLETE_MISSION;
     $gameScore = GameScore::resolveToGetByTypeAndPerson($scoreTypeMissionComplete, $simpleUser);
     $this->assertEquals(1, count($gamescore));
     $gamescoreOfUser = GameScore::getAllByPersonIndexedByType($simpleUser);
     $this->assertEquals(2, count($gamescoreOfUser));
     //Changing Status to Accepted
     $mission = $missions[0];
     $mission->status = Mission::STATUS_ACCEPTED;
     $mission->save();
     $missions = Mission::getAll();
     $this->assertEquals(1, count($missions));
     $scoreTypeMissionAccepted = MissionGamificationRules::SCORE_TYPE_ACCEPTED_MISSION;
     $gameScore = GameScore::resolveToGetByTypeAndPerson($scoreTypeMissionAccepted, $simpleUser);
     $this->assertEquals(1, count($gamescore));
     $gamescoreOfUser = GameScore::getAllByPersonIndexedByType($simpleUser);
     $this->assertEquals(3, count($gamescoreOfUser));
 }
コード例 #3
0
 /**
  * @depends testResolveToGetByTypeAndPerson
  */
 public function testGetAllByPersonIndexedByType()
 {
     Yii::app()->user->userModel = User::getByUsername('steven');
     $gameScore = new GameScore();
     $gameScore->person = Yii::app()->user->userModel;
     $gameScore->type = 'SomeTypeX';
     $gameScore->value = 10;
     $this->assertTrue($gameScore->save());
     $gameScores = GameScore::getAllByPersonIndexedByType(Yii::app()->user->userModel);
     $this->assertEquals(2, count($gameScores));
     $this->assertTrue(isset($gameScores['SomeType']));
     $this->assertTrue(isset($gameScores['SomeTypeX']));
 }
コード例 #4
0
 /**
  * @depends testTriggerMassEditEvent
  */
 public function testTriggerImportEvent()
 {
     $super = User::getByUsername('super');
     Yii::app()->user->userModel = $super;
     $models = GameScore::getAllByPersonIndexedByType(Yii::app()->user->userModel);
     $this->assertEquals(2, count($models));
     Yii::app()->gameHelper->triggerImportEvent('Account');
     $models = GameScore::getAllByPersonIndexedByType(Yii::app()->user->userModel);
     $this->assertEquals(3, count($models));
     $this->assertEquals('ImportAccount', $models['ImportAccount']->type);
 }
コード例 #5
0
 /**
  * @depends testGetPointTypeAndValueDataByCategory
  */
 public function testScoreOnSaveModelIndirectly()
 {
     $super = User::getByUsername('super');
     Yii::app()->user->userModel = $super;
     $models = GameScore::getAllByPersonIndexedByType(Yii::app()->user->userModel);
     $this->assertEquals(3, count($models));
     $account = new Account();
     $account->owner = $super;
     $account->name = 'someName';
     $this->assertTrue($account->save());
     $models = GameScore::getAllByPersonIndexedByType(Yii::app()->user->userModel);
     $this->assertEquals(4, count($models));
     $this->assertEquals('CreateAccount', $models['CreateAccount']->type);
 }