mirror of
https://github.com/moodle/moodle.git
synced 2025-08-04 16:36:37 +02:00
This commit is contained in:
parent
deb2988f39
commit
d297269d79
13 changed files with 284 additions and 162 deletions
|
@ -187,35 +187,9 @@ function get_grade_tree(&$gtree, $element, $current_itemid=null, $errors=null) {
|
|||
}
|
||||
}
|
||||
|
||||
$icon = '<img src="'.$CFG->wwwroot.'/pix/spacer.gif" class="icon" alt=""/>' . "\n";
|
||||
$icon = $gtree->get_element_icon($element);
|
||||
$last = '';
|
||||
$catcourseitem = false;
|
||||
|
||||
switch ($type) {
|
||||
case 'item':
|
||||
if ($object->itemtype == 'mod') {
|
||||
$icon = '<img src="'.$CFG->modpixpath.'/'.$object->itemmodule.'/icon.gif" class="icon" alt="'
|
||||
. get_string('modulename', $object->itemmodule).'"/>' . "\n";
|
||||
} else if ($object->itemtype == 'manual') {
|
||||
//TODO: add manual grading icon
|
||||
if (empty($object->outcomeid)) {
|
||||
$icon = '<img src="'.$CFG->pixpath.'/t/edit.gif" class="icon" alt="'
|
||||
. get_string('manualgrade', 'grades').'"/>' . "\n"; // TODO: localize
|
||||
} else {
|
||||
$icon = '<img src="'.$CFG->pixpath.'/i/outcomes.gif" class="icon" alt="'
|
||||
. get_string('outcome', 'grades').'"/>' . "\n";
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'courseitem':
|
||||
case 'categoryitem':
|
||||
$icon = '<img src="'.$CFG->pixpath.'/i/category_grade.gif" class="icon" alt="'.get_string('categorygrade').'"/>' . "\n"; // TODO: localize
|
||||
$catcourseitem = true;
|
||||
break;
|
||||
case 'category':
|
||||
$icon = '<img src="'.$CFG->pixpath.'/f/folder.gif" class="icon" alt="'.get_string('category').'"/>' . "\n";
|
||||
break;
|
||||
}
|
||||
$catcourseitem = ($element['type'] == 'courseitem' or $element['type'] == 'categoryitem');
|
||||
|
||||
if ($type != 'category') {
|
||||
$return_string .= '<li class="'.$type.'">'.$icon.$name.'</li>' . "\n";
|
||||
|
|
|
@ -42,7 +42,7 @@ class edit_category_form extends moodleform {
|
|||
GRADE_AGGREGATE_EXTRACREDIT_MEAN=>get_string('aggregateextracreditmean', 'grades'));
|
||||
|
||||
// visible elements
|
||||
$mform->addElement('header', 'general', get_string('gradecategory', 'grades'));
|
||||
$mform->addElement('header', 'gradecat', get_string('gradecategory', 'grades'));
|
||||
$mform->addElement('text', 'fullname', get_string('categoryname', 'grades'));
|
||||
|
||||
if ($CFG->grade_aggregation == -1) {
|
||||
|
@ -62,12 +62,14 @@ class edit_category_form extends moodleform {
|
|||
$mform->addElement('static', 'aggregateonlygraded', get_string('aggregateonlygraded', 'grades'));
|
||||
}
|
||||
|
||||
if (!empty($CFG->enableoutcomes) && $CFG->grade_aggregateoutcomes == -1) {
|
||||
$mform->addElement('advcheckbox', 'aggregateoutcomes', get_string('aggregateoutcomes', 'grades'));
|
||||
$mform->setHelpButton('aggregateoutcomes', array(false, get_string('aggregateoutcomes', 'grades'),
|
||||
false, true, false, get_string('aggregateoutcomeshelp', 'grades')));
|
||||
} else {
|
||||
$mform->addElement('static', 'aggregateoutcomes', get_string('aggregateoutcomes', 'grades'));
|
||||
if (!empty($CFG->enableoutcomes)) {
|
||||
if($CFG->grade_aggregateoutcomes == -1) {
|
||||
$mform->addElement('advcheckbox', 'aggregateoutcomes', get_string('aggregateoutcomes', 'grades'));
|
||||
$mform->setHelpButton('aggregateoutcomes', array(false, get_string('aggregateoutcomes', 'grades'),
|
||||
false, true, false, get_string('aggregateoutcomeshelp', 'grades')));
|
||||
} else {
|
||||
$mform->addElement('static', 'aggregateoutcomes', get_string('aggregateoutcomes', 'grades'));
|
||||
}
|
||||
}
|
||||
|
||||
if ($CFG->grade_aggregatesubcats == -1) {
|
||||
|
@ -111,7 +113,7 @@ class edit_category_form extends moodleform {
|
|||
}
|
||||
|
||||
// user preferences
|
||||
$mform->addElement('header', 'general', get_string('userpreferences', 'grades'));
|
||||
$mform->addElement('header', 'userpref', get_string('myreportpreferences', 'grades'));
|
||||
$options = array(GRADE_REPORT_PREFERENCE_DEFAULT => get_string('default', 'grades'),
|
||||
GRADE_REPORT_AGGREGATION_VIEW_FULL => get_string('fullmode', 'grades'),
|
||||
GRADE_REPORT_AGGREGATION_VIEW_AGGREGATES_ONLY => get_string('aggregatesonly', 'grades'),
|
||||
|
@ -158,9 +160,11 @@ class edit_category_form extends moodleform {
|
|||
$agg_el->setValue($checkbox_values[$CFG->grade_aggregateonlygraded]);
|
||||
}
|
||||
|
||||
if ($CFG->grade_aggregateoutcomes != -1) {
|
||||
$agg_el =& $mform->getElement('aggregateoutcomes');
|
||||
$agg_el->setValue($checkbox_values[$CFG->grade_aggregateoutcomes]);
|
||||
if (!empty($CFG->enableoutcomes)) {
|
||||
if ($CFG->grade_aggregateoutcomes != -1) {
|
||||
$agg_el =& $mform->getElement('aggregateoutcomes');
|
||||
$agg_el->setValue($checkbox_values[$CFG->grade_aggregateoutcomes]);
|
||||
}
|
||||
}
|
||||
|
||||
if ($CFG->grade_aggregatesubcats != -1) {
|
||||
|
|
|
@ -201,35 +201,9 @@ function print_grade_tree(&$gtree, $element, $moving, &$gpr, $switch, $switchedl
|
|||
$actions .= $gtree->get_hiding_icon($element, $gpr);
|
||||
|
||||
/// prepare icon
|
||||
$icon = '<img src="'.$CFG->wwwroot.'/pix/spacer.gif" class="icon" alt=""/>';
|
||||
$icon = $gtree->get_element_icon($element);
|
||||
$last = '';
|
||||
$catcourseitem = false;
|
||||
switch ($element['type']) {
|
||||
case 'item':
|
||||
if ($object->itemtype == 'mod') {
|
||||
$icon = '<img src="'.$CFG->modpixpath.'/'.$object->itemmodule.'/icon.gif" class="icon" alt="'
|
||||
. get_string('modulename', $object->itemmodule).'"/>';
|
||||
} else if ($object->itemtype == 'manual') {
|
||||
//TODO: add manual grading icon
|
||||
if (empty($object->outcomeid)) {
|
||||
$icon = '<img src="'.$CFG->pixpath.'/t/edit.gif" class="icon" alt="'
|
||||
. get_string('manualgrade', 'grades').'"/>'; // TODO: localize
|
||||
} else {
|
||||
$icon = '<img src="'.$CFG->pixpath.'/i/outcomes.gif" class="icon" alt="'
|
||||
. get_string('outcome', 'grades').'"/>';
|
||||
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'courseitem':
|
||||
case 'categoryitem':
|
||||
$icon = '<img src="'.$CFG->pixpath.'/i/category_grade.gif" class="icon" alt="'.get_string('categorygrade').'"/>'; // TODO: localize
|
||||
$catcourseitem = true;
|
||||
break;
|
||||
case 'category':
|
||||
$icon = '<img src="'.$CFG->pixpath.'/f/folder.gif" class="icon" alt="'.get_string('category').'"/>';
|
||||
break;
|
||||
}
|
||||
$catcourseitem = ($element['type'] == 'courseitem' or $element['type'] == 'categoryitem');
|
||||
|
||||
/// prepare move target if needed
|
||||
$moveto = '';
|
||||
|
|
|
@ -839,7 +839,6 @@ class grade_seq {
|
|||
return 'g'.$grade_grade->id;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -919,6 +918,7 @@ class grade_tree {
|
|||
}
|
||||
|
||||
grade_tree::fill_levels($this->levels, $this->top_element, 0);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1344,6 +1344,61 @@ class grade_tree {
|
|||
|
||||
return $calculation_icon;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns icon of element
|
||||
* @param object $element
|
||||
* @param bool $spacerifnone return spacer if no icon found
|
||||
* @return string icon or spacer
|
||||
*/
|
||||
function get_element_icon(&$element, $spacerifnone=true) {
|
||||
global $CFG;
|
||||
|
||||
switch ($element['type']) {
|
||||
case 'item':
|
||||
case 'courseitem':
|
||||
case 'categoryitem':
|
||||
if ($element['object']->is_calculated()) {
|
||||
return '<img src="'.$CFG->pixpath.'/i/calc.gif" class="icon" alt="'.get_string('calculation', 'grades').'"/>';
|
||||
|
||||
} else if (($element['object']->is_course_item() or $element['object']->is_category_item())
|
||||
and ($element['object']->gradetype == GRADE_TYPE_SCALE or $element['object']->gradetype == GRADE_TYPE_VALUE)) {
|
||||
if ($category = $element['object']->get_item_category()) {
|
||||
switch ($category->aggregation) {
|
||||
case GRADE_AGGREGATE_MEAN:
|
||||
case GRADE_AGGREGATE_MEDIAN:
|
||||
case GRADE_AGGREGATE_WEIGHTED_MEAN:
|
||||
case GRADE_AGGREGATE_EXTRACREDIT_MEAN:
|
||||
return '<img src="'.$CFG->pixpath.'/i/agg_mean.gif" class="icon" alt="'.get_string('aggregation', 'grades').'"/>';
|
||||
//case GRADE_AGGREGATE_SUM:
|
||||
//return '<img src="'.$CFG->pixpath.'/i/agg_sum.gif" class="icon" alt="'.get_string('aggregation', 'grades').'"/>';
|
||||
}
|
||||
}
|
||||
|
||||
} else if ($element['object']->itemtype == 'mod') {
|
||||
return '<img src="'.$CFG->modpixpath.'/'.$element['object']->itemmodule.'/icon.gif" class="icon" alt="'
|
||||
.get_string('modulename', $element['object']->itemmodule).'"/>';
|
||||
|
||||
} else if ($element['object']->itemtype == 'manual') {
|
||||
if ($element['object']->is_outcome_item()) {
|
||||
return '<img src="'.$CFG->pixpath.'/i/outcomes.gif" class="icon" alt="'.get_string('outcome', 'grades').'"/>';
|
||||
} else {
|
||||
//TODO: add better icon
|
||||
return '<img src="'.$CFG->pixpath.'/t/edit.gif" class="icon" alt="'.get_string('manualitem', 'grades').'"/>';
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 'category':
|
||||
return '<img src="'.$CFG->pixpath.'/f/folder.gif" class="icon" alt="'.get_string('category', 'grades').'"/>';
|
||||
}
|
||||
|
||||
if ($spacerifnone) {
|
||||
return '<img src="'.$CFG->wwwroot.'/pix/spacer.gif" class="icon" alt=""/>';
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
|
@ -132,6 +132,8 @@ if ($perpageurl) {
|
|||
}
|
||||
|
||||
$report->load_users();
|
||||
|
||||
|
||||
$numusers = $report->get_numusers();
|
||||
$report->load_final_grades();
|
||||
|
||||
|
|
|
@ -342,9 +342,10 @@ class grade_report_grader extends grade_report {
|
|||
|
||||
$userids = array_keys($this->users);
|
||||
|
||||
|
||||
if ($grades = get_records_sql($sql)) {
|
||||
foreach ($grades as $graderec) {
|
||||
if (in_array($graderec->userid, $userids)) {
|
||||
if (in_array($graderec->userid, $userids) and array_key_exists($graderec->itemid, $this->gtree->items)) { // some items may not be present!!
|
||||
$this->grades[$graderec->userid][$graderec->itemid] = new grade_grade($graderec, false);
|
||||
$this->grades[$graderec->userid][$graderec->itemid]->grade_item =& $this->gtree->items[$graderec->itemid]; // db caching
|
||||
}
|
||||
|
@ -603,20 +604,23 @@ class grade_report_grader extends grade_report {
|
|||
*/
|
||||
function get_studentshtml() {
|
||||
global $CFG, $USER;
|
||||
|
||||
$studentshtml = '';
|
||||
$strfeedback = $this->get_lang_string("feedback");
|
||||
$strgrade = $this->get_lang_string('grade');
|
||||
$strfeedback = $this->get_lang_string("feedback");
|
||||
$strgrade = $this->get_lang_string('grade');
|
||||
$gradetabindex = 1;
|
||||
$showuserimage = $this->get_pref('showuserimage');
|
||||
$numusers = count($this->users);
|
||||
$numusers = count($this->users);
|
||||
|
||||
// Preload scale objects for items with a scaleid
|
||||
$scales_list = '';
|
||||
$tabindices = array();
|
||||
|
||||
foreach ($this->gtree->items as $item) {
|
||||
if (!empty($item->scaleid)) {
|
||||
$scales_list .= "$item->scaleid,";
|
||||
}
|
||||
|
||||
$tabindices[$item->id]['grade'] = $gradetabindex;
|
||||
$tabindices[$item->id]['feedback'] = $gradetabindex + $numusers;
|
||||
$gradetabindex += $numusers * 2;
|
||||
|
@ -633,9 +637,13 @@ class grade_report_grader extends grade_report {
|
|||
foreach ($this->users as $userid => $user) {
|
||||
|
||||
if ($canviewhidden) {
|
||||
$hiding_affected = array();
|
||||
$altered = array();
|
||||
$unknown = array();
|
||||
} else {
|
||||
$hiding_affected = grade_grade::get_hiding_affected($this->grades[$userid], $this->gtree->items);
|
||||
$altered = $hiding_affected['altered'];
|
||||
$unknown = $hiding_affected['unknown'];
|
||||
unset($hiding_affected);
|
||||
}
|
||||
|
||||
$columncount = 0;
|
||||
|
@ -651,17 +659,24 @@ class grade_report_grader extends grade_report {
|
|||
|
||||
foreach ($this->gtree->items as $itemid=>$unused) {
|
||||
$item =& $this->gtree->items[$itemid];
|
||||
$grade = $this->grades[$userid][$item->id];
|
||||
|
||||
// Get the decimal points preference for this item
|
||||
$decimalpoints = $item->get_decimals();
|
||||
|
||||
$grade = $this->grades[$userid][$item->id];
|
||||
$gradeval = $grade->finalgrade;
|
||||
if (in_array($itemid, $unknown)) {
|
||||
$gradeval = null;
|
||||
} else if (array_key_exists($itemid, $altered)) {
|
||||
$gradeval = $altered[$itemid];
|
||||
} else {
|
||||
$gradeval = $grade->finalgrade;
|
||||
}
|
||||
|
||||
// MDL-11274
|
||||
// Hide grades in the grader report if the current grader doesn't have 'moodle/grade:viewhidden'
|
||||
if (!$canviewhidden and ($grade->is_hidden() or in_array($itemid, $hiding_affected))) {
|
||||
if (!is_null($gradeval) and $grade->is_hidden()) {
|
||||
if (!$canviewhidden and $grade->is_hidden()) {
|
||||
if (!empty($CFG->grade_hiddenasdate) and !is_null($grade->finalgrade) and !$item->is_category_item() and !$item->is_course_item()) {
|
||||
// the problem here is that we do not have the time when grade value was modified, 'timemodified' is general modification date for grade_grades records
|
||||
$studentshtml .= '<td class="cell c'.$columncount++.'">'.userdate($grade->timecreated,get_string('strftimedatetimeshort')).'</td>';
|
||||
} else {
|
||||
$studentshtml .= '<td class="cell c'.$columncount++.'">-</td>';
|
||||
|
|
|
@ -137,14 +137,26 @@ class grade_report_user extends grade_report {
|
|||
}
|
||||
|
||||
if ($canviewhidden) {
|
||||
$hiding_affected = array();
|
||||
$altered = array();
|
||||
$unknown = array();
|
||||
} else {
|
||||
$hiding_affected = grade_grade::get_hiding_affected($grades, $items);
|
||||
$altered = $hiding_affected['altered'];
|
||||
$unknown = $hiding_affected['unknown'];
|
||||
unset($hiding_affected);
|
||||
}
|
||||
|
||||
foreach ($items as $key=>$unused) {
|
||||
$grade_item =& $items[$key];
|
||||
$grade_grade =& $grades[$key];
|
||||
foreach ($items as $itemid=>$unused) {
|
||||
$grade_item =& $items[$itemid];
|
||||
$grade_grade =& $grades[$itemid];
|
||||
|
||||
if (in_array($itemid, $unknown)) {
|
||||
$gradeval = null;
|
||||
} else if (array_key_exists($itemid, $altered)) {
|
||||
$gradeval = $altered[$itemid];
|
||||
} else {
|
||||
$gradeval = $grade_grade->finalgrade;
|
||||
}
|
||||
|
||||
$data = array();
|
||||
|
||||
|
@ -169,47 +181,31 @@ class grade_report_user extends grade_report {
|
|||
if ($grade_item->needsupdate) {
|
||||
$data[] = '<span class="gradingerror">'.get_string('error').'</span>';
|
||||
|
||||
} else if (is_null($grade_grade->finalgrade)) {
|
||||
$data[] = $excluded . '-';
|
||||
|
||||
} else if (!$canviewhidden and ($grade_grade->is_hidden() or in_array($grade_item->id, $hiding_affected))) {
|
||||
// TODO: optinally do not show anything for hidden grades
|
||||
// $data[] = '-';
|
||||
if ($grade_grade->is_hidden()) {
|
||||
$data[] = $excluded . '<div class="gradeddate">'.get_string('gradedon', 'grades', userdate($grade_grade->timemodified, get_string('strftimedatetimeshort'))).'</div>';
|
||||
} else {
|
||||
$data[] = $excluded . '-';
|
||||
}
|
||||
} else if (!empty($CFG->grade_hiddenasdate) and !is_null($grade_grade->finalgrade) and !$canviewhidden and $grade_grade->is_hidden()
|
||||
and !$grade_item->is_category_item() and !$grade_item->is_course_item()) {
|
||||
// the problem here is that we do not have the time when grade value was modified, 'timemodified' is general modification date for grade_grades records
|
||||
$data[] = $excluded . '<div class="gradeddate">'.get_string('gradedon', 'grades', userdate($grade_grade->timemodified, get_string('strftimedatetimeshort'))).'</div>';
|
||||
|
||||
} else {
|
||||
$data[] = $excluded . grade_format_gradevalue($grade_grade->finalgrade, $grade_item, true);
|
||||
$data[] = $excluded . grade_format_gradevalue($gradeval, $grade_item, true);
|
||||
}
|
||||
|
||||
/// prints percentage
|
||||
if ($grade_item->needsupdate) {
|
||||
$data[] = '<span class="gradingerror">'.get_string('error').'</span>';
|
||||
|
||||
} else if (is_null($grade_grade->finalgrade)) {
|
||||
$data[] = '-';
|
||||
|
||||
} else if (!$canviewhidden and ($grade_grade->is_hidden() or in_array($grade_item->id, $hiding_affected))) {
|
||||
$data[] = '-';
|
||||
|
||||
} else {
|
||||
$data[] = grade_format_gradevalue($grade_grade->finalgrade, $grade_item, true, GRADE_DISPLAY_TYPE_PERCENTAGE);
|
||||
$data[] = grade_format_gradevalue($gradeval, $grade_item, true, GRADE_DISPLAY_TYPE_PERCENTAGE);
|
||||
}
|
||||
|
||||
/// prints rank
|
||||
if ($grade_item->needsupdate) {
|
||||
$data[] = '<span class="gradingerror">'.get_string('error').'</span>';
|
||||
|
||||
} else if (is_null($grade_grade->finalgrade)) {
|
||||
} else if (is_null($gradeval)) {
|
||||
// no grade, no rank
|
||||
$data[] = '-';
|
||||
|
||||
} else if (!$canviewhidden and ($grade_grade->is_hidden() or in_array($grade_item->id, $hiding_affected))) {
|
||||
$data[] = '-';
|
||||
|
||||
} else {
|
||||
/// find the number of users with a higher grade
|
||||
$sql = "SELECT COUNT(DISTINCT(userid))
|
||||
|
@ -225,7 +221,7 @@ class grade_report_user extends grade_report {
|
|||
if (empty($grade_grade->feedback)) {
|
||||
$data[] = ' ';
|
||||
|
||||
} else if (!$canviewhidden and ($grade_grade->is_hidden() or in_array($grade_item->id, $hiding_affected))) {
|
||||
} else if (!$canviewhidden and $grade_grade->is_hidden()) {
|
||||
$data[] = ' ';
|
||||
|
||||
} else {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue