diff --git a/main/exercice/exercice.php b/main/exercice/exercice.php index 8fecae13bb..a529d78e04 100644 --- a/main/exercice/exercice.php +++ b/main/exercice/exercice.php @@ -1,4 +1,5 @@ -$v) { - $keyexp = explode('_',$key); - - $id = Database::escape_string($id); - $v = Database::escape_string($v); - $my_questionid= Database::escape_string($keyexp[1]); - - if ($keyexp[0] == "marks") { + $from_name = $_SESSION['_user']['firstName'] . " " . $_SESSION['_user']['lastName']; + $url = api_get_path(WEB_CODE_PATH) . 'exercice/exercice.php?' . api_get_cidreq() . '&show=result'; + $TBL_RECORDING = Database :: get_statistic_table('track_e_attempt_recording'); + $total_weighting = $_REQUEST['totalWeighting']; + + foreach ($_POST as $key => $v) { + $keyexp = explode('_', $key); + + $id = Database :: escape_string($id); + $v = Database :: escape_string($v); + $my_questionid = Database :: escape_string($keyexp[1]); + + if ($keyexp[0] == "marks") { $sql = "SELECT question from $TBL_QUESTIONS WHERE id = '$my_questionid'"; - $result =api_sql_query($sql, __FILE__, __LINE__); - $ques_name = Database::result($result,0,"question"); + $result = api_sql_query($sql, __FILE__, __LINE__); + $ques_name = Database :: result($result, 0, "question"); - $query = "UPDATE $TBL_TRACK_ATTEMPT SET marks = '".$v."' - WHERE question_id = '".$my_questionid."' - AND exe_id='".$id."'"; + $query = "UPDATE $TBL_TRACK_ATTEMPT SET marks = '" . $v . "' + WHERE question_id = '" . $my_questionid . "' + AND exe_id='" . $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'; + FROM ' . $TBL_TRACK_ATTEMPT . ' WHERE exe_id = ' . intval($id) . ' + GROUP BY question_id'; - $res = api_sql_query($qry,__FILE__,__LINE__); - $tot = Database::result($res,0,'tot'); + $res = api_sql_query($qry, __FILE__, __LINE__); + $tot = Database :: result($res, 0, 'tot'); //updating also the total weight - $totquery = "UPDATE $TBL_TRACK_EXERCICES SET exe_result = '".Database::escape_string($tot)."', exe_weighting = '".Database::escape_string($total_weighting)."' - WHERE exe_Id='".Database::escape_string($id)."'"; - + $totquery = "UPDATE $TBL_TRACK_EXERCICES SET exe_result = '" . Database :: escape_string($tot) . "', exe_weighting = '" . Database :: escape_string($total_weighting) . "' + WHERE exe_Id='" . Database :: escape_string($id) . "'"; + api_sql_query($totquery, __FILE__, __LINE__); - $recording_changes = 'INSERT INTO '.$TBL_RECORDING.' ' . - '(exe_id, - question_id, - marks, - insert_date, - author) - VALUES - ('."'$id','".$my_questionid."','$v','".date('Y-m-d H:i:s')."','".api_get_user_id()."'".')'; + $recording_changes = 'INSERT INTO ' . $TBL_RECORDING . ' ' . + '(exe_id, + question_id, + marks, + insert_date, + author) + VALUES + (' . "'$id','" . $my_questionid . "','$v','" . date('Y-m-d H:i:s') . "','" . api_get_user_id() . "'" . ')'; api_sql_query($recording_changes, __FILE__, __LINE__); - } else { - $query = "UPDATE $TBL_TRACK_ATTEMPT SET teacher_comment = '".$v."' - WHERE question_id = '".$my_questionid."' - AND exe_id = '".$id."'"; - api_sql_query($query, __FILE__, __LINE__); - - $recording_changes = 'INSERT INTO '.$TBL_RECORDING.' ' . - '(exe_id, - question_id, - teacher_comment, - insert_date, - author) - VALUES - ('."'$id','".$my_questionid."','$v','".date('Y-m-d H:i:s')."','".api_get_user_id()."'".')'; + } else { + $query = "UPDATE $TBL_TRACK_ATTEMPT SET teacher_comment = '" . $v . "' + WHERE question_id = '" . $my_questionid . "' + AND exe_id = '" . $id . "'"; + api_sql_query($query, __FILE__, __LINE__); + + $recording_changes = 'INSERT INTO ' . $TBL_RECORDING . ' ' . + '(exe_id, + question_id, + teacher_comment, + insert_date, + author) + VALUES + (' . "'$id','" . $my_questionid . "','$v','" . date('Y-m-d H:i:s') . "','" . api_get_user_id() . "'" . ')'; api_sql_query($recording_changes, __FILE__, __LINE__); } -} + } -$qry = 'SELECT DISTINCT question_id, marks - FROM '.$TBL_TRACK_ATTEMPT.' where exe_id = '.intval($id).' - GROUP BY question_id'; + $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']; -} + $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'))) { - if (isset($_POST['lp_item_id']) && isset($_POST['lp_item_view_id']) && isset($_POST['student_id']) && isset($_POST['total_score']) && isset($_POST['total_time']) && isset($_POST['totalWeighting']) ) { + $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' + ))) { + if (isset ($_POST['lp_item_id']) && isset ($_POST['lp_item_view_id']) && isset ($_POST['student_id']) && isset ($_POST['total_score']) && isset ($_POST['total_time']) && isset ($_POST['totalWeighting'])) { $lp_item_id = $_POST['lp_item_id']; $lp_item_view_id = $_POST['lp_item_view_id']; $student_id = $_POST['student_id']; - $totalWeighting = $_POST['totalWeighting']; - + $totalWeighting = $_POST['totalWeighting']; + if ($lp_item_id == strval(intval($lp_item_id)) && $lp_item_view_id == strval(intval($lp_item_view_id)) && $student_id == strval(intval($student_id))) { - $score = Database::escape_string($_POST['total_score']); - $total_time = Database::escape_string($_POST['total_time']); - $lp_item_id = Database::escape_string($lp_item_id); - $lp_item_view_id = Database::escape_string($lp_item_view_id); - $student_id = Database::escape_string($student_id); - $totalWeighting = Database::escape_string($totalWeighting); - // get max view_count from lp_item_view - $sql = "SELECT MAX(view_count) FROM $TBL_LP_ITEM_VIEW WHERE lp_item_id = '".(int)$lp_item_view_id."' - AND lp_view_id = (SELECT id from $TBL_LP_VIEW WHERE user_id = '".(int)$student_id."' and lp_id='".(int)$lp_item_id."')"; - $res_max_view_count = api_sql_query($sql,__FILE__,__LINE__); - $row_max_view_count = Database::fetch_row($res_max_view_count); - $max_view_count = (int)$row_max_view_count[0]; - - // update score and total_time from last attempt when you qualify the exercise in Learning path detail - $sql_update_score = "UPDATE $TBL_LP_ITEM_VIEW SET score = '".(float)$score."',total_time = '".(int)$total_time."' WHERE lp_item_id = '".(int)$lp_item_view_id."' - AND lp_view_id = (SELECT id from $TBL_LP_VIEW WHERE user_id = '".(int)$student_id."' and lp_id='".(int)$lp_item_id."') AND view_count = '$max_view_count'"; - api_sql_query($sql_update_score,__FILE__,__LINE__); - - // update score and total_time from last attempt when you qualify the exercise in Learning path detail - $sql_update_score = "UPDATE $TBL_LP_ITEM_VIEW SET score = '".(float)$score."',total_time = '".(int)$total_time."' WHERE lp_item_id = '".(int)$lp_item_view_id."' - AND lp_view_id = (SELECT id from $TBL_LP_VIEW WHERE user_id = '".(int)$student_id."' and lp_id='".(int)$lp_item_id."') AND view_count = '$max_view_count'"; - api_sql_query($sql_update_score,__FILE__,__LINE__); - - // update max_score from a exercise in lp - $sql_update_max_score = "UPDATE $TBL_LP_ITEM SET max_score = '".(float)$totalWeighting."' WHERE id = '".(int)$lp_item_view_id."'"; - - api_sql_query($sql_update_max_score,__FILE__,__LINE__); - - } + $score = Database :: escape_string($_POST['total_score']); + $total_time = Database :: escape_string($_POST['total_time']); + $lp_item_id = Database :: escape_string($lp_item_id); + $lp_item_view_id = Database :: escape_string($lp_item_view_id); + $student_id = Database :: escape_string($student_id); + $totalWeighting = Database :: escape_string($totalWeighting); + // get max view_count from lp_item_view + $sql = "SELECT MAX(view_count) FROM $TBL_LP_ITEM_VIEW WHERE lp_item_id = '" . (int) $lp_item_view_id . "' + AND lp_view_id = (SELECT id from $TBL_LP_VIEW WHERE user_id = '" . (int) $student_id . "' and lp_id='" . (int) $lp_item_id . "')"; + $res_max_view_count = api_sql_query($sql, __FILE__, __LINE__); + $row_max_view_count = Database :: fetch_row($res_max_view_count); + $max_view_count = (int) $row_max_view_count[0]; + + // update score and total_time from last attempt when you qualify the exercise in Learning path detail + $sql_update_score = "UPDATE $TBL_LP_ITEM_VIEW SET score = '" . (float) $score . "',total_time = '" . (int) $total_time . "' WHERE lp_item_id = '" . (int) $lp_item_view_id . "' + AND lp_view_id = (SELECT id from $TBL_LP_VIEW WHERE user_id = '" . (int) $student_id . "' and lp_id='" . (int) $lp_item_id . "') AND view_count = '$max_view_count'"; + api_sql_query($sql_update_score, __FILE__, __LINE__); + + // update score and total_time from last attempt when you qualify the exercise in Learning path detail + $sql_update_score = "UPDATE $TBL_LP_ITEM_VIEW SET score = '" . (float) $score . "',total_time = '" . (int) $total_time . "' WHERE lp_item_id = '" . (int) $lp_item_view_id . "' + AND lp_view_id = (SELECT id from $TBL_LP_VIEW WHERE user_id = '" . (int) $student_id . "' and lp_id='" . (int) $lp_item_id . "') AND view_count = '$max_view_count'"; + api_sql_query($sql_update_score, __FILE__, __LINE__); + + // update max_score from a exercise in lp + $sql_update_max_score = "UPDATE $TBL_LP_ITEM SET max_score = '" . (float) $totalWeighting . "' WHERE id = '" . (int) $lp_item_view_id . "'"; + + api_sql_query($sql_update_max_score, __FILE__, __LINE__); + + } } - if ($origin=='tracking_course') { + if ($origin == 'tracking_course') { //Redirect to the course detail in lp - header('location: ../mySpace/lp_tracking.php?course='.Security::remove_XSS($_GET['course']).'&origin='.$origin.'&lp_id='.Security::remove_XSS($_POST['lp_item_id']).'&student_id='.Security::remove_XSS($_POST['student_id'])); + header('location: ../mySpace/lp_tracking.php?course=' . Security :: remove_XSS($_GET['course']) . '&origin=' . $origin . '&lp_id=' . Security :: remove_XSS($_POST['lp_item_id']) . '&student_id=' . Security :: remove_XSS($_POST['student_id'])); } else { //Redirect to the reporting - header('location: ../mySpace/myStudents.php?origin='.$origin.'&student='.Security::remove_XSS($_GET['student']).'&details=true&course='.Security::remove_XSS($_GET['course'])); - } + header('location: ../mySpace/myStudents.php?origin=' . $origin . '&student=' . Security :: remove_XSS($_GET['student']) . '&details=true&course=' . Security :: remove_XSS($_GET['course'])); + } } } if ($_GET['gradebook'] && $_GET['exerciseId']) { - $interbreadcrumb[]= array ( - 'url' => '../gradebook/'.$_SESSION['gradebook_dest'], - 'name' => get_lang('Gradebook') - ); + $interbreadcrumb[] = array ( + 'url' => '../gradebook/' . $_SESSION['gradebook_dest'], + 'name' => get_lang('Gradebook') + ); } -if ($show!='result') { - $nameTools=get_lang('Exercices'); +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')); + 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')); + $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'); +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); +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'); + 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); + $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'; + $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); + 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 + exit (); //otherwise following clicks may become buggy } -if (!empty($_POST['export_user_fields'])) { +if (!empty ($_POST['export_user_fields'])) { switch ($_POST['export_user_fields']) { - case 'export_user_fields': + case 'export_user_fields' : $_SESSION['export_user_fields'] = true; break; - case 'do_not_export_user_fields': - default: + 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()) { +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) { + 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': + 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: + case 'csv' : + default : $export = new ExerciseResult(); $export->exportCompleteReportCSV($documentPath, $user_id, $_SESSION['export_user_fields']); exit; @@ -406,19 +424,21 @@ if (!empty($_POST['export_report']) && $_POST['export_report'] == 'export_report 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'])); + 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 ''; + echo ''; } // used for stats -include_once(api_get_path(LIBRARY_PATH).'events.lib.inc.php'); +include_once (api_get_path(LIBRARY_PATH) . 'events.lib.inc.php'); event_access_tool(TOOL_QUIZ); @@ -426,537 +446,549 @@ event_access_tool(TOOL_QUIZ); $fck_attribute['Width'] = '100%'; $fck_attribute['Height'] = '300'; $fck_attribute['ToolbarSet'] = 'Introduction'; -Display::display_introduction_section(TOOL_QUIZ); +Display :: display_introduction_section(TOOL_QUIZ); $fck_attribute = null; // Clearing this global variable immediatelly after it has been used. // 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); +$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']); +HotPotGCt($documentPath, 1, $_user['user_id']); $tbl_grade_link = Database :: get_main_table(TABLE_MAIN_GRADEBOOK_LINK); // only for administrator if ($is_allowedToEdit) { - if (!empty($choice)) { + if (!empty ($choice)) { // construction of Exercise - $objExerciseTmp=new Exercise(); + $objExerciseTmp = new Exercise(); if ($objExerciseTmp->read($exerciseId)) { switch ($choice) { - case 'delete': // deletes an exercise - $objExerciseTmp->delete(); - - //delete link of exercise of gradebook tool - $sql='SELECT gl.id FROM '.$tbl_grade_link.' gl WHERE gl.type="1" AND gl.ref_id="'.$exerciseId.'";'; - $result=api_sql_query($sql,__FILE__,__LINE__); - $row=Database::fetch_array($result,'ASSOC'); - - $link= LinkFactory :: load($row['id']); - if ($link[0] != null) { - $link[0]->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) - 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 'delete' : // deletes an exercise + $objExerciseTmp->delete(); + + //delete link of exercise of gradebook tool + $sql = 'SELECT gl.id FROM ' . $tbl_grade_link . ' gl WHERE gl.type="1" AND gl.ref_id="' . $exerciseId . '";'; + $result = api_sql_query($sql, __FILE__, __LINE__); + $row = Database :: fetch_array($result, 'ASSOC'); + + $link = LinkFactory :: load($row['id']); + if ($link[0] != null) { + $link[0]->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) + 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; + $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; + $objExerciseTmp->enable_results(); + $objExerciseTmp->save(); + Display :: display_confirmation_message(get_lang('ResultsEnabled')); + break; } } // destruction of Exercise - unset($objExerciseTmp); + unset ($objExerciseTmp); } - 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 (!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__); + $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__); } - -} elseif($show == 'test') {// only for students //fin - $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__); -} +} +elseif ($show == 'test') { // only for students //fin + $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__); +} // the actions echo '
'; - // display the next and previous link if needed - $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 ($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__); - } - } elseif($show == 'test') { // only for students - $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__); +// display the next and previous link if needed +$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 ($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__); } - if($show == 'test') - { - $nbrExercises=Database::num_rows($result); - - //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)); - +} +elseif ($show == 'test') { // only for students + $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); + + //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)); - echo ''; - //show pages navigation link for previous page - if($page) - { - echo "".Display::return_icon('previous.gif').get_lang("PreviousPage")." | "; - } - elseif($nbrExercises+$nbrNextTests > $limitExPage) - { - echo Display::return_icon('previous.gif').get_lang('PreviousPage')." | "; - } - - //show pages navigation link for previous page - if($nbrExercises+$nbrNextTests > $limitExPage) - { - echo "".get_lang("NextPage").Display::return_icon('next.gif').""; - } - elseif($page) - { - echo get_lang("NextPage") . Display::return_icon('next.gif'); - } - echo ''; + echo ''; + //show pages navigation link for previous page + if ($page) { + echo "" . Display :: return_icon('previous.gif') . get_lang("PreviousPage") . " | "; + } + elseif ($nbrExercises + $nbrNextTests > $limitExPage) { + echo Display :: return_icon('previous.gif') . get_lang('PreviousPage') . " | "; } + //show pages navigation link for previous page + if ($nbrExercises + $nbrNextTests > $limitExPage) { + echo "" . get_lang("NextPage") . Display :: return_icon('next.gif') . ""; + } + elseif ($page) { + echo get_lang("NextPage") . Display :: return_icon('next.gif'); + } + echo ''; +} if ($_configuration['tracking_enabled']) { - if ($show == 'result') { - /*if (!function_exists('make_select')) + if ($show == 'result') { + /*if (!function_exists('make_select')) + { + function make_select($name,$values,$checked='') { - function make_select($name,$values,$checked='') - { - $output .= ''; - return $output; - } - }*/ + $output .= ''; + return $output; + } + }*/ - /*if (!function_exists('make_select_users')) + /*if (!function_exists('make_select_users')) + { + function make_select_users($name,$values,$checked='') { - function make_select_users($name,$values,$checked='') - { - $output .= ''; - return $output; - } - }*/ + $output .= ''; + return $output; + } + }*/ - if (api_is_allowed_to_edit()) { - if (!$_REQUEST['filter']) { + if (api_is_allowed_to_edit()) { + if (!$_REQUEST['filter']) { + $filter_by_not_revised = true; + $filter = 1; + } + $filter = (int) $_REQUEST['filter']; + + switch ($filter) { + case 1 : $filter_by_not_revised = true; - $filter=1; - } - $filter = (int)$_REQUEST['filter']; - - switch($filter) { - case 1: - $filter_by_not_revised = true; - break; - case 2: - $filter_by_revised = true; - break; - default: - null; - } - if($_REQUEST['filter']=='1' or !isset($_REQUEST['filter'])) { - $view_result = ''.Display::display_icon('checkbox_on.gif', get_lang('ShowCorrectedOnly')).get_lang('ShowCorrectedOnly').''; - } else { - $view_result = ''.Display::display_icon('checkbox_off.gif', get_lang('ShowUnCorrectedOnly')).get_lang('ShowUnCorrectedOnly').''; - } - //$form_filter = '
'; - //$form_filter .= make_select('filter',array(1=>get_lang('FilterByNotRevised'),2=>get_lang('FilterByRevised')),$filter); - //$form_filter .= '
'; - echo $view_result; + break; + case 2 : + $filter_by_revised = true; + break; + default : + null; } - } - /*if (api_is_allowed_to_edit()) - { - $user_count = count($user_list_name); - if ($user_count >0 ) { - $form_filter = '
'; - $user_list_for_select =array(); - for ($i=0;$i<$user_count;$i++) { - $user_list_for_select[$user_list_id[$i]]=$user_list_name[$i]; - } - $form_filter .= make_select_users('filter_by_user',$user_list_for_select,(int)$_REQUEST['filter_by_user']); - $form_filter .= ''; - $form_filter .= '
'; - echo $form_filter; + if ($_REQUEST['filter'] == '1' or !isset ($_REQUEST['filter'])) { + $view_result = '' . Display :: display_icon('checkbox_on.gif', get_lang('ShowCorrectedOnly')) . get_lang('ShowCorrectedOnly') . ''; + } else { + $view_result = '' . Display :: display_icon('checkbox_off.gif', get_lang('ShowUnCorrectedOnly')) . get_lang('ShowUnCorrectedOnly') . ''; } - } */ - } - - - - if (($is_allowedToEdit) and ($origin != 'learnpath')) + //$form_filter = '
'; + //$form_filter .= make_select('filter',array(1=>get_lang('FilterByNotRevised'),2=>get_lang('FilterByRevised')),$filter); + //$form_filter .= '
'; + echo $view_result; + } + } + /*if (api_is_allowed_to_edit()) { - if ($_GET['show']!='result') { - echo ''.Display::return_icon('new_test.gif',get_lang('NewEx')).get_lang('NewEx').''; - echo ''.Display::return_icon('jqz.gif',get_lang('ImportHotPotatoesQuiz')).get_lang('ImportHotPotatoesQuiz').''; - echo ''.Display::return_icon('show_test_results.gif',get_lang('Results')).get_lang('Results').''; + $user_count = count($user_list_name); + if ($user_count >0 ) { + $form_filter = '
'; + $user_list_for_select =array(); + for ($i=0;$i<$user_count;$i++) { + $user_list_for_select[$user_list_id[$i]]=$user_list_name[$i]; + } + $form_filter .= make_select_users('filter_by_user',$user_list_for_select,(int)$_REQUEST['filter_by_user']); + $form_filter .= ''; + $form_filter .= '
'; + echo $form_filter; } + } */ +} - // the actions for the statistics - if($show == 'result') { - // the form - if(api_is_platform_admin() || api_is_course_admin() || api_is_course_tutor() || api_is_course_coach()) { - if($_SESSION['export_user_fields']==true) { - $alt = get_lang('ExportWithUserFields'); - $extra_user_fields = ''; - } else { - $alt = get_lang('ExportWithoutUserFields'); - $extra_user_fields = ''; - } - //echo ''.Display::return_icon('excel.gif',get_lang('ExportAsCSV')).get_lang('ExportAsCSV').''; - echo ''.Display::return_icon('excel.gif',get_lang('ExportAsXLS')).get_lang('ExportAsXLS').''; - //echo ''.Display::return_icon('synthese_view.gif',$alt).$alt.''; - echo ''.Display::return_icon('quiz.gif',get_lang('BackToExercisesList')).get_lang('BackToExercisesList').''; - echo '
'; - echo ''; - echo ''; - echo '
'; - echo '
'; - echo ''; - echo ''; - echo '
'; - //echo '
'; - //echo $extra_user_fields; - //echo '
'; +if (($is_allowedToEdit) and ($origin != 'learnpath')) { + if ($_GET['show'] != 'result') { + echo '' . Display :: return_icon('new_test.gif', get_lang('NewEx')) . get_lang('NewEx') . ''; + echo '' . Display :: return_icon('jqz.gif', get_lang('ImportHotPotatoesQuiz')) . get_lang('ImportHotPotatoesQuiz') . ''; + echo '' . Display :: return_icon('show_test_results.gif', get_lang('Results')) . get_lang('Results') . ''; + } + + // the actions for the statistics + if ($show == 'result') { + // the form + if (api_is_platform_admin() || api_is_course_admin() || api_is_course_tutor() || api_is_course_coach()) { + if ($_SESSION['export_user_fields'] == true) { + $alt = get_lang('ExportWithUserFields'); + $extra_user_fields = ''; + } else { + $alt = get_lang('ExportWithoutUserFields'); + $extra_user_fields = ''; } - } - } else { - //the student view - if($show == 'result') { - echo ''.Display::return_icon('quiz.gif',get_lang('BackToExercisesList')).get_lang('BackToExercisesList').''; - } else { - echo ''.Display::return_icon('show_test_results.gif',get_lang('Results')).get_lang('Results').''; + //echo ''.Display::return_icon('excel.gif',get_lang('ExportAsCSV')).get_lang('ExportAsCSV').''; + echo '' . Display :: return_icon('excel.gif', get_lang('ExportAsXLS')) . get_lang('ExportAsXLS') . ''; + //echo ''.Display::return_icon('synthese_view.gif',$alt).$alt.''; + echo '' . Display :: return_icon('quiz.gif', get_lang('BackToExercisesList')) . get_lang('BackToExercisesList') . ''; + echo '
'; + echo ''; + echo ''; + echo '
'; + echo '
'; + echo ''; + echo ''; + echo '
'; + //echo '
'; + //echo $extra_user_fields; + //echo '
'; } } - - -echo '
'; // closing the actions div +} else { + //the student view + if ($show == 'result') { + echo '' . Display :: return_icon('quiz.gif', get_lang('BackToExercisesList')) . get_lang('BackToExercisesList') . ''; + } else { + echo '' . Display :: return_icon('show_test_results.gif', get_lang('Results')) . get_lang('Results') . ''; + } +} +echo ''; // closing the actions div if ($show == 'test') { - ?> +?> - + + + +?> + if (!($nbrExercises + $nbrHpTests)) { +?> '."\n"; - ?> + $i = 1; + // while list exercises + if ($origin != 'learnpath') { + //avoid sending empty parameters + $myorigin = (empty ($origin) ? '' : '&origin=' . $origin); + $mylpid = (empty ($learnpath_id) ? '' : '&learnpath_id=' . $learnpath_id); + $mylpitemid = (empty ($learnpath_item_id) ? '' : '&learnpath_item_id=' . $learnpath_item_id); + while ($row = Database :: fetch_array($result)) { + if ($i % 2 == 0) + $s_class = "row_odd"; + else + $s_class = "row_even"; + // prof only + if ($is_allowedToEdit) { + echo '' . "\n"; +?> '; - } else { - echo $rowi.' '.strtolower(get_lang(($rowi>1?'Questions':'Question'))).''; - } - //echo ''; - ?> + $exid = $row['id']; + //count number exercice - teacher + $sqlquery = "SELECT count(*) FROM $TBL_EXERCICE_QUESTION WHERE exercice_id = '" . Database :: escape_string($exid) . "'"; + $sqlresult = api_sql_query($sqlquery); + $rowi = Database :: result($sqlresult, 0); + + //count number random exercice - teacher + $sql_random_query = 'SELECT type,random,active,results_disabled,max_attempt FROM ' . $TBL_EXERCICES . ' WHERE id="' . Database :: escape_string($exid) . '" '; + $rs_random = api_sql_query($sql_random_query, __FILE__, __LINE__); + $row_random = Database :: fetch_array($rs_random); + if ($row_random['random'] > 0) { + echo $row_random['random'] . ' ' . strtolower(get_lang(($row_random['random'] > 1 ? 'Questions' : 'Question'))) . ''; + } else { + echo $rowi . ' ' . strtolower(get_lang(($rowi > 1 ? 'Questions' : 'Question'))) . ''; + } + + //echo ''; +?> \n"; - } else {// student only - ?> + + } + echo ""; + echo "\n"; + } else { // student only +?> + + $eid = $row['id']; + $uid = api_get_user_id(); + //this query might be improved later on by ordering by the new "tms" field rather than by exe_id + $qry = "SELECT * FROM $TBL_TRACK_EXERCICES + WHERE exe_exo_id = '" . Database :: escape_string($eid) . "' and exe_user_id = '" . Database :: escape_string($uid) . "' AND exe_cours_id = '" . api_get_course_id() . "' AND status <>'incomplete' AND orig_lp_id = 0 AND orig_lp_item_id = 0 AND session_id = '" . api_get_session_id() . "' + ORDER BY exe_id DESC"; + $qryres = api_sql_query($qry); + $num = Database :: num_rows($qryres); + + //hide the results + $my_result_disabled = $row['results_disabled']; + if ($my_result_disabled == 0) { + if ($num > 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'); + } + } else { + echo get_lang('CantShowResults'); + } +?>$nbrexerc) { - if ($from>$nbrexerc) { + if (($from + $limitExPage -1) > $nbrexerc) { + if ($from > $nbrexerc) { $from = $from - $nbrexerc; - $to = $limitExPage; + $to = $limitExPage; } else { - $to = $limitExPage-($nbrexerc-$from); + $to = $limitExPage - ($nbrexerc - $from); $from = 0; } } else { $to = $limitExPage; } - if($is_allowedToEdit) { + 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 + 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; + 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__); + $result = api_sql_query($sql, __FILE__, __LINE__); - while ($row = Database::fetch_array($result, 'ASSOC')) { - $attribute['path' ][] = $row['path' ]; + while ($row = Database :: fetch_array($result, 'ASSOC')) { + $attribute['path'][] = $row['path']; $attribute['visibility'][] = $row['visibility']; - $attribute['comment' ][] = $row['comment' ]; + $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; + while (list ($key, $path) = each($attribute['path'])) { + list ($a, $vis) = each($attribute['visibility']); + if (strcmp($vis, "1") == 0) { + $active = 1; } else { - $active=0; + $active = 0; } echo "\n"; - $title = GetQuizName($path,$documentPath); - if ($title =='') { + $title = GetQuizName($path, $documentPath); + if ($title == '') { $title = GetFileName($path); } // prof only - if($is_allowedToEdit) { + if ($is_allowedToEdit) { /************/ - ?> +?> @@ -967,24 +999,29 @@ $i++; <?php echo htmlentities(get_lang('Edit'),ENT_QUOTES,$charset); ?>')) return false;"><?php echo htmlentities(get_lang('Delete'),ENT_QUOTES,$charset); ?> + if ($active) { + $nbrActiveTests = $nbrActiveTests +1; +?> <?php echo htmlentities(get_lang('Deactivate'),ENT_QUOTES,$charset); ?> + + } else { // else if not active +?> <?php echo htmlentities(get_lang('Activate'),ENT_QUOTES,$charset); ?>'; - /****************/ - ?> - + /****************/ +?> + @@ -993,28 +1030,30 @@ $i++; +?> +?>
>
> 0) { - echo $row_random['random'].' '.strtolower(get_lang(($row_random['random']>1?'Questions':'Question'))).' <?php echo htmlentities(get_lang('Edit'),ENT_QUOTES,$charset); ?> - '.htmlentities(get_lang('EnableResults'),ENT_QUOTES,$charset).''; - } else { - //echo ''.htmlentities(get_lang('DisableResults'),ENT_QUOTES,$charset).''; - } - ?> - + '.htmlentities(get_lang('EnableResults'),ENT_QUOTES,$charset).''; + } else { + //echo ''.htmlentities(get_lang('DisableResults'),ENT_QUOTES,$charset).''; + } +?> + + + + + + + ')) return false;"> <?php echo htmlentities(get_lang('Delete'),ENT_QUOTES,$charset); ?> - + <?php echo htmlentities(get_lang('Deactivate'),ENT_QUOTES,$charset); ?> + + } else { + // else if not active +?> <?php echo htmlentities(get_lang('Activate'),ENT_QUOTES,$charset); ?> "; - echo "
  0) { - echo $row_random['random'].' '.strtolower(get_lang(($row_random['random']>1?'Questions':'Question'))); -} else { -//show results student -echo $rowi.' '.strtolower(get_lang(($rowi>1?'Questions':'Question'))); -} + + + $exid = $row['id']; + //count number exercise questions + $sqlquery = "SELECT count(*) FROM $TBL_EXERCICE_QUESTION WHERE exercice_id = '" . Database :: escape_string($exid) . "'"; + $sqlresult = api_sql_query($sqlquery); + $rowi = Database :: result($sqlresult, 0); + //count number random exercice + $sql_random_query = 'SELECT type,random,active,results_disabled,max_attempt FROM ' . $TBL_EXERCICES . ' WHERE id="' . Database :: escape_string($exid) . '" '; + $rs_random = api_sql_query($sql_random_query, __FILE__, __LINE__); + $row_random = Database :: fetch_array($rs_random); + if ($row_random['random'] > 0) { + echo $row_random['random'] . ' ' . strtolower(get_lang(($row_random['random'] > 1 ? 'Questions' : 'Question'))); + } else { + //show results student + echo $rowi . ' ' . strtolower(get_lang(($rowi > 1 ? 'Questions' : 'Question'))); + } ?> 'incomplete' AND orig_lp_id = 0 AND orig_lp_item_id = 0 AND session_id = '".api_get_session_id()."' - ORDER BY exe_id DESC"; - $qryres = api_sql_query($qry); - $num = Database::num_rows($qryres); - - //hide the results - $my_result_disabled = $row['results_disabled']; - if ($my_result_disabled==0) { - if ($num>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'); - } - } - else { - echo get_lang('CantShowResults'); - } - ?>
HotPotatoes
  
+if ($_configuration['tracking_enabled'] && ($show == 'result')) { +?> @@ -1036,223 +1074,230 @@ if ($_configuration['tracking_enabled'] && ($show == 'result') ) 1 $user_id_and $session_id_and AND ce.active <>-1 AND orig_lp_id = 0 AND orig_lp_item_id = 0 - AND cuser.course_code=te.exe_cours_id ORDER BY users, 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)." $user_id_and ' - ORDER BY tth.exe_cours_id ASC, tth.exe_date DESC"; - - } else { - // get only this user's results - $user_id_and = ' AND te.exe_user_id = ' . Database::escape_string ( api_get_user_id() ).' '; - - $sql="SELECT CONCAT(lastname,' ',firstname) as users, ce.title, te.exe_result , - te.exe_weighting, UNIX_TIMESTAMP(te.exe_date), te.exe_id, email, UNIX_TIMESTAMP(te.start_date), steps_counter,cuser.user_id,te.exe_duration, ce.results_disabled - FROM $TBL_EXERCICES AS ce , $TBL_TRACK_EXERCICES AS te, $TBL_USER AS user,$tbl_course_rel_user AS cuser - WHERE user.user_id=cuser.user_id AND te.exe_exo_id = ce.id AND te.status != 'incomplete' AND cuser.user_id=te.exe_user_id AND te.exe_cours_id='".Database::escape_string($_cid)."' - AND cuser.status<>1 $user_id_and $session_id_and AND ce.active <>-1 AND orig_lp_id = 0 AND orig_lp_item_id = 0 - AND cuser.course_code=te.exe_cours_id ORDER BY users, 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"; + if ($is_allowedToEdit || $is_tutor) { + $user_id_and = ''; + if (!empty ($_POST['filter_by_user'])) { + if ($_POST['filter_by_user'] == 'all') { + $user_id_and = " AND user_id like '%'"; + } else { + $user_id_and = " AND user_id = '" . Database :: escape_string((int) $_POST['filter_by_user']) . "' "; + } + } + if ($_GET['gradebook'] == 'view') { + $exercise_where_query = 'te.exe_exo_id =ce.id AND '; } - $results=getManyResultsXCol($sql,12); - $hpresults=getManyResultsXCol($hpsql,5); - $NoTestRes = 0; - $NoHPTestRes = 0; - //Print the results of tests - $lang_nostartdate = get_lang('NoStartDate').' / '; - - if (is_array($results)) { - $users_array_id = array(); - if ($_GET['gradebook']=='view') { - $filter_by_no_revised = true; - $from_gradebook = true; - } - $sizeof = sizeof($results); - $user_list_name = $user_list_id = array(); + $sql = "SELECT CONCAT(lastname,' ',firstname) as users, ce.title, te.exe_result , + te.exe_weighting, UNIX_TIMESTAMP(te.exe_date), te.exe_id, email, UNIX_TIMESTAMP(te.start_date), steps_counter,cuser.user_id,te.exe_duration + FROM $TBL_EXERCICES AS ce , $TBL_TRACK_EXERCICES AS te, $TBL_USER AS user,$tbl_course_rel_user AS cuser + WHERE user.user_id=cuser.user_id AND te.exe_exo_id = ce.id AND te.status != 'incomplete' AND cuser.user_id=te.exe_user_id AND te.exe_cours_id='" . Database :: escape_string($_cid) . "' + AND cuser.status<>1 $user_id_and $session_id_and AND ce.active <>-1 AND orig_lp_id = 0 AND orig_lp_item_id = 0 + AND cuser.course_code=te.exe_cours_id ORDER BY users, te.exe_cours_id ASC, ce.title ASC, te.exe_date DESC"; - for ($i = 0; $i < $sizeof; $i++) { - $revised = false; - $sql_exe='SELECT exe_id FROM '.Database::get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT_RECORDING).' - WHERE author != '."''".' AND exe_id = '."'".Database::escape_string($results[$i][5])."'".' LIMIT 1'; - $query = api_sql_query($sql_exe,__FILE__,__LINE__); + $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) . " $user_id_and ' + ORDER BY tth.exe_cours_id ASC, tth.exe_date DESC"; - if ( Database::num_rows($query) > 0) { - $revised = true; - } - if ($filter_by_not_revised && $revised == true) { + } else { + // get only this user's results + $user_id_and = ' AND te.exe_user_id = ' . Database :: escape_string(api_get_user_id()) . ' '; + + $sql = "SELECT CONCAT(lastname,' ',firstname) as users, ce.title, te.exe_result , + te.exe_weighting, UNIX_TIMESTAMP(te.exe_date), te.exe_id, email, UNIX_TIMESTAMP(te.start_date), steps_counter,cuser.user_id,te.exe_duration, ce.results_disabled + FROM $TBL_EXERCICES AS ce , $TBL_TRACK_EXERCICES AS te, $TBL_USER AS user,$tbl_course_rel_user AS cuser + WHERE user.user_id=cuser.user_id AND te.exe_exo_id = ce.id AND te.status != 'incomplete' AND cuser.user_id=te.exe_user_id AND te.exe_cours_id='" . Database :: escape_string($_cid) . "' + AND cuser.status<>1 $user_id_and $session_id_and AND ce.active <>-1 AND orig_lp_id = 0 AND orig_lp_item_id = 0 + AND cuser.course_code=te.exe_cours_id ORDER BY users, 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, 12); + $hpresults = getManyResultsXCol($hpsql, 5); + + $NoTestRes = 0; + $NoHPTestRes = 0; + //Print the results of tests + $lang_nostartdate = get_lang('NoStartDate') . ' / '; + + if (is_array($results)) { + $users_array_id = array (); + if ($_GET['gradebook'] == 'view') { + $filter_by_no_revised = true; + $from_gradebook = true; + } + $sizeof = sizeof($results); + $user_list_name = $user_list_id = array (); + + for ($i = 0; $i < $sizeof; $i++) { + $revised = false; + $sql_exe = 'SELECT exe_id FROM ' . Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT_RECORDING) . ' + WHERE author != ' . "''" . ' AND exe_id = ' . "'" . Database :: escape_string($results[$i][5]) . "'" . ' LIMIT 1'; + $query = api_sql_query($sql_exe, __FILE__, __LINE__); + + if (Database :: num_rows($query) > 0) { + $revised = true; + } + if ($filter_by_not_revised && $revised == true) { + continue; + } + if ($filter_by_revised && $revised == false) { + continue; + } + if ($from_gradebook && ($is_allowedToEdit || $is_tutor)) { + if (in_array($results[$i][1] . $results[$i][0], $users_array_id)) { continue; } - if($filter_by_revised && $revised == false) { - continue; + $users_array_id[] = $results[$i][1] . $results[$i][0]; + } + + $user_list_name[] = $results[$i][0]; + $user_list_id[] = $results[$i][9]; + $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]; + + $duration = intval($results[$i][10]); + // we filter the results if we have the permission to + if (isset ($results[$i][11])) + $result_disabled = intval($results[$i][11]); + else + $result_disabled = 0; + + if ($result_disabled == 0) { + echo ''; + $add_start_date = $lang_nostartdate; + + if ($is_allowedToEdit || $is_tutor) { + $user = $results[$i][0]; + echo ''; + } + echo ''; + echo ''; + echo ''; //get_lang('dateTimeFormatLong') - $user_list_name[] = $results[$i][0]; - $user_list_id[] = $results[$i][9]; - $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]; + // there are already a duration test period calculated?? + //echo ''; - $duration = intval($results[$i][10]); - // we filter the results if we have the permission to - if (isset($results[$i][11])) - $result_disabled = intval($results[$i][11]); - else - $result_disabled = 0; - - if ($result_disabled==0) { - echo ''; - $add_start_date = $lang_nostartdate; - - if ($is_allowedToEdit || $is_tutor) { - $user = $results[$i][0]; - echo ''; - } - echo ''; - echo ''; + + // Is hard to read this!! + /* + echo ''; + */ + + echo ''; - - echo '';//get_lang('dateTimeFormatLong') - - // there are already a duration test period calculated?? - //echo ''; - echo ''; - - // Is hard to read this!! - /* - echo ''; - */ - - echo ''; - - - echo ''; - + echo ""; + + if (api_is_platform_admin() || $is_tutor) + echo ' - ' . get_lang('Delete') . ''; + if ($is_allowedToEdit) + echo ' - ' . get_lang('ViewHistoryChange') . ''; + } else { + if ($revised) + echo "" . get_lang('Show') . " "; + else + echo ' ' . get_lang('NoResult'); } + echo ''; + + echo ''; + } - } else { - $NoTestRes = 1; } + } else { + $NoTestRes = 1; + } - // Print the Result of Hotpotatoes Tests - if (is_array($hpresults)) { - for($i = 0; $i < sizeof($hpresults); $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 ''; + // Print the Result of Hotpotatoes Tests + if (is_array($hpresults)) { + for ($i = 0; $i < sizeof($hpresults); $i++) { + $title = GetQuizName($hpresults[$i][1], $documentPath); + if ($title == '') { + $title = GetFileName($hpresults[$i][1]); } - } else { - $NoHPTestRes = 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) { - ?> + if ($NoTestRes == 1 && $NoHPTestRes == 1) { +?> + + } +?>
' . $user . ' ' . $test . ''; + if ($results[$i][7] > 1) { + echo ceil((($results[$i][4] - $results[$i][7]) / 60)) . ' ' . get_lang('MinMinutes'); + if ($results[$i][8] > 1) { + echo ' ( ' . $results[$i][8] . ' ' . get_lang('Steps') . ' )'; } - $users_array_id[] = $results[$i][1].$results[$i][0]; + $add_start_date = format_locale_date('%b %d, %Y %H:%M', $results[$i][7]) . ' / '; + } else { + echo get_lang('NoLogOfDuration'); } + echo '' . $add_start_date . format_locale_date('%b %d, %Y %H:%M', $results[$i][4]) . ''.sprintf(get_lang('DurationFormat'), $duration).''.$user.' '.$test.''; - if ($results[$i][7] > 1) { - echo ceil((($results[$i][4] - $results[$i][7])/60)).' '.get_lang('MinMinutes'); - if($results[$i][8] > 1) { - echo ' ( '.$results[$i][8].' '.get_lang('Steps').' )'; - } - $add_start_date = format_locale_date('%b %d, %Y %H:%M',$results[$i][7]).' / '; + // if the float look like 10.00 we show only 10 + + $my_res = float_format($results[$i][2],1); + $my_total = float_format($results[$i][3],1); + + echo '' . round(($my_res / ($my_total != 0 ? $my_total : 1)) * 100, 2) . '% (' . $my_res . ' / ' . $my_total . ')'.(($is_allowedToEdit||$is_tutor)? + "". + (($revised)?get_lang('Edit'):get_lang('Qualify'))."". + ((api_is_platform_admin() || $is_tutor)?' - '.get_lang('Delete').'':'') + .(($is_allowedToEdit)?' - '.get_lang('ViewHistoryChange').'':'') + :(($revised)?"".get_lang('Show')."":'')).''; + if ($is_allowedToEdit || $is_tutor) { + if ($revised) { + echo ""; + echo get_lang('Edit'); } else { - echo get_lang('NoLogOfDuration'); + echo ""; + echo get_lang('Qualify'); } - - echo ''.$add_start_date.format_locale_date('%b %d, %Y %H:%M',$results[$i][4]).''.sprintf(get_lang('DurationFormat'), $duration).''.round(($res/($results[$i][3]!=0?$results[$i][3]:1))*100,2).'% ('.$res.' / '.$results[$i][3].')'.(($is_allowedToEdit||$is_tutor)? - "". - (($revised)?get_lang('Edit'):get_lang('Qualify'))."". - ((api_is_platform_admin() || $is_tutor)?' - '.get_lang('Delete').'':'') - .(($is_allowedToEdit)?' - '.get_lang('ViewHistoryChange').'':'') - :(($revised)?"".get_lang('Show')."":'')).''; - if ($is_allowedToEdit||$is_tutor) { - if ($revised) { - echo ""; - echo get_lang('Edit'); - } else { - echo ""; - echo get_lang('Qualify'); - } - echo ""; - - if (api_is_platform_admin() || $is_tutor) - echo ' - '.get_lang('Delete').''; - if ($is_allowedToEdit) - echo ' - '.get_lang('ViewHistoryChange').''; - } else { - if ($revised) - echo "".get_lang('Show')." "; - else - echo ' '.get_lang('NoResult'); - } - echo '
'.$hpresults[$i][0].''.$title.''.strftime($dateTimeFormatLong,$hpresults[$i][4]).''.round(($hpresults[$i][2]/($hpresults[$i][3]!=0?$hpresults[$i][3]:1))*100,2).'% ('.$hpresults[$i][2].' / '.$hpresults[$i][3].')
' . $hpresults[$i][0] . '' . $title . '' . strftime($dateTimeFormatLong, $hpresults[$i][4]) . '' . round(($hpresults[$i][2] / ($hpresults[$i][3] != 0 ? $hpresults[$i][3] : 1)) * 100, 2) . '% (' . $hpresults[$i][2] . ' / ' . $hpresults[$i][3] . ')

+?> diff --git a/main/exercice/exercise.class.php b/main/exercice/exercise.class.php index 1e7348dab3..ab1e30a42b 100644 --- a/main/exercice/exercise.class.php +++ b/main/exercice/exercise.class.php @@ -25,7 +25,7 @@ * Exercise class: This class allows to instantiate an object of type Exercise * @package dokeos.exercise * @author Olivier Brouckaert -* @version $Id: exercise.class.php 19959 2009-04-21 22:29:46Z cvargas1 $ +* @version $Id: exercise.class.php 20087 2009-04-24 20:44:55Z juliomontoya $ */ @@ -851,25 +851,32 @@ class Exercise $type='full'; } // form title - if (!empty($_GET['exerciseId'])) - { + if (!empty($_GET['exerciseId'])) { $form_title = get_lang('ModifyExercise'); - } - else - { + } else { $form_title = get_lang('NewEx'); } $form->addElement('header', '', $form_title); // title $form -> addElement('text', 'exerciseTitle', get_lang('ExerciseName'),'class="input_titles"'); + // fck editor global $fck_attribute; $fck_attribute = array(); $fck_attribute['Width'] = '100%'; $fck_attribute['Height'] = '200px'; - $fck_attribute['ToolbarSet'] = 'TestDescription'; - - $form -> addElement ('html_editor', 'exerciseDescription', get_lang('ExerciseDescription')); + $fck_attribute['ToolbarSet'] = 'TestDescription'; + + $form -> addElement('html','
+
 
+
+  '.get_lang('EnrichQuestion').' +
+
'); + + $form -> addElement ('html',''); $form -> addElement('html','
 
@@ -881,7 +888,7 @@ class Exercise // Random questions $form -> addElement('html','