'; if($_GET['delete']=='delete' && ($is_allowedToEdit || api_is_coach()) && !empty($_GET['did'])){ $sql='DELETE FROM '.Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES).' WHERE exe_id = '.(int)$_GET['did']; api_sql_query ($sql,__FILE__,__LINE__); header('Location: exercice.php?cidReq='.htmlentities($_GET['cidReq']).'&show=result'); exit; } if ($show=='result' && $_REQUEST['comments']=='update' && ($is_allowedToEdit || $is_tutor)) { $id = $_GET['exeid']; $emailid = $_GET['emailid']; $test = $_GET['test']; $from = $_SESSION['_user']['mail']; $from_name = $_SESSION['_user']['firstName']." ".$_SESSION['_user']['lastName']; $url = api_get_path(WEB_CODE_PATH).'exercice/exercice.php?'.api_get_cidreq().'&show=result'; foreach ($_POST as $key=>$v) { $keyexp = explode('_',$key); if ($keyexp[0] == "marks") { $sql = "SELECT question from $TBL_QUESTIONS where id = '".Database::escape_string($keyexp[1])."'"; $result =api_sql_query($sql, __FILE__, __LINE__); $ques_name = mysql_result($result,0,"question"); $query = "UPDATE $TBL_TRACK_ATTEMPT SET marks = '".Database::escape_string($v)."' WHERE question_id = '".Database::escape_string($keyexp[1])."' AND exe_id='".Database::escape_string($id)."'"; api_sql_query($query, __FILE__, __LINE__); $qry = 'SELECT sum(marks) as tot FROM '.$TBL_TRACK_ATTEMPT.' where exe_id = '.intval($id).' GROUP BY question_id'; $res = api_sql_query($qry,__FILE__,__LINE__); $tot = mysql_result($res,0,'tot'); $totquery = "update $TBL_TRACK_EXERCICES set exe_result = '".Database::escape_string($tot)."' where exe_Id='".Database::escape_string($id)."'"; api_sql_query($totquery, __FILE__, __LINE__); } else { $query = "UPDATE $TBL_TRACK_ATTEMPT SET teacher_comment = '".Database::escape_string($v)."' WHERE question_id = '".Database::escape_string($keyexp[1])."' AND exe_id = '".Database::escape_string($id)."'"; api_sql_query($query, __FILE__, __LINE__); } } $qry = 'SELECT DISTINCT question_id, marks FROM '.$TBL_TRACK_ATTEMPT.' where exe_id = '.intval($id).' GROUP BY question_id'; $res = api_sql_query($qry,__FILE__,__LINE__); $tot = 0; while($row = Database::fetch_array($res,'ASSOC')) { $tot += $row ['marks']; } $totquery = "UPDATE $TBL_TRACK_EXERCICES SET exe_result = '".Database::escape_string($tot)."' WHERE exe_Id='".Database::escape_string($id)."'"; api_sql_query($totquery, __FILE__, __LINE__); $subject = get_lang('ExamSheetVCC'); $htmlmessage = ''. '' . '' . '' . '' . '
' . '

'.get_lang('DearStudentEmailIntroduction').'

' . '

'.get_lang('AttemptVCC').'

' . ' ' . ' ' . ' ' . ' ' . ' ' . ' ' . ' ' . ' ' . ' ' . '
  '.get_lang('Question').'#ques_name#
  '.get_lang('Exercice').'#test#
' . '

'.get_lang('ClickLinkToViewComment').' #url#
' . '
' . ' '.get_lang('Regards').'

' . '
' . ' ' . ' '; $message = '

'.sprintf(get_lang('AttemptVCCLong'),$test).' #url#


