MDL-32888 Grader report: Refined SESSION and api function use

This commit is contained in:
Melissa Aitkin
2013-10-17 12:58:49 +11:00
parent d1a4346f86
commit 02d1a0a575
5 changed files with 145 additions and 134 deletions
+21 -21
View File
@@ -22,11 +22,11 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once '../../../config.php';
require_once $CFG->libdir.'/gradelib.php';
require_once $CFG->dirroot.'/user/renderer.php';
require_once $CFG->dirroot.'/grade/lib.php';
require_once $CFG->dirroot.'/grade/report/grader/lib.php';
require_once('../../../config.php');
require_once($CFG->libdir.'/gradelib.php');
require_once($CFG->dirroot.'/user/renderer.php');
require_once($CFG->dirroot.'/grade/lib.php');
require_once($CFG->dirroot.'/grade/report/grader/lib.php');
$courseid = required_param('id', PARAM_INT); // course id
$page = optional_param('page', 0, PARAM_INT); // active page
@@ -37,23 +37,23 @@ $action = optional_param('action', 0, PARAM_ALPHAEXT);
$move = optional_param('move', 0, PARAM_INT);
$type = optional_param('type', 0, PARAM_ALPHA);
$target = optional_param('target', 0, PARAM_ALPHANUM);
$toggle = optional_param('toggle', NULL, PARAM_INT);
$toggle = optional_param('toggle', null, PARAM_INT);
$toggle_type = optional_param('toggle_type', 0, PARAM_ALPHANUM);
$graderreportsifirst = optional_param('sifirst', NULL, PARAM_ALPHA);
$graderreportsilast = optional_param('silast', NULL, PARAM_ALPHA);
$graderreportsifirst = optional_param('sifirst', null, PARAM_ALPHA);
$graderreportsilast = optional_param('silast', null, PARAM_ALPHA);
// The report object is recreated each time, save search information to SESSION object for future use.
if (isset($graderreportsifirst)) {
$SESSION->filterfirstname = $graderreportsifirst;
}
$SESSION->gradereport['filterfirstname'] = $graderreportsifirst;
}
if (isset($graderreportsilast)) {
$SESSION->filtersurname = $graderreportsilast;
}
$SESSION->gradereport['filtersurname'] = $graderreportsilast;
}
$PAGE->set_url(new moodle_url('/grade/report/grader/index.php', array('id'=>$courseid)));
/// basic access checks
// basic access checks
if (!$course = $DB->get_record('course', array('id' => $courseid))) {
print_error('nocourseid');
}
@@ -63,16 +63,16 @@ $context = context_course::instance($course->id);
require_capability('gradereport/grader:view', $context);
require_capability('moodle/grade:viewall', $context);
/// return tracking object
// return tracking object
$gpr = new grade_plugin_return(array('type'=>'report', 'plugin'=>'grader', 'courseid'=>$courseid, 'page'=>$page));
/// last selected report session tracking
// last selected report session tracking
if (!isset($USER->grade_last_report)) {
$USER->grade_last_report = array();
}
$USER->grade_last_report[$course->id] = 'grader';
/// Build editing on/off buttons
// Build editing on/off buttons
if (!isset($USER->gradeediting)) {
$USER->gradeediting = array();
@@ -124,7 +124,7 @@ if (!empty($target) && !empty($action) && confirm_sesskey()) {
$reportname = get_string('pluginname', 'gradereport_grader');
/// Print header
// Print header
print_grade_page_head($COURSE->id, 'report', 'grader', $reportname, false, $buttons);
//Initialise the grader report object that produces the table
@@ -139,7 +139,7 @@ if ($report->currentgroup == -2) {
exit;
}
/// processing posted grades & feedback here
// processing posted grades & feedback here
if ($data = data_submitted() and confirm_sesskey() and has_capability('moodle/grade:edit', $context)) {
$warnings = $report->process_data($data);
} else {
@@ -153,14 +153,14 @@ echo $report->group_selector;
// User search
$url = new moodle_url('/grade/report/grader/index.php', array('id' => $course->id));
$firstinitial = isset($SESSION->filterfirstname) ? $SESSION->filterfirstname : '';
$lastinitial = isset($SESSION->filtersurname) ? $SESSION->filtersurname : '';
$firstinitial = isset($SESSION->gradereport['filterfirstname']) ? $SESSION->gradereport['filterfirstname'] : '';
$lastinitial = isset($SESSION->gradereport['filtersurname']) ? $SESSION->gradereport['filtersurname'] : '';
$totalusers = $report->get_numusers(true, false);
$renderer = $PAGE->get_renderer('core_user');
echo $renderer->user_search($url, $firstinitial, $lastinitial, $numusers, $totalusers, $report->currentgroupname);
//show warnings if any
foreach($warnings as $warning) {
foreach ($warnings as $warning) {
echo $OUTPUT->notification($warning);
}
+54 -63
View File
@@ -28,7 +28,8 @@ require_once($CFG->libdir.'/tablelib.php');
/**
* Class providing an API for the grader report building and displaying.
* @uses grade_report
* @package gradereport_grader
* @copyright 2007 Nicolas Connault
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class grade_report_grader extends grade_report {
/**
@@ -43,7 +44,7 @@ class grade_report_grader extends grade_report {
*/
public $gradeserror = array();
//// SQL-RELATED
// SQL-RELATED
/**
* The id of the grade_item by which this report will be sorted.
@@ -83,11 +84,10 @@ class grade_report_grader extends grade_report {
/**
* Capability check caching
* */
* @var boolean $canviewhidden
*/
public $canviewhidden;
var $preferencespage=false;
/**
* Length at which feedback will be truncated (to the nearest word) and an ellipsis be added.
* TODO replace this by a report preference
@@ -231,7 +231,7 @@ class grade_report_grader extends grade_report {
if ($this->get_pref('quickgrading')) {
$oldvalue->feedback = preg_replace("/\r\n|\r|\n/", "", $oldvalue->feedback);
}
if (($oldvalue->feedback === $postedvalue) or ($oldvalue->feedback === NULL and empty($postedvalue))) {
if (($oldvalue->feedback === $postedvalue) or ($oldvalue->feedback === null and empty($postedvalue))) {
continue;
}
}
@@ -256,9 +256,7 @@ class grade_report_grader extends grade_report {
$errorstr = '';
// Warn if the grade is out of bounds.
if (is_null($finalgrade)) {
// ok
} else {
if (!is_null($finalgrade)) {
$bounded = $gradeitem->bounded_grade($finalgrade);
if ($bounded > $finalgrade) {
$errorstr = 'lessthanmin';
@@ -279,7 +277,7 @@ class grade_report_grader extends grade_report {
$finalgrade = false;
$trimmed = trim($postedvalue);
if (empty($trimmed)) {
$feedback = NULL;
$feedback = null;
} else {
$feedback = $postedvalue;
}
@@ -290,7 +288,7 @@ class grade_report_grader extends grade_report {
// note: we can not use $this->currentgroup because it would fail badly
// when having two browser windows each with different group
$sharinggroup = false;
foreach($mygroups as $groupid) {
foreach ($mygroups as $groupid) {
if (groups_is_member($groupid, $userid)) {
$sharinggroup = true;
break;
@@ -377,7 +375,7 @@ class grade_report_grader extends grade_report {
if (isset($SESSION->gradeuserreport->sortitemid)) {
$this->sortitemid = $SESSION->gradeuserreport->sortitemid;
}else{
} else {
$this->sortitemid = 'lastname';
}
@@ -414,8 +412,8 @@ class grade_report_grader extends grade_report {
// If the user has clicked one of the sort asc/desc arrows.
if (is_numeric($this->sortitemid)) {
$params = array_merge(array('gitemid' => $this->sortitemid), $gradebookrolesparams, $this->userwheresql_params,
$this->groupwheresql_params, $enrolledparams, $relatedctxparams);
$params = array_merge(array('gitemid' => $this->sortitemid), $gradebookrolesparams, $this->userwheresql_params,
$this->groupwheresql_params, $enrolledparams, $relatedctxparams);
$sortjoin = "LEFT JOIN {grade_grades} g ON g.userid = u.id AND g.itemid = $this->sortitemid";
$sort = "g.finalgrade $this->sortorder";
@@ -530,7 +528,7 @@ class grade_report_grader extends grade_report {
// prefil grades that do not exist yet
foreach ($userids as $userid) {
foreach ($this->gtree->get_items() as $itemid=>$unused) {
foreach ($this->gtree->get_items() as $itemid => $unused) {
if (!isset($this->grades[$userid][$itemid])) {
$this->grades[$userid][$itemid] = new grade_grade();
$this->grades[$userid][$itemid]->itemid = $itemid;
@@ -542,6 +540,7 @@ class grade_report_grader extends grade_report {
}
/**
* Gets html toggle
* @deprecated since Moodle 2.4 as it appears not to be used any more.
*/
public function get_toggles_html() {
@@ -549,7 +548,9 @@ class grade_report_grader extends grade_report {
}
/**
* Prints html toggle
* @deprecated since 2.4 as it appears not to be used any more.
* @param unknown $type
*/
public function print_toggle($type) {
throw new coding_exception('print_toggle() can not be used any more');
@@ -650,7 +651,8 @@ class grade_report_grader extends grade_report {
if (empty($suspendedstring)) {
$suspendedstring = get_string('userenrolmentsuspended', 'grades');
}
$usercell->text .= html_writer::empty_tag('img', array('src'=>$OUTPUT->pix_url('i/enrolmentsuspended'), 'title'=>$suspendedstring, 'alt'=>$suspendedstring, 'class'=>'usersuspendedicon'));
$usercell->text .= html_writer::empty_tag('img', array('src'=>$OUTPUT->pix_url('i/enrolmentsuspended'), 'title'=>$suspendedstring,
'alt'=>$suspendedstring, 'class'=>'usersuspendedicon'));
}
$userrow->cells[] = $usercell;
@@ -715,12 +717,7 @@ class grade_report_grader extends grade_report {
);
$jsscales = array();
foreach ($this->gtree->get_levels() as $key=>$row) {
if ($key == 0) {
// do not display course grade category
// continue;
}
foreach ($this->gtree->get_levels() as $key => $row) {
$headingrow = new html_table_row();
$headingrow->attributes['class'] = 'heading_name_row';
@@ -747,7 +744,7 @@ class grade_report_grader extends grade_report {
$catlevel = '';
}
// Element is a filler
// Element is a filler
if ($type == 'filler' or $type == 'fillerfirst' or $type == 'fillerlast') {
$fillercell = new html_table_cell();
$fillercell->attributes['class'] = $type . ' ' . $catlevel;
@@ -756,9 +753,8 @@ class grade_report_grader extends grade_report {
$fillercell->header = true;
$fillercell->scope = 'col';
$headingrow->cells[] = $fillercell;
}
// Element is a category
else if ($type == 'category') {
} else if ($type == 'category') {
// Element is a category
$categorycell = new html_table_cell();
$categorycell->attributes['class'] = 'category ' . $catlevel;
$categorycell->colspan = $colspan;
@@ -773,12 +769,8 @@ class grade_report_grader extends grade_report {
}
$headingrow->cells[] = $categorycell;
}
// Element is a grade_item
else {
//$itemmodule = $element['object']->itemmodule;
//$iteminstance = $element['object']->iteminstance;
} else {
// Element is a grade_item
if ($element['object']->id == $this->sortitemid) {
if ($this->sortorder == 'ASC') {
$arrow = $this->get_sort_arrow('up', $sortlink);
@@ -815,7 +807,7 @@ class grade_report_grader extends grade_report {
$scaleslist = array();
$tabindices = array();
foreach ($this->gtree->get_items() as $itemid=>$item) {
foreach ($this->gtree->get_items() as $itemid => $item) {
$scale = null;
if (!empty($item->scaleid)) {
$scaleslist[] = $item->scaleid;
@@ -848,14 +840,13 @@ class grade_report_grader extends grade_report {
unset($hidingaffected);
}
$itemrow = new html_table_row();
$itemrow->id = 'user_'.$userid;
$itemrow->attributes['class'] = $rowclasses[$this->rowcount % 2];
$jsarguments['users'][$userid] = fullname($user);
foreach ($this->gtree->items as $itemid=>$unused) {
foreach ($this->gtree->items as $itemid => $unused) {
$item =& $this->gtree->items[$itemid];
$grade = $this->grades[$userid][$item->id];
@@ -874,13 +865,13 @@ class grade_report_grader extends grade_report {
$gradeval = $grade->finalgrade;
}
if (!empty($grade->finalgrade)) {
$gradevalforJS = null;
$gradevalforjs = null;
if ($item->scaleid && !empty($scalesarray[$item->scaleid])) {
$gradevalforJS = (int)$gradeval;
$gradevalforjs = (int)$gradeval;
} else {
$gradevalforJS = format_float($gradeval, $decimalpoints);
$gradevalforjs = format_float($gradeval, $decimalpoints);
}
$jsarguments['grades'][] = array('user'=>$userid, 'item'=>$itemid, 'grade'=>$gradevalforJS);
$jsarguments['grades'][] = array('user'=>$userid, 'item'=>$itemid, 'grade'=>$gradevalforjs);
}
// MDL-11274
@@ -888,7 +879,7 @@ class grade_report_grader extends grade_report {
if (!$this->canviewhidden and $grade->is_hidden()) {
if (!empty($CFG->grade_hiddenasdate) and $grade->get_datesubmitted() 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
$itemcell->text = html_writer::tag('span', userdate($grade->get_datesubmitted(),get_string('strftimedatetimeshort')), array('class'=>'datesubmitted'));
$itemcell->text = html_writer::tag('span', userdate($grade->get_datesubmitted(), get_string('strftimedatetimeshort')), array('class'=>'datesubmitted'));
} else {
$itemcell->text = '-';
}
@@ -911,13 +902,10 @@ class grade_report_grader extends grade_report {
$itemcell->attributes['class'] .= ' overridden';
}
if ($grade->is_excluded()) {
// $itemcell->attributes['class'] .= ' excluded';
}
if (!empty($grade->feedback)) {
//should we be truncating feedback? ie $short_feedback = shorten_text($feedback, $this->feedback_trunc_length);
$jsarguments['feedback'][] = array('user'=>$userid, 'item'=>$itemid, 'content'=>wordwrap(trim(format_string($grade->feedback, $grade->feedbackformat)), 34, '<br/ >'));
$jsarguments['feedback'][] = array('user'=>$userid, 'item'=>$itemid, 'content'=>wordwrap(trim(format_string($grade->feedback, $grade->feedbackformat)),
34, '<br/ >'));
}
if ($grade->is_excluded()) {
@@ -937,7 +925,7 @@ class grade_report_grader extends grade_report {
$gradepass = ' gradefail ';
if ($grade->is_passed($item)) {
$gradepass = ' gradepass ';
} elseif (is_null($grade->is_passed($item))) {
} else if (is_null($grade->is_passed($item))) {
$gradepass = '';
}
@@ -974,7 +962,7 @@ class grade_report_grader extends grade_report {
$attributes = array('tabindex' => $tabindices[$item->id]['grade'], 'id'=>'grade_'.$userid.'_'.$item->id);
$itemcell->text .= html_writer::label(get_string('typescale', 'grades'), $attributes['id'], false, array('class' => 'accesshide'));
$itemcell->text .= html_writer::select($scaleopt, 'grade['.$userid.']['.$item->id.']', $gradeval, array(-1=>$nogradestr), $attributes);
} elseif(!empty($scale)) {
} else if (!empty($scale)) {
$scales = explode(",", $scale->scale);
// invalid grade if gradeval < 1
@@ -984,8 +972,6 @@ class grade_report_grader extends grade_report {
$gradeval = $grade->grade_item->bounded_grade($gradeval); //just in case somebody changes scale
$itemcell->text .= html_writer::tag('span', $scales[$gradeval-1], array('class'=>"gradevalue$hidden$gradepass"));
}
} else {
// no such scale, throw error?
}
} else if ($item->gradetype != GRADE_TYPE_TEXT) { // Value type
@@ -1002,7 +988,6 @@ class grade_report_grader extends grade_report {
}
}
// If quickfeedback is on, print an input element
if ($this->get_pref('showquickfeedback') and $grade->is_editable()) {
$feedbacklabel = fullname($user) . ' ' . $item->itemname;
@@ -1028,7 +1013,8 @@ class grade_report_grader extends grade_report {
if ($item->needsupdate) {
$itemcell->text .= html_writer::tag('span', get_string('error'), array('class'=>"gradingerror$hidden$gradepass"));
} else {
$itemcell->text .= html_writer::tag('span', grade_format_gradevalue($gradeval, $item, true, $gradedisplaytype, null), array('class'=>"gradevalue$hidden$gradepass"));
$itemcell->text .= html_writer::tag('span', grade_format_gradevalue($gradeval, $item, true, $gradedisplaytype, null),
array('class'=>"gradevalue$hidden$gradepass"));
if ($this->get_pref('showanalysisicon')) {
$itemcell->text .= $this->gtree->get_grade_analysis_icon($grade);
}
@@ -1048,7 +1034,7 @@ class grade_report_grader extends grade_report {
$jsarguments['cfg']['ajaxenabled'] = true;
$jsarguments['cfg']['scales'] = array();
foreach ($jsscales as $scale) {
$jsarguments['cfg']['scales'][$scale->id] = explode(',',$scale->scale);
$jsarguments['cfg']['scales'][$scale->id] = explode(',', $scale->scale);
}
$jsarguments['cfg']['feedbacktrunclength'] = $this->feedback_trunc_length;
@@ -1065,8 +1051,8 @@ class grade_report_grader extends grade_report {
'requires' => array('base', 'dom', 'event', 'event-mouseenter', 'event-key', 'io-queue', 'json-parse', 'overlay')
);
$PAGE->requires->js_init_call('M.gradereport_grader.init_report', $jsarguments, false, $module);
$PAGE->requires->strings_for_js(array('addfeedback','feedback', 'grade'), 'grades');
$PAGE->requires->strings_for_js(array('ajaxchoosescale','ajaxclicktoclose','ajaxerror','ajaxfailedupdate', 'ajaxfieldchanged'), 'gradereport_grader');
$PAGE->requires->strings_for_js(array('addfeedback', 'feedback', 'grade'), 'grades');
$PAGE->requires->strings_for_js(array('ajaxchoosescale', 'ajaxclicktoclose', 'ajaxerror', 'ajaxfailedupdate', 'ajaxfieldchanged'), 'gradereport_grader');
$rows = $this->get_right_range_row($rows);
if ($displayaverages) {
@@ -1093,7 +1079,6 @@ class grade_report_grader extends grade_report {
$html = '';
if ($fixedstudents) {
$fixedcolumntable = new html_table();
$fixedcolumntable->id = 'fixed_column';
@@ -1136,7 +1121,7 @@ class grade_report_grader extends grade_report {
$controlscell = new html_table_cell();
$controlscell->attributes['class'] = 'header controls';
$controlscell->colspan = $colspan;
$controlscell->text = $this->get_lang_string('controls','grades');
$controlscell->text = $this->get_lang_string('controls', 'grades');
$controlsrow->cells[] = $controlscell;
$rows[] = $controlsrow;
@@ -1161,7 +1146,7 @@ class grade_report_grader extends grade_report {
$rangecell->colspan = $colspan;
$rangecell->header = true;
$rangecell->scope = 'row';
$rangecell->text = $this->get_lang_string('range','grades');
$rangecell->text = $this->get_lang_string('range', 'grades');
$rangerow->cells[] = $rangecell;
$rows[] = $rangerow;
}
@@ -1231,7 +1216,7 @@ class grade_report_grader extends grade_report {
$iconsrow = new html_table_row();
$iconsrow->attributes['class'] = 'controls';
foreach ($this->gtree->items as $itemid=>$unused) {
foreach ($this->gtree->items as $itemid => $unused) {
// emulate grade element
$item = $this->gtree->get_item($itemid);
@@ -1261,7 +1246,7 @@ class grade_report_grader extends grade_report {
$rangerow = new html_table_row();
$rangerow->attributes['class'] = 'heading range';
foreach ($this->gtree->items as $itemid=>$unused) {
foreach ($this->gtree->items as $itemid => $unused) {
$item =& $this->gtree->items[$itemid];
$itemcell = new html_table_cell();
$itemcell->attributes['class'] .= ' range i'. $itemid;
@@ -1377,7 +1362,7 @@ class grade_report_grader extends grade_report {
$avgrow = new html_table_row();
$avgrow->attributes['class'] = 'avg';
foreach ($this->gtree->items as $itemid=>$unused) {
foreach ($this->gtree->items as $itemid => $unused) {
$item =& $this->gtree->items[$itemid];
if ($item->needsupdate) {
@@ -1456,7 +1441,7 @@ class grade_report_grader extends grade_report {
* figures out the state of the object and builds then returns a div
* with the icons needed for the grader report.
*
* @param array $object
* @param array $element
* @return string HTML
*/
protected function get_icons($element) {
@@ -1483,7 +1468,7 @@ class grade_report_grader extends grade_report {
}
if ($this->get_pref('showeyecons')) {
$showhideicon = $this->gtree->get_hiding_icon($element, $this->gpr);
$showhideicon = $this->gtree->get_hiding_icon($element, $this->gpr);
}
if ($this->get_pref('showlocks')) {
@@ -1502,7 +1487,7 @@ class grade_report_grader extends grade_report {
/**
* Given a category element returns collapsing +/- icon if available
* @param object $object
* @param object $element
* @return string HTML
*/
protected function get_collapsing_icon($element) {
@@ -1534,6 +1519,12 @@ class grade_report_grader extends grade_report {
return $icon;
}
/**
* Processes a single action against a category, grade_item or grade.
* @param string $target eid ({type}{id}, e.g. c4 for category4)
* @param string $action Which action to take (edit, delete etc...)
* @return
*/
public function process_action($target, $action) {
return self::do_process_action($target, $action);
}
+32 -45
View File
@@ -26,7 +26,8 @@ require_once($CFG->libdir.'/gradelib.php');
/**
* An abstract class containing variables and methods used by all or most reports.
* @package core_grades
* @copyright 2007 Moodle Pty Ltd (http://moodle.com)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
abstract class grade_report {
/**
@@ -94,7 +95,7 @@ abstract class grade_report {
*/
public $lang_strings = array();
//// GROUP VARIABLES (including SQL)
// GROUP VARIABLES (including SQL)
/**
* The current group being displayed.
@@ -112,7 +113,7 @@ abstract class grade_report {
* Current course group mode
* @var int $groupmode
*/
var $groupmode;
public $groupmode;
/**
* A HTML select element used to select the current group.
@@ -166,7 +167,6 @@ abstract class grade_report {
print_error('norolesdefined', 'grades');
}
$this->courseid = $courseid;
if ($this->courseid == $COURSE->id) {
$this->course = $COURSE;
@@ -192,7 +192,7 @@ abstract class grade_report {
* the value of that preference. If the preference has already been fetched before,
* the saved value is returned. If the preference is not set at the User level, the $CFG equivalent
* is given (site default).
* @static (Can be called statically, but then doesn't benefit from caching)
* Can be called statically, but then doesn't benefit from caching
* @param string $pref The name of the preference (do not include the grade_report_ prefix)
* @param int $objectid An optional itemid or categoryid to check for a more fine-grained preference
* @return mixed The value of the preference
@@ -206,10 +206,10 @@ abstract class grade_report {
if (!isset($this) OR get_class($this) != 'grade_report') {
if (!empty($objectid)) {
$retval = get_user_preferences($fullprefname . $objectid, grade_report::get_pref($pref));
} elseif (isset($CFG->$fullprefname)) {
$retval = get_user_preferences($fullprefname . $objectid, self::get_pref($pref));
} else if (isset($CFG->$fullprefname)) {
$retval = get_user_preferences($fullprefname, $CFG->$fullprefname);
} elseif (isset($CFG->$shortprefname)) {
} else if (isset($CFG->$shortprefname)) {
$retval = get_user_preferences($fullprefname, $CFG->$shortprefname);
} else {
$retval = null;
@@ -239,8 +239,7 @@ abstract class grade_report {
/**
* Uses set_user_preferences() to update the value of a user preference. If 'default' is given as the value,
* the preference will be removed in favour of a higher-level preference.
* @static
* @param string $pref_name The name of the preference.
* @param string $pref The name of the preference.
* @param mixed $pref_value The value of the preference.
* @param int $itemid An optional itemid to which the preference will be assigned
* @return bool Success or failure.
@@ -260,7 +259,7 @@ abstract class grade_report {
* @param array $data
* @return mixed True or array of errors
*/
abstract function process_data($data);
abstract public function process_data($data);
/**
* Processes a single action against a category, grade_item or grade.
@@ -268,7 +267,7 @@ abstract class grade_report {
* @param string $action Which action to take (edit, delete etc...)
* @return
*/
abstract function process_action($target, $action);
abstract public function process_action($target, $action);
/**
* First checks the cached language strings, then returns match if found, or uses get_string()
@@ -333,23 +332,11 @@ abstract class grade_report {
$selectedusers = $DB->get_records_sql($sql, $params);
$count = 0;
// Check if user's enrolment is active and should be displayed.
if (!empty($selectedusers)) {
list($usql, $uparams) = $DB->get_in_or_equal(array_keys($selectedusers), SQL_PARAMS_NAMED, 'usid0');
$this->userselect = "AND g.userid $usql";
$this->userselect_params = $uparams;
// Check if user's enrolment is active.
$sql = "SELECT ue.userid
FROM {user_enrolments} ue
JOIN {enrol} e ON e.id = ue.enrolid
WHERE ue.userid $usql
AND ue.status = :uestatus
AND e.status = :estatus
AND e.courseid = :courseid
GROUP BY ue.userid";
$coursecontext = $this->context->get_course_context(true);
$params = array_merge($uparams, array('estatus' => ENROL_INSTANCE_ENABLED, 'uestatus' => ENROL_USER_ACTIVE, 'courseid' => $coursecontext->instanceid));
$useractiveenrolments = $DB->get_records_sql($sql, $params);
$useractiveenrolments = get_enrolled_users($coursecontext, '', 0, 'u.*', null, 0, 0, true);
$defaultgradeshowactiveenrol = !empty($CFG->grade_report_showonlyactiveenrol);
$showonlyactiveenrol = get_user_preferences('grade_report_showonlyactiveenrol', $defaultgradeshowactiveenrol);
@@ -360,7 +347,7 @@ abstract class grade_report {
$count++;
}
}
}
}
return $count;
}
@@ -368,7 +355,7 @@ abstract class grade_report {
* Sets up this object's group variables, mainly to restrict the selection of users to display.
*/
protected function setup_groups() {
/// find out current groups mode
// find out current groups mode
if ($this->groupmode = groups_get_course_groupmode($this->course)) {
$this->currentgroup = groups_get_course_group($this->course, true);
$this->group_selector = groups_print_course_menu($this->course, $this->pbarurl, true);
@@ -379,7 +366,7 @@ abstract class grade_report {
if ($this->currentgroup) {
$group = groups_get_group($this->currentgroup);
$this->currentgroupname = $group->name;
$this->currentgroupname = $group->name;
$this->groupsql = " JOIN {groups_members} gm ON gm.userid = u.id ";
$this->groupwheresql = " AND gm.groupid = :gr_grpid ";
$this->groupwheresql_params = array('gr_grpid'=>$this->currentgroup);
@@ -387,26 +374,28 @@ abstract class grade_report {
}
}
/**
* Sets up this report's user criteria to restrict the selection of users to display.
*/
public function setup_users() {
global $SESSION, $DB;
$this->userwheresql = "";
$this->userwheresql_params = array();
if (isset($SESSION->filterfirstname) && !empty($SESSION->filterfirstname)) {
if (isset($SESSION->gradereport['filterfirstname']) && !empty($SESSION->gradereport['filterfirstname'])) {
$this->userwheresql .= ' AND '.$DB->sql_like('u.firstname', ':firstname', false, false);
$this->userwheresql_params['firstname'] = $SESSION->filterfirstname.'%';
$this->userwheresql_params['firstname'] = $SESSION->gradereport['filterfirstname'].'%';
}
if (isset($SESSION->filtersurname) && !empty($SESSION->filtersurname)) {
if (isset($SESSION->gradereport['filtersurname']) && !empty($SESSION->gradereport['filtersurname'])) {
$this->userwheresql .= ' AND '.$DB->sql_like('u.lastname', ':lastname', false, false);
$this->userwheresql_params['lastname'] = $SESSION->filtersurname.'%';
$this->userwheresql_params['lastname'] = $SESSION->gradereport['filtersurname'].'%';
}
}
/**
* Returns an arrow icon inside an <a> tag, for the purpose of sorting a column.
* @param string $direction
* @param moodle_url $sort_link
* @param string HTML
* @param moodle_url $sortlink
*/
protected function get_sort_arrow($direction='move', $sortlink=null) {
global $OUTPUT;
@@ -451,7 +440,7 @@ abstract class grade_report {
$previous_courseid = $courseid;
}
if( !$hiding_affected ) {
if (!$hiding_affected) {
$items = grade_item::fetch_all(array('courseid'=>$courseid));
$grades = array();
$sql = "SELECT g.*
@@ -464,7 +453,7 @@ abstract class grade_report {
}
unset($gradesrecords);
}
foreach ($items as $itemid=>$unused) {
foreach ($items as $itemid => $unused) {
if (!isset($grades[$itemid])) {
$grade_grade = new grade_grade();
$grade_grade->userid = $this->user->id;
@@ -478,21 +467,19 @@ abstract class grade_report {
//if the item definitely depends on a hidden item
if (array_key_exists($course_item->id, $hiding_affected['altered'])) {
if( !$this->showtotalsifcontainhidden[$courseid] ) {
if (!$this->showtotalsifcontainhidden[$courseid]) {
//hide the grade
$finalgrade = null;
}
else {
} else {
//use reprocessed marks that exclude hidden items
$finalgrade = $hiding_affected['altered'][$course_item->id];
}
} else if (!empty($hiding_affected['unknown'][$course_item->id])) {
//not sure whether or not this item depends on a hidden item
if( !$this->showtotalsifcontainhidden[$courseid] ) {
if (!$this->showtotalsifcontainhidden[$courseid]) {
//hide the grade
$finalgrade = null;
}
else {
} else {
//use reprocessed marks that exclude hidden items
$finalgrade = $hiding_affected['unknown'][$course_item->id];
}
+12
View File
@@ -4,6 +4,18 @@ information provided here is intended especially for developers.
=== 2.6 ===
* grade_report_grader::get_toggles_html() and grade_report_grader::print_toggle()
can not be used any more
* class grade_report get_numusers($groups = true, $users = false)
An extra parameter has been added to restrict count to those users being
displayed
* class grade_report_grader get_left_rows($displayaverages)
A parameter has been added to indicate whether averages are applicable and
should be displayed on the report
* class grade_report_grader get_right_rows($displayaverages)
A parameter has been added to indicate whether averages are applicable and
should be displayed on the report
* class grade_report_grader get_grade_table($displayaverages = false)
A parameter has been added to indicate whether averages are applicable and
should be displayed on the report
=== 2.3.5, 2.4.2 ===
* class_grade_report::showtotalsifcontainhidden has been switched from a single integer value to an array.
+26 -5
View File
@@ -1,5 +1,4 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
@@ -15,18 +14,23 @@
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Print private files tree
* Provides user rendering functionality such as printing private files tree and
* displaying a search utility
*
* @package core_user
* @copyright 2010 Dongsheng Cai <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
/**
* Provides user rendering functionality such as printing private files tree and
* displaying a search utility
* @copyright 2010 Dongsheng Cai <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class core_user_renderer extends plugin_renderer_base {
/**
@@ -37,6 +41,10 @@ class core_user_renderer extends plugin_renderer_base {
return $this->render(new user_files_tree);
}
/**
* Render user files tree
* @param user_files_tree $tree
*/
public function render_user_files_tree(user_files_tree $tree) {
if (empty($tree->dir['subdirs']) && empty($tree->dir['files'])) {
$html = $this->output->box(get_string('nofilesavailable', 'repository'));
@@ -53,6 +61,8 @@ class core_user_renderer extends plugin_renderer_base {
/**
* Internal function - creates htmls structure suitable for YUI tree.
* @param user_files_tree $tree
* @param array $dir
*/
protected function htmllize_tree($tree, $dir) {
global $CFG;
@@ -124,7 +134,7 @@ class core_user_renderer extends plugin_renderer_base {
}
$content .= html_writer::end_tag('div');
// Bar of last initials
// Bar of last initials.
$content .= html_writer::start_tag('div', array('class' => 'initialbar lastinitial'));
$content .= html_writer::label(get_string('lastname').' : ', null);
@@ -152,9 +162,20 @@ class core_user_renderer extends plugin_renderer_base {
}
/**
* User files tree
* @copyright 2010 Dongsheng Cai <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class user_files_tree implements renderable {
public $context;
public $dir;
/**
* Create user files tree object
*/
public function __construct() {
global $USER;
$this->context = context_user::instance($USER->id);