diff --git a/main/exercice/hotspot_answers.as.php b/main/exercice/hotspot_answers.as.php index 59c4b5765f..7ef8d962ba 100755 --- a/main/exercice/hotspot_answers.as.php +++ b/main/exercice/hotspot_answers.as.php @@ -7,35 +7,25 @@ * @package chamilo.exercise * @author Toon Keppens, Julio Montoya adding hotspot "medical" support */ - -include('../inc/global.inc.php'); +include '../inc/global.inc.php'; // Set vars -$questionId = intval($_GET['modifyAnswers']); -$exe_id = intval($_GET['exe_id']); -$objQuestion = Question :: read($questionId); -$TBL_ANSWERS = Database::get_course_table(TABLE_QUIZ_ANSWER); -$documentPath = api_get_path(SYS_COURSE_PATH).$_course['path'].'/document'; - -$picturePath = $documentPath.'/images'; -$pictureName = $objQuestion->selectPicture(); -$pictureSize = getimagesize($picturePath.'/'.$objQuestion->selectPicture()); -$pictureWidth = $pictureSize[0]; +$questionId = intval($_GET['modifyAnswers']); +$exe_id = intval($_GET['exe_id']); + +$objQuestion = Question::read($questionId); +$trackExerciseInfo = ExerciseLib::get_exercise_track_exercise_info($exe_id); +$objExercise = new Exercise(api_get_course_int_id()); +$objExercise->read($trackExerciseInfo['exe_exo_id']); +$em = Database::getManager(); +$documentPath = api_get_path(SYS_COURSE_PATH) . $_course['path'] . '/document'; +$picturePath = $documentPath . '/images'; +$pictureName = $objQuestion->selectPicture(); +$pictureSize = getimagesize($picturePath . '/' . $objQuestion->selectPicture()); +$pictureWidth = $pictureSize[0]; $pictureHeight = $pictureSize[1]; +$course_id = api_get_course_int_id(); -$answer_type = $objQuestion->selectType(); - -$course_id = api_get_course_int_id(); - -if ($answer_type == HOT_SPOT_DELINEATION) { - // Query db for answers - $sql = "SELECT id, answer, hotspot_coordinates, hotspot_type FROM $TBL_ANSWERS - WHERE c_id = $course_id AND question_id = ".intval($questionId)." AND hotspot_type <> 'noerror' ORDER BY id"; -} else { - $sql = "SELECT id, answer, hotspot_coordinates, hotspot_type FROM $TBL_ANSWERS - WHERE c_id = $course_id AND question_id = ".intval($questionId)." ORDER BY id"; -} -$result = Database::query($sql); // Init $data = []; $data['type'] = 'solution'; @@ -64,53 +54,72 @@ $data['image_height'] = $pictureHeight; $data['courseCode'] = $_course['path']; $data['hotspots'] = []; -while ($hotspot = Database::fetch_array($result)) { - $hotSpot = []; - $hotSpot['id'] = $hotspot['id']; - $hotSpot['answer'] = $hotspot['answer']; - - // Square or rectancle - if ($hotspot['hotspot_type'] == 'square' ) { - $hotSpot['type'] = 'square'; - } - - // Circle or ovale - if ($hotspot['hotspot_type'] == 'circle') { - $hotSpot['type'] = 'circle'; - } - - // Polygon - if ($hotspot['hotspot_type'] == 'poly') { - $hotSpot['type'] = 'poly'; - } - - // Delineation - if ($hotspot['hotspot_type'] == 'delineation') { - $hotSpot['type'] = 'delineation'; - } - // oar - if ($hotspot['hotspot_type'] == 'oar') { - $hotSpot['type'] = 'delineation'; - } - - $hotSpot['coord'] = $hotspot['hotspot_coordinates']; - - $data['hotspots'][] = $hotSpot; +if ($objExercise->results_disabled != RESULT_DISABLE_SHOW_SCORE_ONLY) { + $qb = $em->createQueryBuilder(); + $qb + ->select('a') + ->from('ChamiloCourseBundle:CQuizAnswer', 'a'); + + if ($objQuestion->selectType() == HOT_SPOT_DELINEATION) { + $qb + ->where($qb->expr()->eq('a.cId', $course_id)) + ->andWhere($qb->expr()->eq('a.questionId', intval($questionId))) + ->andWhere($qb->expr()->neq('a.hotspotType', 'noerror')); + } else { + $qb + ->where($qb->expr()->eq('a.cId', $course_id)) + ->andWhere($qb->expr()->eq('a.questionId', intval($questionId))); + } + + $result = $qb + ->orderBy('a.id', 'ASC') + ->getQuery() + ->getResult(); + + foreach ($result as $hotspotAnswer) { + $hotSpot = []; + $hotSpot['id'] = $hotspotAnswer->getId(); + $hotSpot['answer'] = $hotspotAnswer->getAnswer(); + + switch ($hotspotAnswer->getHotspotType()) { + case 'square': + $hotSpot['type'] = 'square'; + break; + case 'circle': + $hotSpot['type'] = 'circle'; + break; + case 'poly': + $hotSpot['type'] = 'poly'; + break; + case 'delineation': + $hotSpot['type'] = 'delineation'; + break; + case 'oar': + $hotSpot['type'] = 'delineation'; + break; + } + + $hotSpot['coord'] = $hotspotAnswer->getHotspotCoordinates(); + + $data['hotspots'][] = $hotSpot; + } } $data['answers'] = []; -$tbl_track_e_hotspot = Database::get_main_table(TABLE_STATISTIC_TRACK_E_HOTSPOT); -$sql = "SELECT hotspot_coordinate - FROM $tbl_track_e_hotspot - WHERE hotspot_question_id = $questionId AND - c_id = $course_id AND - hotspot_exe_id = $exe_id - ORDER by hotspot_id"; -$rs = Database::query($sql); // don't output error because we are in Flash execution. - -while($row = Database :: fetch_array($rs, 'ASSOC')) { - $data['answers'][] = $row['hotspot_coordinate']; +$rs = $em + ->getRepository('ChamiloCoreBundle:TrackEHotspot') + ->findBy( + [ + 'hotspotQuestionId' => $questionId, + 'cId' => $course_id, + 'hotspotExeId' => $exe_id + ], + ['hotspotId' => 'ASC'] + ); + +foreach ($rs as $row) { + $data['answers'][] = $row->getHotspotCoordinate(); } $data['done'] = 'done';