tablerender('Start of Development Area', '
');
require_once (e_PLUGIN . 'timekeeper/DevelopmentArea.php');
$ns->tablerender('End of Development Area', '
');
}
//Check user submitted answer
$submitButton = filter_input(INPUT_POST, 'Answered');
if (isset($submitButton)) {
$AnswerChecker = new AnswerChecker();
$text = $AnswerChecker->checkAnswers();
$ns->tablerender("Check answer", $text . '
');
}
/////////////////////////////////////////
/// Student section
/////////////////////////////////////////
if (check_class("TIMEKEEPER_STUDENT")) {
$this->MainEntry();
$text = '';
$subject = $this->subjectSelector();
$year = $this->yearLevelSelector($subject);
//Return random generated question
$QG = new timekeeper_Question_Engine;
$QG->subjectSelector = $subject;
$QG->yearlevel = $year;
$content = $QG->GetRandomQuestion();
$text .= $content; //$this->renderQuestion($frm, $content);
$ns->tablerender("Question", $text . '
');
}
/////////////////////////////////////////
/// Teacher section
/////////////////////////////////////////
if (check_class("TIMEKEEPER_TEACHER")) {
//$ns->tablerender("ExcelGenerator", $form->ExcelGenerator());
}
}
private function subjectRandomizer() {
$subjects = [
'english' => 0,
'pePd' => 0, //health-and-physical-education
'socialStudies' => 0, //humanities-and-social-sciences
'languages' => 0,
'mathematics' => 0,
'science' => 0,
'technologies' => 0,
'art' => 0,
'general' => 0 // general knowlage
];
foreach ($this->activeSubjectsList as $key => $sub) {
$subjects[$key] = $sub['timekeeper_percent'] + rand(0, 200 / $sub['timekeeper_yearLevel']);
}
//print_a($subjects);
//print_a($this->activeSubjectsList);
return $subjects;
}
private function subjectSelector() {
$returnSubject = '';
$returnScore = 0;
foreach ($this->subjectRandomizer() as $sub => $score) {
if ($returnScore <= $score && $score <> 0) {
$returnSubject = $sub;
$returnScore = $score;
}
}
//print_a($returnSubject);
// Add maths as the starting subject for new users
if ($returnSubject === '') {
$returnSubject = 'mathematics';
}
return $returnSubject;
}
private function yearLevelSelector($subject) {
return 1;
}
/**
* Main entry point for checking and updating the statistics and year levels.
*
* Description needed once finished....TODO
*
*/
private function MainEntry() {
$sql = e107::getDb();
$userName = e107::getUser()->getLoginName();
$this->GetActiveSubjects($sql, $userName);
$this->GetActiveYearForSubjects($sql, $userName);
$this->CheckSubjects($sql, $userName);
}
/**
* Get a list of active subjects.
*
* Populate the private class variable $activeSubjectsList with an array of active subjects for use in statistics and question selection.
*
*/
private function GetActiveSubjects($sql, $userName) {
$this->activeSubjectsList = [];
$sql->gen("SELECT DISTINCT `timekeeper_subject` FROM e107.e107_timekeeperReport WHERE `timekeeper_username`='$userName';");
while ($row = $sql->fetch()) {
$this->activeSubjectsList = array_merge($this->activeSubjectsList, [$row['timekeeper_subject'] => []]);
}
}
/**
* Get the year level and percentage for the active subjects
*
* Populate the private class variable $activeSubjectsList with the current year level and correct percentage for the current subjects.
*
*/
private function GetActiveYearForSubjects($sql, $userName) {
foreach ($this->activeSubjectsList as $subject => &$arrayHolder) {
$selectQuery = '`timekeeper_username` = \'' . $userName . '\' AND `timekeeper_subject` = \'' . $subject . '\' ORDER BY `timekeeper_yearLevel` DESC';
$arrayHolder = ($sql->retrieve('timekeeperStats', '`timekeeper_yearLevel`,`timekeeper_percent`', $selectQuery));
}
}
/**
* Check to see what subjects the user has answered questions for.
*
* This function gets a list of unique subjects from the `e107_timekeeperReport` database for the year level specified and uses that to get all answered questions for that subject to pass to 'UpdateYearAndStats'.
*
* @param int $yearlevel The year to check for records in the database.
*
*/
private function CheckSubjects($sql, $userName) {
$activeSubjects = array();
$subjectToProcess = array();
foreach ($this->activeSubjectsList as $subject => $dataArrays) {
$tmpArray = array();
$sql->gen("SELECT * FROM e107.e107_timekeeperReport WHERE `timekeeper_username`='$userName' AND `timekeeper_yearLevel`=" . $dataArrays['timekeeper_yearLevel'] . " AND `timekeeper_subject`= '" . $subject . "' ORDER BY 'timekeeper_answereddatestamp' DESC LIMIT 1000;");
while ($row = $sql->fetch()) {
array_push($tmpArray, $row);
}
$subjectToProcess = ['userName' => $userName, 'subject' => $subject, 'yearlevel' => $dataArrays['timekeeper_yearLevel'], 'rows' => $tmpArray];
//print_a($subjectToProcess);
$this->UpdateYearAndStats($sql, $subjectToProcess);
}
}
private function BuildStatisticPdf($sql, $menuYear) {
//print_a(['BuildStatisticMenu',$menuYear]);
$userName = e107::getUser()->getLoginName();
$sql->gen("SELECT `timekeeper_subject`,`timekeeper_percent`,`timekeeper_quantity` FROM e107_timekeeperStats WHERE `timekeeper_yearLevel`=$menuYear AND `timekeeper_username`='$userName';");
$text = "
| Year | Subject | Score | No.Questions |
| ' . $row['timekeeper_yearLevel'] . ' | ' . $row['timekeeper_subject'] . ' | ' . $row['timekeeper_percent'] . '% | ' . $row['timekeeper_quantity'] . ' |
' . $row['cntr'] . ' questions have been answered
today with ' . $row['percent'] . '% accuracy.
'; } e107::getRender()->tablerender('Score', $text); } private function getPercent($subjectToProcess) { $questions = 0; $correct = 0; foreach ($subjectToProcess as $dbCorrect) { $questions++; if ($dbCorrect['timekeeper_correct'] == 1) { $correct++; } if ($questions >= 1000) { break; } } //prevent devision by zero if (!$questions == 0) { return (100 - ((($questions - $correct) / $questions) * 100)); } else { return 0; } } }