0 ){ $getIncomplete = Database::fetch_array($result_select); $exe_id = $getIncomplete['exe_id']; if ($_SERVER['REQUEST_METHOD']!='POST') { define('QUESTION_LIST_ALREADY_LOGGED',1); $recorded['questionList'] = explode(',',$getIncomplete['data_tracking']); $query = 'SELECT * FROM '.$exercice_attemp_table.' WHERE exe_id = '.$getIncomplete['exe_id'].' ORDER BY tms ASC'; $result = api_sql_query($query,__FILE__,__LINE__); while ($row = Database::fetch_array($result)) { $recorded['exerciseResult'][$row['question_id']] = 1; } $exerciseResult = $_SESSION['exerciseResult'] = $recorded['exerciseResult']; $exerciseType = 2; $questionNum = count($recorded['exerciseResult']); $questionNum++; $questionList = $_SESSION['questionList'] = $recorded['questionList']; } } else { $table_recorded_not_exist = true; } } // if the user has submitted the form if ($formSent) { if ($debug>0) { echo str_repeat(' ',0).'$formSent was set'."
\n"; } // initializing if (!is_array($exerciseResult)) { $exerciseResult=array(); $exerciseResultCoordinates=array(); } // if the user has answered at least one question if (is_array($choice)) { if ($debug>0) { echo str_repeat(' ',0).'$choice is an array'."
\n"; } if ($exerciseType == 1) { // $exerciseResult receives the content of the form. // Each choice of the student is stored into the array $choice $exerciseResult=$choice; if (isset($_POST['hotspot'])) { $exerciseResultCoordinates = $_POST['hotspot']; } } else { // gets the question ID from $choice. It is the key of the array list($key)=array_keys($choice); // if the user didn't already answer this question if (!isset($exerciseResult[$key])) { // stores the user answer into the array $exerciseResult[$key]=$choice[$key]; //saving each question if ($_configuration['live_exercise_tracking'] == true && $exerciseType == 2 && $exerciseFeedbackType!=1) { $nro_question = $questionNum;// - 1; //START of saving and qualifying each question submitted //------------------------------------------------------------------------------------------ // define('ENABLED_LIVE_EXERCISE_TRACKING',1); require_once 'question.class.php'; require_once 'answer.class.php'; require_once(api_get_path(LIBRARY_PATH).'events.lib.inc.php'); $counter=0; $main_course_user_table = Database :: get_main_table(TABLE_MAIN_COURSE_USER); $table_ans = Database :: get_course_table(TABLE_QUIZ_ANSWER); //foreach($questionList as $questionId) if (true) { $exeId = $exe_id; $questionId = $key; $counter++; // gets the student choice for this question $choice=$exerciseResult[$questionId]; //print_r($choice); echo "
"; // creates a temporary Question object $objQuestionTmp = Question :: read($questionId); $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); // construction of the Answer object $objAnswerTmp=new Answer($questionId); $nbrAnswers=$objAnswerTmp->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=strpos($temp,'[tex]'); $endlocations=strpos($temp,'[/tex]'); if ($startlocations !== false && $endlocations !== false) { $texstring=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 = strpos($temp,'[')) === false) { // adds the end of the text $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[]=substr($temp,0,$pos+1); $answer.=substr($temp,0,$pos+1); //take the string remaining (after the last "[" we found) $temp=substr($temp,$pos+1); // quit the loop if there are no more blanks, and update $pos to the position of next ']' if (($pos = strpos($temp,']')) === false) { // adds the end of the text $answer.=$temp; break; } $choice[$j]=trim($choice[$j]); $user_tags[]=stripslashes(strtolower($choice[$j])); //put the contents of the [] answer tag into correct_tags[] $correct_tags[]=strtolower(substr($temp,0,$pos)); $j++; $temp=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.=stripslashes($user_tags[$i]); } elseif(!empty($user_tags[$i])) { // else if the word entered by the student IS NOT the same as the one defined by the professor // adds the word in red at the end of the string, and strikes it $answer.=''.stripslashes($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) { $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 } // end for that loops over all answers of the current question // destruction of Answer unset($objAnswerTmp); $i++; $totalWeighting+=$questionWeighting; //added by priya saini if ($_configuration['tracking_enabled']) { if (empty($choice)) { $choice = 0; } if ($answerType==MULTIPLE_ANSWER ) { if ($choice != 0) { $reply = array_keys($choice); for ($i=0;$i([0-9a-z ]*)#', $val, $arr1)) { $val = $arr1[1][0]; } $val=addslashes($val); $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__); $answer = mysql_result($res,0,"position"); 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__); $answer = mysql_result($res,0,"id"); exercise_attempt($questionScore,$answer,$quesId,$exeId,0); } else { exercise_attempt($questionScore,$answer,$quesId,$exeId,0); } } } // end huge foreach() block th //START of saving and qualifying each question submitted //------------------------------------------------------------------------------------------ // define('ENABLED_LIVE_EXERCISE_TRACKING',1); require_once 'question.class.php'; require_once 'answer.class.php'; require_once(api_get_path(LIBRARY_PATH).'events.lib.inc.php'); $counter=0; $main_course_user_table = Database :: get_main_table(TABLE_MAIN_COURSE_USER); $table_ans = Database :: get_course_table(TABLE_QUIZ_ANSWER); //foreach($questionList as $questionId) if (true) { $exeId = $exe_id; $questionId = $key; $counter++; // gets the student choice for this question $choice=$exerciseResult[$questionId]; //print_r($choice); echo "
"; // creates a temporary Question object $objQuestionTmp = Question :: read($questionId); $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); // construction of the Answer object $objAnswerTmp=new Answer($questionId); $nbrAnswers=$objAnswerTmp->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=strpos($temp,'[tex]'); $endlocations=strpos($temp,'[/tex]'); if ($startlocations !== false && $endlocations !== false) { $texstring=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 = strpos($temp,'[')) === false) { // adds the end of the text $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[]=substr($temp,0,$pos+1); $answer.=substr($temp,0,$pos+1); //take the string remaining (after the last "[" we found) $temp=substr($temp,$pos+1); // quit the loop if there are no more blanks, and update $pos to the position of next ']' if (($pos = strpos($temp,']')) === false) { // adds the end of the text $answer.=$temp; break; } $choice[$j]=trim($choice[$j]); $user_tags[]=stripslashes(strtolower($choice[$j])); //put the contents of the [] answer tag into correct_tags[] $correct_tags[]=strtolower(substr($temp,0,$pos)); $j++; $temp=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.=stripslashes($user_tags[$i]); } elseif(!empty($user_tags[$i])) { // else if the word entered by the student IS NOT the same as the one defined by the professor // adds the word in red at the end of the string, and strikes it $answer.=''.stripslashes($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) { $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 } // end for that loops over all answers of the current question // destruction of Answer unset($objAnswerTmp); $i++; $totalWeighting+=$questionWeighting; //added by priya saini if ($_configuration['tracking_enabled']) { if (empty($choice)) { $choice = 0; } if ($answerType==MULTIPLE_ANSWER ) { if ($choice != 0) { $reply = array_keys($choice); for ($i=0;$i([0-9a-z ]*)#', $val, $arr1)) { $val = $arr1[1][0]; } $val=addslashes($val); $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__); $answer = mysql_result($res,0,"position"); 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__); $answer = mysql_result($res,0,"id"); exercise_attempt($questionScore,$answer,$quesId,$exeId,0); } else { exercise_attempt($questionScore,$answer,$quesId,$exeId,0); } } } // end huge foreach() block that loops over all questions api_sql_query('UPDATE '.$stat_table.' SET exe_result = exe_result + '.(int)$totalScore.',exe_weighting = exe_weighting + '.(int)$totalWeighting.' WHERE exe_id = '.$exe_id,__FILE__,__LINE__); //END of saving and qualifying //------------------------------------------------------------------------------------------ //at loops over all questions api_sql_query('UPDATE '.$stat_table.' SET exe_result = exe_result + '.(int)$totalScore.',exe_weighting = exe_weighting + '.(int)$totalWeighting.' WHERE exe_id = '.$exe_id,__FILE__,__LINE__); //END of saving and qualifying //------------------------------------------------------------------------------------------ // } if (isset($_POST['hotspot'])) { $exerciseResultCoordinates[$key] = $_POST['hotspot'][$key]; } } } if ($debug>0) { echo str_repeat(' ',0).'$choice is an array - end'."
\n"; } } // the script "exercise_result.php" will take the variable $exerciseResult from the session api_session_register('exerciseResult'); api_session_register('exerciseResultCoordinates'); // if it is the last question (only for a sequential exercise) if($exerciseType == 1 || $questionNum >= $nbrQuestions) { if ($debug>0) { echo str_repeat(' ',0).'Redirecting to exercise_result.php - Remove debug option to let this happen'."
\n"; } // goes to the script that will show the result of the exercise if ($exerciseType == 1) { header("Location: exercise_result.php?exerciseType=$exerciseType&origin=$origin&learnpath_id=$learnpath_id&learnpath_item_id=$learnpath_item_id"); } else { if ($exe_id!='') { //clean incomplete $update_query = 'UPDATE '.$stat_table.' SET '."status = '', data_tracking='', exe_date = '".date('Y-m-d H:i:s')."'".' WHERE exe_id = '.$exe_id; api_sql_query($update_query,__FILE__,__LINE__); } header("Location: exercise_show.php?id=$exeId&origin=$origin&learnpath_id=$learnpath_id&learnpath_item_id=$learnpath_item_id"); } exit(); } if ($debug>0) { echo str_repeat(' ',0).'$formSent was set - end'."
\n"; } } // if the object is not in the session if (!isset($_SESSION['objExercise']) || $origin == 'learnpath' || $_SESSION['objExercise']->id != $_REQUEST['exerciseId']) { if ($debug>0) { echo str_repeat(' ',0).'$_SESSION[objExercise] was unset'."
\n"; } // construction of Exercise $objExercise=new Exercise(); unset($_SESSION['questionList']); // if the specified exercise doesn't exist or is disabled if (!$objExercise->read($exerciseId) || (!$objExercise->selectStatus() && !$is_allowedToEdit && ($origin != 'learnpath') )) { unset($objExercise); $error = get_lang('ExerciseNotFound'); //die(get_lang('ExerciseNotFound')); } else { // saves the object into the session api_session_register('objExercise'); if ($debug>0) { echo str_repeat(' ',0).'$_SESSION[objExercise] was unset - set now - end'."
\n"; } } } if (!isset($objExcercise) && isset($_SESSION['objExercise'])) { $objExercise = $_SESSION['objExercise']; } if (!is_object($objExercise)) { header('Location: exercice.php'); exit(); } $Exe_starttime = $objExercise->start_time; $Exe_endtime = $objExercise->end_time; $quizID = $objExercise->selectId(); $exerciseAttempts=$objExercise->selectAttempts(); $exerciseTitle=$objExercise->selectTitle(); $exerciseDescription=$objExercise->selectDescription(); $exerciseDescription=stripslashes($exerciseDescription); $exerciseSound=$objExercise->selectSound(); $randomQuestions=$objExercise->isRandom(); $exerciseType=$objExercise->selectType(); if(!isset($_SESSION['questionList']) || $origin == 'learnpath') { if($debug>0){echo str_repeat(' ',0).'$_SESSION[questionList] was unset'."
\n";} // selects the list of question ID $questionList = ($randomQuestions?$objExercise->selectRandomList():$objExercise->selectQuestionList()); // saves the question list into the session api_session_register('questionList'); if($debug>0){echo str_repeat(' ',0).'$_SESSION[questionList] was unset - set now - end'."
\n";} } if(!isset($objExcercise) && isset($_SESSION['objExercise'])){ $questionList = $_SESSION['questionList']; } $quizStartTime = time(); api_session_register('quizStartTime'); $nbrQuestions=sizeof($questionList); // if questionNum comes from POST and not from GET if(!$questionNum || $_POST['questionNum']) { // only used for sequential exercises (see $exerciseType) if(!$questionNum) { $questionNum=1; } else { $questionNum++; } } //$nameTools=get_lang('Exercice'); $interbreadcrumb[]=array("url" => "exercice.php","name" => get_lang('Exercices')); $interbreadcrumb[]=array("url" => "#","name" => $exerciseTitle); if ($origin != 'learnpath') { //so we are not in learnpath tool $htmlHeadXtra[] = " "; $htmlHeadXtra[] = ""; 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 */ ?> ".$exerciseTitle.""; if( $exerciseAttempts > 0){ $user_id = api_get_user_id(); $course_code = api_get_course_id(); $sql = "SELECT count(*) FROM $stat_table WHERE exe_exo_id = '$quizID' AND exe_user_id = '$user_id' AND status != 'incomplete' AND orig_lp_id = $safe_lp_id AND orig_lp_item_id = $safe_lp_item_id AND exe_cours_id = '$course_code' AND session_id = '".(int)$_SESSION['id_session']."'"; $aquery = api_sql_query($sql, __FILE__, __LINE__); $attempt = Database::fetch_array($aquery); if ( $attempt[0] >= $exerciseAttempts ) { if (!api_is_allowed_to_edit()) { Display::display_warning_message(sprintf(get_lang('ReachedMaxAttempts'),$exerciseTitle,$exerciseAttempts)); Display::display_footer(); exit; } else { Display::display_warning_message(sprintf(get_lang('ReachedMaxAttemptsAdmin'),$exerciseTitle,$exerciseAttempts)); } } } if (!function_exists('convert_date_to_number')) { function convert_date_to_number($default){ // 2008-10-12 00:00:00 ---to--> 12345672218 (timestamp) $parts = split(' ',$default); list($d_year,$d_month,$d_day) = split('-',$parts[0]); list($d_hour,$d_minute,$d_second) = split(':',$parts[1]); return mktime($d_hour, $d_minute, $d_second, $d_month, $d_day, $d_year); } } $limit_time_exists = (($Exe_starttime!='0000-00-00 00:00:00')||($Exe_endtime!='0000-00-00 00:00:00'))? true : false; if($limit_time_exists){ $exercise_start_time = convert_date_to_number($Exe_starttime); $exercise_end_time = convert_date_to_number($Exe_endtime); $time_now = convert_date_to_number(date('Y-m-d H:i:s')); $permission_to_start = (($time_now - $exercise_start_time)>0)?true:false; if($_SERVER['REQUEST_METHOD']!='POST')$exercise_timeover = (($time_now - $exercise_end_time)>0)?true:false; if($permission_to_start == false || $exercise_timeover == true ){ // if(!api_is_allowed_to_edit()){ $message_warning = ($permission_to_start == false)? get_lang('ExerciseNoStartedYet') : get_lang('ReachedTimeLimit') ; Display::display_warning_message(sprintf($message_warning,$exerciseTitle,$exerciseAttempts)); Display::display_footer(); exit; } else { $message_warning = ($permission_to_start == false)? get_lang('ExerciseNoStartedAdmin') : get_lang('ReachedTimeLimitAdmin') ; Display::display_warning_message(sprintf($message_warning,$exerciseTitle,$exerciseAttempts)); } } } if(!empty($error)) { Display::display_error_message($error,false); } else { if(!empty($exerciseSound)) { echo "", ",get_lang('Sound')."; } // Get number of hotspot questions for javascript validation $number_of_hotspot_questions = 0; $onsubmit = ''; $i=0; foreach($questionList as $questionId) { $i++; $objQuestionTmp = Question :: read($questionId); // for sequential exercises if($exerciseType == 2) { // if it is not the right question, goes to the next loop iteration if($questionNum != $i) { continue; } else { if ($objQuestionTmp->selectType() == HOT_SPOT) { $number_of_hotspot_questions++; } break; } } else { if ($objQuestionTmp->selectType() == HOT_SPOT) { $number_of_hotspot_questions++; } } } if($number_of_hotspot_questions > 0) { $onsubmit = "onsubmit=\"return validateFlashVar('".$number_of_hotspot_questions."', '".get_lang('HotspotValidateError1')."', '".get_lang('HotspotValidateError2')."');\""; } $s="

$exerciseDescription

"; if($exerciseType==2){ $s2 = "&exerciseId=".$exerciseId; } $s.="
"; echo $s; $i=0; foreach($questionList as $questionId) { $i++; // for sequential exercises if($exerciseType == 2) { // if it is not the right question, goes to the next loop iteration if($questionNum != $i){ continue; } else { if ($exerciseFeedbackType!=1) { // if the user has already answered this question if(isset($exerciseResult[$questionId])) { // construction of the Question object $objQuestionTmp = Question::read($questionId); $questionName=$objQuestionTmp->selectTitle(); // destruction of the Question object unset($objQuestionTmp); echo ''; break; } } } } /* $s="
'.get_lang('AlreadyAnswered').' "'.$questionName.'"
".get_lang('Question')." "; */ // shows the question and its answers showQuestion($questionId, false, $origin,$i,$nbrQuestions); // for sequential exercises if($exerciseType == 2) { // quits the loop break; } } // end foreach() echo "
"; $submit_btn=""; } echo $submit_btn; echo ""; $b=2; } if($_configuration['live_exercise_tracking'] == true && $exerciseFeedbackType!=1) { //if($questionNum < 2){ if($table_recorded_not_exist){ if($exerciseType == 2){ api_sql_query("INSERT INTO $stat_table(exe_exo_id,exe_user_id,exe_cours_id,status,session_id,data_tracking,start_date,orig_lp_id,orig_lp_item_id) VALUES('$exerciseId','".api_get_user_id()."','".$_course['id']."','incomplete','".api_get_session_id()."','".implode(',',$questionList)."','".date('Y-m-d H:i:s')."',$safe_lp_id,$safe_lp_item_id)",__FILE__,__LINE__); } else { api_sql_query("INSERT INTO $stat_table (exe_exo_id,exe_user_id,exe_cours_id,status,session_id,start_date,orig_lp_id,orig_lp_item_id) VALUES('$exerciseId','".api_get_user_id()."','".$_course['id']."','incomplete','".api_get_session_id()."','".date('Y-m-d H:i:s')."',$safe_lp_id,$safe_lp_item_id)",__FILE__,__LINE__); } } } if ($origin != 'learnpath') { //so we are not in learnpath tool Display::display_footer(); }