0){echo str_repeat(' ',0).'Entered exercise_result.php'."
\n";var_dump($_POST);} // general parameters passed via POST/GET if ( empty ( $origin ) ) { $origin = Security::remove_XSS($_REQUEST['origin']); } if ( empty ( $learnpath_id ) ) { $learnpath_id = Security::remove_XSS($_REQUEST['learnpath_id']); } if ( empty ( $learnpath_item_id ) ) { $learnpath_item_id = Security::remove_XSS($_REQUEST['learnpath_item_id']); } if ( empty ( $formSent ) ) { $formSent = $_REQUEST['formSent']; } if ( empty ( $exerciseResult ) ) { $exerciseResult = $_SESSION['exerciseResult']; } if ( empty ( $exerciseResultCoordinates ) ) { $exerciseResultCoordinates = $_SESSION['exerciseResultCoordinates']; } if ( empty ( $questionId ) ) { $questionId = $_REQUEST['questionId']; } if ( empty ( $choice ) ) { $choice = $_REQUEST['choice']; } if ( empty ( $questionNum ) ) { $questionNum = $_REQUEST['questionNum']; } if ( empty ( $nbrQuestions ) ) { $nbrQuestions = $_REQUEST['nbrQuestions']; } if ( empty ( $questionList ) ) { $questionList = $_SESSION['questionList']; } if ( empty ( $objExercise ) ) { $objExercise = $_SESSION['objExercise']; } if ( empty ( $exerciseType ) ) { $exerciseType = $_REQUEST['exerciseType']; } $_configuration['live_exercise_tracking'] = false; if($_configuration['live_exercise_tracking']) define('ENABLED_LIVE_EXERCISE_TRACKING',1); if($_configuration['live_exercise_tracking'] == true && $exerciseType == 1){ $_configuration['live_exercise_tracking'] = false; } // set admin name as person who sends the results e-mail (lacks policy about whom should really send the results) $main_user_table = Database :: get_main_table(TABLE_MAIN_USER); $main_admin_table = Database :: get_main_table(TABLE_MAIN_ADMIN); $courseName = $_SESSION['_course']['name']; $query = "SELECT user_id FROM $main_admin_table LIMIT 1"; //get all admins from admin table $admin_id = Database::result(api_sql_query($query),0,"user_id"); $uinfo = api_get_user_info($admin_id); $from = $uinfo['mail']; $from_name = $uinfo['firstname'].' '.$uinfo['lastname']; $str = $_SERVER['REQUEST_URI']; $url = api_get_path(WEB_CODE_PATH).'exercice/exercice.php?'.api_get_cidreq().'&show=result'; $sql_fb_type='SELECT feedback_type FROM '.$TBL_EXERCICES.' WHERE id ="'.Database::escape_string($objExercise->selectId()).'"'; $res_fb_type=Database::query($sql_fb_type,__FILE__,__LINE__); $row_fb_type=Database::fetch_row($res_fb_type); $feedback_type = $row_fb_type[0]; // if the above variables are empty or incorrect, we don't have any result to show, so stop the script if(!is_array($exerciseResult) || !is_array($questionList) || !is_object($objExercise)) { header('Location: exercice.php'); exit(); } // define basic exercise info to print on screen $exerciseTitle=$objExercise->selectTitle(); $exerciseDescription=$objExercise->selectDescription(); $gradebook = ''; if (isset($_SESSION['gradebook'])){ $gradebook= $_SESSION['gradebook']; } if (!empty($gradebook) && $gradebook=='view') { $interbreadcrumb[]= array ( 'url' => '../gradebook/'.$_SESSION['gradebook_dest'], 'name' => get_lang('Gradebook') ); } $nameTools=get_lang('Exercice'); $interbreadcrumb[]=array("url" => "exercice.php?gradebook=$gradebook","name" => get_lang('Exercices')); $htmlHeadXtra[] = " "; if ($origin != 'learnpath') { //so we are not in learnpath tool Display::display_header($nameTools,"Exercise"); } else { if (empty($charset)) { $charset = 'ISO-8859-15'; } header('Content-Type: text/html; charset='. $charset); @$document_language = Database::get_language_isocode($language_interface); if(empty($document_language)) { //if there was no valid iso-code, use the english one $document_language = 'en'; } /* * HTML HEADER */ ?> results_disabled) { ob_start(); } /* FUNCTIONS */ function display_unique_or_multiple_answer($answerType, $studentChoice, $answer, $answerComment, $answerCorrect) { ?>  '.nl2br(make_clickable($answerComment)).''; } else{ echo ''.nl2br(make_clickable($answerComment)).''; } } else { echo ' '; } ?>
'; } else { echo ''; } echo $answerComment; echo ''; ?> '; echo Display::return_icon('quiz.gif', get_lang('GoBackToEx')).''.get_lang('GoBackToEx').''; echo Display::return_icon('edit.gif', get_lang('ModifyExercise')).''.get_lang('ModifyExercise').''; echo ''; } $exerciseTitle=api_parse_tex($exerciseTitle); //show exercise title ?>

