|
|
|
@ -1,9 +1,9 @@ |
|
|
|
|
<?php |
|
|
|
|
/* For licensing terms, see /license.txt */ |
|
|
|
|
/** |
|
|
|
|
* Exercise list: This script shows the list of exercises for administrators and students. |
|
|
|
|
* @package chamilo.exercise |
|
|
|
|
* @author Julio Montoya <gugli100@gmail.com> jqgrid integration |
|
|
|
|
* Exercise list: This script shows the list of exercises for administrators and students. |
|
|
|
|
* @package chamilo.exercise |
|
|
|
|
* @author Julio Montoya <gugli100@gmail.com> jqgrid integration |
|
|
|
|
* Modified by hubert.borderiou (question category) |
|
|
|
|
* |
|
|
|
|
* @todo fix excel export |
|
|
|
@ -38,24 +38,24 @@ require_once 'hotpotatoes.lib.php'; |
|
|
|
|
require_once api_get_path(LIBRARY_PATH).'mail.lib.inc.php'; |
|
|
|
|
|
|
|
|
|
// need functions of statsutils lib to display previous exercices scores |
|
|
|
|
require_once api_get_path(LIBRARY_PATH) . 'statsUtils.lib.inc.php'; |
|
|
|
|
require_once api_get_path(LIBRARY_PATH).'statsUtils.lib.inc.php'; |
|
|
|
|
|
|
|
|
|
// document path |
|
|
|
|
$documentPath = api_get_path(SYS_COURSE_PATH) . $_course['path'] . "/document"; |
|
|
|
|
$documentPath = api_get_path(SYS_COURSE_PATH).$_course['path']."/document"; |
|
|
|
|
|
|
|
|
|
/* Constants and variables */ |
|
|
|
|
$is_allowedToEdit = api_is_allowed_to_edit(null, true) || api_is_drh(); |
|
|
|
|
$is_tutor = api_is_allowed_to_edit(true); |
|
|
|
|
/* Constants and variables */ |
|
|
|
|
$is_allowedToEdit = api_is_allowed_to_edit(null, true) || api_is_drh(); |
|
|
|
|
$is_tutor = api_is_allowed_to_edit(true); |
|
|
|
|
|
|
|
|
|
$TBL_QUESTIONS = Database :: get_course_table(TABLE_QUIZ_QUESTION); |
|
|
|
|
$TBL_TRACK_EXERCICES = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES); |
|
|
|
|
$TBL_TRACK_ATTEMPT = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT); |
|
|
|
|
$TBL_TRACK_ATTEMPT_RECORDING= Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT_RECORDING); |
|
|
|
|
$TBL_LP_ITEM_VIEW = Database :: get_course_table(TABLE_LP_ITEM_VIEW); |
|
|
|
|
$TBL_QUESTIONS = Database :: get_course_table(TABLE_QUIZ_QUESTION); |
|
|
|
|
$TBL_TRACK_EXERCICES = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES); |
|
|
|
|
$TBL_TRACK_ATTEMPT = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT); |
|
|
|
|
$TBL_TRACK_ATTEMPT_RECORDING = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_ATTEMPT_RECORDING); |
|
|
|
|
$TBL_LP_ITEM_VIEW = Database :: get_course_table(TABLE_LP_ITEM_VIEW); |
|
|
|
|
|
|
|
|
|
$course_id = api_get_course_int_id(); |
|
|
|
|
$exercise_id = isset($_REQUEST['exerciseId']) ? intval($_REQUEST['exerciseId']) : null; |
|
|
|
|
$filter_user = isset($_REQUEST['filter_by_user']) ? intval($_REQUEST['filter_by_user']) : null; |
|
|
|
|
$course_id = api_get_course_int_id(); |
|
|
|
|
$exercise_id = isset($_REQUEST['exerciseId']) ? intval($_REQUEST['exerciseId']) : null; |
|
|
|
|
$filter_user = isset($_REQUEST['filter_by_user']) ? intval($_REQUEST['filter_by_user']) : null; |
|
|
|
|
|
|
|
|
|
$locked = api_resource_is_locked_by_gradebook($exercise_id, LINK_EXERCISE); |
|
|
|
|
|
|
|
|
@ -107,33 +107,33 @@ if ($_REQUEST['comments'] == 'update' && ($is_allowedToEdit || $is_tutor) && $_G |
|
|
|
|
if (empty($track_exercise_info)) { |
|
|
|
|
api_not_allowed(); |
|
|
|
|
} |
|
|
|
|
$test = $track_exercise_info['title']; |
|
|
|
|
$student_id = $track_exercise_info['exe_user_id']; |
|
|
|
|
$session_id = $track_exercise_info['session_id']; |
|
|
|
|
$lp_id = $track_exercise_info['orig_lp_id']; |
|
|
|
|
$test = $track_exercise_info['title']; |
|
|
|
|
$student_id = $track_exercise_info['exe_user_id']; |
|
|
|
|
$session_id = $track_exercise_info['session_id']; |
|
|
|
|
$lp_id = $track_exercise_info['orig_lp_id']; |
|
|
|
|
//$lp_item_id = $track_exercise_info['orig_lp_item_id']; |
|
|
|
|
$lp_item_view_id = $track_exercise_info['orig_lp_item_view_id']; |
|
|
|
|
$lp_item_view_id = $track_exercise_info['orig_lp_item_view_id']; |
|
|
|
|
|
|
|
|
|
$course_info = api_get_course_info(); |
|
|
|
|
|
|
|
|
|
// Teacher data |
|
|
|
|
$teacher_info = api_get_user_info(api_get_user_id()); |
|
|
|
|
$from_name = api_get_person_name($teacher_info['firstname'], $teacher_info['lastname'], null, PERSON_NAME_EMAIL_ADDRESS); |
|
|
|
|
$url = api_get_path(WEB_CODE_PATH) . 'exercice/result.php?id='.$track_exercise_info['exe_id'].'&'.api_get_cidreq().'&show_headers=1&id_session='.$session_id; |
|
|
|
|
$teacher_info = api_get_user_info(api_get_user_id()); |
|
|
|
|
$from_name = api_get_person_name($teacher_info['firstname'], $teacher_info['lastname'], null, PERSON_NAME_EMAIL_ADDRESS); |
|
|
|
|
$url = api_get_path(WEB_CODE_PATH).'exercice/result.php?id='.$track_exercise_info['exe_id'].'&'.api_get_cidreq().'&show_headers=1&id_session='.$session_id; |
|
|
|
|
|
|
|
|
|
$my_post_info = array(); |
|
|
|
|
$post_content_id = array(); |
|
|
|
|
$comments_exist = false; |
|
|
|
|
$my_post_info = array(); |
|
|
|
|
$post_content_id = array(); |
|
|
|
|
$comments_exist = false; |
|
|
|
|
|
|
|
|
|
foreach ($_POST as $key_index => $key_value) { |
|
|
|
|
$my_post_info = explode('_',$key_index); |
|
|
|
|
$post_content_id[]=$my_post_info[1]; |
|
|
|
|
if ($my_post_info[0]=='comments') { |
|
|
|
|
$comments_exist=true; |
|
|
|
|
$my_post_info = explode('_', $key_index); |
|
|
|
|
$post_content_id[] = $my_post_info[1]; |
|
|
|
|
if ($my_post_info[0] == 'comments') { |
|
|
|
|
$comments_exist = true; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$loop_in_track = ($comments_exist===true) ? (count($_POST)/2) : count($_POST); |
|
|
|
|
$loop_in_track = ($comments_exist === true) ? (count($_POST) / 2) : count($_POST); |
|
|
|
|
|
|
|
|
|
$array_content_id_exe = array(); |
|
|
|
|
|
|
|
|
@ -143,19 +143,19 @@ if ($_REQUEST['comments'] == 'update' && ($is_allowedToEdit || $is_tutor) && $_G |
|
|
|
|
$array_content_id_exe = $post_content_id; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for ($i=0; $i < $loop_in_track; $i++) { |
|
|
|
|
$my_marks = Database::escape_string($_POST['marks_'.$array_content_id_exe[$i]]); |
|
|
|
|
$contain_comments = Database::escape_string($_POST['comments_'.$array_content_id_exe[$i]]); |
|
|
|
|
for ($i = 0; $i < $loop_in_track; $i++) { |
|
|
|
|
$my_marks = Database::escape_string($_POST['marks_'.$array_content_id_exe[$i]]); |
|
|
|
|
$contain_comments = Database::escape_string($_POST['comments_'.$array_content_id_exe[$i]]); |
|
|
|
|
if (isset($contain_comments)) { |
|
|
|
|
$my_comments = Database::escape_string($_POST['comments_'.$array_content_id_exe[$i]]); |
|
|
|
|
$my_comments = Database::escape_string($_POST['comments_'.$array_content_id_exe[$i]]); |
|
|
|
|
} else { |
|
|
|
|
$my_comments = ''; |
|
|
|
|
$my_comments = ''; |
|
|
|
|
} |
|
|
|
|
$my_questionid = intval($array_content_id_exe[$i]); |
|
|
|
|
$sql = "SELECT question from $TBL_QUESTIONS WHERE c_id = $course_id AND id = '$my_questionid'"; |
|
|
|
|
|
|
|
|
|
$result =Database::query($sql); |
|
|
|
|
Database::result($result,0,"question"); |
|
|
|
|
$result = Database::query($sql); |
|
|
|
|
Database::result($result, 0, "question"); |
|
|
|
|
|
|
|
|
|
$query = "UPDATE $TBL_TRACK_ATTEMPT SET marks = '$my_marks', teacher_comment = '$my_comments' WHERE question_id = ".$my_questionid." AND exe_id=".$id; |
|
|
|
|
Database::query($query); |
|
|
|
@ -166,7 +166,7 @@ if ($_REQUEST['comments'] == 'update' && ($is_allowedToEdit || $is_tutor) && $_G |
|
|
|
|
Database::query($recording_changes); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$qry = 'SELECT DISTINCT question_id, marks FROM ' . $TBL_TRACK_ATTEMPT . ' WHERE exe_id = '.$id .' GROUP BY question_id'; |
|
|
|
|
$qry = 'SELECT DISTINCT question_id, marks FROM '.$TBL_TRACK_ATTEMPT.' WHERE exe_id = '.$id.' GROUP BY question_id'; |
|
|
|
|
$res = Database::query($qry); |
|
|
|
|
$tot = 0; |
|
|
|
|
while ($row = Database :: fetch_array($res, 'ASSOC')) { |
|
|
|
@ -180,13 +180,13 @@ if ($_REQUEST['comments'] == 'update' && ($is_allowedToEdit || $is_tutor) && $_G |
|
|
|
|
//@todo move this somewhere else |
|
|
|
|
$subject = get_lang('ExamSheetVCC'); |
|
|
|
|
|
|
|
|
|
$message = '<p>'.get_lang('DearStudentEmailIntroduction') . '</p><p>'.get_lang('AttemptVCC'); |
|
|
|
|
$message .= '<h3>'.get_lang('CourseName'). '</h3><p>'.Security::remove_XSS($course_info['name']).''; |
|
|
|
|
$message .= '<h3>'.get_lang('Exercise') . '</h3><p>'.Security::remove_XSS($test); |
|
|
|
|
$message = '<p>'.get_lang('DearStudentEmailIntroduction').'</p><p>'.get_lang('AttemptVCC'); |
|
|
|
|
$message .= '<h3>'.get_lang('CourseName').'</h3><p>'.Security::remove_XSS($course_info['name']).''; |
|
|
|
|
$message .= '<h3>'.get_lang('Exercise').'</h3><p>'.Security::remove_XSS($test); |
|
|
|
|
|
|
|
|
|
//Only for exercises not in a LP |
|
|
|
|
if ($lp_id == 0) { |
|
|
|
|
$message .= '<p>'.get_lang('ClickLinkToViewComment') . ' <a href="#url#">#url#</a><br />'; |
|
|
|
|
$message .= '<p>'.get_lang('ClickLinkToViewComment').' <a href="#url#">#url#</a><br />'; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$message .= '<p>'.get_lang('Regards').'</p>'; |
|
|
|
@ -197,16 +197,16 @@ if ($_REQUEST['comments'] == 'update' && ($is_allowedToEdit || $is_tutor) && $_G |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//Updating LP score here |
|
|
|
|
if (in_array($origin, array ('tracking_course','user_course','correct_exercise_in_lp'))) { |
|
|
|
|
$sql_update_score = "UPDATE $TBL_LP_ITEM_VIEW SET score = '" . floatval($tot) . "' WHERE c_id = ".$course_id." AND id = " .$lp_item_view_id; |
|
|
|
|
if (in_array($origin, array('tracking_course', 'user_course', 'correct_exercise_in_lp'))) { |
|
|
|
|
$sql_update_score = "UPDATE $TBL_LP_ITEM_VIEW SET score = '".floatval($tot)."' WHERE c_id = ".$course_id." AND id = ".$lp_item_view_id; |
|
|
|
|
Database::query($sql_update_score); |
|
|
|
|
if ($origin == 'tracking_course') { |
|
|
|
|
//Redirect to the course detail in lp |
|
|
|
|
header('location: exercice.php?course=' . Security :: remove_XSS($_GET['course'])); |
|
|
|
|
header('location: exercice.php?course='.Security :: remove_XSS($_GET['course'])); |
|
|
|
|
exit; |
|
|
|
|
} else { |
|
|
|
|
//Redirect to the reporting |
|
|
|
|
header('location: ../mySpace/myStudents.php?origin=' . $origin . '&student=' . $student_id . '&details=true&course=' . $course_id.'&session_id='.$session_id); |
|
|
|
|
header('location: ../mySpace/myStudents.php?origin='.$origin.'&student='.$student_id.'&details=true&course='.$course_id.'&session_id='.$session_id); |
|
|
|
|
exit; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -216,38 +216,38 @@ if ($_REQUEST['comments'] == 'update' && ($is_allowedToEdit || $is_tutor) && $_G |
|
|
|
|
if ($is_allowedToEdit && $origin != 'learnpath') { |
|
|
|
|
// the form |
|
|
|
|
if (api_is_platform_admin() || api_is_course_admin() || api_is_course_tutor() || api_is_course_coach()) { |
|
|
|
|
$actions .= '<a href="admin.php?exerciseId='.intval($_GET['exerciseId']).'">' . Display :: return_icon('back.png', get_lang('GoBackToQuestionList'),'',ICON_SIZE_MEDIUM).'</a>'; |
|
|
|
|
$actions .='<a href="live_stats.php?' . api_get_cidreq() . '&exerciseId='.$exercise_id.'">'.Display :: return_icon('activity_monitor.png', get_lang('LiveResults'),'',ICON_SIZE_MEDIUM).'</a>'; |
|
|
|
|
$actions .='<a href="stats.php?' . api_get_cidreq() . '&exerciseId='.$exercise_id.'">'.Display :: return_icon('statistics.png', get_lang('ReportByQuestion'),'', ICON_SIZE_MEDIUM).'</a>'; |
|
|
|
|
$actions .= '<a href="admin.php?exerciseId='.intval($_GET['exerciseId']).'">'.Display :: return_icon('back.png', get_lang('GoBackToQuestionList'), '', ICON_SIZE_MEDIUM).'</a>'; |
|
|
|
|
$actions .='<a href="live_stats.php?'.api_get_cidreq().'&exerciseId='.$exercise_id.'">'.Display :: return_icon('activity_monitor.png', get_lang('LiveResults'), '', ICON_SIZE_MEDIUM).'</a>'; |
|
|
|
|
$actions .='<a href="stats.php?'.api_get_cidreq().'&exerciseId='.$exercise_id.'">'.Display :: return_icon('statistics.png', get_lang('ReportByQuestion'), '', ICON_SIZE_MEDIUM).'</a>'; |
|
|
|
|
$actions .= '<a id="export_opener" href="'.api_get_self().'?export_report=1&hotpotato_name='.Security::remove_XSS($_GET['path']).'&exerciseId='.intval($_GET['exerciseId']).'" >'. |
|
|
|
|
Display::return_icon('save.png', get_lang('Export'),'',ICON_SIZE_MEDIUM).'</a>'; |
|
|
|
|
Display::return_icon('save.png', get_lang('Export'), '', ICON_SIZE_MEDIUM).'</a>'; |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
$actions .= '<a href="exercice.php">' . Display :: return_icon('back.png', get_lang('GoBackToQuestionList'),'',ICON_SIZE_MEDIUM).'</a>'; |
|
|
|
|
$actions .= '<a href="exercice.php">'.Display :: return_icon('back.png', get_lang('GoBackToQuestionList'), '', ICON_SIZE_MEDIUM).'</a>'; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//Deleting an attempt |
|
|
|
|
if ( ($is_allowedToEdit || $is_tutor || api_is_coach()) && $_GET['delete'] == 'delete' && !empty ($_GET['did']) && $locked == false) { |
|
|
|
|
if (($is_allowedToEdit || $is_tutor || api_is_coach()) && $_GET['delete'] == 'delete' && !empty($_GET['did']) && $locked == false) { |
|
|
|
|
$exe_id = intval($_GET['did']); |
|
|
|
|
if (!empty($exe_id)) { |
|
|
|
|
$sql = 'DELETE FROM '.$TBL_TRACK_EXERCICES.' WHERE exe_id = '.$exe_id; |
|
|
|
|
Database::query($sql); |
|
|
|
|
$sql = 'DELETE FROM '.$TBL_TRACK_ATTEMPT.' WHERE exe_id = '.$exe_id; |
|
|
|
|
Database::query($sql); |
|
|
|
|
header('Location: exercise_report.php?cidReq=' . Security::remove_XSS($_GET['cidReq']) . '&exerciseId='.$exercise_id); |
|
|
|
|
header('Location: exercise_report.php?cidReq='.Security::remove_XSS($_GET['cidReq']).'&exerciseId='.$exercise_id); |
|
|
|
|
exit; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ($is_allowedToEdit || $is_tutor) { |
|
|
|
|
$nameTools = get_lang('StudentScore'); |
|
|
|
|
$interbreadcrumb[] = array("url" => "exercice.php?gradebook=$gradebook","name" => get_lang('Exercices')); |
|
|
|
|
$interbreadcrumb[] = array("url" => "exercice.php?gradebook=$gradebook", "name" => get_lang('Exercices')); |
|
|
|
|
$objExerciseTmp = new Exercise(); |
|
|
|
|
if ($objExerciseTmp->read($exercise_id)) { |
|
|
|
|
$interbreadcrumb[] = array("url" => "admin.php?exerciseId=".$exercise_id, "name" => $objExerciseTmp->name); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
$interbreadcrumb[] = array("url" => "exercice.php?gradebook=$gradebook","name" => get_lang('Exercices')); |
|
|
|
|
$interbreadcrumb[] = array("url" => "exercice.php?gradebook=$gradebook", "name" => get_lang('Exercices')); |
|
|
|
|
$objExerciseTmp = new Exercise(); |
|
|
|
|
if ($objExerciseTmp->read($exercise_id)) { |
|
|
|
|
$nameTools = get_lang('Results').': '.$objExerciseTmp->name; |
|
|
|
@ -256,9 +256,9 @@ if ($is_allowedToEdit || $is_tutor) { |
|
|
|
|
|
|
|
|
|
Display :: display_header($nameTools); |
|
|
|
|
|
|
|
|
|
$actions = Display::div($actions, array('class'=> 'actions')); |
|
|
|
|
$actions = Display::div($actions, array('class' => 'actions')); |
|
|
|
|
|
|
|
|
|
$extra = '<script> |
|
|
|
|
$extra = '<script> |
|
|
|
|
$(document).ready(function() { |
|
|
|
|
|
|
|
|
|
$( "#dialog:ui-dialog" ).dialog( "destroy" ); |
|
|
|
@ -312,7 +312,7 @@ $action_links = ''; |
|
|
|
|
//Generating group list |
|
|
|
|
|
|
|
|
|
$group_list = GroupManager::get_group_list(); |
|
|
|
|
$group_parameters = array('group_all:'.get_lang('All'),'group_none:'.get_lang('None')); |
|
|
|
|
$group_parameters = array('group_all:'.get_lang('All'), 'group_none:'.get_lang('None')); |
|
|
|
|
|
|
|
|
|
foreach ($group_list as $group) { |
|
|
|
|
$group_parameters[] = $group['id'].':'.$group['name']; |
|
|
|
@ -323,53 +323,53 @@ if (!empty($group_parameters)) { |
|
|
|
|
|
|
|
|
|
if ($is_allowedToEdit || $is_tutor) { |
|
|
|
|
|
|
|
|
|
//The order is important you need to check the the $column variable in the model.ajax.php file |
|
|
|
|
$columns = array(get_lang('FirstName'), |
|
|
|
|
get_lang('LastName'), |
|
|
|
|
get_lang('LoginName'), |
|
|
|
|
get_lang('Group'), |
|
|
|
|
get_lang('Duration').' ('.get_lang('MinMinute').')', |
|
|
|
|
get_lang('StartDate'), |
|
|
|
|
get_lang('EndDate'), |
|
|
|
|
get_lang('Score'), |
|
|
|
|
get_lang('Status'), |
|
|
|
|
get_lang('ToolLearnpath'), |
|
|
|
|
get_lang('Actions') |
|
|
|
|
//The order is important you need to check the the $column variable in the model.ajax.php file |
|
|
|
|
$columns = array( |
|
|
|
|
get_lang('FirstName'), |
|
|
|
|
get_lang('LastName'), |
|
|
|
|
get_lang('LoginName'), |
|
|
|
|
get_lang('Group'), |
|
|
|
|
get_lang('Duration').' ('.get_lang('MinMinute').')', |
|
|
|
|
get_lang('StartDate'), |
|
|
|
|
get_lang('EndDate'), |
|
|
|
|
get_lang('Score'), |
|
|
|
|
get_lang('Status'), |
|
|
|
|
get_lang('ToolLearnpath'), |
|
|
|
|
get_lang('Actions') |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
//Column config |
|
|
|
|
$column_model = array( |
|
|
|
|
array('name'=>'firstname', 'index'=>'firstname', 'width'=>'50', 'align'=>'left', 'search' => 'true'), |
|
|
|
|
array('name'=>'lastname', 'index'=>'lastname', 'width'=>'50', 'align'=>'left', 'formatter'=>'action_formatter', 'search' => 'true'), |
|
|
|
|
array('name'=>'login', 'index'=>'username', 'width'=>'40', 'align'=>'left', 'search' => 'true', 'hidden'=>'true'), |
|
|
|
|
array('name'=>'group_name', 'index'=>'group_id', 'width'=>'40', 'align'=>'left', 'search' => 'true', 'stype'=> 'select', |
|
|
|
|
//for the bottom bar |
|
|
|
|
'searchoptions' => array( |
|
|
|
|
'defaultValue' => 'group_all', |
|
|
|
|
'value' => $group_parameters), |
|
|
|
|
//for the top bar |
|
|
|
|
'editoptions' => array('value' => $group_parameters)), |
|
|
|
|
array('name'=>'duration', 'index'=>'exe_duration', 'width'=>'30', 'align'=>'left', 'search' => 'true'), |
|
|
|
|
array('name'=>'start_date', 'index'=>'start_date', 'width'=>'60', 'align'=>'left', 'search' => 'true'), |
|
|
|
|
array('name'=>'exe_date', 'index'=>'exe_date', 'width'=>'60', 'align'=>'left', 'search' => 'true'), |
|
|
|
|
array('name'=>'score', 'index'=>'exe_result', 'width'=>'50', 'align'=>'left', 'search' => 'true'), |
|
|
|
|
array('name'=>'status', 'index'=>'revised', 'width'=>'40', 'align'=>'left', 'search' => 'true', 'stype'=>'select', |
|
|
|
|
//for the bottom bar |
|
|
|
|
'searchoptions' => array( |
|
|
|
|
'defaultValue' => '', |
|
|
|
|
'value' => ':'.get_lang('All').';1:'.get_lang('Validated').';0:'.get_lang('NotValidated')), |
|
|
|
|
|
|
|
|
|
//for the top bar |
|
|
|
|
'editoptions' => array('value' => ':'.get_lang('All').';1:'.get_lang('Validated').';0:'.get_lang('NotValidated'))), |
|
|
|
|
array('name'=>'lp', 'index'=>'lp', 'width'=>'60', 'align'=>'left', 'search' => 'false'), |
|
|
|
|
array('name'=>'actions', 'index'=>'actions', 'width'=>'60', 'align'=>'left', 'search' => 'false') |
|
|
|
|
); |
|
|
|
|
//Column config |
|
|
|
|
$column_model = array( |
|
|
|
|
array('name' => 'firstname', 'index' => 'firstname', 'width' => '50', 'align' => 'left', 'search' => 'true'), |
|
|
|
|
array('name' => 'lastname', 'index' => 'lastname', 'width' => '50', 'align' => 'left', 'formatter' => 'action_formatter', 'search' => 'true'), |
|
|
|
|
array('name' => 'login', 'index' => 'username', 'width' => '40', 'align' => 'left', 'search' => 'true', 'hidden' => 'true'), |
|
|
|
|
array('name' => 'group_name', 'index' => 'group_id', 'width' => '40', 'align' => 'left', 'search' => 'true', 'stype' => 'select', |
|
|
|
|
//for the bottom bar |
|
|
|
|
'searchoptions' => array( |
|
|
|
|
'defaultValue' => 'group_all', |
|
|
|
|
'value' => $group_parameters), |
|
|
|
|
//for the top bar |
|
|
|
|
'editoptions' => array('value' => $group_parameters)), |
|
|
|
|
array('name' => 'duration', 'index' => 'exe_duration', 'width' => '30', 'align' => 'left', 'search' => 'true'), |
|
|
|
|
array('name' => 'start_date', 'index' => 'start_date', 'width' => '60', 'align' => 'left', 'search' => 'true'), |
|
|
|
|
array('name' => 'exe_date', 'index' => 'exe_date', 'width' => '60', 'align' => 'left', 'search' => 'true'), |
|
|
|
|
array('name' => 'score', 'index' => 'exe_result', 'width' => '50', 'align' => 'left', 'search' => 'true'), |
|
|
|
|
array('name' => 'status', 'index' => 'revised', 'width' => '40', 'align' => 'left', 'search' => 'true', 'stype' => 'select', |
|
|
|
|
//for the bottom bar |
|
|
|
|
'searchoptions' => array( |
|
|
|
|
'defaultValue' => '', |
|
|
|
|
'value' => ':'.get_lang('All').';1:'.get_lang('Validated').';0:'.get_lang('NotValidated')), |
|
|
|
|
//for the top bar |
|
|
|
|
'editoptions' => array('value' => ':'.get_lang('All').';1:'.get_lang('Validated').';0:'.get_lang('NotValidated'))), |
|
|
|
|
array('name' => 'lp', 'index' => 'lp', 'width' => '60', 'align' => 'left', 'search' => 'false'), |
|
|
|
|
array('name' => 'actions', 'index' => 'actions', 'width' => '60', 'align' => 'left', 'search' => 'false') |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
$action_links = ' |
|
|
|
|
// add username as title in lastname filed - ref 4226 |
|
|
|
|
function action_formatter(cellvalue, options, rowObject) { |
|
|
|
|
// rowObject is firstname,lastname,login,... get the third word |
|
|
|
|
var loginx = "'.api_htmlentities(sprintf(get_lang("LoginX"),":::"), ENT_QUOTES).'"; |
|
|
|
|
var loginx = "'.api_htmlentities(sprintf(get_lang("LoginX"), ":::"), ENT_QUOTES).'"; |
|
|
|
|
var tabLoginx = loginx.split(/:::/); |
|
|
|
|
// tabLoginx[0] is before and tabLoginx[1] is after ::: |
|
|
|
|
// may be empty string but is defined |
|
|
|
@ -382,97 +382,97 @@ $extra_params['autowidth'] = 'true'; |
|
|
|
|
|
|
|
|
|
//height auto |
|
|
|
|
$extra_params['height'] = 'auto'; |
|
|
|
|
|
|
|
|
|
?> |
|
|
|
|
<script> |
|
|
|
|
|
|
|
|
|
function setSearchSelect(columnName) { |
|
|
|
|
$("#results").jqGrid('setColProp', columnName, |
|
|
|
|
{ |
|
|
|
|
searchoptions:{ |
|
|
|
|
dataInit:function(el){ |
|
|
|
|
$("option[value='1']",el).attr("selected", "selected"); |
|
|
|
|
setTimeout(function(){ |
|
|
|
|
$(el).trigger('change'); |
|
|
|
|
},1000); |
|
|
|
|
function setSearchSelect(columnName) { |
|
|
|
|
$("#results").jqGrid('setColProp', columnName, |
|
|
|
|
{ |
|
|
|
|
searchoptions:{ |
|
|
|
|
dataInit:function(el){ |
|
|
|
|
$("option[value='1']",el).attr("selected", "selected"); |
|
|
|
|
setTimeout(function(){ |
|
|
|
|
$(el).trigger('change'); |
|
|
|
|
},1000); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function exportExcel() { |
|
|
|
|
var mya=new Array(); |
|
|
|
|
mya=$("#results").getDataIDs(); // Get All IDs |
|
|
|
|
var data=$("#results").getRowData(mya[0]); // Get First row to get the labels |
|
|
|
|
var colNames=new Array(); |
|
|
|
|
var ii=0; |
|
|
|
|
for (var i in data){colNames[ii++]=i;} // capture col names |
|
|
|
|
var html=""; |
|
|
|
|
|
|
|
|
|
for(i=0;i<mya.length;i++) { |
|
|
|
|
data=$("#results").getRowData(mya[i]); // get each row |
|
|
|
|
for(j=0;j<colNames.length;j++) { |
|
|
|
|
html=html+data[colNames[j]]+","; // output each column as tab delimited |
|
|
|
|
function exportExcel() { |
|
|
|
|
var mya=new Array(); |
|
|
|
|
mya=$("#results").getDataIDs(); // Get All IDs |
|
|
|
|
var data=$("#results").getRowData(mya[0]); // Get First row to get the labels |
|
|
|
|
var colNames=new Array(); |
|
|
|
|
var ii=0; |
|
|
|
|
for (var i in data){colNames[ii++]=i;} // capture col names |
|
|
|
|
var html=""; |
|
|
|
|
|
|
|
|
|
for(i=0;i<mya.length;i++) { |
|
|
|
|
data=$("#results").getRowData(mya[i]); // get each row |
|
|
|
|
for(j=0;j<colNames.length;j++) { |
|
|
|
|
html=html+data[colNames[j]]+","; // output each column as tab delimited |
|
|
|
|
} |
|
|
|
|
html=html+"\n"; // output each row with end of line |
|
|
|
|
} |
|
|
|
|
html=html+"\n"; // output each row with end of line |
|
|
|
|
} |
|
|
|
|
html = html+"\n"; // end of line at the end |
|
|
|
|
html = html+"\n"; // end of line at the end |
|
|
|
|
|
|
|
|
|
var form = $("#export_report_form"); |
|
|
|
|
var form = $("#export_report_form"); |
|
|
|
|
|
|
|
|
|
$("#csvBuffer").attr('value', html); |
|
|
|
|
form.target='_blank'; |
|
|
|
|
form.submit(); |
|
|
|
|
} |
|
|
|
|
$("#csvBuffer").attr('value', html); |
|
|
|
|
form.target='_blank'; |
|
|
|
|
form.submit(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$(function() { |
|
|
|
|
<?php |
|
|
|
|
echo Display::grid_js('results', $url, $columns, $column_model, $extra_params, array(), $action_links, true); |
|
|
|
|
|
|
|
|
|
if ($is_allowedToEdit || $is_tutor) { ?> |
|
|
|
|
|
|
|
|
|
//setSearchSelect("status"); |
|
|
|
|
// |
|
|
|
|
//view:true, del:false, add:false, edit:false, excel:true} |
|
|
|
|
$("#results").jqGrid('navGrid','#results_pager', {view:true, edit:false, add:false, del:false, excel:false}, |
|
|
|
|
{height:280, reloadAfterSubmit:false}, // view options |
|
|
|
|
{height:280, reloadAfterSubmit:false}, // edit options |
|
|
|
|
{height:280, reloadAfterSubmit:false}, // add options |
|
|
|
|
{reloadAfterSubmit: false}, // del options |
|
|
|
|
{width:500} // search options |
|
|
|
|
); |
|
|
|
|
/* |
|
|
|
|
// add custom button to export the data to excel |
|
|
|
|
jQuery("#results").jqGrid('navButtonAdd','#results_pager',{ |
|
|
|
|
caption:"", |
|
|
|
|
onClickButton : function () { |
|
|
|
|
//exportExcel(); |
|
|
|
|
} |
|
|
|
|
});*/ |
|
|
|
|
$(function() { |
|
|
|
|
<?php |
|
|
|
|
echo Display::grid_js('results', $url, $columns, $column_model, $extra_params, array(), $action_links, true); |
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
jQuery('#sessions').jqGrid('navButtonAdd','#sessions_pager',{id:'pager_csv',caption:'',title:'Export To CSV',onClickButton : function(e) |
|
|
|
|
{ |
|
|
|
|
try { |
|
|
|
|
jQuery("#sessions").jqGrid('excelExport',{tag:'csv', url:'grid.php'}); |
|
|
|
|
} catch (e) { |
|
|
|
|
window.location= 'grid.php?oper=csv'; |
|
|
|
|
} |
|
|
|
|
},buttonicon:'ui-icon-document'}) |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
//Adding search options |
|
|
|
|
var options = { |
|
|
|
|
'stringResult': true, |
|
|
|
|
'autosearch' : true, |
|
|
|
|
'searchOnEnter':false |
|
|
|
|
} |
|
|
|
|
jQuery("#results").jqGrid('filterToolbar',options); |
|
|
|
|
var sgrid = $("#results")[0]; |
|
|
|
|
sgrid.triggerToolbar(); |
|
|
|
|
if ($is_allowedToEdit || $is_tutor) { |
|
|
|
|
?> |
|
|
|
|
|
|
|
|
|
//setSearchSelect("status"); |
|
|
|
|
// |
|
|
|
|
//view:true, del:false, add:false, edit:false, excel:true} |
|
|
|
|
$("#results").jqGrid('navGrid','#results_pager', {view:true, edit:false, add:false, del:false, excel:false}, |
|
|
|
|
{height:280, reloadAfterSubmit:false}, // view options |
|
|
|
|
{height:280, reloadAfterSubmit:false}, // edit options |
|
|
|
|
{height:280, reloadAfterSubmit:false}, // add options |
|
|
|
|
{reloadAfterSubmit: false}, // del options |
|
|
|
|
{width:500} // search options |
|
|
|
|
); |
|
|
|
|
/* |
|
|
|
|
// add custom button to export the data to excel |
|
|
|
|
jQuery("#results").jqGrid('navButtonAdd','#results_pager',{ |
|
|
|
|
caption:"", |
|
|
|
|
onClickButton : function () { |
|
|
|
|
//exportExcel(); |
|
|
|
|
} |
|
|
|
|
});*/ |
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
jQuery('#sessions').jqGrid('navButtonAdd','#sessions_pager',{id:'pager_csv',caption:'',title:'Export To CSV',onClickButton : function(e) |
|
|
|
|
{ |
|
|
|
|
try { |
|
|
|
|
jQuery("#sessions").jqGrid('excelExport',{tag:'csv', url:'grid.php'}); |
|
|
|
|
} catch (e) { |
|
|
|
|
window.location= 'grid.php?oper=csv'; |
|
|
|
|
} |
|
|
|
|
},buttonicon:'ui-icon-document'}) |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
//Adding search options |
|
|
|
|
var options = { |
|
|
|
|
'stringResult': true, |
|
|
|
|
'autosearch' : true, |
|
|
|
|
'searchOnEnter':false |
|
|
|
|
} |
|
|
|
|
jQuery("#results").jqGrid('filterToolbar',options); |
|
|
|
|
var sgrid = $("#results")[0]; |
|
|
|
|
sgrid.triggerToolbar(); |
|
|
|
|
|
|
|
|
|
<?php } ?> |
|
|
|
|
}); |
|
|
|
|
<?php } ?> |
|
|
|
|
}); |
|
|
|
|
</script> |
|
|
|
|
<form id="export_report_form" method="post" action="exercise_report.php"> |
|
|
|
|
<input type="hidden" name="csvBuffer" id="csvBuffer" value="" /> |
|
|
|
@ -480,6 +480,5 @@ $(function() { |
|
|
|
|
<input type="hidden" name="exerciseId" id="exerciseId" value="<?php echo $exercise_id ?>" />
|
|
|
|
|
</form> |
|
|
|
|
<?php |
|
|
|
|
|
|
|
|
|
echo Display::grid_html('results'); |
|
|
|
|
Display :: display_footer(); |
|
|
|
|