function getExerciseReport($exerciseObj, $id_course_instance)
 {
     /*
      * ottiene i dati relativi alla risposte fornite dagli utenti nella classe
      * e alle risposte possibile ammesse dall'esercizio
      */
     $exercise_data = ExerciseDAO::getExerciseInfo($exerciseObj, $id_course_instance);
     $possible_answers = $exerciseObj->getExerciseData();
     $div = CDOMElement::create('div');
     $div->addChild(new CText($exerciseObj->getText()));
     $data = array();
     $exercise_data_count = count($exercise_data);
     $thead_data = array(translateFN('Testo della risposta'), translateFN('Punteggio'), translateFN('Numero di risposte'));
     /*
      * scorre le risposte fornite dalla classe
      */
     for ($i = 0; $i < $exercise_data_count; $i++) {
         $href = 'view.php?id_node=' . $exercise_data[$i]['risposta_libera'];
         $answer = CDOMElement::create('a', "href:{$href}");
         $answer_id = $exercise_data[$i]['risposta_libera'];
         $answer->addChild(new CText($exerciseObj->getExerciseDataAnswerForItem($answer_id)));
         $tbody_data[$i] = array($answer->getHtml(), $exercise_data[$i]['punteggio'], $exercise_data[$i]['risposte']);
         if (isset($possible_answers[$answer_id])) {
             unset($possible_answers[$answer_id]);
         }
     }
     /*
      * considera eventuali risposte all'esercizio che non sono state date
      * da nessuno studente
      */
     foreach ($possible_answers as $answer_id => $answer_data) {
         $href = 'view.php?id_node=' . $answer_id;
         $answer = CDOMElement::create('a', "href:{$href}");
         $answer->addChild(new CText($exerciseObj->getExerciseDataAnswerForItem($answer_id)));
         $tbody_data[$i] = array($answer->getHtml(), $exerciseObj->getExerciseDataCorrectnessForItem($answer_id), 0);
         $i++;
     }
     $div->addChild(BaseHtmlLib::tableElement('', $thead_data, $tbody_data));
     return $div->getHtml();
 }