コード例 #1
0
ファイル: Grade.php プロジェクト: Bagelllama/delphinium
 public function onRun()
 {
     if (!is_null($this->property('experienceInstance'))) {
         $instance = ExperienceModel::find($this->property('experienceInstance'));
         $maxExperiencePts = $instance->total_points;
         $exComp = new ExperienceComponent();
         $exComp->initVariables($this->property('experienceInstance'));
         $points = $exComp->getUserPoints();
         $roots = new Roots();
         $standards = $roots->getGradingStandards();
         $grading_scheme = $standards[0]->grading_scheme;
         $letterGrade = $this->getLetterGrade($points, $maxExperiencePts, $grading_scheme);
         $bonusPenaltiesObj = $exComp->calculateTotalBonusPenalties($this->property('experienceInstance'));
         $totalBonusPenalties = $bonusPenaltiesObj->bonus + $bonusPenaltiesObj->penalties;
         //penalties come with negative sign
         $this->page['XP'] = round($points, 2);
         $this->page['gradeBonus'] = round($totalBonusPenalties, 2);
         $this->page['letterGrade'] = $letterGrade;
     } else {
         $this->page['XP'] = 0;
         $this->page['gradeBonus'] = 0;
         $this->page['letterGrade'] = "F";
     }
     //todo: get the bonus, etc from blade, not from experience
     $size = $this->property('size');
     $this->page['gradeSize'] = $size;
     $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");
 }
コード例 #2
0
ファイル: Experience.php プロジェクト: Bagelllama/delphinium
 /**
  * Delete 
  */
 public function index_onDelete()
 {
     if (($checkedIds = post('checked')) && is_array($checkedIds) && count($checkedIds)) {
         foreach ($checkedIds as $expId) {
             if (!($experience = Model::find($expId))) {
                 continue;
             }
             $experience->delete();
         }
         Flash::success("Successfully deleted");
     } else {
         Flash::error("An error occurred when trying to delete this item");
     }
     return $this->listRefresh();
 }
コード例 #3
0
ファイル: Bonus.php プロジェクト: Poornimagaurav/delphinium
 public function onRun()
 {
     try {
         $experienceInstance = ExperienceModel::find($this->property('Experience'));
         //don't multiply by zero!
         $milestoneNum = count($experienceInstance->milestones) > 0 ? count($experienceInstance->milestones) : 1;
         $this->page['maxBonus'] = $experienceInstance->bonus_days * $experienceInstance->bonus_per_day * $milestoneNum;
         $this->page['minBonus'] = -$experienceInstance->penalty_days * $experienceInstance->penalty_per_day * $milestoneNum;
         $size = $this->property('Size');
         $this->page['bonusSize'] = $size;
         $bonusPenalties = $this->getBonusPenalties();
         $this->page['totalBonus'] = $bonusPenalties === 0 ? 0 : round($bonusPenalties->bonus, 2);
         $this->page['totalPenalties'] = $bonusPenalties === 0 ? 0 : round($bonusPenalties->penalties, 2);
         $this->page['role'] = 'Learner';
         // $_POST['roles'];// //
         $this->addCss("/plugins/delphinium/blossom/assets/css/main.css");
     } catch (\GuzzleHttp\Exception\ClientException $e) {
         return;
     }
 }
コード例 #4
0
ファイル: Grade.php プロジェクト: pgoyal04/delphinium
 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");
 }
コード例 #5
0
ファイル: Experience.php プロジェクト: japomani/delphinium
 public function initVariables($experienceInstanceId)
 {
     //set class variables
     $experienceInstance = ExperienceModel::find($experienceInstanceId);
     $utcTimeZone = new DateTimeZone('UTC');
     $stDate = $experienceInstance->start_date->setTimezone($utcTimeZone);
     $endDate = $experienceInstance->end_date->setTimezone($utcTimeZone);
     $ptsPerSecond = $this->getPtsPerSecond($stDate, $endDate, $experienceInstance->total_points);
     $this->setPtsPerSecond($ptsPerSecond);
     $this->setStartDateUTC($stDate);
     $this->setBonusPerSecond($experienceInstance->bonus_per_day / 24 / 60 / 60);
     $this->setBonusSeconds($experienceInstance->bonus_days * 24 * 60 * 60);
     $this->setPenaltyPerSecond($experienceInstance->penalty_per_day / 24 / 60 / 60);
     $this->setPenaltySeconds($experienceInstance->penalty_days * 24 * 60 * 60);
     if (is_null($this->submissions)) {
         $this->submissions = $this->getSubmissions();
     }
 }
