debug = true; } $this->sql = e107::getDB(); $this->user = e107::getUser()->getLoginName(); $this->state = "ready"; } public function getSpellingWord() { $difficulty = $this->difficulty(); $query = "SELECT `word`,`usage`, IFNULL(`cnt`,'0') AS Ncnt FROM (SELECT `word`,`usage` FROM e107.e107_tk_wordList WHERE `year` <= '$difficulty' AND `usage` != '') AS wList LEFT JOIN (SELECT `answer`,COUNT(`answer`)AS `cnt` FROM e107.e107_tkReport WHERE `answereddatestamp` > unix_timestamp((NOW()) - INTERVAL 1 MONTH) AND `username` = '$this->user' AND `subject` = '".__CLASS__."' GROUP BY `answer` ORDER BY COUNT(`answer`)) AS Ans ON wList.`word` = Ans.`answer` ORDER BY IFNULL(`cnt`,'0'), RAND() LIMIT 1;"; if($this->debug) { $this->returnData['difficulty'] = $difficulty; $this->returnData['getWordSQL'] = $query; } $this->sql->gen($query); while ($row = $this->sql->fetch()) { $this->returnData['question'] = ['answer1' => $row['word'], 'question' => $row['usage'], 'type'=>__CLASS__]; } return $this->returnData; } /** * Return the difficulty based on previously answered questions. * * @return int Difficulty 1-13. */ private function difficulty() { $query = "SELECT (SUM(correct)/COUNT(correct)*13) as percent FROM e107.`e107_tkReport` WHERE answereddatestamp >= unix_timestamp((NOW()) - INTERVAL 1 MONTH) AND `username` = '$this->user' AND `subject` = '".__CLASS__."';"; if($this->debug) { $this->returnData['difficultySQL'] = $query; } $this->sql->gen($query); while ($row = $this->sql->fetch()) { //zprint_a(['PercentIs'=>$row["percent"]]); if (is_numeric($row["percent"])) { return $row["percent"]; } else { return 1; } } } }