Browse Source

Bug #3646 and Issue #306 - Assesments (gradebook) tool, part 2: Fixing person name order and sorting to be dependable on the internationalization settings.

Ivan Tcholakov 15 years ago
parent
commit
3185aba8b4

+ 1 - 1
main/gradebook/gradebook.php

@@ -292,7 +292,7 @@ if ($course_to_crsind && !isset($_GET['confirm'])) {
 																			  : '&moveeval=' . Security::remove_XSS($_GET['moveeval']) )
 													.'&selectcat=' . Security::remove_XSS($_GET['selectcat'])
 													.'&targetcat=' . Security::remove_XSS($_GET['targetcat']).'">
-			   <input type="submit" value="'.get_lang('Ok').'">
+			   <input type="submit" value="'.'  '.get_lang('Ok').'  '.'">
 			   </form>';
 
 	$warning_message = get_lang('MoveWarning').'<br><br>'.$button;

+ 2 - 3
main/gradebook/gradebook_result.class.php

@@ -116,13 +116,13 @@ class GradeBookResult
 		if (empty($user_id)) {
 			//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 ,
+			$sql="SELECT ".(api_is_western_name_order() ? "CONCAT(firstname,' ',lastname)" : "CONCAT(lastname,' ',firstname)").", ce.title, te.exe_result ,
 						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,
+			$hpsql="SELECT ".(api_is_western_name_order() ? "CONCAT(tu.firstname,' ',tu.lastname)" : "CONCAT(tu.lastname,' ',tu.firstname)").", tth.exe_name,
 						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."'
@@ -139,7 +139,6 @@ class GradeBookResult
 					FROM $TBL_TRACK_HOTPOTATOES
 					WHERE exe_user_id = '".$user_id."' AND exe_cours_id = '".$cid."'
 					ORDER BY exe_cours_id ASC, exe_date ASC";
-
 		}
 
 		$results=getManyResultsXCol($sql,8);

+ 42 - 13
main/gradebook/gradebook_view_result.php

@@ -305,12 +305,22 @@ if ($export_result_form->validate()) {
 		));
 		
 		$datagen = new ResultsDataGenerator ($eval[0],$allresults);
-		$data_array = $datagen->get_data(ResultsDataGenerator :: RDG_SORT_LASTNAME,0,null,true);	
+		if (api_sort_by_first_name()) {
+			$data_array = $datagen->get_data(ResultsDataGenerator :: RDG_SORT_FIRSTNAME, 0, null, true);
+		} else {
+			$data_array = $datagen->get_data(ResultsDataGenerator :: RDG_SORT_LASTNAME,0,null,true);	
+		}
 		$newarray = array();
+		$is_western_name_order = api_is_western_name_order();
 		foreach ($data_array as $data) {
 			$newitem = array();
-			$newitem[] = $data['lastname'];
-			$newitem[] = $data['firstname'];
+			if ($is_western_name_order) {
+				$newitem[] = $data['firstname'];
+				$newitem[] = $data['lastname'];
+			} else {
+				$newitem[] = $data['lastname'];
+				$newitem[] = $data['firstname'];
+			}
 			$newitem[] = $data['score'];
 			if ($displayscore->is_custom())
 				$newitem[] = $data['display'];
@@ -318,10 +328,18 @@ if ($export_result_form->validate()) {
 		}
 		$pdf->ezSetY(650);
 		if ($displayscore->is_custom()) {
-			$header_names = array(get_lang('LastName'),get_lang('FirstName'),get_lang('Score'),get_lang('Display'));			
-		}else {
-			$header_names = array(get_lang('LastName'),get_lang('FirstName'),get_lang('Score'));
-		}
+			if ($is_western_name_order) {
+				$header_names = array(get_lang('FirstName'),get_lang('LastName'),get_lang('Score'),get_lang('Display'));
+			} else {
+				$header_names = array(get_lang('LastName'),get_lang('FirstName'),get_lang('Score'),get_lang('Display'));			
+			}
+		} else {
+			if ($is_western_name_order) {
+				$header_names = array(get_lang('FirstName'),get_lang('LastName'),get_lang('Score'));
+			} else {
+				$header_names = array(get_lang('LastName'),get_lang('FirstName'),get_lang('Score'));
+			}
+		}
 			
 		$pdf->ezTable($newarray,$header_names,'',array('showHeadings'=>1,'shaded'=>1,'showLines'=>1,'rowGap'=>3,'width'=> 500));
 		$pdf->ezStream();