コード例 #6
0
ファイル: Gradebook.php プロジェクト: annapuigpuig/delphinium
 private function matchSubmissionsAndUsers($users, $scores)
 {
     $allStudents = array();
     $standards = $this->roots->getGradingStandards();
     $grading_scheme = $standards[0]->grading_scheme;
     //get experience total points
     $instance = ExperienceModel::find($this->property('experienceInstance'));
     $maxExperiencePts = $instance->total_points;
     foreach ($users as $user) {
         $submissionsArr = $this->findScoreByUserId($user->id, $scores);
         //this will weed out any TA's and other people in the course who aren't necessarily students
         try {
             $bonusPenalties = $this->getBonusPenalties($user->id);
         } catch (\GuzzleHttp\Exception\ClientException $e) {
             continue;
         }
         $bonus = $bonusPenalties->bonus;
         $penalty = $bonusPenalties->penalties;
         $totalPoints = 0;
         $userObj = new \stdClass();
         $userObj->name = $user->name;
         $userObj->id = $user->login_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 = round($bonus, 2);
         $userObj->penalties = round($penalty, 2);
         $userObj->totalBP = round(round($bonus, 2) + round($penalty, 2), 2);
         if (count($submissionsArr) >= 1) {
             $score = $submissionsArr[0];
             $userObj->score = round($score->score, 2);
             $totalPoints = $score->score + $bonus + $penalty;
             $userObj->total = round($totalPoints, 2);
         } else {
             //no scores found for user
             $userObj->score = 0;
             $totalPoints = $bonus + $penalty;
             $userObj->total = round($totalPoints, 2);
         }
         //get letter grade
         $grade = new GradeComponent();
         $userObj->grade = $grade->getLetterGrade($totalPoints, $maxExperiencePts, $grading_scheme);
         $allStudents[] = $userObj;
     }
     return $allStudents;
 }
コード例 #7
0
ファイル: RestfulApi.php プロジェクト: pgoyal04/delphinium
 public function getRedLinePoints()
 {
     $instanceId = \Input::get('experienceInstanceId');
     $this->instance = ExperienceModel::find($instanceId);
     $now = new DateTime(date("Y-m-d"));
     //we don't do "now" because that means the red line keeps moving by the hour. We can to keep it fixed
     //for each day
     $startDate = new DateTime($this->instance->start_date);
     $endDate = new DateTime($this->instance->end_date);
     $currentSeconds = abs($now->getTimestamp() - $startDate->getTimestamp());
     $this->ptsPerSecond = $this->getPtsPerSecond($startDate, $endDate, $this->instance->total_points);
     return floor($this->ptsPerSecond * $currentSeconds);
 }
コード例 #8
0
ファイル: Experience.php プロジェクト: pgoyal04/delphinium
 public function onRun()
 {
     try {
         $this->addJs("/plugins/delphinium/blossom/assets/javascript/d3.min.js");
         $this->addJs("/plugins/delphinium/blossom/assets/javascript/experience.js");
         $this->addCss("/plugins/delphinium/blossom/assets/css/experience.css");
         $this->addCss("/plugins/delphinium/blossom/assets/css/main.css");
         $this->addCss("/plugins/delphinium/blossom/assets/css/font-awesome.min.css");
         $this->roots = new Roots();
         $instance = ExperienceModel::find($this->property('Instance'));
         //set class variables
         $stDate = new DateTime($instance->start_date);
         $endDate = new DateTime($instance->end_date);
         $this->startDate = $stDate;
         $this->endDate = $endDate;
         $this->submissions = $this->getSubmissions();
         $this->ptsPerSecond = $this->getPtsPerSecond($stDate, $endDate, $instance->total_points);
         $this->penaltySeconds = $instance->penalty_days * 24 * 60 * 60;
         $this->penaltyPerSecond = $instance->penalty_per_day / 24 / 60 / 60;
         //convert it to milliseconds
         $this->bonusSeconds = $instance->bonus_days * 24 * 60 * 60;
         $this->bonusPerSecond = $instance->bonus_per_day / 24 / 60 / 60;
         //set page variables
         $this->page['instanceId'] = $instance->id;
         $this->page['experienceXP'] = $this->getUserPoints();
         //current points
         $this->page['maxXP'] = $instance->total_points;
         //total points for this experience
         $this->page['experienceSize'] = $instance->size;
         $this->page['experienceAnimate'] = $instance->animate;
         /*
                     //run rules
         
                     $cType = ComponentTypes::where(array('type' => 'experience'))->first();
                     $componentRules = ComponentRules::where(array('component_id' => $cType->id));
                     $source = new DataSource(false);
                     if(!isset($_SESSION)) 
                     { 
            session_start(); 
                     }
                     $userId = $_SESSION['userID'];
                     $params = array('student_ids'=>$userId,
            '$all_assignments'=>true,
            'fresh_data'=>0,
            'prettyprint'=>1,
            'rg'=>'experience');
                     echo json_encode($source->getMultipleSubmissions($params));
                     //calculated variables
                     $this->page['milestone_status']= array(); 
         * 
         */
     } catch (\GuzzleHttp\Exception\ClientException $e) {
         echo "You must be a student to use this app, or go into 'Student View'. " . "Also, make sure that an Instructor has approved this application";
         return;
     }
 }
