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()) {
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' :
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 :
}
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..");
}
}
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..");
}
$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
}
//$users = get_role_users(@implode(',', $CFG->gradebookroles), $context);
-$topcathtml = '<tr><td class="filler"> </td>';
-$cathtml = '<tr><td class="filler"> </td>';
-
if ($sortitemid === 'lastname') {
if ($sortorder == 'ASC') {
$lastarrow = ' <img src="'.$CFG->pixpath.'/t/up.gif" alt="'.$strsortasc.'" /> ';
foreach ($gtree->levels as $key=>$row) {
if ($key ==0) {
// do not diplay course grade category
- continue;
+ // continue;
}
- $headerhtml .= '<tr>';
+ $headerhtml .= '<tr class="heading">';
if ($key == $numrows - 1) {
- $headerhtml .= '<th class="filler"><a href="'.$baseurl.'&sortitemid=firstname">Firstname</a> '. $firstarrow. '/ <a href="'.$baseurl.'&sortitemid=lastname">Lastname </a>'. $lastarrow .'</th>';
+ $headerhtml .= '<th class="user"><a href="'.$baseurl.'&sortitemid=firstname">Firstname</a> '. $firstarrow. '/ <a href="'.$baseurl.'&sortitemid=lastname">Lastname </a>'. $lastarrow .'</th>';
} else {
- $headerhtml .= '<td class="filler"> </td>';
+ $headerhtml .= '<td class="topleft"> </td>';
}
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 .= '<td class="filler" '.$colspan.'> </td>';
+ if (!empty($element['depth'])) {
+ $catlevel = ' catlevel'.$element['depth'];
+ } else {
+ $catlevel = '';
+ }
+
+
+ if ($element['type'] == 'filler') {
+ $headerhtml .= '<td class="filler'.$catlevel.'" '.$colspan.'> </td>';
- } else if (get_class($element['object']) == 'grade_category') {
- $headerhtml .= '<td '.$colspan.'">' . $element['object']->get_name();
+ } else if ($element['type'] == 'category') {
+ $headerhtml .= '<td class="category'.$catlevel.'" '.$colspan.'">'.$element['object']->get_name();
// Print icons
if ($USER->gradeediting) {
$dimmed = 'class="dimmed_text"';
}
- $headerhtml .= '<th '.$dimmed.'><a href="'.$baseurl.'&sortitemid='
+ $headerhtml .= '<th '.$dimmed.' class="'.$element['type'].$catlevel.'"><a href="'.$baseurl.'&sortitemid='
. $element['object']->id .'">'. $element['object']->get_name()
. '</a>' . $arrow;
$studentshtml = '';
foreach ($users as $userid => $user) {
- $studentshtml .= '<tr><th>' . $user->firstname . ' ' . $user->lastname . '</th>';
+ $studentshtml .= '<tr><th class="user">' . $user->firstname . ' ' . $user->lastname . '</th>';
foreach ($items as $item) {
$studentshtml .= '</tr>';
}
-$reporthtml = "<table style=\"text-align: center\" border=\"1\">$headerhtml";
+$reporthtml = "<table style=\"text-align: center\">$headerhtml";
$reporthtml .= $studentshtml;
$reporthtml .= "</table>";
$grade_items[$item->sortorder] = $item;
}
unset($all_grade_items);
- asort($grade_items);
+ ksort($grade_items);
$total = $grade_items[1];
unset($grade_items[1]);
* @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);
}
$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)) {
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);
// prevent problems with duplicate sortorders in db
$sortorder = $item->sortorder;
while(array_key_exists($sortorder, $cats[$categoryid]->children)) {
+ echo "$sortorder exists in item loop<br>";
$sortorder++;
}
// 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<br>";
$sortorder++;
}
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();
}
}
* @return string name
*/
function get_name() {
- return $this->fullname;
+ if (empty($this->parent)) {
+ return "Top course category"; //TODO: localize
+ } else {
+ return $this->fullname;
+ }
}
/**
* @return void
*/
function set_sortorder($sortorder) {
- global $CFG;
-
if ($this->sortorder == $sortorder) {
return;
}
*/
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<br />grade'; // TODO: localize
} else {
return $this->itemname;
* 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
grade_tree::inject_colspans($this->tree_array);
}
- $this->levels = array();
grade_tree::fill_levels($this->levels, $this->tree_array, 0);
}
/**
* 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;
}
/**
* 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);
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));
}
}
/**
* 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;
}
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
#help .center {
text-align: center;
}
+
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;
.workshopkey {
text-align:center;
}
+