Esempio n. 1
0
 public function onRun()
 {
     $instance = GradeModel::find($this->property('gradeInstance'));
     if (!is_null($this->property('experienceInstance'))) {
         $experienceInstance = ExperienceModel::find($this->property('experienceInstance'));
         $exComp = new ExperienceComponent();
         //set class variables
         $stDate = new DateTime($experienceInstance->start_date);
         $endDate = new DateTime($experienceInstance->end_date);
         $ptsPerSecond = $exComp->getPtsPerSecond($stDate, $endDate, $experienceInstance->total_points);
         $exComp->setPtsPerSecond($ptsPerSecond);
         $exComp->setStartDate($stDate);
         $exComp->setBonusPerSecond($experienceInstance->bonus_per_day / 24 / 60 / 60);
         $exComp->setBonusSeconds($experienceInstance->bonus_days * 24 * 60 * 60);
         $exComp->setPenaltyPerSecond($experienceInstance->penalty_per_day / 24 / 60 / 60);
         $exComp->setPenaltySeconds($experienceInstance->penalty_days * 24 * 60 * 60);
         $points = $exComp->getUserPoints();
         $milestonesDesc = Milestone::where('experience_id', '=', $experienceInstance->id)->orderBy('points', 'desc')->get();
         $mileClearance = $exComp->getMilestoneClearanceInfo($milestonesDesc);
         $bonusPenalties = 0;
         foreach ($mileClearance as $item) {
             if ($item->cleared) {
                 $bonusPenalties = $bonusPenalties + $item->bonusPenalty;
             }
         }
         $this->page['XP'] = round($points, 2);
         $this->page['gradeBonus'] = round($bonusPenalties, 2);
     } else {
         $this->page['XP'] = 0;
         $this->page['gradeBonus'] = 0;
     }
     //todo: get the bonus, etc from blade, not from experience
     $this->page['gradeSize'] = $instance->Size;
     $this->getGradeData();
     $this->addJs("/plugins/delphinium/blossom/assets/javascript/grade.js");
     $this->addCss("/plugins/delphinium/blossom/assets/css/animate.css");
     $this->addCss("/plugins/delphinium/blossom/assets/css/grade.css");
     $this->addCss("/plugins/delphinium/blossom/assets/css/main.css");
 }
Esempio n. 2
0
 private function getRedLineData()
 {
     if (!is_null($this->property('experienceInstance'))) {
         $instance = ExperienceModel::find($this->property('experienceInstance'));
         $milestones = $instance->milestones;
         $this->page['numMilestones'] = count($milestones);
         $utcTimeZone = new DateTimeZone('UTC');
         $stDate = $instance->start_date->setTimezone($utcTimeZone);
         $endDate = $instance->end_date->setTimezone($utcTimeZone);
         $expComponent = new ExperienceComponent();
         $ptsPerSecond = $expComponent->getPtsPerSecond($stDate, $endDate, $instance->total_points);
         $milestoneData = array();
         foreach ($milestones as $milestone) {
             $secsTranspired = ceil($milestone->points / $ptsPerSecond);
             $intervalSeconds = "PT" . $secsTranspired . "S";
             $sDate = clone $stDate;
             $dueDate = $sDate->add(new \DateInterval($intervalSeconds));
             $mile = new \stdClass();
             $mile->points = $milestone->points;
             $mile->date = $dueDate->format('c');
             $milestoneData[] = $mile;
         }
         //fill in the rest of the days
         $newArr = $this->fillInMissingDays($stDate, $milestoneData);
         //merge arrays and order by date
         $final = array_merge($newArr, $milestoneData);
         usort($final, function ($a, $b) {
             if ($a->date == $b->date) {
                 return 0;
             }
             return $a->date > $b->date ? 1 : -1;
         });
         return $final;
     } else {
         return array();
     }
 }
Esempio n. 3
0
 public function matchSubmissionsAndUsers($users, $scores)
 {
     $allStudents = array();
     $standards = $this->roots->getGradingStandards();
     $grading_scheme = $standards[0]->grading_scheme;
     //get experience total points
     $experienceInstance = ExperienceModel::find($this->property('experienceInstance'));
     $maxExperiencePts = $experienceInstance->total_points;
     $utcTimeZone = new DateTimeZone('UTC');
     $stDate = $experienceInstance->start_date->setTimezone($utcTimeZone);
     $endDate = $experienceInstance->end_date->setTimezone($utcTimeZone);
     $expComponent = new ExperienceComponent();
     $ptsPerSecond = $expComponent->getPtsPerSecond($stDate, $endDate, $experienceInstance->total_points);
     $bonusPerSecond = $experienceInstance->bonus_per_day / 24 / 60 / 60;
     $bonusSeconds = $experienceInstance->bonus_days * 24 * 60 * 60;
     $penaltyPerSecond = $experienceInstance->penalty_per_day / 24 / 60 / 60;
     $penaltySeconds = $experienceInstance->penalty_days * 24 * 60 * 60;
     foreach ($users as $user) {
         $submissionsArr = $this->findScoreByUserId($user->user_id, $scores);
         //this will weed out any TA's and other people in the course who aren't necessarily students
         try {
             $userSubmissions = $expComponent->getSubmissions($user->user_id);
             $bonusPenalties = $this->getBonusPenaltiesNew($this->property('experienceInstance'), $userSubmissions, $ptsPerSecond, $stDate, $bonusPerSecond, $bonusSeconds, $penaltyPerSecond, $penaltySeconds);
             // $bonusPenalties = $this->getBonusPenalties($user->user_id);
         } catch (\GuzzleHttp\Exception\ClientException $e) {
             continue;
         }
         $bonus = $bonusPenalties->bonus;
         $penalty = $bonusPenalties->penalties;
         $totalPoints = 0;
         $userObj = new \stdClass();
         $userObj->name = $user->user->name;
         $userObj->id = $user->user_id;
         //add link to user profile
         if (!isset($_SESSION)) {
             session_start();
         }
         $domain = $_SESSION['domain'];
         $courseId = $_SESSION['courseID'];
         $userObj->profile_url = "https://{$domain}/courses/{$courseId}/users/{$user->id}";
         $userObj->bonuses = $bonus;
         $userObj->penalties = $penalty;
         $userObj->totalBP = $bonus - $penalty;
         if (count($submissionsArr) >= 1) {
             $score = $submissionsArr[0];
             if (isset($score->score)) {
                 $userObj->score = $score->score;
                 $totalPoints = $score->score + $bonus + $penalty;
                 $userObj->total = $totalPoints;
             } else {
                 $userObj->score = 0;
                 $totalPoints = $bonus + $penalty;
                 $userObj->total = $totalPoints;
             }
         } else {
             //no scores found for user
             $userObj->score = 0;
             $totalPoints = $bonus + $penalty;
             $userObj->total = $totalPoints;
         }
         //get letter grade
         $grade = new GradeComponent();
         $userObj->grade = $grade->getLetterGrade($totalPoints, $maxExperiencePts, $grading_scheme);
         $allStudents[] = $userObj;
     }
     return $allStudents;
 }