diff --git a/main/exercice/exercice.php b/main/exercice/exercice.php
index baadd77cfc..35e7063aa5 100644
--- a/main/exercice/exercice.php
+++ b/main/exercice/exercice.php
@@ -50,6 +50,7 @@ require_once(api_get_path(LIBRARY_PATH).'fileUpload.lib.php');
require_once('hotpotatoes.lib.php');
require_once(api_get_path(LIBRARY_PATH).'document.lib.php');
include(api_get_path(LIBRARY_PATH).'mail.lib.inc.php');
+include(api_get_path(LIBRARY_PATH).'usermanager.lib.php');
/*
-----------------------------------------------------------
@@ -302,10 +303,23 @@ if($is_allowedToEdit && !empty($choice) && $choice == 'exportqti2')
rmdir($temp_zip_dir);
exit(); //otherwise following clicks may become buggy
}
-
-if($_POST['export_report'] == 'export_report')
+if(!empty($_POST['export_user_fields']))
+{
+ switch($_POST['export_user_fields'])
+ {
+ case 'export_user_fields':
+ $_SESSION['export_user_fields'] = true;
+ break;
+ case 'do_not_export_user_fields':
+ default:
+ $_SESSION['export_user_fields'] = false;
+ break;
+ }
+}
+if(!empty($_POST['export_report']) && $_POST['export_report'] == 'export_report')
{
$user_id = null;
+ if(empty($_SESSION['export_user_fields'])) $_SESSION['export_user_fields'] = false;
if(!$is_allowedToEdit and !$is_tutor)
{
$user_id = api_get_user_id();
@@ -315,13 +329,13 @@ if($_POST['export_report'] == 'export_report')
{
case 'xls':
$export = new ExerciseResult();
- $export->exportCompleteReportXLS($documentPath, $user_id);
+ $export->exportCompleteReportXLS($documentPath, $user_id, $_SESSION['export_user_fields']);
exit;
break;
case 'csv':
default:
$export = new ExerciseResult();
- $export->exportCompleteReportCSV($documentPath, $user_id);
+ $export->exportCompleteReportCSV($documentPath, $user_id, $_SESSION['export_user_fields']);
exit;
break;
}
@@ -873,8 +887,21 @@ if($_configuration['tracking_enabled'])
echo '';
echo '';
echo '';
- echo ' '.get_lang('ExportAsCSV').'';
- echo ' '.get_lang('ExportAsXLS').'';
+ echo '
';
+ echo ' '.get_lang('ExportAsCSV').'';
+ echo ' '.get_lang('ExportAsXLS').'';
+ echo ' '.$alt.'';
echo '
';
?>
diff --git a/main/exercice/exercise_result.class.php b/main/exercice/exercise_result.class.php
index 61f58b37f6..d6871eca80 100644
--- a/main/exercice/exercise_result.class.php
+++ b/main/exercice/exercise_result.class.php
@@ -125,13 +125,13 @@ class ExerciseResult
//get all results (ourself and the others) as an admin should see them
//AND exe_user_id <> $_user['user_id'] clause has been removed
$sql="SELECT CONCAT(lastname,' ',firstname),ce.title, te.exe_result ,
- te.exe_weighting, UNIX_TIMESTAMP(te.exe_date),te.exe_id,email
+ te.exe_weighting, UNIX_TIMESTAMP(te.exe_date),te.exe_id, user.email, user.user_id
FROM $TBL_EXERCISES ce , $TBL_TRACK_EXERCISES te, $TBL_USER user
WHERE te.exe_exo_id = ce.id AND user_id=te.exe_user_id AND te.exe_cours_id='$cid'
ORDER BY te.exe_cours_id ASC, ce.title ASC, te.exe_date ASC";
$hpsql="SELECT CONCAT(tu.lastname,' ',tu.firstname), tth.exe_name,
- tth.exe_result , tth.exe_weighting, UNIX_TIMESTAMP(tth.exe_date)
+ tth.exe_result , tth.exe_weighting, UNIX_TIMESTAMP(tth.exe_date), tu.email, tu.user_id
FROM $TBL_TRACK_HOTPOTATOES tth, $TBL_USER tu
WHERE tu.user_id=tth.exe_user_id AND tth.exe_cours_id = '".$cid."'
ORDER BY tth.exe_cours_id ASC, tth.exe_date ASC";
@@ -139,7 +139,8 @@ class ExerciseResult
}
else
{ // get only this user's results
- $sql="SELECT '',ce.title, te.exe_result , te.exe_weighting, UNIX_TIMESTAMP(te.exe_date),te.exe_id
+ $sql="SELECT '',ce.title, te.exe_result , te.exe_weighting, " .
+ "UNIX_TIMESTAMP(te.exe_date),te.exe_id
FROM $TBL_EXERCISES ce , $TBL_TRACK_EXERCISES te
WHERE te.exe_exo_id = ce.id AND te.exe_user_id='".$user_id."' AND te.exe_cours_id='$cid'
ORDER BY te.exe_cours_id ASC, ce.title ASC, te.exe_date ASC";
@@ -151,8 +152,8 @@ class ExerciseResult
}
- $results=getManyResultsXCol($sql,7);
- $hpresults=getManyResultsXCol($hpsql,5);
+ $results=getManyResultsXCol($sql,8);
+ $hpresults=getManyResultsXCol($hpsql,7);
$NoTestRes = 0;
$NoHPTestRes = 0;
@@ -172,7 +173,8 @@ class ExerciseResult
if(empty($user_id))
{
$user = $results[$i][0];
- $return[$i]['user'] = $user;
+ $return[$i]['user'] = $user;
+ $return[$i]['user_id'] = $results[$i][7];
}
$return[$i]['title'] = $test;
$return[$i]['time'] = format_locale_date(get_lang('dateTimeFormatLong'),$results[$i][4]);
@@ -196,6 +198,7 @@ class ExerciseResult
if(empty($user_id))
{
$return[$j+$i]['user'] = $hpresults[$i][0];
+ $return[$j+$i]['user_id'] = $results[$i][6];
}
$return[$j+$i]['title'] = $title;
@@ -211,9 +214,10 @@ class ExerciseResult
* Exports the complete report as a CSV file
* @param string Document path inside the document tool
* @param integer Optional user ID
+ * @param boolean Whether to include user fields or not
* @return boolean False on error
*/
- public function exportCompleteReportCSV($document_path='',$user_id=null)
+ public function exportCompleteReportCSV($document_path='',$user_id=null, $export_user_fields)
{
$this->_getExercisesReporting($document_path,$user_id);
$filename = 'exercise_results_'.date('YmdGis').'.csv';
@@ -228,6 +232,17 @@ class ExerciseResult
{
$data .= get_lang('User').';';
}
+ 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);
+ foreach($extra_user_fields as $field)
+ {
+ $data .= '"'.str_replace("\r\n",' ',html_entity_decode(strip_tags($field[3]))).'";';
+ }
+ $display_extra_user_fields = true;
+ }
$data .= get_lang('Title').';';
$data .= get_lang('Date').';';
$data .= get_lang('Results').';';
@@ -240,6 +255,15 @@ class ExerciseResult
{
$data .= str_replace("\r\n",' ',html_entity_decode(strip_tags($row['user']))).';';
}
+ 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);
+ foreach($user_fields_values as $value)
+ {
+ $data .= '"'.str_replace('"','""',html_entity_decode(strip_tags($value))).'";';
+ }
+ }
$data .= str_replace("\r\n",' ',html_entity_decode(strip_tags($row['title']))).';';
$data .= str_replace("\r\n",' ',$row['time']).';';
$data .= str_replace("\r\n",' ',$row['result']).';';
@@ -274,7 +298,7 @@ class ExerciseResult
* Exports the complete report as an XLS file
* @return boolean False on error
*/
- public function exportCompleteReportXLS($document_path='',$user_id=null)
+ public function exportCompleteReportXLS($document_path='',$user_id=null, $export_user_fields)
{
$this->_getExercisesReporting($document_path,$user_id);
$filename = 'exercise_results_'.date('YmdGis').'.xls';
@@ -293,6 +317,17 @@ class ExerciseResult
$worksheet->write($line,$column,get_lang('User'));
$column++;
}
+ 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);
+ //show the fields names for user fields
+ foreach($extra_user_fields as $field)
+ {
+ $worksheet->write($line,$column,html_entity_decode(strip_tags($field[3])));
+ $column++;
+ }
+ }
$worksheet->write($line,$column,get_lang('Title'));
$column++;
$worksheet->write($line,$column,get_lang('Date'));
@@ -310,6 +345,13 @@ class ExerciseResult
$worksheet->write($line,$column,html_entity_decode(strip_tags($row['user'])));
$column++;
}
+ //show user fields data, if any, for this user
+ $user_fields_values = UserManager::get_extra_user_data(intval($row['user_id']),false,false);
+ foreach($user_fields_values as $value)
+ {
+ $worksheet->write($line,$column,html_entity_decode(strip_tags($value)));
+ $column++;
+ }
$worksheet->write($line,$column,html_entity_decode(strip_tags($row['title'])));
$column++;
$worksheet->write($line,$column,$row['time']);