@@ -372,16 +390,27 @@ if (isset ($_POST['action'])) {
 		}
 	}
 } // TODO - what if selecteval not set ?
-$addparams= array (
-'selecteval' => $eval[0]->get_id());
+$addparams = array ('selecteval' => $eval[0]->get_id());
 if (isset ($_GET['print'])) {
 	$datagen = new ResultsDataGenerator ($eval[0],$allresults);
-	$data_array = $datagen->get_data(ResultsDataGenerator :: RDG_SORT_LASTNAME,0,null,true);	
-		if ($displayscore->is_custom()) {
+	if (api_sort_by_first_name()) {
+		$data_array = $datagen->get_data(ResultsDataGenerator :: RDG_SORT_FIRSTNAME, 0, null, true);
+	} else {
+		$data_array = $datagen->get_data(ResultsDataGenerator :: RDG_SORT_LASTNAME,0,null,true);	
+	}
+	if ($displayscore->is_custom()) {
+		if (api_is_western_name_order()) {
+			$header_names = array(get_lang('FirstName'),get_lang('LastName'),get_lang('Score'),get_lang('Display'));
+		} else {
 			$header_names = array(get_lang('LastName'),get_lang('FirstName'),get_lang('Score'),get_lang('Display'));			
+		}
+	} else {
+		if (api_is_western_name_order()) {
+			$header_names = array(get_lang('FirstName'),get_lang('LastName'),get_lang('Score'));
 		}else {
 			$header_names = array(get_lang('LastName'),get_lang('FirstName'),get_lang('Score'));			
 		}
+	}
 	$newarray = array();
 	foreach ($data_array as $data) {
 		$newarray[] = array_slice($data, 2);			
@@ -479,7 +508,7 @@ if (isset ($_GET['importoverwritescore'])) {
 
 if (isset ($_GET['import_user_error'])) {
 	$userinfo= get_user_info_from_id($_GET['import_user_error']);
-	Display :: display_warning_message(get_lang('UserInfoDoesNotMatch') . ' ' . $userinfo['lastname'] . ' ' . $userinfo['firstname']);
+	Display :: display_warning_message(get_lang('UserInfoDoesNotMatch') . ' ' . api_get_person_name($userinfo['firstname'], $userinfo['lastname']));
 }
 if (isset ($_GET['allresdeleted'])) {
 	Display :: display_confirmation_message(get_lang('AllResultDeleted'));
@@ -487,7 +516,7 @@ if (isset ($_GET['allresdeleted'])) {
 
 if (isset ($_GET['import_score_error'])) {
 	$userinfo= get_user_info_from_id($_GET['import_score_error']);
-	Display :: display_warning_message(get_lang('ScoreDoesNotMatch') . ' ' . $userinfo['lastname'] . ' ' . $userinfo['firstname']);
+	Display :: display_warning_message(get_lang('ScoreDoesNotMatch') . ' ' . api_get_person_name($userinfo['firstname'], $userinfo['lastname']));
 }
 if ($file_type == null) { //show the result header
 		if (isset ($export_result_form) && !(isset ($edit_res_form))) {

+ 7 - 9
main/gradebook/lib/fe/displaygradebook.php

@@ -135,7 +135,7 @@ class DisplayGradebook
 	*/
 	function display_header_reduce_flatview($catobj, $showeval, $showlink,$simple_search_form) {
 		$header = '<div class="actions">';
-		$header .= '<span><a class="quiz_export_link" href="#" onclick="document.form1b.submit();">'.Display::return_icon('excel.gif', get_lang('ExportAsXLS')).' '.get_lang('ExportAsXLS').'</a></span>';		
+		$header .= '<span><a class="quiz_export_link" href="javascript: void(0);" onclick="javascript: document.form1b.submit();">'.Display::return_icon('excel.gif', get_lang('ExportAsXLS')).' '.get_lang('ExportAsXLS').'</a></span>';		
 		$header .= '<a href="'.$_SESSION['gradebook_dest'].'?'.api_get_cidreq().'">'. Display::return_icon('folder_document.gif',get_lang('FolderView')) . get_lang('FolderView') . '</a>';
 //		$header .= '<td style="vertical-align: top;"><a href="' . api_get_self() . '?exportpdf=&offset='.Security::remove_XSS($_GET['offset']).'&search=' . Security::remove_XSS($_GET['search']).'&selectcat=' . $catobj->get_id() . '"><img src=../img/file_pdf.gif alt=' . get_lang('ExportPDF') . '/> ' . get_lang('ExportPDF') . '</a>';
 
@@ -158,7 +158,7 @@ class DisplayGradebook
 		echo '<input type="hidden" name="export_format" value="xls">';
 		echo '</form>';
 
-		//$header .= '<a class="quiz_export_link" href="#" onclick="document.form1a.submit();">'.Display::return_icon('csv.gif', get_lang('ExportAsCSV')).' '.get_lang('ExportAsCSV').'</a>';
+		//$header .= '<a class="quiz_export_link" href="javascript: void(0);" onclick="javascript: document.form1a.submit();">'.Display::return_icon('csv.gif', get_lang('ExportAsCSV')).' '.get_lang('ExportAsCSV').'</a>';
 		$header .= '<a href="' . api_get_self() . '?print=&selectcat=' . $catobj->get_id() . '" target="_blank">'.Display::return_icon('printmgr.gif', get_lang('Print')).' ' . get_lang('Print') . '</a>';
 		$header .= '<a href="' . api_get_self() . '?exportpdf=&selectcat=' . $catobj->get_id() . '" >'.Display::return_icon('file_pdf.gif', get_lang('ExportAsPDF')).' ' . get_lang('ExportToPDF') . '</a>';	
 		//exportpdf
@@ -224,9 +224,7 @@ class DisplayGradebook
 			$cattotal = Category :: load(0);
 			$scoretotal= $cattotal[0]->calc_score(api_get_user_id());
 			$scoretotal_display = (isset($scoretotal) ? $scoredisplay->display_score($scoretotal,SCORE_PERCENT) : get_lang('NoResultsAvailable'));
-			$scoreinfo = get_lang('StatsStudent') . ' :<b> '.$user['lastname'].' '.$user['firstname'].'</b><br />';
-
-
+			$scoreinfo = get_lang('StatsStudent') . ' :<b> '.api_get_person_name($user['firstname'], $user['lastname']).'</b><br />';
 			if ((!$catobj->get_id() == '0') && (!isset ($_GET['studentoverview'])) && (!isset ($_GET['search']))) {
 				$scoreinfo.= '<br />'.get_lang('Total') . ' : <b>' . $scorecourse_display . '</b>';
 			}
@@ -347,7 +345,7 @@ class DisplayGradebook
 			$cattotal = Category :: load(0);
 			$scoretotal= $cattotal[0]->calc_score(api_get_user_id());
 			$scoretotal_display = (isset($scoretotal) ? $scoredisplay->display_score($scoretotal,SCORE_PERCENT) : get_lang('NoResultsAvailable'));
-			$scoreinfo = get_lang('StatsStudent') . ' :<b> '.$user['lastname'].' '.$user['firstname'].'</b><br />';
+			$scoreinfo = get_lang('StatsStudent') . ' :<b> '.api_get_person_name($user['firstname'], $user['lastname']).'</b><br />';
 			if ((!$catobj->get_id() == '0') && (!isset ($_GET['studentoverview'])) && (!isset ($_GET['search'])))
 				$scoreinfo.= '<br />'.get_lang('TotalForThisCategory') . ' : <b>' . $scorecourse_display . '</b>';
 			$scoreinfo.= '<br />'.get_lang('Total') . ' : <b>' . $scoretotal_display . '</b>';
@@ -409,13 +407,13 @@ class DisplayGradebook
         //Web path
         $image_path = UserManager::get_user_picture_path_by_id($userid,'web',false,true);
         $image_file = $image_path['dir'].$image_path['file'];
- 		$img_attributes= 'src="' . $image_file . '?rand=' . time() . '" ' . 'alt="' . $user['lastname'] . ' ' . $user['firstname'] . '" ';
+		$img_attributes= 'src="' . $image_file . '?rand=' . time() . '" ' . 'alt="' . api_get_person_name($user['firstname'], $user['lastname']) . '" ';
 		if ($image_size[0] > 200) {
 		 //limit display width to 200px
  			$img_attributes .= 'width="200" ';
 		}
 		$info = '<table width="100%" border=0 cellpadding=5><tr><td width="80%">';
-		$info.= get_lang('Name') . ' : <b>' . $user['lastname'] . ' ' . $user['firstname'] . '</b> ( <a href="user_info.php?userid=' . $userid . '&selectcat=' . Security::remove_XSS($_GET['selectcat']) . '">' . get_lang('MoreInfo') . '...</a> )<br>';
+		$info.= get_lang('Name') . ' : <b>' . api_get_person_name($user['firstname'], $user['lastname']) . '</b> ( <a href="user_info.php?userid=' . $userid . '&selectcat=' . Security::remove_XSS($_GET['selectcat']) . '">' . get_lang('MoreInfo') . '...</a> )<br>';
 		$info.= get_lang('Email') . ' : <b><a href="mailto:' . $user['email'] . '">' . $user['email'] . '</a></b><br><br>';
 		$info.= get_lang('TotalUser') . ' : <b>' . $scorecourse_display . '</b><br>';
 		$info.= '</td><td>';
@@ -423,7 +421,7 @@ class DisplayGradebook
 		
 		
 	//--------------
-		//$scoreinfo = get_lang('StatsStudent') . ' :<b> '.$user['lastname'].' '.$user['firstname'].'</b><br />';
+		//$scoreinfo = get_lang('StatsStudent') . ' :<b> '.api_get_person_name($user['lastname'], $user['firstname']).'</b><br />';
 		//$scoreinfo.= '<br />'.get_lang('Total') . ' : <b>' . $scorecourse_display . '</b>';
 		
 		//$scoreinfo.= '<br />'.get_lang('Total') . ' : <b>' . $scoretotal_display . '</b>';

+ 12 - 8
main/gradebook/lib/fe/evalform.class.php

@@ -245,7 +245,7 @@ class EvalForm extends FormValidator
 		$userinfo= api_get_user_info($this->result_object->get_user_id());
 		$renderer =& $this->defaultRenderer();
 		$renderer->setElementTemplate('<span>{element}</span> ');
-		$this->addElement('static', null, null,$userinfo['lastName'] . ' ' . $userinfo['firstName']);
+		$this->addElement('static', null, null, api_get_person_name($userinfo['lastName'], $userinfo['firstName']));
 		$this->add_textfield('score', get_lang('Result'), false, array (
 			'size' => '4',
 			'maxlength' => '4'
@@ -361,27 +361,31 @@ class EvalForm extends FormValidator
 	private function build_stud_label ($id, $lastname, $firstname) {
 		$opendocurl_start = '';
 		$opendocurl_end = '';
-
 		// evaluation's origin is a link
 		if ($this->evaluation_object->get_category_id() < 0) {
 			$link = LinkFactory :: get_evaluation_link ($this->evaluation_object->get_id());
-
 			$doc_url = $link->get_view_url($id);
 			if ($doc_url != null) {
 				$opendocurl_start .= '<a href="'. $doc_url . '" target="_blank">';
 				$opendocurl_end = '</a>';
 			}
 		}
-
-		return $opendocurl_start . $lastname . ' ' . $firstname . $opendocurl_end;
+		return $opendocurl_start . api_get_person_name($firstname, $lastname) . $opendocurl_end;
 	}
 
 	function sort_by_user ($item1, $item2) {
 		$user1 = $item1['user'];
 		$user2 = $item2['user'];
-		$result = api_strcmp($user1['lastname'], $user2['lastname']);
-		if ($result == 0) {
-			return api_strcmp($user1['firstname'], $user2['firstname']);
+		if (api_sort_by_first_name()) {
+			$result = api_strcmp($user1['firstname'], $user2['firstname']);
+			if ($result == 0) {
+				return api_strcmp($user1['lastname'], $user2['lastname']);
+			}
+		} else {
+			$result = api_strcmp($user1['lastname'], $user2['lastname']);
+			if ($result == 0) {
+				return api_strcmp($user1['firstname'], $user2['firstname']);
+			}
 		}
 		return $result;
 	}

+ 27 - 13
main/gradebook/lib/fe/flatviewtable.class.php

@@ -409,6 +409,8 @@ class FlatViewTable extends SortableTable
 	 */
 	function get_table_data ($from = 1) {
 
+		$is_western_name_order = api_is_western_name_order();
+
 		// create page navigation if needed
 
 		$totalitems = $this->datagen->get_total_items_count();
@@ -463,8 +465,11 @@ class FlatViewTable extends SortableTable
 
 
 		// retrieve sorting type
-		$users_sorting = ($this->column == 0 ? FlatViewDataGenerator :: FVDG_SORT_LASTNAME
-											 : FlatViewDataGenerator :: FVDG_SORT_FIRSTNAME);
+		if ($is_western_name_order) {
+			$users_sorting = ($this->column == 0 ? FlatViewDataGenerator :: FVDG_SORT_FIRSTNAME : FlatViewDataGenerator :: FVDG_SORT_LASTNAME);
+		} else {
+			$users_sorting = ($this->column == 0 ? FlatViewDataGenerator :: FVDG_SORT_LASTNAME : FlatViewDataGenerator :: FVDG_SORT_FIRSTNAME);
+		}
 		if ($this->direction == 'DESC') {
 			$users_sorting |= FlatViewDataGenerator :: FVDG_SORT_DESC;
 		} else {
@@ -475,8 +480,13 @@ class FlatViewTable extends SortableTable
 		$header_names = $this->datagen->get_header_names($this->offset, $selectlimit);
 
 		$column = 0;
-		$this->set_header($column++, $header_names[0]);
-		$this->set_header($column++, $header_names[1]);
+		if ($is_western_name_order) {
+			$this->set_header($column++, $header_names[1]);
+			$this->set_header($column++, $header_names[0]);
+		} else {
+			$this->set_header($column++, $header_names[0]);
+			$this->set_header($column++, $header_names[1]);
+		}
 
 		while ($column < count($header_names)) {
 			$this->set_header($column, $header_names[$column], false);
@@ -487,16 +497,22 @@ class FlatViewTable extends SortableTable
 
 		// step 2: generate rows: students
 		
-		$data_array = $this->datagen->get_data($users_sorting,
-										 $from, $this->per_page,
-										 $this->offset, $selectlimit);
+		$data_array = $this->datagen->get_data($users_sorting, $from, $this->per_page, $this->offset, $selectlimit);
 
 		$table_data = array();
 		foreach ($data_array as $user_row) {
 			$table_row = array ();
 			$count = 0;
-			$table_row[]= $this->build_name_link($user_row[$count++], $user_row[$count++]);
-			$table_row[]= $user_row[$count++];
+			$user_id = $user_row[$count++];
+			$lastname = $user_row[$count++];
+			$firstname = $user_row[$count++];
+			if ($is_western_name_order) {
+				$table_row[] = $this->build_name_link($user_id, $firstname);
+				$table_row[] = $this->build_name_link($user_id, $lastname);
+			} else {
+				$table_row[] = $this->build_name_link($user_id, $lastname);
+				$table_row[] = $this->build_name_link($user_id, $firstname);
+			}
 			while ($count < count($user_row)) {
 				$table_row[] = $user_row[$count++];	
 			}
@@ -506,11 +522,9 @@ class FlatViewTable extends SortableTable
 	}
 
 
-
-
 	// Other functions
 
-	private function build_name_link ($user_id, $lastname) {
-		return '<a href="user_stats.php?userid='.$user_id.'&selectcat='.$this->selectcat->get_id().'">'.$lastname.'</a>';
+	private function build_name_link ($user_id, $name) {
+		return '<a href="user_stats.php?userid='.$user_id.'&selectcat='.$this->selectcat->get_id().'">'.$name.'</a>';
 	}
 }

+ 25 - 6
main/gradebook/lib/fe/resulttable.class.php

@@ -62,8 +62,13 @@ class ResultTable extends SortableTable
 					'delete' => get_lang('Delete')
 			));
 		}
-		$this->set_header($column++, get_lang('LastName'));
-		$this->set_header($column++, get_lang('FirstName'));
+		if (api_is_western_name_order()) {
+			$this->set_header($column++, get_lang('FirstName'));
+			$this->set_header($column++, get_lang('LastName'));
+		} else {
+			$this->set_header($column++, get_lang('LastName'));
+			$this->set_header($column++, get_lang('FirstName'));
+		}
 		$this->set_header($column++, get_lang('Score'));
 		if ($scoredisplay->is_custom()) {
 			$this->set_header($column++, get_lang('Display'));
@@ -87,6 +92,7 @@ class ResultTable extends SortableTable
 	 */
 	function get_table_data ($from = 1) {
 
+		$is_western_name_order = api_is_western_name_order();
 		$scoredisplay = ScoreDisplay :: instance();
 
 		// determine sorting type
@@ -94,10 +100,18 @@ class ResultTable extends SortableTable
 		switch ($this->column) {
 			// Type
 			case (0 + $col_adjust):
-				$sorting = ResultsDataGenerator :: RDG_SORT_LASTNAME;
+				if ($is_western_name_order) {
+					$sorting = ResultsDataGenerator :: RDG_SORT_FIRSTNAME;
+				} else {
+					$sorting = ResultsDataGenerator :: RDG_SORT_LASTNAME;
+				}
 				break;
 			case (1 + $col_adjust):
-				$sorting = ResultsDataGenerator :: RDG_SORT_FIRSTNAME;
+				if ($is_western_name_order) {
+					$sorting = ResultsDataGenerator :: RDG_SORT_LASTNAME;
+				} else {
+					$sorting = ResultsDataGenerator :: RDG_SORT_FIRSTNAME;
+				}
 				break;
 			case (2 + $col_adjust):
 				$sorting = ResultsDataGenerator :: RDG_SORT_SCORE;
@@ -122,8 +136,13 @@ class ResultTable extends SortableTable
 			if ($this->iscourse == '1') {
 				 $row[] = $item['result_id'];
 			}	
-			$row[] = $item['lastname'];
-			$row[] = $item['firstname'];
+			if ($is_western_name_order) {
+				$row[] = $item['firstname'];
+				$row[] = $item['lastname'];
+			} else {
+				$row[] = $item['lastname'];
+				$row[] = $item['firstname'];
+			}
 			$row[] = $item['score'];
 			if ($scoredisplay->is_custom()) {
 				$row[] = $item['display'];

+ 1 - 1
main/gradebook/lib/fe/scoredisplayform.class.php

@@ -92,7 +92,7 @@ class ScoreDisplayForm extends FormValidator
 
 		if ($displayscore->is_custom()) {
 			$this->addElement('checkbox', 'includeupperlimit', null, get_lang('IncludeUpperLimit'), null);
-			$this->addElement('static', null, null, '<small>' . get_lang('ScoreInfo') . '</small>');
+			$this->addElement('static', null, null, get_lang('ScoreInfo'));
 			$scorenull[]= & $this->CreateElement('static', null, null, get_lang('Between'));
 			$this->setDefaults(array (
 				'beginscore' => '0'

+ 7 - 2
main/gradebook/lib/fe/userform.class.php

@@ -75,8 +75,13 @@ class UserForm extends FormValidator
 	}
 	
 	protected function build_user_info_form() {
-		$this->addElement('static', 'fname', get_lang('FirstName'), $this->user_info['firstname']);
-		$this->addElement('static', 'lname', get_lang('LastName'), $this->user_info['lastname']);
+		if (api_is_western_name_order()) {
+			$this->addElement('static', 'fname', get_lang('FirstName'), $this->user_info['firstname']);
+			$this->addElement('static', 'lname', get_lang('LastName'), $this->user_info['lastname']);
+		} else {
+			$this->addElement('static', 'lname', get_lang('LastName'), $this->user_info['lastname']);
+			$this->addElement('static', 'fname', get_lang('FirstName'), $this->user_info['firstname']);
+		}
 		$this->addElement('static', 'uname', get_lang('UserName'), $this->user_info['username']);
 		$this->addElement('static', 'email', get_lang('Email'), '<a href="mailto:' . $this->user_info['email'] . '">' . $this->user_info['email'] . '</a>');
 		$this->addElement('static', 'ofcode', get_lang('OfficialCode'), $this->user_info['official_code']);

+ 2 - 1
main/gradebook/lib/gradebook_functions_users.inc.php

@@ -34,12 +34,13 @@ function get_users_in_course($course_id) {
 	$tbl_course_user = Database :: get_main_table(TABLE_MAIN_COURSE_USER);
 	$tbl_user = Database :: get_main_table(TABLE_MAIN_USER);
 
+	$order_clause = api_sort_by_first_name() ? ' ORDER BY firstname, lastname ASC' : ' ORDER BY lastname, firstname ASC';
 	$sql = 'SELECT user.user_id,lastname,firstname'
 			.' FROM '.$tbl_course_user.' as course_rel_user, '.$tbl_user.' as user'
 			.' WHERE course_rel_user.user_id=user.user_id'
 			.' AND course_rel_user.status='.STUDENT
 			." AND course_rel_user.course_code='".$course_id."'"
-			.' ORDER BY lastname ASC';
+			.$order_clause;
 	$result = api_sql_query($sql, __FILE__, __LINE__);
 	return get_user_array_from_sql_result($result);
 }

+ 1 - 1
main/gradebook/user_info.php

@@ -66,7 +66,7 @@ $image_path = UserManager::get_user_picture_path_by_id($user_id,'web',false,true
 $image_file = $image_path['dir'].$image_path['file'];
 
 $img_attributes = 'src="'.$image_file.'?rand='.time().'" '
-	.'alt="'.$user_data['lastname'].' '.$user_data['firstname'].'" '
+	.'alt="'.api_get_person_name($user_data['firstname'], $user_data['lastname']).'" '
 	.'style="float:left; padding:5px;" ';
 
 if ($image_size[0] > 300) {

+ 1 - 1
main/gradebook/user_stats.php

@@ -73,7 +73,7 @@ if (isset ($_GET['exportpdf'])) {
 
 	$pdf->ezSetY(810);
 	$userinfo = get_user_info_from_id($my_user_id);
-	$pdf->ezText(get_lang('Results').' : '.$userinfo['lastname']. ' '. $userinfo['firstname'].' ('. date('j/n/Y g:i') .')',12,array('justification'=>'center'));
+	$pdf->ezText(get_lang('Results').' : '.api_get_person_name($userinfo['firstname'], $userinfo['lastname']).' ('. date('j/n/Y g:i') .')', 12, array('justification'=>'center'));
 	$pdf->line(50,790,550,790);
 	$pdf->line(50,40,550,40);