'; $mess= str_replace("#test#",$test,$message); //$message= str_replace("#ques_name#",$ques_name,$mess); $message = str_replace("#url#",$url,$mess); $mess = stripslashes($message); $headers = " MIME-Version: 1.0 \r\n"; $headers .= "User-Agent: Dokeos/1.6"; $headers .= "Content-Transfer-Encoding: 7bit"; $headers .= 'From: '.$from_name.' <'.$from.'>' . "\r\n"; $headers="From:$from_name\r\nReply-to: $to\r\nContent-type: text/html; charset=".($charset?$charset:'ISO-8859-15'); //mail($emailid, $subject, $mess,$headers); api_mail_html($emailid, $emailid, $subject, $mess, $from_name, $from); if(in_array($origin, array('tracking_course','user_course'))){ //Redirect to the reporting header('location: ../mySpace/myStudents.php?origin='.$origin.'&student='.$_GET['student'].'&details=true&course='.$_GET['course']); } } if($show!='result') { $nameTools=get_lang('Exercices'); } else { if($is_allowedToEdit || $is_tutor) { $nameTools=get_lang('StudentScore'); $interbreadcrumb[]=array("url" => "exercice.php","name" => get_lang('Exercices')); } else { $nameTools=get_lang('YourScore'); $interbreadcrumb[]=array("url" => "exercice.php","name" => get_lang('Exercices')); } } // need functions of statsutils lib to display previous exercices scores include_once(api_get_path(LIBRARY_PATH).'statsUtils.lib.inc.php'); if($is_allowedToEdit && !empty($choice) && $choice == 'exportqti2') { require_once('export/qti2/qti2_export.php'); $export = export_exercise($exerciseId,true); require_once(api_get_path(LIBRARY_PATH).'pclzip/pclzip.lib.php'); $garbage_path = api_get_path(GARBAGE_PATH); $temp_dir_short = uniqid(); $temp_zip_dir = $garbage_path."/".$temp_dir_short; if(!is_dir($temp_zip_dir)) mkdir($temp_zip_dir); $temp_zip_file = $temp_zip_dir."/".md5(time()).".zip"; $temp_xml_file = $temp_zip_dir."/qti2export_".$exerciseId.'.xml'; file_put_contents($temp_xml_file,$export); $zip_folder=new PclZip($temp_zip_file); $zip_folder->add($temp_xml_file, PCLZIP_OPT_REMOVE_ALL_PATH); $name = 'qti2_export_'.$exerciseId.'.zip'; //DocumentManager::string_send_for_download($export,true,'qti2export_'.$exerciseId.'.xml'); DocumentManager::file_send_for_download($temp_zip_file,true,$name); unlink($temp_zip_file); unlink($temp_xml_file); rmdir($temp_zip_dir); exit(); //otherwise following clicks may become buggy } if(!empty($_POST['export_user_fields'])) { switch($_POST['export_user_fields']) { case 'export_user_fields': $_SESSION['export_user_fields'] = true; break; case 'do_not_export_user_fields': default: $_SESSION['export_user_fields'] = false; break; } } if(!empty($_POST['export_report']) && $_POST['export_report'] == 'export_report') { if(api_is_platform_admin() || api_is_course_admin() || api_is_course_tutor() || api_is_course_coach()) { $user_id = null; if(empty($_SESSION['export_user_fields'])) $_SESSION['export_user_fields'] = false; if(!$is_allowedToEdit and !$is_tutor) { $user_id = api_get_user_id(); } require_once('exercise_result.class.php'); switch($_POST['export_format']) { case 'xls': $export = new ExerciseResult(); $export->exportCompleteReportXLS($documentPath, $user_id, $_SESSION['export_user_fields']); exit; break; case 'csv': default: $export = new ExerciseResult(); $export->exportCompleteReportCSV($documentPath, $user_id, $_SESSION['export_user_fields']); exit; break; } } else { api_not_allowed(true); } } if ($origin != 'learnpath') { //so we are not in learnpath tool Display::display_header($nameTools,"Exercise"); if(isset($_GET['message'])) { if (in_array($_GET['message'], array('ExerciseEdited'))) { Display::display_confirmation_message(get_lang($_GET['message'])); } } } else { echo ''; } // used for stats include_once(api_get_path(LIBRARY_PATH).'events.lib.inc.php'); event_access_tool(TOOL_QUIZ); Display::display_introduction_section(TOOL_QUIZ); // selects $limitExPage exercises at the same time $from=$page*$limitExPage; $sql="SELECT count(id) FROM $TBL_EXERCICES"; $res = api_sql_query($sql,__FILE__,__LINE__); list($nbrexerc) = Database::fetch_array($res); HotPotGCt($documentPath,1,$_user['user_id']); // only for administrator if($is_allowedToEdit) { if(!empty($choice)) { // construction of Exercise $objExerciseTmp=new Exercise(); if($objExerciseTmp->read($exerciseId)) { switch($choice) { case 'delete': // deletes an exercise $objExerciseTmp->delete(); Display::display_confirmation_message(get_lang('ExerciseDeleted')); break; case 'enable': // enables an exercise $objExerciseTmp->enable(); $objExerciseTmp->save(); // "WHAT'S NEW" notification: update table item_property (previously last_tooledit) api_item_property_update($_course, TOOL_QUIZ, $exerciseId, "QuizAdded", $_user['user_id']); Display::display_confirmation_message(get_lang('VisibilityChanged')); break; case 'disable': // disables an exercise $objExerciseTmp->disable(); $objExerciseTmp->save(); Display::display_confirmation_message(get_lang('VisibilityChanged')); break; case 'disable_results' : //disable the results for the learners $objExerciseTmp->disable_results(); $objExerciseTmp->save(); Display::display_confirmation_message(get_lang('ResultsDisabled')); break; case 'enable_results' : //disable the results for the learners $objExerciseTmp->enable_results(); $objExerciseTmp->save(); Display::display_confirmation_message(get_lang('ResultsEnabled')); break; } } // destruction of Exercise unset($objExerciseTmp); } //$sql="SELECT id,title,type,active FROM $TBL_EXERCICES ORDER BY title LIMIT $from,".($limitExPage+1); //$result=api_sql_query($sql,__FILE__,__LINE__); if(!empty($hpchoice)) { switch($hpchoice) { case 'delete': // deletes an exercise $imgparams = array(); $imgcount = 0; GetImgParams($file,$documentPath,$imgparams,$imgcount); $fld = GetFolderName($file); for($i=0;$i < $imgcount;$i++) { my_delete($documentPath.$uploadPath."/".$fld."/".$imgparams[$i]); update_db_info("delete", $uploadPath."/".$fld."/".$imgparams[$i]); } if ( my_delete($documentPath.$file)) { update_db_info("delete", $file); } my_delete($documentPath.$uploadPath."/".$fld."/"); break; case 'enable': // enables an exercise $newVisibilityStatus = "1"; //"visible" $query = "SELECT id FROM $TBL_DOCUMENT WHERE path='".Database::escape_string($file)."'"; $res = api_sql_query($query,__FILE__,__LINE__); $row = Database::fetch_array($res, 'ASSOC'); api_item_property_update($_course, TOOL_DOCUMENT, $row['id'], 'visible', $_user['user_id']); //$dialogBox = get_lang('ViMod'); break; case 'disable': // disables an exercise $newVisibilityStatus = "0"; //"invisible" $query = "SELECT id FROM $TBL_DOCUMENT WHERE path='".Database::escape_string($file)."'"; $res = api_sql_query($query,__FILE__,__LINE__); $row = Database::fetch_array($res, 'ASSOC'); api_item_property_update($_course, TOOL_DOCUMENT, $row['id'], 'invisible', $_user['user_id']); #$query = "UPDATE $TBL_DOCUMENT SET visibility='$newVisibilityStatus' WHERE path=\"".$file."\""; //added by Toon #api_sql_query($query,__FILE__,__LINE__); //$dialogBox = get_lang('ViMod'); break; default: break; } } if($show == 'test') { $sql="SELECT id,title,type,active,description, results_disabled FROM $TBL_EXERCICES WHERE active<>'-1' ORDER BY title LIMIT ".(int)$from.",".(int)($limitExPage+1); $result=api_sql_query($sql,__FILE__,__LINE__); } } // only for students elseif($show == 'test') { $sql="SELECT id,title,type,description, results_disabled FROM $TBL_EXERCICES WHERE active='1' ORDER BY title LIMIT ".(int)$from.",".(int)($limitExPage+1); $result=api_sql_query($sql,__FILE__,__LINE__); } if($show == 'test'){ $nbrExercises=Database::num_rows($result); echo ''. ''; if (($is_allowedToEdit) and ($origin != 'learnpath')) { echo ''. '', '', '
'. 'new test '.get_lang('NewEx').''. ' | HotPotatoes '.get_lang('ImportHotPotatoesQuiz').''. ''; } else { echo ''; } //get HotPotatoes files (active and inactive) $res = api_sql_query ("SELECT * FROM $TBL_DOCUMENT WHERE path LIKE '".Database::escape_string($uploadPath)."/%/%'",__FILE__,__LINE__); $nbrTests = Database::num_rows($res); $res = api_sql_query ("SELECT * FROM $TBL_DOCUMENT d, $TBL_ITEM_PROPERTY ip WHERE d.id = ip.ref AND ip.tool = '".TOOL_DOCUMENT."' AND d.path LIKE '".Database::escape_string($uploadPath)."/%/%' AND ip.visibility='1'", __FILE__,__LINE__); $nbrActiveTests = Database::num_rows($res); if($is_allowedToEdit) {//if user is allowed to edit, also show hidden HP tests $nbrHpTests = $nbrTests; }else { $nbrHpTests = $nbrActiveTests; } $nbrNextTests = $nbrexerc-$nbrHpTests-(($page*$limitExPage)); //show pages navigation link for previous page if($page) { echo "<< ",get_lang("PreviousPage")." | "; } elseif($nbrExercises+$nbrNextTests > $limitExPage) { echo "<< ",get_lang("PreviousPage")." | "; } //show pages navigation link for previous page if($nbrExercises+$nbrNextTests > $limitExPage) { echo ">> ",get_lang("NextPage").""; } elseif($page) { echo get_lang("NextPage") . " >>"; } echo '
'; ?> '."\n"; // prof only if($is_allowedToEdit) { ?> '; echo ''; ?> "; echo "\n"; } // student only else { ?> $nbrexerc) { if($from>$nbrexerc) { $from = $from - $nbrexerc; $to = $limitExPage; } else { $to = $limitExPage-($nbrexerc-$from); $from = 0; } } else{ $to = $limitExPage; } if($is_allowedToEdit) { $sql = "SELECT d.path as path, d.comment as comment, ip.visibility as visibility FROM $TBL_DOCUMENT d, $TBL_ITEM_PROPERTY ip WHERE d.id = ip.ref AND ip.tool = '".TOOL_DOCUMENT."' AND (d.path LIKE '%htm%') AND d.path LIKE '".Database::escape_string($uploadPath)."/%/%' LIMIT ".(int)$from.",".(int)$to; // only .htm or .html files listed } else { $sql = "SELECT d.path as path, d.comment as comment, ip.visibility as visibility FROM $TBL_DOCUMENT d, $TBL_ITEM_PROPERTY ip WHERE d.id = ip.ref AND ip.tool = '".TOOL_DOCUMENT."' AND (d.path LIKE '%htm%') AND d.path LIKE '".Database::escape_string($uploadPath)."/%/%' AND ip.visibility='1' LIMIT ".(int)$from.",".(int)$to; } $result = api_sql_query ($sql,__FILE__,__LINE__); while($row = Database::fetch_array($result, 'ASSOC')) { $attribute['path' ][] = $row['path' ]; $attribute['visibility'][] = $row['visibility']; $attribute['comment' ][] = $row['comment' ]; } $nbrActiveTests = 0; if(is_array($attribute['path'])) { while(list($key,$path) = each($attribute['path'])) { list($a,$vis)=each($attribute['visibility']); if (strcmp($vis,"1")==0) { $active=1;} else { $active=0;} echo "\n"; $title = GetQuizName($path,$documentPath); if ($title =='') { $title = GetFileName($path); } // prof only if($is_allowedToEdit) { /************/ ?>
>
>
1?'Questions':'Question'))).' <?php echo htmlentities(get_lang('Modify'),ENT_QUOTES,$charset); ?> <?php echo htmlentities(get_lang('Build'),ENT_QUOTES,$charset); ?> ')) return false;"> <?php echo htmlentities(get_lang('Delete'),ENT_QUOTES,$charset); ?> <?php echo htmlentities(get_lang('Deactivate'),ENT_QUOTES,$charset); ?> <?php echo htmlentities(get_lang('Activate'),ENT_QUOTES,$charset); ?> '.htmlentities(get_lang('EnableResults'),ENT_QUOTES,$charset).''; else echo ''.htmlentities(get_lang('DisableResults'),ENT_QUOTES,$charset).''; echo "
 
