From 03d2d4e1818a0320029bc2b829c8acbd96b9ecc8 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Wed, 5 Oct 2011 14:31:12 +0200 Subject: [PATCH] Gradebook adding weight % in the headers see BT#3015 --- main/gradebook/lib/fe/flatviewtable.class.php | 9 +-- .../lib/flatview_data_generator.class.php | 66 ++++++++++++++++--- 2 files changed, 63 insertions(+), 12 deletions(-) mode change 100755 => 100644 main/gradebook/lib/fe/flatviewtable.class.php mode change 100755 => 100644 main/gradebook/lib/flatview_data_generator.class.php diff --git a/main/gradebook/lib/fe/flatviewtable.class.php b/main/gradebook/lib/fe/flatviewtable.class.php old mode 100755 new mode 100644 index faac5f147a..f317db5980 --- a/main/gradebook/lib/fe/flatviewtable.class.php +++ b/main/gradebook/lib/fe/flatviewtable.class.php @@ -31,13 +31,16 @@ class FlatViewTable extends SortableTable function FlatViewTable ($selectcat, $users= array (), $evals= array (), $links= array (), $limit_enabled = false, $offset = 0, $addparams = null) { parent :: __construct ('flatviewlist', null, null, (api_is_western_name_order() xor api_sort_by_first_name()) ? 1 : 0); $this->datagen = new FlatViewDataGenerator($users, $evals, $links); - + $this->selectcat = $selectcat; $this->limit_enabled = $limit_enabled; $this->offset = $offset; if (isset ($addparams)) { $this->set_additional_parameters($addparams); } + + // step 2: generate rows: students + $this->datagen->category = $this->selectcat; } /** @@ -416,7 +419,6 @@ class FlatViewTable extends SortableTable $is_western_name_order = api_is_western_name_order(); // create page navigation if needed - $totalitems = $this->datagen->get_total_items_count(); if ($this->limit_enabled && $totalitems > LIMIT) { $selectlimit = LIMIT; @@ -493,8 +495,7 @@ class FlatViewTable extends SortableTable //$this->set_header($column++, get_lang('Total')); - // step 2: generate rows: students - + $data_array = $this->datagen->get_data($users_sorting, $from, $this->per_page, $this->offset, $selectlimit); $table_data = array(); diff --git a/main/gradebook/lib/flatview_data_generator.class.php b/main/gradebook/lib/flatview_data_generator.class.php old mode 100755 new mode 100644 index f0997cc5df..dfcfcc48b9 --- a/main/gradebook/lib/flatview_data_generator.class.php +++ b/main/gradebook/lib/flatview_data_generator.class.php @@ -22,7 +22,8 @@ class FlatViewDataGenerator private $users; private $evals; private $links; - private $evals_links; + private $evals_links; + public $category = array(); /** * Constructor @@ -59,10 +60,24 @@ class FlatViewDataGenerator $headers[] = get_lang('FirstName'); if (!isset($items_count)) { $items_count = count($this->evals_links) - $items_start; + } + + $count_categories = 1; + + if (isset($this->category)) { + $categories = Category::load(null, null, null, $this->category->get_id()); + if (!empty($categories)) { + $count_categories = count($categories) ; + } } + + for ($count=0; ($count < $items_count ) && ($items_start + $count < count($this->evals_links)); $count++) { $item = $this->evals_links [$count + $items_start]; - $headers[] = $item->get_name(); + + //$headers[] = $item->get_name().'
'.get_lang('Max').' '.$this->get_max_result_by_link($count + $items_start).' '; + $weight = round($item->get_weight()/($count_categories*100), 2); + $headers[] = $item->get_name().'
'.$weight.' '; if ($show_detail) { $headers[] = $item->get_name().' ('.get_lang('Detail').')'; } @@ -74,6 +89,26 @@ class FlatViewDataGenerator } return $headers; } + + function get_max_result_by_link($id) { + $usertable = array (); + + $items_count = count ($this->evals) + count ($this->links); + + $item_value = 0; + $item_total = 0; + $max = 0; + foreach ($this->users as $user) { + $item = $this->evals_links [$id]; + $score = $item->calc_score($user[0]); + $divide=( ($score[1])==0 ) ? 1 : $score[1]; + //$item_value = round($score[0]/$divide*$item->get_weight(),2); + if ($score[0] > $max) { + $max = $score[0]; + } + } + return $max ; + } /** * Get array containing evaluation items @@ -91,7 +126,8 @@ class FlatViewDataGenerator } return $headers; } - + + /** * Get actual array data @@ -140,12 +176,23 @@ class FlatViewDataGenerator $scoredisplay = ScoreDisplay :: instance(); - $data= array (); + $data = array (); $displaytype = SCORE_DIV; if ($ignore_score_color) { $displaytype |= SCORE_IGNORE_SPLIT; } - + + $count_categories = 1; + + if (isset($this->category)) { + + $categories = Category::load(null, null, null, $this->category->get_id()); + + if (!empty($categories)) { + $count_categories = count($categories); + } + } + foreach ($selected_users as $user) { $row = array (); $row[] = $user[0]; // user id @@ -156,7 +203,7 @@ class FlatViewDataGenerator $item_total=0; 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]; $score = $item->calc_score($user[0]); $divide=( ($score[1])==0 ) ? 1 : $score[1]; $item_value+=round($score[0]/$divide*$item->get_weight(),2); @@ -175,8 +222,11 @@ class FlatViewDataGenerator $row[] = $scoredisplay->display_score($score, SCORE_DIV_PERCENT); } } - - $total_score = array($item_value,$item_total); + + $item_value = round($item_value / $count_categories, 2); + $item_total = round($item_total / $count_categories, 2); + + $total_score = array($item_value, $item_total); if (!$show_all) { $row[] = $scoredisplay->display_score($total_score, SCORE_DIV_PERCENT_WITH_CUSTOM); } else {