function recordtestdata($limit = false) { global $isreview, $questions, $bestquestions, $bestscores, $bestattempts, $bestseeds, $bestlastanswers, $scores, $attempts, $seeds, $lastanswers, $testid, $testsettings, $sessiondata, $reattempting, $timesontask, $lti_sourcedid, $qi, $noraw, $rawscores, $bestrawscores, $firstrawscores; if ($noraw) { $bestscorelist = implode(',', $bestscores); } else { $bestscorelist = implode(',', $bestscores) . ';' . implode(',', $bestrawscores) . ';' . implode(',', $firstrawscores); } $bestattemptslist = implode(',', $bestattempts); $bestseedslist = implode(',', $bestseeds); $bestlastanswers = str_replace('~', '', $bestlastanswers); $bestlalist = implode('~', $bestlastanswers); $bestlalist = addslashes(stripslashes($bestlalist)); if ($noraw) { $scorelist = implode(',', $scores); } else { $scorelist = implode(',', $scores) . ';' . implode(',', $rawscores); } $attemptslist = implode(',', $attempts); $seedslist = implode(',', $seeds); $lastanswers = str_replace('~', '', $lastanswers); $lalist = implode('~', $lastanswers); $lalist = addslashes(stripslashes($lalist)); $timeslist = implode(',', $timesontask); $reattemptinglist = implode(',', $reattempting); $questionlist = implode(',', $questions); $bestquestionlist = implode(',', $bestquestions); if ($questionlist != $bestquestionlist) { $questionlist .= ';' . $bestquestionlist; } $now = time(); if ($isreview) { if ($limit) { $query = "UPDATE imas_assessment_sessions SET reviewlastanswers='{$lalist}' "; } else { $query = "UPDATE imas_assessment_sessions SET reviewscores='{$scorelist}',reviewattempts='{$attemptslist}',reviewseeds='{$seedslist}',reviewlastanswers='{$lalist}',"; $query .= "reviewreattempting='{$reattemptinglist}' "; } } else { if ($limit) { $query = "UPDATE imas_assessment_sessions SET lastanswers='{$lalist}',timeontask='{$timeslist}' "; } else { $query = "UPDATE imas_assessment_sessions SET scores='{$scorelist}',attempts='{$attemptslist}',seeds='{$seedslist}',lastanswers='{$lalist}',"; $query .= "bestseeds='{$bestseedslist}',bestattempts='{$bestattemptslist}',bestscores='{$bestscorelist}',bestlastanswers='{$bestlalist}',"; $query .= "endtime={$now},reattempting='{$reattemptinglist}',timeontask='{$timeslist}',questions='{$questionlist}' "; } if (isset($lti_sourcedid) && strlen($lti_sourcedid) > 0 && $sessiondata['ltiitemtype'] == 0) { //update lti record. We only do this for single assessment placements require_once "../includes/ltioutcomes.php"; $total = 0; for ($i = 0; $i < count($bestscores); $i++) { if (getpts($bestscores[$i]) > 0) { $total += getpts($bestscores[$i]); } } $totpossible = totalpointspossible($qi); $grade = round($total / $totpossible, 4); $res = updateLTIgrade('update', $lti_sourcedid, $testsettings['id'], $grade); } } if ($testsettings['isgroup'] > 0 && $sessiondata['groupid'] > 0 && !$isreview) { $query .= "WHERE agroupid='{$sessiondata['groupid']}' AND assessmentid='{$testsettings['id']}'"; } else { $query .= "WHERE id='{$testid}' LIMIT 1"; } mysql_query($query) or die("Query failed : {$query} " . mysql_error()); }
$query .= "JOIN imas_assessments AS ia ON ias.assessmentid=ia.id WHERE ias.id='{$_GET['asid']}' AND ia.courseid='{$cid}'"; $result = mysql_query($query) or die("Query failed : {$query} " . mysql_error()); if (mysql_num_rows($result) > 0) { //check that is the right cid //$whereqry = getasidquery($_GET['asid']); $qp = getasidquery($_GET['asid']); //deleteasidfilesbyquery(array($qp[0]=>$qp[1]),1); deleteasidfilesbyquery2($qp[0], $qp[1], $qp[2], 1); $whereqry = " WHERE {$qp[0]}='{$qp[1]}' AND assessmentid='{$qp[2]}'"; $query = "SELECT seeds,lti_sourcedid FROM imas_assessment_sessions {$whereqry}"; $result = mysql_query($query) or die("Query failed : " . mysql_error()); $seeds = explode(',', mysql_result($result, 0, 0)); $ltisourcedid = mysql_result($result, 0, 1); if (strlen($ltisourcedid) > 1) { require_once "../includes/ltioutcomes.php"; updateLTIgrade('update', $ltisourcedid, $aid, 0); } $scores = array_fill(0, count($seeds), -1); $attempts = array_fill(0, count($seeds), 0); $lastanswers = array_fill(0, count($seeds), ''); $scorelist = implode(",", $scores); $attemptslist = implode(",", $attempts); $lalist = implode("~", $lastanswers); $bestscorelist = implode(',', $scores); $bestattemptslist = implode(',', $attempts); $bestseedslist = implode(',', $seeds); $bestlalist = implode('~', $lastanswers); $query = "UPDATE imas_assessment_sessions SET scores='{$scorelist};{$scorelist}',attempts='{$attemptslist}',lastanswers='{$lalist}',reattempting='',"; $query .= "bestscores='{$bestscorelist};{$bestscorelist};{$bestscorelist}',bestattempts='{$bestattemptslist}',bestseeds='{$bestseedslist}',bestlastanswers='{$bestlalist}' "; $query .= $whereqry; //"WHERE id='{$_GET['asid']}'";
function calcandupdateLTIgrade($sourcedid, $aid, $scores) { global $aidtotalpossible; if (!isset($aidtotalpossible[$aid])) { $query = "SELECT itemorder,defpoints FROM imas_assessments WHERE id='{$aid}'"; $res = mysql_query($query) or die("Query failed : {$query}" . mysql_error()); $aitems = explode(',', mysql_result($res, 0, 0)); $defpoints = mysql_result($res, 0, 1); foreach ($aitems as $k => $v) { if (strpos($v, '~') !== FALSE) { $sub = explode('~', $v); if (strpos($sub[0], '|') === false) { //backwards compat $aitems[$k] = $sub[0]; $aitemcnt[$k] = 1; } else { $grpparts = explode('|', $sub[0]); $aitems[$k] = $sub[1]; $aitemcnt[$k] = $grpparts[0]; } } else { $aitemcnt[$k] = 1; } } $query = "SELECT points,id FROM imas_questions WHERE assessmentid='{$aid}'"; $result2 = mysql_query($query) or die("Query failed : {$query}: " . mysql_error()); $totalpossible = 0; while ($r = mysql_fetch_row($result2)) { if (($k = array_search($r[1], $aitems)) !== false) { //only use first item from grouped questions for total pts if ($r[0] == 9999) { $totalpossible += $aitemcnt[$k] * $defpoints; //use defpoints } else { $totalpossible += $aitemcnt[$k] * $r[0]; //use points from question } } } $aidtotalpossible[$aid] = $totalpossible; } $total = 0; for ($i = 0; $i < count($scores); $i++) { if (getpts($scores[$i]) > 0) { $total += getpts($scores[$i]); } } $grade = number_format($total / $aidtotalpossible[$aid], 4); return updateLTIgrade('update', $sourcedid, $aid, $grade); }