| 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);
 
- }
 
 
  |