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"); }
/** * 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(); }
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; } }
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"); }
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(); } }
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; }
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); }
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; } }
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; }
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; } }