|
|
|
|
@ -1,13 +1,12 @@ |
|
|
|
|
<?php |
|
|
|
|
/* For licensing terms, see /license.txt */ |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Class FlatViewDataGenerator |
|
|
|
|
* Class to select, sort and transform object data into array data, |
|
|
|
|
* used for the teacher's flat view |
|
|
|
|
* @author Bert Steppé |
|
|
|
|
* @package chamilo.gradebook |
|
|
|
|
*/ |
|
|
|
|
/** |
|
|
|
|
* Class |
|
|
|
|
* |
|
|
|
|
* @package chamilo.gradebook |
|
|
|
|
*/ |
|
|
|
|
class FlatViewDataGenerator |
|
|
|
|
@ -21,14 +20,15 @@ class FlatViewDataGenerator |
|
|
|
|
private $users; |
|
|
|
|
private $evals; |
|
|
|
|
private $links; |
|
|
|
|
private $evals_links; |
|
|
|
|
private $evals_links; |
|
|
|
|
public $params; |
|
|
|
|
public $category = array(); |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Constructor |
|
|
|
|
*/ |
|
|
|
|
public function FlatViewDataGenerator ($users = array(), $evals = array(), $links = array(), $params = array()) { |
|
|
|
|
public function FlatViewDataGenerator ($users = array(), $evals = array(), $links = array(), $params = array()) |
|
|
|
|
{ |
|
|
|
|
$this->users = (isset($users) ? $users : array()); |
|
|
|
|
$this->evals = (isset($evals) ? $evals : array()); |
|
|
|
|
$this->links = (isset($links) ? $links : array()); |
|
|
|
|
@ -39,51 +39,55 @@ class FlatViewDataGenerator |
|
|
|
|
/** |
|
|
|
|
* Get total number of users (rows) |
|
|
|
|
*/ |
|
|
|
|
public function get_total_users_count() { |
|
|
|
|
public function get_total_users_count() |
|
|
|
|
{ |
|
|
|
|
return count($this->users); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Get total number of evaluations/links (columns) (the 2 users columns not included) |
|
|
|
|
*/ |
|
|
|
|
public function get_total_items_count() { |
|
|
|
|
public function get_total_items_count() |
|
|
|
|
{ |
|
|
|
|
return count($this->evals_links); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Get array containing column header names (incl user columns) |
|
|
|
|
* @param int Start item offset |
|
|
|
|
* @param int Number of items to get |
|
|
|
|
* @param bool whether to show the details or not |
|
|
|
|
* @return array List of headers |
|
|
|
|
* @param int $items_start Start item offset |
|
|
|
|
* @param int $items_count Number of items to get |
|
|
|
|
* @param bool $show_detail whether to show the details or not |
|
|
|
|
* @return array List of headers |
|
|
|
|
*/ |
|
|
|
|
public function get_header_names($items_start = 0, $items_count = null , $show_detail = false) { |
|
|
|
|
$headers = array(); |
|
|
|
|
|
|
|
|
|
public function get_header_names($items_start = 0, $items_count = null, $show_detail = false) |
|
|
|
|
{ |
|
|
|
|
$headers = array(); |
|
|
|
|
|
|
|
|
|
if (isset($this->params['show_official_code']) && $this->params['show_official_code']) { |
|
|
|
|
$headers[] = get_lang('OfficialCode'); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (isset($this->params['join_firstname_lastname']) && $this->params['join_firstname_lastname']) { |
|
|
|
|
if (api_is_western_name_order()) { |
|
|
|
|
$headers[] = get_lang('FirstnameAndLastname'); |
|
|
|
|
$headers[] = get_lang('FirstnameAndLastname'); |
|
|
|
|
} else { |
|
|
|
|
$headers[] = get_lang('LastnameAndFirstname'); |
|
|
|
|
$headers[] = get_lang('LastnameAndFirstname'); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
if (api_is_western_name_order()) { |
|
|
|
|
$headers[] = get_lang('FirstName'); |
|
|
|
|
$headers[] = get_lang('LastName'); |
|
|
|
|
$headers[] = get_lang('LastName'); |
|
|
|
|
} else { |
|
|
|
|
$headers[] = get_lang('LastName'); |
|
|
|
|
$headers[] = get_lang('FirstName'); |
|
|
|
|
$headers[] = get_lang('FirstName'); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!isset($items_count)) { |
|
|
|
|
$items_count = count($this->evals_links) - $items_start; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$parent_id = $this->category->get_parent_id(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ($parent_id == 0 or $this->params['only_subcat'] == $this->category->get_id()) { |
|
|
|
|
$main_weight = $this->category->get_weight(); |
|
|
|
|
$grade_model_id = $this->category->get_grade_model_id(); |
|
|
|
|
@ -91,73 +95,81 @@ class FlatViewDataGenerator |
|
|
|
|
$main_cat = Category::load($parent_id, null, null); |
|
|
|
|
$main_weight = $main_cat[0]->get_weight(); |
|
|
|
|
$grade_model_id = $main_cat[0]->get_grade_model_id(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$use_grade_model = true; |
|
|
|
|
if (empty($grade_model_id) || $grade_model_id == -1) { |
|
|
|
|
$use_grade_model = false; |
|
|
|
|
$use_grade_model = false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//@todo move these in a function |
|
|
|
|
$sum_categories_weight_array = array(); |
|
|
|
|
$mainCategoryId = null; |
|
|
|
|
if (isset($this->category) && !empty($this->category)) { |
|
|
|
|
$categories = Category::load(null, null, null, $this->category->get_id()); |
|
|
|
|
$mainCategoryId = $this->category->get_id(); |
|
|
|
|
$categories = Category::load(null, null, null, $this->category->get_id()); |
|
|
|
|
if (!empty($categories)) { |
|
|
|
|
foreach ($categories as $category) { |
|
|
|
|
foreach ($categories as $category) { |
|
|
|
|
$sum_categories_weight_array[$category->get_id()] = $category->get_weight(); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
$sum_categories_weight_array[$this->category->get_id()] = $this->category->get_weight(); |
|
|
|
|
$sum_categories_weight_array[$this->category->get_id()] = $this->category->get_weight(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//No category was added |
|
|
|
|
|
|
|
|
|
$course_code = api_get_course_id(); |
|
|
|
|
$session_id = api_get_session_id(); |
|
|
|
|
|
|
|
|
|
// No category was added |
|
|
|
|
|
|
|
|
|
$course_code = api_get_course_id(); |
|
|
|
|
$session_id = api_get_session_id(); |
|
|
|
|
|
|
|
|
|
$allcat = $this->category->get_subcategories(null, $course_code, $session_id, 'ORDER BY id'); |
|
|
|
|
|
|
|
|
|
if ($parent_id == 0 && !empty($allcat)) { |
|
|
|
|
|
|
|
|
|
//Means there are any subcategory |
|
|
|
|
|
|
|
|
|
if ($parent_id == 0 && !empty($allcat)) { |
|
|
|
|
// Means there are any subcategory |
|
|
|
|
foreach ($allcat as $sub_cat) { |
|
|
|
|
$sub_cat_weight = round(100*$sub_cat->get_weight()/$main_weight,1); |
|
|
|
|
$add_weight = " $sub_cat_weight %"; |
|
|
|
|
if (isset($this->params['export_pdf']) && $this->params['export_pdf']) { |
|
|
|
|
$add_weight = null; |
|
|
|
|
} |
|
|
|
|
$headers[] = Display::url($sub_cat->get_name(), api_get_self().'?selectcat='.$sub_cat->get_id()).$add_weight; |
|
|
|
|
$headers[] = Display::url($sub_cat->get_name(), api_get_self().'?selectcat='.$sub_cat->get_id()).$add_weight; |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
if (!isset($this->params['only_total_category']) || (isset($this->params['only_total_category']) && $this->params['only_total_category'] == false)) { |
|
|
|
|
if (!isset($this->params['only_total_category']) || |
|
|
|
|
(isset($this->params['only_total_category']) && $this->params['only_total_category'] == false) |
|
|
|
|
) { |
|
|
|
|
for ($count=0; ($count < $items_count ) && ($items_start + $count < count($this->evals_links)); $count++) { |
|
|
|
|
$item = $this->evals_links[$count + $items_start]; |
|
|
|
|
$item = $this->evals_links[$count + $items_start]; |
|
|
|
|
var_dump($item); |
|
|
|
|
$weight = round(100*$item->get_weight()/$main_weight,1); |
|
|
|
|
$headers[] = $item->get_name().' '.$weight.' % '; |
|
|
|
|
$headers[] = $item->get_name().' '.$weight.' % '; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$headers[] = api_strtoupper(get_lang('GradebookQualificationTotal')); |
|
|
|
|
|
|
|
|
|
return $headers; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function get_max_result_by_link($id) { |
|
|
|
|
|
|
|
|
|
public function get_max_result_by_link($id) |
|
|
|
|
{ |
|
|
|
|
$max = 0; |
|
|
|
|
foreach ($this->users as $user) { |
|
|
|
|
$item = $this->evals_links [$id]; |
|
|
|
|
$score = $item->calc_score($user[0]); |
|
|
|
|
$item = $this->evals_links [$id]; |
|
|
|
|
$score = $item->calc_score($user[0]); |
|
|
|
|
if ($score[0] > $max) { |
|
|
|
|
$max = $score[0]; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return $max ; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Get array containing evaluation items |
|
|
|
|
*/ |
|
|
|
|
public function get_evaluation_items($items_start = 0, $items_count = null) { |
|
|
|
|
public function get_evaluation_items($items_start = 0, $items_count = null) |
|
|
|
|
{ |
|
|
|
|
$headers = array(); |
|
|
|
|
if (!isset($items_count)) { |
|
|
|
|
$items_count = count($this->evals_links) - $items_start; |
|
|
|
|
@ -167,7 +179,7 @@ class FlatViewDataGenerator |
|
|
|
|
$headers[] = $item->get_name(); |
|
|
|
|
} |
|
|
|
|
return $headers; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Get actual array data |
|
|
|
|
@ -177,10 +189,15 @@ class FlatViewDataGenerator |
|
|
|
|
* 2: user firstname |
|
|
|
|
* 3+: evaluation/link scores |
|
|
|
|
*/ |
|
|
|
|
public function get_data ($users_sorting = 0, $users_start = 0, $users_count = null, |
|
|
|
|
$items_start = 0, $items_count = null, |
|
|
|
|
$ignore_score_color = false, $show_all = false) { |
|
|
|
|
|
|
|
|
|
public function get_data( |
|
|
|
|
$users_sorting = 0, |
|
|
|
|
$users_start = 0, |
|
|
|
|
$users_count = null, |
|
|
|
|
$items_start = 0, |
|
|
|
|
$items_count = null, |
|
|
|
|
$ignore_score_color = false, |
|
|
|
|
$show_all = false |
|
|
|
|
) { |
|
|
|
|
// do some checks on users/items counts, redefine if invalid values |
|
|
|
|
if (!isset($users_count)) { |
|
|
|
|
$users_count = count ($this->users) - $users_start; |
|
|
|
|
@ -286,7 +303,7 @@ class FlatViewDataGenerator |
|
|
|
|
if ($export_to_pdf) { |
|
|
|
|
if (api_is_western_name_order()) { |
|
|
|
|
$row['firstname'] = $user[3]; |
|
|
|
|
$row['lastname'] = $user[2]; |
|
|
|
|
$row['lastname'] = $user[2]; |
|
|
|
|
} else { |
|
|
|
|
$row['lastname'] = $user[2]; |
|
|
|
|
$row['firstname'] = $user[3]; |
|
|
|
|
@ -363,7 +380,7 @@ class FlatViewDataGenerator |
|
|
|
|
$score = $item->calc_score($user_id); |
|
|
|
|
$real_score = $score; |
|
|
|
|
$divide = ( ($score[1])==0 ) ? 1 : $score[1]; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//sub cat weight |
|
|
|
|
$sub_cat_percentage = $sum_categories_weight_array[$item->get_category_id()]; |
|
|
|
|
|
|
|
|
|
@ -378,8 +395,8 @@ class FlatViewDataGenerator |
|
|
|
|
|
|
|
|
|
$item_total += $item->get_weight(); |
|
|
|
|
/* |
|
|
|
|
$complete_score = $scoredisplay->display_score($score, SCORE_DIV_PERCENT, SCORE_ONLY_SCORE); |
|
|
|
|
$temp_score = $scoredisplay->display_score(array($item_value, null), SCORE_DIV_SIMPLE_WITH_CUSTOM); |
|
|
|
|
$complete_score = $scoredisplay->display_score($score, SCORE_DIV_PERCENT, SCORE_ONLY_SCORE); |
|
|
|
|
$temp_score = $scoredisplay->display_score(array($item_value, null), SCORE_DIV_SIMPLE_WITH_CUSTOM); |
|
|
|
|
$temp_score = Display::tip($temp_score, $complete_score);*/ |
|
|
|
|
|
|
|
|
|
//if (true) |
|
|
|
|
@ -394,14 +411,14 @@ class FlatViewDataGenerator |
|
|
|
|
|
|
|
|
|
if (!isset($this->params['only_total_category']) || (isset($this->params['only_total_category']) && $this->params['only_total_category'] == false)) { |
|
|
|
|
if (!$show_all) { |
|
|
|
|
if (in_array($item->get_type() , array(LINK_EXERCISE, LINK_DROPBOX, LINK_STUDENTPUBLICATION, |
|
|
|
|
if (in_array($item->get_type() , array(LINK_EXERCISE, LINK_DROPBOX, LINK_STUDENTPUBLICATION, |
|
|
|
|
LINK_LEARNPATH, LINK_FORUM_THREAD, LINK_ATTENDANCE, LINK_SURVEY, LINK_HOTPOTATOES))) { |
|
|
|
|
if (!empty($score[0])) { |
|
|
|
|
$row[] = $temp_score.' '; |
|
|
|
|
} else { |
|
|
|
|
$row[] = ''; |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
} else { |
|
|
|
|
$row[] = $temp_score.' '; |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
@ -437,9 +454,9 @@ class FlatViewDataGenerator |
|
|
|
|
/** |
|
|
|
|
* Get actual array data evaluation/link scores |
|
|
|
|
*/ |
|
|
|
|
public function get_evaluation_sumary_results ($session_id = null) { |
|
|
|
|
|
|
|
|
|
$usertable = array (); |
|
|
|
|
public function get_evaluation_sumary_results ($session_id = null) |
|
|
|
|
{ |
|
|
|
|
$usertable = array(); |
|
|
|
|
foreach ($this->users as $user) { $usertable[] = $user; } |
|
|
|
|
$selected_users = $usertable; |
|
|
|
|
|
|
|
|
|
@ -450,7 +467,7 @@ class FlatViewDataGenerator |
|
|
|
|
$row = array (); |
|
|
|
|
for ($count=0;$count < count($this->evals_links); $count++) { |
|
|
|
|
$item = $this->evals_links [$count]; |
|
|
|
|
$score = $item->calc_score($user[0]); |
|
|
|
|
$score = $item->calc_score($user[0]); |
|
|
|
|
$porcent_score = isset($score[1]) && $score[1] > 0 ? ($score[0]*100)/$score[1] :0; |
|
|
|
|
$row[$item->get_name()] = $porcent_score; |
|
|
|
|
} |
|
|
|
|
@ -484,7 +501,11 @@ class FlatViewDataGenerator |
|
|
|
|
return $result; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public function get_data_to_graph () { |
|
|
|
|
/** |
|
|
|
|
* @return array |
|
|
|
|
*/ |
|
|
|
|
public function get_data_to_graph() |
|
|
|
|
{ |
|
|
|
|
// do some checks on users/items counts, redefine if invalid values |
|
|
|
|
$usertable = array (); |
|
|
|
|
foreach ($this->users as $user) { |
|
|
|
|
@ -494,7 +515,7 @@ class FlatViewDataGenerator |
|
|
|
|
usort($usertable, array ('FlatViewDataGenerator','sort_by_first_name')); |
|
|
|
|
|
|
|
|
|
$data = array (); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$selected_users = $usertable; |
|
|
|
|
foreach ($selected_users as $user) { |
|
|
|
|
$row = array (); |
|
|
|
|
@ -505,19 +526,19 @@ class FlatViewDataGenerator |
|
|
|
|
for ($count=0;$count < count($this->evals_links); $count++) { |
|
|
|
|
$item = $this->evals_links[$count]; |
|
|
|
|
$score = $item->calc_score($user[0]); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$divide =( ($score[1])==0 ) ? 1 : $score[1]; |
|
|
|
|
$item_value += $score[0]/$divide*$item->get_weight(); |
|
|
|
|
$item_total += $item->get_weight(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$score_denom = ($score[1]==0) ? 1 : $score[1]; |
|
|
|
|
$score_final = ($score[0] / $score_denom) * 100; |
|
|
|
|
$row[] = $score_final; |
|
|
|
|
} |
|
|
|
|
$total_score = array($item_value, $item_total); |
|
|
|
|
$score_final = ($item_value / $item_total) * 100; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$row[] = $score_final; |
|
|
|
|
$data[] = $row; |
|
|
|
|
} |
|
|
|
|
@ -526,10 +547,11 @@ class FlatViewDataGenerator |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* This is a function to show the generated data |
|
|
|
|
* @param type $displayWarning |
|
|
|
|
* @param bool $displayWarning |
|
|
|
|
* @return array |
|
|
|
|
*/ |
|
|
|
|
public function get_data_to_graph2 ($displayWarning = true) { |
|
|
|
|
public function get_data_to_graph2($displayWarning = true) |
|
|
|
|
{ |
|
|
|
|
// do some checks on users/items counts, redefine if invalid values |
|
|
|
|
$usertable = array (); |
|
|
|
|
foreach ($this->users as $user) { |
|
|
|
|
@ -549,16 +571,13 @@ class FlatViewDataGenerator |
|
|
|
|
$item_value = 0; |
|
|
|
|
$item_total = 0; |
|
|
|
|
$final_score = 0; |
|
|
|
|
|
|
|
|
|
$item_value_total = 0; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$convert_using_the_global_weight = true; |
|
|
|
|
|
|
|
|
|
$course_code = api_get_course_id(); |
|
|
|
|
$session_id = api_get_session_id(); |
|
|
|
|
$allcat = $this->category->get_subcategories(null, $course_code, $session_id, 'ORDER BY id'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ($parent_id == 0 && !empty($allcat)) { |
|
|
|
|
|
|
|
|
|
foreach ($allcat as $sub_cat) { |
|
|
|
|
@ -570,21 +589,16 @@ class FlatViewDataGenerator |
|
|
|
|
$sub_cat_percentage = $sum_categories_weight_array[$sub_cat->get_id()]; |
|
|
|
|
$item_value = $score[0]/$divide*$main_weight; |
|
|
|
|
$item_total += $sub_cat->get_weight(); |
|
|
|
|
|
|
|
|
|
$row[] = array ($item_value, trim($scoredisplay->display_score($real_score, SCORE_CUSTOM,null, true))); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$row[] = array ($item_value, trim($scoredisplay->display_score($real_score, SCORE_CUSTOM,null, true))); |
|
|
|
|
$item_value_total += $item_value; |
|
|
|
|
$final_score += $score[0]; |
|
|
|
|
//$final_score = ($final_score / $item_total) * 100; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
$total_score = array($final_score, $item_total); |
|
|
|
|
$row[] = array ($final_score, trim($scoredisplay->display_score($total_score, SCORE_CUSTOM, null, true))); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
|
|
for ($count=0;$count < count($this->evals_links); $count++) { |
|
|
|
|
$item = $this->evals_links [$count]; |
|
|
|
|
$score = $item->calc_score($user[0]); |
|
|
|
|
@ -594,7 +608,7 @@ class FlatViewDataGenerator |
|
|
|
|
$score_denom=($score[1]==0) ? 1 : $score[1]; |
|
|
|
|
$score_final = ($score[0] / $score_denom) * 100; |
|
|
|
|
$row[] = array ($score_final, trim($scoredisplay->display_score($score, SCORE_CUSTOM,null, true))); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
$total_score=array($item_value,$item_total); |
|
|
|
|
$score_final = ($item_value / $item_total) * 100; |
|
|
|
|
@ -602,20 +616,20 @@ class FlatViewDataGenerator |
|
|
|
|
Display::display_warning_message( Display::display_warning_message($total_score[1])); |
|
|
|
|
} |
|
|
|
|
$row[] =array ($score_final, trim($scoredisplay->display_score($total_score, SCORE_CUSTOM, null, true))); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$data[] = $row; |
|
|
|
|
} |
|
|
|
|
return $data; |
|
|
|
|
} |
|
|
|
|
// Sort functions - used internally |
|
|
|
|
|
|
|
|
|
function sort_by_last_name($item1, $item2) { |
|
|
|
|
public function sort_by_last_name($item1, $item2) |
|
|
|
|
{ |
|
|
|
|
return api_strcmp($item1[2], $item2[2]); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function sort_by_first_name($item1, $item2) { |
|
|
|
|
public function sort_by_first_name($item1, $item2) |
|
|
|
|
{ |
|
|
|
|
return api_strcmp($item1[3], $item2[3]); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|