$dataHa['exercise'] .= translateFN('Prossimo esercizio') . '</a>'; } } } break; case 'view': default: $exercise = ExerciseDAO::getExercise($id_node); if ($user_level < $exercise->getExerciseLevel()) { $form = translateFN("Esercizio di livello superiore al tuo"); } else { $viewer = ExerciseViewerFactory::create($exercise->getExerciseFamily()); $action = 'exercise.php'; $form = $viewer->getViewingForm($userObj, $exercise, $sess_id_course_instance, $action); // vito 26 gennaio 2009 if (($id = ExerciseDAO::getNextExerciseId($exercise, $sess_id_user)) != NULL) { $next_exercise_menu_link = CDOMElement::create('a'); $next_exercise_menu_link->setAttribute('href', "{$http_root_dir}/browsing/exercise.php?id_node={$id}"); $next_exercise_menu_link->addCHild(new CText(translateFN('Prossimo esercizio'))); $dataHa['go_back'] .= $next_exercise_menu_link->getHtml(); } } $dataHa['exercise'] = $form; $node_title = $exercise->getTitle(); $icon = CourseViewer::getCSSClassNameForExerciseType($exercise->getExerciseFamily()); break; } /* * Actions menu */ if ($id_profile == AMA_TYPE_AUTHOR) {
break; case 'delete': /* * posso cancellare l'esercizio solo se: * 1. nessuna istanza di corso attiva * 2. istanza del corso attiva, ma nessuno studente ha già svolto l'esercizio. * * quindi deve: * 1. ottieni istanze corso attive (esiste già il metodo AMA?) * 2. se istanza corso attiva, verifica se esiste studente che ha svolto esercizio * in questa istanza corso. * se tutto ok, cancella l'esercizio, * altrimenti mostra un messaggio che spiega perche' non e' possibile cancellare l'esercizio. * */ if (!ExerciseDAO::canEditExercise($id_node)) { $dataHa['exercise'] = translateFN("L'esercizio non può essere eliminato."); break; } $result = ExerciseDAO::delete($id_node); if (AMA_DataHandler::isError($result)) { $errObj = new ADA_Error($result, translateFN("Errore durante la cancellazione dell'esercizio")); } $dataHa['exercise'] = translateFN("L'esercizio è stato cancellato correttamente"); break; } //$dataHa['go_back'].= "<BR><a href=\"$http_root_dir/browsing/exercise.php?id_node=$id_next_exercise\">".translateFN("Prossimo esercizio")."</a>"; $content_dataAr = array('banner' => isset($banner) ? $banner : '', 'status' => $status, 'course_title' => isset($course_title) ? $course_title : '', 'user_name' => $user_name, 'user_type' => $user_type, 'user_level' => $user_level, 'author' => isset($node_author) ? $node_author : '', 'node_level' => isset($node_level) ? $node_level : '', 'visited' => isset($visited) ? $visited : '', 'path' => $node_path, 'title' => $node_title, 'form' => $dataHa['exercise'], 'media' => isset($dataHa['media']) ? $dataHa['media'] : '', 'messages' => $user_messages->getHtml(), 'agenda' => $user_agenda->getHtml(), 'chat_users' => isset($online_users) ? $online_users : '', 'icon' => $icon); // FIXME: non dovrebbe essere necessario aggiungere questa riga! $layout_dataAr['node_type'] = ''; ARE::render($layout_dataAr, $content_dataAr);
if (!isset($op)) { $op = 'default'; } switch ($op) { case 'exe': $user_answer = $dh->get_ex_history_info($id_exe); if (AMA_DataHandler::isError($user_answer)) { //print("errore"); $errObj = new ADA_Error($user_answer, translateFN("Errore nell'ottenimento della risposta utente")); } $node = $user_answer['node_id']; //$student_id = $user_answer['student_id']; //$course_instance = $user_answer['course_id']; $id_student = $user_answer['student_id']; $id_course_instance = $user_answer['course_id']; $exercise = ExerciseDAO::getExercise($node, $id_exe); $_SESSION['exercise_object'] = serialize($exercise); if (AMA_DataHandler::isError($exercise)) { //print("errore"); $errObj = new ADA_Error($exercise, translateFN("Errore nella lettura dell'esercizio")); } $viewer = ExerciseViewerFactory::create($exercise->getExerciseFamily()); $history = $viewer->getExerciseHtml($exercise); $status = translateFN('Esercizio dello studente'); break; case 'list': case 'default': // lettura dei dati dal database // Seleziona gli esercizi dello studente selezionato nel corso selezionato $userObj->get_exercise_dataFN($id_course_instance, $userObj->getId()); // Esercizi svolti e relativi punteggi
function get_exercisesFN($user_level) { //global $dh,$error; //global $sess_id_user, $sess_id_course_instance; $dh = isset($GLOBALS['dh']) ? $GLOBALS['dh'] : null; $error = isset($GLOBALS['error']) ? $GLOBALS['error'] : null; $debug = isset($GLOBALS['debug']) ? $GLOBALS['debug'] : null; $sess_id_course_instance = isset($_SESSION['sess_id_course_instance']) ? $_SESSION['sess_id_course_instance'] : null; $sess_id_user = isset($_SESSION['sess_id_user']) ? $_SESSION['sess_id_user'] : null; // filtering exercises: // have the exercises been already executed? // HTML EMBEDDED VERSION if (!empty($this->children)) { $exerc_Ar = $this->children; // mydebug(__LINE__,__FILE__,$exerc_Ar); $dataAr = array(); foreach ($exerc_Ar as $id_exerc) { $temp = $dh->get_node_info($id_exerc); $type = $temp['type']; $exercise_type_family = $type[0]; // first char = family (3 multiple, 4 open manual 5 open automatic 6 cloze etc) /* switch (strlen($exercise_type)){ case 1: default: $exercise_type_mode = 0;// single $exercise_type_interaction = 0; // r+feedback break; case 2: $exercise_type_mode = $exercise_type[1];// second char = mode (0 single, 1 sequence, 2 random) $exercise_type_interaction = 0; // r+feedback break; case 3: $exercise_type_mode = $exercise_type[1];// second char = mode (0 single, 1 sequence, 2 random) $exercise_type_interaction = $exercise_type[2]; // third char = interaction (0 r+feedback 1 feedback 2 blind) break; } */ if ($this->isNodeExercise($exercise_type_family)) { // if ($exercise_type_family >= ADA_STANDARD_EXERCISE_TYPE) { // versione che legge nel DB la storia dell'esercizio /* $exercise = $dh->get_node_info($id_exerc); // mydebug(__LINE__,__FILE__,$exercObj); $exerc_title = $exercise['name']; $out_fields_ar = array('data_visita','ripetibile'); $history_exerc = $dh->find_ex_history_list($out_fields_ar,$sess_id_user, $sess_id_course_instance, $id_exerc); if (is_array($history_exerc)){ $h_exerc = array_shift($history_exerc); // global $debug; $debug = 1; mydebug(__LINE__,__FILE__,$h_exerc); $debug=0; if (is_array($h_exerc)) $already_executed = !$h_exerc[2]; else $already_executed = ""; } else { $already_executed = ""; } */ // versione che utilizza la classe apposita $exercise = ExerciseDAO::getExercise($id_exerc); $exerc_title = $exercise->getTitle(); $already_executed = !$exercise->getRepeatable(); if (!$already_executed) { // not yet viewed or repeatable $alt = translateFN("Esercizio"); $icon = "_exer.png"; $ok = true; } else { $alt = translateFN("Esercizio già eseguito"); $icon = "_exerdis.png"; // _gruppodis.png $ok = false; } if ($ok) { $exerc_ok = array("<img name=gruppo alt=\"{$alt}\" src=\"img/{$icon}\"> <a href=exercise.php?id_node={$id_exerc}>{$exerc_title}</a>"); } else { $exerc_ok = array("<img name=gruppo alt=\"{$alt}\" src=\"img/{$icon}\">{$exerc_title}"); } array_push($dataAr, $exerc_ok); } } $dataAr = $this->_removeEmptyElements($dataAr); $rules = ''; $style = 'table_link'; $t = new Table(); $t->initTable('0', 'center', '0', '0', '100%', '', '', '', '', '0', '0', $rules, $style); $t->setTable($dataAr, $caption = "", $summary = translateFN("Indice degli esercizi collegati")); return $t->getTable(); } else { return $this->_wrapTextInSpan(translateFN('Nessuno'), 'noitem')->getHtml() . "<p>"; } }
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(); }