コード例 #9
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;
 }
コード例 #10
0
ファイル: Experience.php プロジェクト: eharvey71/delphinium
 public function onRun()
 {
     try {
         $this->addJs("/plugins/delphinium/blossom/assets/javascript/d3.min.js");
         $this->addJs("/plugins/delphinium/blossom/assets/javascript/experience.js");
         $this->addCss("/plugins/delphinium/blossom/assets/css/experience.css");
         $this->addCss("/plugins/delphinium/blossom/assets/css/main.css");
         $this->addCss("/plugins/delphinium/blossom/assets/css/font-awesome.min.css");
         $this->roots = new Roots();
         $instance = ExperienceModel::find($this->property('Instance'));
         $milestonesDesc = Milestone::where('experience_id', '=', $instance->id)->orderBy('points', 'desc')->get();
         $milestonesAsc = Milestone::where('experience_id', '=', $instance->id)->orderBy('points', 'asc')->get();
         $milestoneArr = array();
         foreach ($milestonesAsc as $item) {
             $milestoneArr[] = $item->name;
         }
         //set class variables
         $stDate = new DateTime($instance->start_date);
         $endDate = new DateTime($instance->end_date);
         $this->startDate = $stDate;
         $this->endDate = $endDate;
         $this->submissions = $this->getSubmissions();
         $this->ptsPerSecond = $this->getPtsPerSecond($stDate, $endDate, $instance->total_points);
         $this->penaltySeconds = $instance->penalty_days * 24 * 60 * 60;
         $this->penaltyPerSecond = $instance->penalty_per_day / 24 / 60 / 60;
         //convert it to milliseconds
         $this->bonusSeconds = $instance->bonus_days * 24 * 60 * 60;
         $this->bonusPerSecond = $instance->bonus_per_day / 24 / 60 / 60;
         //set page variables
         $this->page['numMilestones'] = count($milestonesDesc);
         $this->page['encouragement'] = json_encode($milestoneArr);
         $this->page['experienceXP'] = $this->getUserPoints();
         //current points
         $this->page['maxXP'] = $instance->total_points;
         //total points for this experience
         $this->page['startDate'] = $instance->start_date;
         $this->page['endDate'] = $instance->end_date;
         $this->page['experienceSize'] = $instance->size;
         $this->page['experienceAnimate'] = $instance->animate;
         $redLine = $this->calculateRedLine($this->startDate, $this->endDate, $instance->total_points);
         //up to here good
         $this->page['redLine'] = $redLine;
         $milestoneClearanceInfo = $this->getMilestoneClearanceInfo($milestonesDesc);
         $this->page['milestoneClearance'] = json_encode($milestoneClearanceInfo);
         $this->page['studentScores'] = json_encode($this->getAllStudentScores());
         $bonus = 0;
         $penalties = 0;
         foreach ($milestoneClearanceInfo as $item) {
             if ($item->bonusPenalty > 0 && $item->cleared) {
                 $bonus = $bonus + $item->bonusPenalty;
             } else {
                 if ($item->bonusPenalty < 0 && $item->cleared) {
                     $penalties = $penalties + $item->bonusPenalty;
                 }
             }
         }
         $this->page['experienceGrade'] = round($this->getUserPoints() + $bonus + $penalties, 2);
         //?
         $this->page['experienceBonus'] = $bonus;
         $this->page['experiencePenalties'] = $penalties;
         /*
         
                     //run rules
         
                     $cType = ComponentTypes::where(array('type' => 'experience'))->first();
                     $componentRules = ComponentRules::where(array('component_id' => $cType->id));
                     $source = new DataSource(false);
                     if(!isset($_SESSION)) 
                     { 
            session_start(); 
                     }
                     $userId = $_SESSION['userID'];
                     $params = array('student_ids'=>$userId,
            '$all_assignments'=>true,
            'fresh_data'=>0,
            'prettyprint'=>1,
            'rg'=>'experience');
                     echo json_encode($source->getMultipleSubmissions($params));
                     //calculated variables
                     $this->page['milestone_status']= array(); 
         * 
         */
     } catch (\GuzzleHttp\Exception\ClientException $e) {
         echo "You must be a student to use this app, or go into 'Student View'. " . "Also, make sure that an Instructor has approved this application";
         return;
     }
 }