:

0){echo "ExerciseResult: "; var_dump($exerciseResult); echo "QuestionList: ";var_dump($questionList);} if ($_configuration['tracking_enabled']) { // Create an empty exercise $exeId= create_event_exercice($objExercise->selectId()); } $counter=0; // Loop over all question to show results for each of them, one by one foreach ($questionList as $questionId) { $counter++; // gets the student choice for this question $choice=$exerciseResult[$questionId]; // creates a temporary Question object $objQuestionTmp = Question :: read($questionId); // initialize question information $questionName=$objQuestionTmp->selectTitle(); $questionDescription=$objQuestionTmp->selectDescription(); $questionWeighting=$objQuestionTmp->selectWeighting(); $answerType=$objQuestionTmp->selectType(); $quesId =$objQuestionTmp->selectId(); //added by priya saini // destruction of the Question object unset($objQuestionTmp); // decide how many columns we want to use to show the results of each type if($answerType == UNIQUE_ANSWER || $answerType == MULTIPLE_ANSWER) { $colspan=4; } elseif($answerType == MATCHING || $answerType == FREE_ANSWER) { $colspan=2; } elseif($answerType == HOT_SPOT || $answerType == HOT_SPOT_ORDER) { $colspan=4; $rowspan=$nbrAnswers+1; } else { $colspan=1; } // show titles if ($origin != 'learnpath') {?>
selectNbrAnswers(); $questionScore=0; if ($answerType == FREE_ANSWER) { $nbrAnswers = 1; } for ($answerId=1;$answerId <= $nbrAnswers;$answerId++) { $answer=$objAnswerTmp->selectAnswer($answerId); $answerComment=$objAnswerTmp->selectComment($answerId); $answerCorrect=$objAnswerTmp->isCorrect($answerId); $answerWeighting=$objAnswerTmp->selectWeighting($answerId); switch ($answerType) { // for unique answer case UNIQUE_ANSWER : $studentChoice=($choice == $answerId)?1:0; if($studentChoice) { $questionScore+=$answerWeighting; $totalScore+=$answerWeighting; } break; // for multiple answers case MULTIPLE_ANSWER : $studentChoice=$choice[$answerId]; if($studentChoice) { $questionScore+=$answerWeighting; $totalScore+=$answerWeighting; } break; // for fill in the blanks case FILL_IN_BLANKS : // the question is encoded like this // [A] B [C] D [E] F::10,10,10@1 // number 1 before the "@" means that is a switchable fill in blank question // [A] B [C] D [E] F::10,10,10@ or [A] B [C] D [E] F::10,10,10 // means that is a normal fill blank question // first we explode the "::" $pre_array = explode('::', $answer); // is switchable fill blank or not $last = count($pre_array)-1; $is_set_switchable = explode('@', $pre_array[$last]); $switchable_answer_set=false; if (isset($is_set_switchable[1]) && $is_set_switchable[1]==1) { $switchable_answer_set=true; } $answer = ''; for ($k=0; $k<$last; $k++) { $answer .= $pre_array[$k]; } // splits weightings that are joined with a comma $answerWeighting = explode(',',$is_set_switchable[0]); // we save the answer because it will be modified $temp=$answer; // TeX parsing // 1. find everything between the [tex] and [/tex] tags $startlocations=api_strpos($temp,'[tex]'); $endlocations=api_strpos($temp,'[/tex]'); if($startlocations !== false && $endlocations !== false) { $texstring=api_substr($temp,$startlocations,$endlocations-$startlocations+6); // 2. replace this by {texcode} $temp=str_replace($texstring,'{texcode}',$temp); } $answer=''; $j=0; //initialise answer tags $user_tags=array(); $correct_tags=array(); $real_text=array(); // the loop will stop at the end of the text while(1) { // quits the loop if there are no more blanks (detect '[') if(($pos = api_strpos($temp,'[')) === false) { // adds the end of the textsolution $answer=$temp; // TeX parsing - replacement of texcode tags $texstring = api_parse_tex($texstring); $answer=str_replace("{texcode}",$texstring,$answer); $real_text[] = $answer; break; //no more "blanks", quit the loop } // adds the piece of text that is before the blank //and ends with '[' into a general storage array $real_text[]=api_substr($temp,0,$pos+1); $answer.=api_substr($temp,0,$pos+1); //take the string remaining (after the last "[" we found) $temp=api_substr($temp,$pos+1); // quit the loop if there are no more blanks, and update $pos to the position of next ']' if(($pos = api_strpos($temp,']')) === false) { // adds the end of the text $answer.=$temp; break; } $choice[$j]=trim($choice[$j]); $user_tags[]=api_strtolower($choice[$j]); //put the contents of the [] answer tag into correct_tags[] $correct_tags[]=api_strtolower(api_substr($temp,0,$pos)); $j++; $temp=api_substr($temp,$pos+1); //$answer .= ']'; } $answer=''; $real_correct_tags = $correct_tags; $chosen_list=array(); for($i=0;$i'; } else { // adds a tabulation if no word has been typed by the student $answer.='   '; } } else { // switchable fill in the blanks if (in_array($user_tags[$i],$correct_tags)) { $chosen_list[]=$user_tags[$i]; $correct_tags=array_diff($correct_tags,$chosen_list); // gives the related weighting to the student $questionScore+=$answerWeighting[$i]; // increments total score $totalScore+=$answerWeighting[$i]; // adds the word in green at the end of the string $answer.=$user_tags[$i]; } // else if the word entered by the student IS NOT the same as the one defined by the professor elseif(!empty($user_tags[$i])) { // adds the word in red at the end of the string, and strikes it $answer.=''.$user_tags[$i].''; } else { // adds a tabulation if no word has been typed by the student $answer.='   '; } } // adds the correct word, followed by ] to close the blank $answer.=' / '.$real_correct_tags[$i].']'; if ( isset( $real_text[$i+1] ) ) { $answer.=$real_text[$i+1]; } } break; // for free answer case FREE_ANSWER : $studentChoice=$choice; if($studentChoice) { //Score is at -1 because the question has'nt been corected $questionScore=-1; $totalScore+=0; } break; // for matching case MATCHING : if($answerCorrect) { if($answerCorrect == $choice[$answerId]) { $questionScore+=$answerWeighting; $totalScore+=$answerWeighting; $choice[$answerId]=$matching[$choice[$answerId]]; } elseif(!$choice[$answerId]) { $choice[$answerId]='   '; } else { $choice[$answerId]=''.$matching[$choice[$answerId]].''; } } else { $matching[$answerId]=$answer; } break; // for hotspot with no order case HOT_SPOT : $studentChoice=$choice[$answerId]; if ($studentChoice) { //the answer was right $questionScore+=$answerWeighting; $totalScore+=$answerWeighting; } break; // for hotspot with fixed order case HOT_SPOT_ORDER : $studentChoice=$choice['order'][$answerId]; if($studentChoice == $answerId) { $questionScore+=$answerWeighting; $totalScore+=$answerWeighting; $studentChoice = true; } else { $studentChoice = false; } break; } // end switch Answertype //display answers (if not matching type, or if the answer is correct) if ($answerType != MATCHING || $answerCorrect) { if ($answerType == UNIQUE_ANSWER || $answerType == MULTIPLE_ANSWER) { if ($origin!='learnpath') { display_unique_or_multiple_answer($answerType, $studentChoice, $answer, $answerComment, $answerCorrect); } } elseif($answerType == FILL_IN_BLANKS) { if ($origin!='learnpath') { display_fill_in_blanks_answer($answer); } } elseif($answerType == FREE_ANSWER) { // to store the details of open questions in an array to be used in mail $arrques[] = $questionName; $arrans[] = $choice; $firstName = $_SESSION['_user']['firstName']; $lastName = $_SESSION['_user']['lastName']; $mail = $_SESSION['_user']['mail']; $coursecode = $_SESSION['_course']['id']; $to = ''; $teachers = array(); if(api_get_setting('use_session_mode')=='true' && !empty($_SESSION['id_session'])) { $teachers = CourseManager::get_coach_list_from_course_code($coursecode,$_SESSION['id_session']); } else { $teachers = CourseManager::get_teacher_list_from_course_code($coursecode); } $num = count($teachers); if($num>1) { $to = array(); foreach($teachers as $teacher) { $to[] = $teacher['email']; } }elseif($num>0){ foreach($teachers as $teacher) { $to = $teacher['email']; } }else{ //this is a problem (it means that there is no admin for this course) } if($origin != 'learnpath') { display_free_answer($choice); } } elseif($answerType == HOT_SPOT) { if ($origin != 'learnpath') { display_hotspot_answer($answerId, $answer, $studentChoice, $answerComment); } } elseif($answerType == HOT_SPOT_ORDER) { display_hotspot_order_answer($answerId, $answer, $studentChoice, $answerComment); } else { if ($origin != 'learnpath') { ?> "; //echo Security::remove_XSS($questionId); ?>






/




([0-9a-z ]*)#', $val, $arr1)) $val = $arr1[1][0]; $val=strip_tags($val); $sql = "SELECT position from $table_ans where question_id='".Database::escape_string($questionId)."' and answer='".Database::escape_string($val)."' AND correct=0"; $res = api_sql_query($sql, __FILE__, __LINE__); if (Database::num_rows($res)>0) { $answer = Database::result($res,0,"position"); } else { $answer = 0; } exercise_attempt($questionScore,$answer,$quesId,$exeId,$j); } } elseif ($answerType==FREE_ANSWER) { $answer = $choice; exercise_attempt($questionScore,$answer,$quesId,$exeId,0); } elseif ($answerType==UNIQUE_ANSWER) { $sql = "SELECT id FROM $table_ans WHERE question_id='".Database::escape_string($questionId)."' and position='".Database::escape_string($choice)."'"; $res = api_sql_query($sql, __FILE__, __LINE__); if (Database::num_rows($res)>0) { $answer = Database::result($res,0,"id"); exercise_attempt($questionScore,$answer,$quesId,$exeId,0); } else { exercise_attempt($questionScore,0 ,$quesId,$exeId,0); } } elseif ($answerType == HOT_SPOT) { exercise_attempt($questionScore, $answer, $quesId, $exeId, 0); if (is_array($exerciseResultCoordinates[$quesId])) { foreach($exerciseResultCoordinates[$quesId] as $idx => $val) { exercise_attempt_hotspot($exeId,$quesId,$idx,$choice[$idx],$val); } } } else { exercise_attempt($questionScore,$answer,$quesId,$exeId,0); } } } // end huge foreach() block that loops over all questions ?>



'.$href.''."\n"; } /* ============================================================================== Tracking of results ============================================================================== */ if ($_configuration['tracking_enabled']) { // Updates the empty exercise $safe_lp_id = $learnpath_id==''?0:(int)$learnpath_id; $safe_lp_item_id = $learnpath_item_id==''?0:(int)$learnpath_item_id; $quizDuration = (!empty($_SESSION['quizStartTime']) ? time() - $_SESSION['quizStartTime'] : 0); update_event_exercice($exeId, $objExercise->selectId(),$totalScore,$totalWeighting,api_get_session_id(),$safe_lp_id,$safe_lp_item_id,$quizDuration); } if($objExercise->results_disabled) { ob_end_clean(); if ($origin != 'learnpath') { Display :: display_normal_message(get_lang('ExerciseFinished').'
'.get_lang('Back').'',false); } else { Display :: display_normal_message(get_lang('ExerciseFinished').'

',false); } } if ($origin != 'learnpath') { //we are not in learnpath tool Display::display_footer(); } else { //record the results in the learning path, using the SCORM interface (API) echo ''."\n"; echo ''; } if(count($arrques)>0) { $mycharset = api_get_setting('platform_charset'); $msg = ' '; $msg .= '

'.get_lang('OpenQuestionsAttempted').' :

'.get_lang('AttemptDetails').' : >

  '.get_lang('CourseName').'

#course#

  '.get_lang('TestAttempted').' #exercise#
  '.get_lang('StudentName').' #firstName# #lastName#
  '.get_lang('StudentEmail').' #mail#


'.get_lang('OpenQuestionsAttemptedAre').' :

'; for($i=0;$i '; $msg1= str_replace("#exercise#",$exerciseTitle,$msg); $msg= str_replace("#firstName#",$firstName,$msg1); $msg1= str_replace("#lastName#",$lastName,$msg); $msg= str_replace("#mail#",$mail,$msg1); $msg1= str_replace("#questionName#",$arrques[$i],$msg); $msg= str_replace("#answer#",$arrans[$i],$msg1); $msg1= str_replace("#i#",$i,$msg); $msg= str_replace("#course#",$courseName,$msg1); } $msg.='
#questionName#
  '.get_lang('Answer').' #answer#

'.get_lang('ClickToCommentAndGiveFeedback').',
#url#
'; $msg1= str_replace("#url#",$url,$msg); $mail_content = $msg1; $student_name = $_SESSION['_user']['firstName'].' '.$_SESSION['_user']['lastName']; $subject = get_lang('OpenQuestionsAttempted'); $from = api_get_setting('noreply_email_address'); if($from == '') { if(isset($_SESSION['id_session']) && $_SESSION['id_session'] != ''){ $sql = 'SELECT user.email,user.lastname,user.firstname FROM '.TABLE_MAIN_SESSION.' as session, '.TABLE_MAIN_USER.' as user WHERE session.id_coach = user.user_id AND session.id = "'.Database::escape_string($_SESSION['id_session']).'" '; $result=api_sql_query($sql,__FILE__,__LINE__); $from = Database::result($result,0,'email'); $from_name = Database::result($result,0,'firstname').' '.Database::result($result,0,'lastname'); } else { $array = explode(' ',$_SESSION['_course']['titular']); $firstname = $array[1]; $lastname = $array[0]; $sql = 'SELECT email,lastname,firstname FROM '.TABLE_MAIN_USER.' WHERE firstname = "'.Database::escape_string($firstname).'" AND lastname = "'.Database::escape_string($lastname).'" '; $result=api_sql_query($sql,__FILE__,__LINE__); $from = Database::result($result,0,'email'); $from_name = Database::result($result,0,'firstname').' '.Database::result($result,0,'lastname'); } } api_mail_html($student_name, $to, $subject, $mail_content, $from_name, $from, array('encoding'=>$mycharset,'charset'=>$mycharset)); } ?>