Fixing and Improving exercise result export see BT#2722

skala
Julio Montoya 14 years ago
parent f49b2424a0
commit dba9a731cd
  1. 88
      main/exercice/exercice.php
  2. 81
      main/exercice/exercise_result.class.php
  3. 4
      main/inc/lib/display.lib.php
  4. 41
      main/inc/lib/usermanager.lib.php

@ -20,6 +20,8 @@ require_once '../gradebook/lib/be.inc.php';
// Setting the tabs
$this_section = SECTION_COURSES;
$htmlHeadXtra[] = api_get_jquery_ui_js();
// Access control
api_protect_course_script(true);
@ -300,36 +302,35 @@ if ($is_allowedToEdit && !empty ($choice) && $choice == 'exportqti2') {
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' :
if (!empty ($_GET['extra_data'])) {
switch ($_GET['extra_data']) {
case 'on' :
$_SESSION['export_user_fields'] = true;
break;
case 'do_not_export_user_fields' :
break;
default :
$_SESSION['export_user_fields'] = false;
break;
}
}
if (!empty ($_POST['export_report']) && $_POST['export_report'] == 'export_report') {
if (!empty($_GET['export_report']) && $_GET['export_report'] == '1') {
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']))
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']) {
switch ($_GET['export_format']) {
case 'xls' :
$export = new ExerciseResult();
$export->exportCompleteReportXLS($documentPath, $user_id, $_SESSION['export_user_fields'], $_POST['export_filter'],$_POST['exerciseId'], $_POST['hotpotato_name']);
$export->exportCompleteReportXLS($documentPath, $user_id, $_SESSION['export_user_fields'], $_GET['export_filter'], $_GET['exerciseId'], $_GET['hotpotato_name']);
exit;
break;
case 'csv' :
default :
$export = new ExerciseResult();
$export->exportCompleteReportCSV($documentPath, $user_id, $_SESSION['export_user_fields'], $_POST['export_filter'],$_POST['exerciseId'], $_POST['hotpotato_name']);
$export->exportCompleteReportCSV($documentPath, $user_id, $_SESSION['export_user_fields'], $_GET['export_filter'], $_GET['exerciseId'], $_GET['hotpotato_name']);
exit;
break;
}
@ -533,22 +534,67 @@ if ($is_allowedToEdit && $origin != 'learnpath') {
} else {
$alt = get_lang('ExportWithoutUserFields');
$extra_user_fields = '<input type="hidden" name="export_user_fields" value="do_not_export_user_fields">';
}
echo '<a href="admin.php?exerciseId='.intval($_GET['exerciseId']).'">' . Display :: return_icon('back.png', get_lang('GoBackToQuestionList'),'','32').'</a>';
echo '<a href="javascript: void(0);" onclick="javascript: document.form1a.submit();">'.Display::return_icon('export_csv.png',get_lang('ExportAsCSV'),'','32').'</a>';
echo '<a href="javascript: void(0);" onclick="javascript: document.form1b.submit();">' . Display :: return_icon('export_excel.png', get_lang('ExportAsXLS'),'','32').'</a>';
}
echo '<a href="admin.php?exerciseId='.intval($_GET['exerciseId']).'">' . Display :: return_icon('back.png', get_lang('GoBackToQuestionList'),'','32').'</a>';
echo '<script type="text/javascript">
$(document).ready(function() {
$( "#dialog:ui-dialog" ).dialog( "destroy" );
$( "#dialog-confirm" ).dialog({
autoOpen: false,
show: "blind",
resizable: false,
height:250,
modal: true
});
$("#export_opener").click(function() {
var targetUrl = $(this).attr("href");
$( "#dialog-confirm" ).dialog({
buttons: {
"'.addslashes(get_lang('Download')).'": function() {
var export_format = $("input[name=export_format]:checked").val();
var extra_data = $("input[name=load_extra_data]:checked").val();
location.href = targetUrl+"&export_format="+export_format+"&extra_data="+extra_data;
$( this ).dialog( "close" );
},
}
});
$( "#dialog-confirm" ).dialog("open");
return false;
});
});
</script>';
echo '<div id="dialog-confirm" title="'.get_lang("ConfirmYourChoice").'">';
//echo Display::tag('p', get_lang("CSVOrExcel"));
//Display::return_icon('export_excel.png', get_lang('ExportAsXLS'),'','32')
echo Display::tag('p', Display::input('radio', 'export_format', 'csv', array('checked'=>'1', 'id'=>'export_format_csv_label')). Display::tag('label', get_lang('ExportAsCSV'), array('for'=>'export_format_csv_label')));
echo Display::tag('p', Display::input('radio', 'export_format', 'xls', array('id'=>'export_format_xls_label')). Display::tag('label', get_lang('ExportAsXLS'), array('for'=>'export_format_xls_label')));
echo Display::tag('p', Display::input('checkbox', 'load_extra_data', '0',array('id'=>'load_extra_data_id')). Display::tag('label', get_lang('LoadExtraData'), array('for'=>'load_extra_data_id')));
echo '</div>';
//onclick="javascript: document.form1a.submit();
if ($_GET['filter'] == '1' or !isset ($_GET['filter']) or $_GET['filter'] == 0 ) {
$filter = 1;
} else {
$filter = 2;
}
echo '<a id="export_opener" href="'.api_get_self().'?export_report=1&show=result&export_filter='.$filter.'&hotpotato_name='.Security::remove_XSS($_GET['path']).'&exerciseId='.intval($_GET['exerciseId']).'" >'.Display::return_icon('save.png', get_lang('ExportAsCSV'),'',32).'</a>';
/*
echo '<a href="javascript: void(0);" onclick="javascript: document.form1b.submit();">'.Display::return_icon('export_excel.png', get_lang('ExportAsXLS'),'','32').'</a>';
echo '<form id="form1a" name="form1a" method="post" action="' . api_get_self() . '?show=' . Security :: remove_XSS($_GET['show']) . '" style="display:inline">';
echo '<input type="hidden" name="export_report" value="export_report">';
echo '<input type="hidden" name="export_format" value="csv">';
echo '<input type="hidden" name="exerciseId" value="'.intval($_GET['exerciseId']).'">';
echo '<input type="hidden" name="hotpotato_name" value="'.Security::remove_XSS($_GET['path']).'">';
if ($_GET['filter'] == '1' or !isset ($_GET['filter']) or $_GET['filter'] == 0 ) {
$filter = 1;
} else {
$filter = 2;
}
echo '<input type="hidden" name="export_filter" value="'.(empty($filter)?1:intval($filter)).'">';
echo '</form>';
echo '<form id="form1b" name="form1b" method="post" action="' . api_get_self() . '?show=' . Security :: remove_XSS($_GET['show']) . '" style="display:inline">';
@ -557,7 +603,7 @@ if ($is_allowedToEdit && $origin != 'learnpath') {
echo '<input type="hidden" name="hotpotato_name" value="'.Security::remove_XSS($_GET['path']).'">';
echo '<input type="hidden" name="export_format" value="xls">';
echo '<input type="hidden" name="exerciseId" value="'.intval($_GET['exerciseId']).'">';
echo '</form>';
echo '</form>';*/
}
}
} else {

@ -90,7 +90,7 @@ class ExerciseResult
* @param string The document path (for HotPotatoes retrieval)
* @param integer User ID. Optional. If no user ID is provided, we take all the results. Defauts to null
*/
function _getExercisesReporting($document_path, $user_id=null, $filter=0, $exercise_id = 0, $hotpotato_name = null) {
function _getExercisesReporting($document_path, $user_id = null, $filter=0, $exercise_id = 0, $hotpotato_name = null) {
$return = array();
$TBL_EXERCISES = Database::get_course_table(TABLE_QUIZ_TEST);
$TBL_EXERCISE_QUESTION = Database::get_course_table(TABLE_QUIZ_TEST_QUESTION);
@ -108,7 +108,7 @@ class ExerciseResult
$user_id = intval($user_id);
$session_id_and = ' AND te.session_id = ' . api_get_session_id() . ' ';
$exercise_id = intval($exercise_id);
$hotpotato_name = Database::escape_string($hotpotato_name);
$hotpotato_name = Database::escape_string($hotpotato_name);
if (!empty($exercise_id)) {
$session_id_and .= " AND exe_exo_id = $exercise_id ";
@ -116,7 +116,7 @@ class ExerciseResult
if (empty($user_id)) {
$sql="SELECT ".(api_is_western_name_order() ? "firstname as userpart1, lastname userpart2" : "lastname as userpart1, firstname as userpart2").", ce.title as extitle, te.exe_result as exresult , te.exe_weighting as exweight,
te.exe_date as exdate, te.exe_id as exid, email as exemail, te.start_date as exstart, steps_counter as exstep, exe_user_id as excruid,te.exe_duration as exduration
te.exe_date as exdate, te.exe_id as exid, email as exemail, te.start_date as exstart, steps_counter as exstep, exe_user_id as excruid, te.exe_duration as exduration
FROM $TBL_EXERCISES AS ce INNER JOIN $TBL_TRACK_EXERCISES AS te ON (te.exe_exo_id = ce.id) INNER JOIN $TBL_USER AS user ON (user.user_id = exe_user_id)
WHERE te.status != 'incomplete' AND te.exe_cours_id='" . Database :: escape_string($cid) . "' $user_id_and $session_id_and AND ce.active <>-1 AND orig_lp_id = 0 AND orig_lp_item_id = 0";
@ -135,7 +135,7 @@ class ExerciseResult
WHERE te.status != 'incomplete' AND te.exe_cours_id='" . Database :: escape_string($cid) . "' $user_id_and $session_id_and AND ce.active <>-1 AND" .
" orig_lp_id = 0 AND orig_lp_item_id = 0 ORDER BY userpart2, te.exe_cours_id ASC, ce.title ASC, te.exe_date DESC";
$hpsql = "SELECT '',exe_name, exe_result , exe_weighting, exe_date
$hpsql = "SELECT '', exe_name, exe_result , exe_weighting, exe_date
FROM $TBL_TRACK_HOTPOTATOES
WHERE exe_user_id = '" . $user_id . "' AND exe_cours_id = '" . Database :: escape_string($cid) . "' AND tth.exe_name = '$hotpotato_name'
ORDER BY exe_cours_id ASC, exe_date DESC";
@ -156,18 +156,18 @@ class ExerciseResult
if ($filter) {
switch ($filter) {
case 1 :
$filter_by_not_revised = true;
break;
$filter_by_not_revised = true;
break;
case 2 :
$filter_by_revised = true;
break;
$filter_by_revised = true;
break;
default :
null;
null;
}
}
//Print the results of tests
if(is_array($results) && empty($hotpotato_name)) {
if (is_array($results) && empty($hotpotato_name)) {
for($i = 0; $i < sizeof($results); $i++) {
$revised = false;
@ -187,16 +187,16 @@ class ExerciseResult
if (empty($user_id)) {
$return[$i]['last_name'] = $results[$i]['userpart1'];
$return[$i]['first_name'] = $results[$i]['userpart2'];
$return[$i]['user_id'] = $results[$i]['userid'];
$return[$i]['user_id'] = $results[$i]['excruid'];
$return[$i]['email'] = $results[$i]['exemail'];
}
$return[$i]['title'] = $results[$i]['extitle'];
$return[$i]['time'] = api_convert_and_format_date($results[$i]['exdate'], null, date_default_timezone_get());
$return[$i]['result'] = $results[$i]['exresult'];
$return[$i]['max'] = $results[$i]['exweight'];
$return[$i]['title'] = $results[$i]['extitle'];
$return[$i]['time'] = api_convert_and_format_date($results[$i]['exdate'], null, date_default_timezone_get());
$return[$i]['result'] = $results[$i]['exresult'];
$return[$i]['max'] = $results[$i]['exweight'];
}
}
// Print the Result of Hotpotatoes Tests
if (is_array($hpresults)) {
@ -228,9 +228,9 @@ class ExerciseResult
* @param boolean Whether to include user fields or not
* @return boolean False on error
*/
public function exportCompleteReportCSV($document_path='',$user_id=null, $export_user_fields = array(), $export_filter = 0, $exercise_id = 0, $hotpotato_name = null) {
public function exportCompleteReportCSV($document_path='',$user_id=null, $export_user_fields = false, $export_filter = 0, $exercise_id = 0, $hotpotato_name = null) {
global $charset;
$this->_getExercisesReporting($document_path,$user_id,$export_filter, $exercise_id, $hotpotato_name);
$this->_getExercisesReporting($document_path,$user_id, $export_filter, $exercise_id, $hotpotato_name);
$filename = 'exercise_results_'.date('YmdGis').'.csv';
if(!empty($user_id)) {
$filename = 'exercise_results_user_'.$user_id.'_'.date('YmdGis').'.csv';
@ -248,10 +248,10 @@ class ExerciseResult
if ($export_user_fields) {
//show user fields section with a big th colspan that spans over all fields
$extra_user_fields = UserManager::get_extra_fields(0,0,5,'ASC',false);
$num = count($extra_user_fields);
$extra_user_fields = UserManager::get_extra_fields(0,1000,5,'ASC',false, 1);
$num = count($extra_user_fields);
foreach($extra_user_fields as $field) {
$data .= '"'.str_replace("\r\n",' ',api_html_entity_decode(strip_tags($field[4]), ENT_QUOTES, $charset)).'";';
$data .= '"'.str_replace("\r\n",' ',api_html_entity_decode(strip_tags($field[3]), ENT_QUOTES, $charset)).'";';
}
$display_extra_user_fields = true;
}
@ -274,7 +274,7 @@ class ExerciseResult
}
if($export_user_fields) {
//show user fields data, if any, for this user
$user_fields_values = UserManager::get_extra_user_data(intval($row['user_id']),false,false);
$user_fields_values = UserManager::get_extra_user_data($row['user_id'],false,false, false, true);
foreach($user_fields_values as $value) {
$data .= '"'.str_replace('"','""',api_html_entity_decode(strip_tags($value), ENT_QUOTES, $charset)).'";';
}
@ -309,14 +309,15 @@ class ExerciseResult
* Exports the complete report as an XLS file
* @return boolean False on error
*/
public function exportCompleteReportXLS($document_path='',$user_id=null, $export_user_fields=array(), $export_filter = 0, $exercise_id=0, $hotpotato_name = null) {
global $charset;
$this->_getExercisesReporting($document_path,$user_id,$export_filter, $exercise_id,$hotpotato_name);
public function exportCompleteReportXLS($document_path='',$user_id = null, $export_user_fields= false, $export_filter = 0, $exercise_id=0, $hotpotato_name = null) {
global $charset;
$this->_getExercisesReporting($document_path, $user_id, $export_filter, $exercise_id,$hotpotato_name);
$filename = 'exercise_results_'.date('YmdGis').'.xls';
if(!empty($user_id)) {
$filename = 'exercise_results_user_'.$user_id.'_'.date('YmdGis').'.xls';
} //build the results
require_once(api_get_path(LIBRARY_PATH).'pear/Spreadsheet_Excel_Writer/Writer.php');
}
require_once api_get_path(LIBRARY_PATH).'pear/Spreadsheet_Excel_Writer/Writer.php';
$workbook = new Spreadsheet_Excel_Writer();
$workbook->setTempDir(api_get_path(SYS_ARCHIVE_PATH));
$workbook->setVersion(8); // BIFF8
@ -337,24 +338,26 @@ class ExerciseResult
}
if ($with_column_user) {
$worksheet->write($line,$column,get_lang('Email'));
$column++;
$column++;
$worksheet->write($line,$column,get_lang('LastName'));
$column++;
$column++;
$worksheet->write($line,$column,get_lang('FirstName'));
$column++;
$column++;
}
$export_user_fields = true;
if ($export_user_fields) {
//show user fields section with a big th colspan that spans over all fields
$extra_user_fields = UserManager::get_extra_fields(0,0,5,'ASC',false, 1);
$extra_user_fields = UserManager::get_extra_fields(0,1000,5,'ASC',false, 1);
//show the fields names for user fields
foreach($extra_user_fields as $field) {
foreach($extra_user_fields as $field) {
$worksheet->write($line,$column,api_html_entity_decode(strip_tags($field[3]), ENT_QUOTES, $charset));
$column++;
}
}
$worksheet->write($line,$column,get_lang('Title'));
$column++;
$worksheet->write($line,$column,get_lang('Date'));
@ -367,18 +370,20 @@ class ExerciseResult
foreach($this->results as $row) {
$column = 0;
if(!empty($row['last_name']) && !empty($row['first_name'])) {
$worksheet->write($line,$column,api_html_entity_decode(strip_tags($row['email']), ENT_QUOTES, $charset));
$worksheet->write($line,$column,api_html_entity_decode(strip_tags($row['email']), ENT_QUOTES, $charset));
$column++;
$worksheet->write($line,$column,api_html_entity_decode(strip_tags($row['last_name']), ENT_QUOTES, $charset));
$column++;
$worksheet->write($line,$column,api_html_entity_decode(strip_tags($row['first_name']), ENT_QUOTES, $charset));
$column++;
}
if ($export_user_fields) {
if ($export_user_fields) {
//show user fields data, if any, for this user
$user_fields_values = UserManager::get_extra_user_data(intval($row['user_id']),false,false, false, true);
foreach($user_fields_values as $value) {
$worksheet->write($line,$column,api_html_entity_decode(strip_tags($value), ENT_QUOTES, $charset));
$user_fields_values = UserManager::get_extra_user_data($row['user_id'],false,false, false, true);
foreach($user_fields_values as $value) {
$worksheet->write($line,$column, api_html_entity_decode(strip_tags($value), ENT_QUOTES, $charset));
$column++;
}
}

@ -579,8 +579,10 @@ class Display {
* @version Feb 2011
*/
public static function return_icon($image, $alt_text = '', $additional_attributes = array(), $size=null) {
$code_path = api_get_path(SYS_CODE_PATH);
$code_path = api_get_path(SYS_CODE_PATH);
$w_code_path = api_get_path(WEB_CODE_PATH);
$image = trim($image);
$theme = 'css/'.api_get_visual_theme().'/icons/';
$icon = '';

@ -1145,7 +1145,7 @@ class UserManager
*/
public static function get_extra_fields($from = 0, $number_of_items = 0, $column = 5, $direction = 'ASC', $all_visibility = true, $field_filter = null) {
$fields = array();
$t_uf = Database :: get_main_table(TABLE_MAIN_USER_FIELD);
$t_uf = Database :: get_main_table(TABLE_MAIN_USER_FIELD);
$t_ufo = Database :: get_main_table(TABLE_MAIN_USER_FIELD_OPTIONS);
$columns = array('id', 'field_variable', 'field_type', 'field_display_text', 'field_default_value', 'field_order', 'field_filter', 'tms');
$column = intval($column);
@ -1153,14 +1153,13 @@ class UserManager
if (in_array(strtoupper($direction), array('ASC', 'DESC'))) {
$sort_direction = strtoupper($direction);
}
$sqlf = "SELECT * FROM $t_uf ";
$sqlf = "SELECT * FROM $t_uf WHERE 1 = 1 ";
if (!$all_visibility) {
$sqlf .= " WHERE field_visible = 1 ";
}
$sqlf .= " AND field_visible = 1 ";
}
if (!is_null($field_filter)) {
$field_filter = intval($field_filter);
$sqlf .= " WHERE field_filter = $field_filter ";
$sqlf .= " AND field_filter = $field_filter ";
}
$sqlf .= " ORDER BY ".$columns[$column]." $sort_direction " ;
if ($number_of_items != 0) {
@ -1468,34 +1467,32 @@ class UserManager
$t_ufv = Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES);
$user_id = Database::escape_string($user_id);
$sql = "SELECT f.id as id, f.field_variable as fvar, f.field_type as type FROM $t_uf f ";
$filter_cond = '';
$filter_cond = '';
if (!$all_visibility) {
if (isset($field_filter)) {
$field_filter = intval($field_filter);
$filter_cond .= " AND field_filter = $field_filter ";
}
if (!$all_visibility) {
if (isset($field_filter)) {
$field_filter = intval($field_filter);
$filter_cond .= " AND field_filter = $field_filter ";
}
$sql .= " WHERE f.field_visible = 1 $filter_cond ";
} else {
if (isset($field_filter)) {
$field_filter = intval($field_filter);
$sql .= " WHERE field_filter = $field_filter ";
}
}
if (isset($field_filter)) {
$field_filter = intval($field_filter);
$sql .= " WHERE field_filter = $field_filter ";
}
}
$sql .= " ORDER BY f.field_order";
$res = Database::query($sql);
if (Database::num_rows($res) > 0) {
while ($row = Database::fetch_array($res)) {
if ($row['type'] == USER_FIELD_TYPE_TAG) {
$tags = self::get_user_tags_to_string($user_id,$row['id'],false);
$extra_data['extra_'.$row['fvar']] = $tags;
} else {
$sqlu = "SELECT field_value as fval " .
" FROM $t_ufv " .
" WHERE field_id=".$row['id']."" .
" AND user_id=".$user_id;
$sqlu = "SELECT field_value as fval FROM $t_ufv WHERE field_id=".$row['id']." AND user_id = ".$user_id;
$resu = Database::query($sqlu);
$fval = '';
// get default value

Loading…
Cancel
Save