1?get_lang('Questions'):get_lang('Question')); ?> 0) { $row = Database::fetch_array($qryres); $percentage = 0; if($row['exe_weighting'] != 0) { $percentage = ($row['exe_result']/$row['exe_weighting'])*100; } echo get_lang('Attempted').' ('.get_lang('Score').':'; printf("%1.2f\n",$percentage); echo " %)"; } else { echo get_lang('NotAttempted'); } ?>
HotPotatoes >
<?php echo htmlentities(get_lang('Modify'),ENT_QUOTES,$charset); ?> <?php echo htmlentities(get_lang('Build'),ENT_QUOTES,$charset); ?> ')) return false;"><?php echo htmlentities(get_lang('Delete'),ENT_QUOTES,$charset); ?> <?php echo htmlentities(get_lang('Deactivate'),ENT_QUOTES,$charset); ?> <?php echo htmlentities(get_lang('Activate'),ENT_QUOTES,$charset); ?> '; /****************/ ?>
  ">
<< '.get_lang('Back').''; } }// end if($show == 'test') /*****************************************/ /* Exercise Results (uses tracking tool) */ /*****************************************/ // if tracking is enabled if($_configuration['tracking_enabled']) { if($show == 'result') { // the form if(api_is_platform_admin() || api_is_course_admin() || api_is_course_tutor() || api_is_course_coach()) { echo '
'; echo ''; echo ''; echo '
'; echo '
'; echo ''; echo ''; echo '
'; echo '
'; if($_SESSION['export_user_fields']==false) { $alt = get_lang('ExportWithUserFields'); echo ''; } else { $alt = get_lang('ExportWithoutUserFields'); echo ''; } echo '
'; echo ''.get_lang('ExportAsCSV').' '.get_lang('ExportAsCSV').''; echo ''.get_lang('ExportAsXLS').' '.get_lang('ExportAsXLS').''; echo ''.$alt.' '.$alt.''; echo '

