From 314c433698ae1300ed66fe471ce01a7dfc49a731 Mon Sep 17 00:00:00 2001 From: skodak Date: Thu, 28 Jun 2007 22:55:46 +0000 Subject: [PATCH] MDL-10224 some more improvements in grader report related to total course grade and category grade + other bugfixes --- grade/report/grader/category.php | 14 ++++---- grade/report/grader/index.php | 38 ++++++++++++---------- grade/report/user/index.php | 2 +- lib/grade/grade_category.php | 47 +++++++++++++++------------ lib/grade/grade_item.php | 8 ++--- lib/grade/grade_tree.php | 56 ++++++++++++++++++-------------- theme/standard/styles_color.css | 12 +++++++ theme/standard/styles_layout.css | 45 +++++++++++++++++++++++++ 8 files changed, 147 insertions(+), 75 deletions(-) diff --git a/grade/report/grader/category.php b/grade/report/grader/category.php index 824ae2ee68..bd62841bc6 100644 --- a/grade/report/grader/category.php +++ b/grade/report/grader/category.php @@ -280,7 +280,7 @@ $navigation = build_navigation($crumbs); print_header_simple($strgrades . ': ' . $strgraderreport, ': ' . $strcategoriesedit, $navigation, '', '', true, '', navmenu($course)); -$gtree = new grade_tree($param->courseid, false, false); +$gtree = new grade_tree($param->courseid, false); $select_source = false; if (!empty ($param->action) && !empty ($param->source) && confirm_sesskey()) { @@ -330,14 +330,14 @@ elseif (!empty ($param->target) && !empty ($param->action) && confirm_sesskey()) if (!$element['object']->set_hidden(1)) { debugging("Could not update the element's hidden state!"); } else { - $gtree = new grade_tree($param->courseid, false, false); + $gtree = new grade_tree($param->courseid, false); } break; case 'show' : if (!$element['object']->set_hidden(0)) { debugging("Could not update the element's hidden state!"); } else { - $gtree = new grade_tree($param->courseid, false, false); + $gtree = new grade_tree($param->courseid, false); } break; case 'lock' : @@ -345,14 +345,14 @@ elseif (!empty ($param->target) && !empty ($param->action) && confirm_sesskey()) if (!$element['object']->set_locked(1)) { debugging("Could not update the element's locked state!"); } else { - $gtree = new grade_tree($param->courseid, false, false); + $gtree = new grade_tree($param->courseid, false); } break; case 'unlock' : if (!$element['object']->set_locked(0)) { debugging("Could not update the element's locked state!"); } else { - $gtree = new grade_tree($param->courseid, false, false); + $gtree = new grade_tree($param->courseid, false); } break; default : @@ -380,7 +380,7 @@ elseif (!empty ($param->element_type) && !empty ($param->action) && $param->acti } if ($category->set_as_parent($items) && $category->update()) { - $gtree = new grade_tree($param->courseid, false, false); + $gtree = new grade_tree($param->courseid, false); } else { // creation of category didn't work, print a message debugging("Could not create a parent category over the items you selected.."); } @@ -403,7 +403,7 @@ elseif (!empty ($param->element_type) && !empty ($param->action) && $param->acti } if ($category->set_as_parent($categories) && $category->update()) { - $gtree = new grade_tree($param->courseid, false, false); + $gtree = new grade_tree($param->courseid, false); } else { // creation of category didn't work, print a message debugging("Could not create a parent category over the categories you selected.."); } diff --git a/grade/report/grader/index.php b/grade/report/grader/index.php index 485b28535c..7e3caf564f 100644 --- a/grade/report/grader/index.php +++ b/grade/report/grader/index.php @@ -55,7 +55,7 @@ $type = optional_param('type', 0, PARAM_ALPHA); $target = optional_param('target', 0, PARAM_ALPHANUM); // Grab the grade_tree for this course -$gtree = new grade_tree($courseid, false); +$gtree = new grade_tree($courseid); // setting the sort order, this depends on last state // all this should be in the new table class that we might need to use @@ -253,9 +253,6 @@ if (!$context = get_context_instance(CONTEXT_COURSE, $gtree->courseid)) { } //$users = get_role_users(@implode(',', $CFG->gradebookroles), $context); -$topcathtml = ' '; -$cathtml = ' '; - if ($sortitemid === 'lastname') { if ($sortorder == 'ASC') { $lastarrow = ' '.$strsortasc.' '; @@ -286,29 +283,36 @@ $numrows = count($gtree->levels); foreach ($gtree->levels as $key=>$row) { if ($key ==0) { // do not diplay course grade category - continue; + // continue; } - $headerhtml .= ''; + $headerhtml .= ''; if ($key == $numrows - 1) { - $headerhtml .= 'Firstname '. $firstarrow. '/ Lastname '. $lastarrow .''; + $headerhtml .= 'Firstname '. $firstarrow. '/ Lastname '. $lastarrow .''; } else { - $headerhtml .= ' '; + $headerhtml .= ' '; } foreach ($row as $element) { - if (!empty($element['collspan'])) { - $colspan = 'colspan="'.$element['collspan'].'"'; + if (!empty($element['colspan'])) { + $colspan = 'colspan="'.$element['colspan'].'"'; } else { $colspan = ''; } - if ($element['object'] == 'filler') { - $headerhtml .= ' '; + if (!empty($element['depth'])) { + $catlevel = ' catlevel'.$element['depth']; + } else { + $catlevel = ''; + } + + + if ($element['type'] == 'filler') { + $headerhtml .= ' '; - } else if (get_class($element['object']) == 'grade_category') { - $headerhtml .= '' . $element['object']->get_name(); + } else if ($element['type'] == 'category') { + $headerhtml .= ''.$element['object']->get_name(); // Print icons if ($USER->gradeediting) { @@ -331,7 +335,7 @@ foreach ($gtree->levels as $key=>$row) { $dimmed = 'class="dimmed_text"'; } - $headerhtml .= ''. $element['object']->get_name() . '' . $arrow; @@ -349,7 +353,7 @@ foreach ($gtree->levels as $key=>$row) { $studentshtml = ''; foreach ($users as $userid => $user) { - $studentshtml .= '' . $user->firstname . ' ' . $user->lastname . ''; + $studentshtml .= '' . $user->firstname . ' ' . $user->lastname . ''; foreach ($items as $item) { @@ -416,7 +420,7 @@ foreach ($users as $userid => $user) { $studentshtml .= ''; } -$reporthtml = "$headerhtml"; +$reporthtml = "
$headerhtml"; $reporthtml .= $studentshtml; $reporthtml .= "
"; diff --git a/grade/report/user/index.php b/grade/report/user/index.php index b798c8bdcb..6894387ad4 100644 --- a/grade/report/user/index.php +++ b/grade/report/user/index.php @@ -57,7 +57,7 @@ $numusers = count(get_role_users(@implode(',', $CFG->gradebookroles), $context)) $grade_items[$item->sortorder] = $item; } unset($all_grade_items); - asort($grade_items); + ksort($grade_items); $total = $grade_items[1]; unset($grade_items[1]); diff --git a/lib/grade/grade_category.php b/lib/grade/grade_category.php index 75248a2185..a0d09d8fa3 100644 --- a/lib/grade/grade_category.php +++ b/lib/grade/grade_category.php @@ -560,15 +560,15 @@ class grade_category extends grade_object { * @return array */ function fetch_course_tree($courseid, $include_grades=false, $include_category_items=false) { - $sortorder = 1; $course_category = grade_category::fetch_course_category($courseid); - $course_category->set_sortorder($sortorder); - $course_category->sortorder = $sortorder; - $category_array = array('object'=>$course_category, + $category_array = array('object'=>$course_category, 'type'=>'category', 'depth'=>1, 'children'=>$course_category->get_children($include_grades, $include_category_items)); if ($include_grades) { $category_array['finalgrades'] = $course_category->get_final(); } + $sortorder = 1; + $course_category->set_sortorder($sortorder); + $course_category->sortorder = $sortorder; return grade_category::_fetch_course_tree_recursion($category_array, $sortorder); } @@ -578,8 +578,8 @@ class grade_category extends grade_object { $category_array['object']->set_sortorder($sortorder); } - // store the grade_item or grade_category instance - $result = array('object'=>$category_array['object']); + // store the grade_item or grade_category instance with extra info + $result = array('object'=>$category_array['object'], 'type'=>$category_array['type'], 'depth'=>$category_array['depth']); // reuse final grades if there if (array_key_exists('finalgrades', $category_array)) { @@ -590,7 +590,7 @@ class grade_category extends grade_object { if (!empty($category_array['children'])) { $result['children'] = array(); foreach($category_array['children'] as $oldorder=>$child_array) { - if (!empty($childarray['object']->itemtype) and ($childarray['object']->itemtype == 'course' or $childarray['object']->itemtype == 'category')) { + if ($child_array['type'] == 'courseitem' or $child_array['type'] == 'categoryitem') { $result['children'][$sortorder] = grade_category::_fetch_course_tree_recursion($child_array, $sortorder); } else { $result['children'][++$sortorder] = grade_category::_fetch_course_tree_recursion($child_array, $sortorder); @@ -637,6 +637,7 @@ class grade_category extends grade_object { // prevent problems with duplicate sortorders in db $sortorder = $item->sortorder; while(array_key_exists($sortorder, $cats[$categoryid]->children)) { + echo "$sortorder exists in item loop
"; $sortorder++; } @@ -651,6 +652,7 @@ class grade_category extends grade_object { // prevent problems with duplicate sortorders in db $sortorder = $cat->sortorder; while(array_key_exists($sortorder, $cats[$cat->parent]->children)) { + echo "$sortorder exists in cat loop
"; $sortorder++; } @@ -679,25 +681,26 @@ class grade_category extends grade_object { foreach($category->children as $sortorder=>$child) { if (array_key_exists('itemtype', $child)) { $grade_item = new grade_item($child, false); - $children_array[$sortorder] = array('object'=>$grade_item); - if ($include_grades) { - $children_array[$sortorder]['finalgrades'] = $grade_item->get_final(); + if (in_array($grade_item->itemtype, array('course', 'category'))) { + $type = $grade_item->itemtype.'item'; + $depth = $category->depth; + } else { + $type = 'item'; + $depth = $category->depth; // we use this to set the same colour } + $children_array[$sortorder] = array('object'=>$grade_item, 'type'=>$type, 'depth'=>$depth); } else { $children = grade_category::_get_children_recursion($child, $include_grades); $grade_category = new grade_category($child, false); if (empty($children)) { - $children_array[$sortorder] = array('object'=>$grade_category); - if ($include_grades) { - $children_array[$sortorder]['finalgrades'] = $grade_category->get_final(); - } - } else { - $children_array[$sortorder] = array('object'=>$grade_category, 'children'=>$children); - if ($include_grades) { - $children_array[$sortorder]['finalgrades'] = $grade_category->get_final(); - } + $children = array(); } + $children_array[$sortorder] = array('object'=>$grade_category, 'type'=>'category', 'depth'=>$grade_category->depth, 'children'=>$children); + } + + if ($include_grades) { + $children_array[$sortorder]['finalgrades'] = $grade_item->get_final(); } } @@ -842,7 +845,11 @@ class grade_category extends grade_object { * @return string name */ function get_name() { - return $this->fullname; + if (empty($this->parent)) { + return "Top course category"; //TODO: localize + } else { + return $this->fullname; + } } /** diff --git a/lib/grade/grade_item.php b/lib/grade/grade_item.php index 4c38ed05ca..6a1f7adedf 100644 --- a/lib/grade/grade_item.php +++ b/lib/grade/grade_item.php @@ -978,8 +978,6 @@ class grade_item extends grade_object { * @return void */ function set_sortorder($sortorder) { - global $CFG; - if ($this->sortorder == $sortorder) { return; } @@ -995,11 +993,11 @@ class grade_item extends grade_object { */ function get_name() { if ($this->is_course_item()) { - return ('Total course grade'); // TODO: localize + return get_string('total'); // TODO: localize - } else if ($this->is_course_item()) { + } else if ($this->is_category_item()) { $category = $this->get_category(); - return $category->get_name().'(grade)'; // TODO: localize + return 'Category
grade'; // TODO: localize } else { return $this->itemname; diff --git a/lib/grade/grade_tree.php b/lib/grade/grade_tree.php index 52557ac2e8..9c52a9c41d 100644 --- a/lib/grade/grade_tree.php +++ b/lib/grade/grade_tree.php @@ -61,19 +61,20 @@ class grade_tree { * objects for the given courseid. Full objects are instantiated. * and renumbering. * @param int $courseid - * @param boolean $include_grades * @param boolean $fillers include fillers and colspans, make the levels var "rectabgular" + * @param boolean $include_grades * @param boolean $include_cagegory_items inclute the items for categories in the tree */ - function grade_tree($courseid, $include_grades=false, $fillers=true, $include_cagegory_items=false) { + function grade_tree($courseid, $fillers=true, $include_grades=false) { global $USER; $this->courseid = $courseid; $this->include_grades = $include_grades; $this->commonvars = "&sesskey=$USER->sesskey&id=$this->courseid"; + $this->levels = array(); // get course grade tree - $this->tree_array =& grade_category::fetch_course_tree($courseid, $include_grades, $include_cagegory_items); + $this->tree_array =& grade_category::fetch_course_tree($courseid, $include_grades, true); if ($fillers) { // inject fake categories == fillers @@ -82,7 +83,6 @@ class grade_tree { grade_tree::inject_colspans($this->tree_array); } - $this->levels = array(); grade_tree::fill_levels($this->levels, $this->tree_array, 0); } @@ -90,22 +90,30 @@ class grade_tree { /** * Static recursive helper - fills the levels array, useful when accessing tree elements of one level */ - function fill_levels(&$levels, &$tree, $depth) { + function fill_levels(&$levels, &$element, $depth) { if (!array_key_exists($depth, $levels)) { $levels[$depth] = array(); } - $levels[$depth][] =& $tree; + + // prepare unique identifier + if ($element['type'] == 'category') { + $element['eid'] = 'c'.$element['object']->id; + } else if (in_array($element['type'], array('item', 'courseitem', 'categoryitem'))) { + $element['eid'] = 'i'.$element['object']->id; + } + + $levels[$depth][] =& $element; $depth++; - if (empty($tree['children'])) { + if (empty($element['children'])) { return; } $prev = 0; - foreach ($tree['children'] as $sortorder=>$child) { - grade_tree::fill_levels($levels, $tree['children'][$sortorder], $depth); - $tree['children'][$sortorder]['prev'] = $prev; - $tree['children'][$sortorder]['next'] = 0; + foreach ($element['children'] as $sortorder=>$child) { + grade_tree::fill_levels($levels, $element['children'][$sortorder], $depth); + $element['children'][$sortorder]['prev'] = $prev; + $element['children'][$sortorder]['next'] = 0; if ($prev) { - $tree['children'][$prev]['next'] = $sortorder; + $element['children'][$prev]['next'] = $sortorder; } $prev = $sortorder; } @@ -114,17 +122,17 @@ class grade_tree { /** * Static recursive helper - makes full tree (all leafes are at the same level) */ - function inject_fillers(&$tree, $depth) { + function inject_fillers(&$element, $depth) { $depth++; - if (empty($tree['children'])) { + if (empty($element['children'])) { return $depth; } $chdepths = array(); - $chids = array_keys($tree['children']); + $chids = array_keys($element['children']); foreach ($chids as $chid) { - $chdepths[$chid] = grade_tree::inject_fillers($tree['children'][$chid], $depth); + $chdepths[$chid] = grade_tree::inject_fillers($element['children'][$chid], $depth); } arsort($chdepths); @@ -134,8 +142,8 @@ class grade_tree { continue; } for ($i=0; $i < $maxdepth-$chd; $i++) { - $oldchild =& $tree['children'][$chid]; - $tree['children'][$chid] = array('object'=>'filler', 'children'=>array($oldchild)); + $oldchild =& $element['children'][$chid]; + $element['children'][$chid] = array('object'=>'filler', 'type'=>'filler', 'depth'=>$element['object']->depth,'children'=>array($oldchild)); } } @@ -145,17 +153,15 @@ class grade_tree { /** * Static recursive helper - add colspan information into categories */ - function inject_colspans(&$tree) { - if (empty($tree['children'])) { + function inject_colspans(&$element) { + if (empty($element['children'])) { return 1; } $count = 0; - foreach ($tree['children'] as $key=>$child) { - $count += grade_tree::inject_colspans($tree['children'][$key]); - } - if ($count > 1) { - $tree['colspan'] = $count - 1; + foreach ($element['children'] as $key=>$child) { + $count += grade_tree::inject_colspans($element['children'][$key]); } + $element['colspan'] = $count; return $count; } diff --git a/theme/standard/styles_color.css b/theme/standard/styles_color.css index 10aa22bb82..5283681ebd 100644 --- a/theme/standard/styles_color.css +++ b/theme/standard/styles_color.css @@ -700,6 +700,17 @@ body#grade-index .grades .r1 { background-color: #f0f0f0; } +/* new grades css*/ + +#grade-report .catlevel1 { + background-color: #ffffff; +} +#grade-report .catlevel2 { + background-color: #eeeeee; +} +#grade-report .catlevel3 { + background-color: #dddddd; +} /*** *** Login @@ -1076,3 +1087,4 @@ form.mform .fdescription.required { #help .center { text-align: center; } + diff --git a/theme/standard/styles_layout.css b/theme/standard/styles_layout.css index c303dbb32c..f503225900 100644 --- a/theme/standard/styles_layout.css +++ b/theme/standard/styles_layout.css @@ -2047,6 +2047,50 @@ body#grade-index .grades .weighted { margin:0px 20px 0px 20px; } +/* new grades CSS */ + +#grade-report table { + border-width:1px; + border-style:solid; +} + +#grade-report table td { + border-width:1px; + border-style:solid; +} + +#grade-report tr.heading { + border-width:0px 0px 0px 0px; + border-style:solid; +} + +#grade-report .heading td { + border-width:0px 0px 0px 0px; + border-style:solid; +} + +#grade-report td.category { + border-width:1px 1px 0px 1px; + border-style:solid; +} + +#grade-report th.user { + border-width:0px 0px 1px 0px; + border-style:solid; +} + +#grade-report th.categoryitem, +#grade-report th.courseitem, +#grade-report td.topleft { + border-width:0px 1px 0px 1px; + border-style:solid; +} + +#grade-report th.item { + border-width:1px 1px 1px 1px; + border-style:solid; +} + /* gradebook edit tree */ #grade_edit_tree .movetarget { position: relative; @@ -3516,3 +3560,4 @@ wikiadminactions { .workshopkey { text-align:center; } + -- 2.39.5