123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- <?php
- ini_set('display_errors', 1);
- ini_set('display_startup_errors', 1);
- error_reporting(E_ALL);
- require_once("../../config.php");
- require_login();
- global $DB, $USER, $COURSE;
- class Performance {
- private string $emptyPerformance = '{"type":[{"type":"Leitura e Escrita","total":0,"errors":0},{"type":"Manipulação de Entrada","total":0,"errors":0},{"type":"Lógica","total":0,"errors":0},{"type":"Matemática","total":0,"errors":0},{"type":"Condição","total":0,"errors":0},{"type":"Laço","total":0,"errors":0},{"type":"Vetor","total":0,"errors":0}],"tag":[{"tag":"Caso Geral","total":0,"errors":0},{"tag":"Caso Limite","total":0,"errors":0},{"tag":"Caso Nulo","total":0,"errors":0},{"tag":"Caso Negativo","total":0,"errors":0},{"tag":"Igualdade","total":0,"errors":0},{"tag":"Tipo de Entrada","total":0,"errors":0}],"lastTypeErrors":[],"lastTagErrors":[]}';
-
- public function __construct() {
- global $DB;
- }
- private function add(string $course, string $student): void {
- global $DB;
- $DB->insert_record('iassign_performance', (object)array('course' => $course, 'student' => $student, 'performance' => $this->emptyPerformance),false);
- }
- public function find(string $course, string $student): array {
- global $DB;
- $selectPerformance = $DB->get_record('iassign_performance', array('course' => $course, 'student' => $student));
- if (!$selectPerformance) {
- $this->add($course,$student);
- $performance = (array)$DB->get_record('iassign_performance', array('course' => $course, 'student' => $student));
- }
- else {
- $performance = (array)$selectPerformance;
- }
- return $performance;
- }
- public function update(string $course, string $student, array $testCases, array $exerciseType, object $jsPerformance): void {
- global $DB;
- $performance = json_decode($this->find($course,$student)['performance']);
- $incorrect = $this->updateTags($testCases, $performance->tag, $performance);
- $this->updateTypes($exerciseType, $performance->type, $performance, $incorrect);
- if ($performance!=$jsPerformance) {
- echo "Houve uma tentativa irregular de alterar o banco de dados";
- }
- $newPerformance = json_encode($performance, JSON_UNESCAPED_UNICODE);
- $DB->update_record('iassign_performance', (object)array('id' => $this->find($course,$student)['id'], 'course' => $course, 'student' => $student, 'performance' => $newPerformance),false);
- }
- private function updateTypes(array $exerciseType, array $types, object $performance, bool $incorrect): void {
- for($i=0; $i<count($exerciseType); $i++){
- for($j=0; $j<count($types); $j++){
- if ($exerciseType[$i] == $types[$j]->type) {
- $types[$j]->total += 1;
- if ($incorrect) {
- $types[$j]->errors += 1;
- array_push($performance->lastTypeErrors,$exerciseType[$i]);
- if (count($performance->lastTypeErrors) > 50) {
- array_shift($performance->lastTypeErrors);
- }
- }
- }
- }
- }
- }
- private function updateTags(array $testCases, array $tags, object $performance): bool {
- $incorrect = false;
- for ($i=0; $i<count($testCases); $i++) {
- for ($j=0; $j<count($tags); $j++) {
- if (implode("",$testCases[$i]->tags) === $tags[$j]->tag) {
- $tags[$j]->total += 1;
- if (!$testCases[$i]->results[0]->grade) {
- $incorrect = true;
- $tags[$j]->errors += 1;
- array_push($performance->lastTagErrors,implode("",$testCases[$i]->tags));
- if (count($performance->lastTagErrors) > 50) {
- array_shift($performance->lastTagErrors);
- }
- }
- }
- }
- }
- return $incorrect;
- }
- }
- if ($_SERVER['REQUEST_METHOD'] === 'GET') {
- $performance = new Performance();
- $student_performance = $performance->find(get_coursemodule_from_id('iassign',explode("D",explode("%2",explode("id",explode("get_answer",$_SERVER['HTTP_REFERER'])[1])[1])[0])[1])->id, $USER->id)['performance'];
- echo $student_performance;
- }
- if ($_SERVER['REQUEST_METHOD'] === 'POST') {
- $performance = new Performance();
- $data = $_POST["data"];
- $obj = json_decode($data);
- $performance->update(get_coursemodule_from_id('iassign',explode("D",explode("%2",explode("id",explode("get_answer",$_SERVER['HTTP_REFERER'])[1])[1])[0])[1])->id, $USER->id, $obj->testCases, $obj->exerciseType, $obj->performance);
- }
|