'; } ?> $_user['user_id'] clause has been removed $sql="SELECT CONCAT(lastname,' ',firstname),ce.title, te.exe_result , te.exe_weighting, UNIX_TIMESTAMP(te.exe_date),te.exe_id,email FROM $TBL_EXERCICES AS ce , $TBL_TRACK_EXERCICES AS te, $TBL_USER AS user WHERE te.exe_exo_id = ce.id AND user_id=te.exe_user_id AND te.exe_cours_id='".Database::escape_string($_cid)."' ORDER BY te.exe_cours_id ASC, ce.title ASC, te.exe_date DESC"; $hpsql="SELECT CONCAT(tu.lastname,' ',tu.firstname), tth.exe_name, tth.exe_result , tth.exe_weighting, UNIX_TIMESTAMP(tth.exe_date) FROM $TBL_TRACK_HOTPOTATOES tth, $TBL_USER tu WHERE tu.user_id=tth.exe_user_id AND tth.exe_cours_id = '".Database::escape_string($_cid)."' ORDER BY tth.exe_cours_id ASC, tth.exe_date DESC"; } else { // get only this user's results $sql="SELECT '',ce.title, te.exe_result , te.exe_weighting, UNIX_TIMESTAMP(te.exe_date),te.exe_id FROM $TBL_EXERCICES AS ce , $TBL_TRACK_EXERCICES AS te WHERE te.exe_exo_id = ce.id AND te.exe_user_id='".$_user['user_id']."' AND te.exe_cours_id='".Database::escape_string($_cid)."' AND results_disabled=0 ORDER BY te.exe_cours_id ASC, ce.title ASC, te.exe_date DESC"; $hpsql="SELECT '',exe_name, exe_result , exe_weighting, UNIX_TIMESTAMP(exe_date) FROM $TBL_TRACK_HOTPOTATOES WHERE exe_user_id = '".$_user['user_id']."' AND exe_cours_id = '".Database::escape_string($_cid)."' ORDER BY exe_cours_id ASC, exe_date DESC"; } $results=getManyResultsXCol($sql,7); $hpresults=getManyResultsXCol($hpsql,5); $NoTestRes = 0; $NoHPTestRes = 0; //Print the results of tests if(is_array($results)) { $sizeof = sizeof($results); for($i = 0; $i < $sizeof; $i++) { $id = $results[$i][5]; $mailid = $results[$i][6]; $user = $results[$i][0]; $test = $results[$i][1]; $dt = strftime($dateTimeFormatLong,$results[$i][4]); $res = $results[$i][2]; echo ''; if($is_allowedToEdit || $is_tutor) { $user = $results[$i][0]; echo ''; } echo ''; echo ''; echo ''; echo ''; echo ''; } } else { $NoTestRes = 1; } // Print the Result of Hotpotatoes Tests if(is_array($hpresults)) { $sizeof = sizeof($hpresults); for($i = 0; $i < $sizeof; $i++) { $title = GetQuizName($hpresults[$i][1],$documentPath); if ($title =='') { $title = GetFileName($hpresults[$i][1]); } echo ''; if($is_allowedToEdit) { echo ''; } echo ''; echo ''; echo ''; echo ''; //there is no possibility to edit the results of a Hotpotatoes test echo ''; } } else { $NoHPTestRes = 1; } if ($NoTestRes==1 && $NoHPTestRes==1) { ?>
'.$user.''.$test.''.format_locale_date(get_lang('dateTimeFormatLong'),$results[$i][4]).''.round(($res/($results[$i][3]!=0?$results[$i][3]:1))*100).'% ('.$res.' / '.$results[$i][3].')'.(($is_allowedToEdit||$is_tutor)?"".get_lang('Edit').''.' - '.''.get_lang('Delete').'':"".get_lang('Show').'').'
'.$hpresults[$i][0].''.$title.''.strftime($dateTimeFormatLong,$hpresults[$i][4]).''.round(($hpresults[$i][2]/($hpresults[$i][3]!=0?$hpresults[$i][3]:1))*100).'% ('.$hpresults[$i][2].' / '.$hpresults[$i][3].')
 '.get_lang("Results").' >>

'; }// end if($show == 'result') }// end if tracking is enabled if ($origin != 'learnpath') { //so we are not in learnpath tool Display::display_footer(); } else { ?>