MDL-10438 return tracking in grading forms; new grade plugin selector

This commit is contained in:
skodak 2007-07-16 18:58:09 +00:00
parent c35075db50
commit 3af29899bf
14 changed files with 283 additions and 3150 deletions

View File

@ -1,5 +1,6 @@
<?php //$Id$
require_once '../../config.php';
require_once $CFG->dirroot.'/grade/lib.php';
require_once $CFG->libdir.'/gradelib.php';
require_once 'calculation_form.php';
@ -16,8 +17,8 @@ $context = get_context_instance(CONTEXT_COURSE, $course->id);
//require_capability() here!!
// default return url
//TODO: add proper return support
$returnurl = $CFG->wwwroot.'/grade/report.php?report=grader&amp;id='.$course->id;
$gpr = new grade_plugin_return();
$returnurl = $gpr->get_return_url($CFG->wwwroot.'/grade/report.php?id='.$course->id);
if (!$grade_item = grade_item::fetch(array('id'=>$id, 'courseid'=>$course->id))) {
error('Incorect item id');
@ -28,7 +29,7 @@ if ($grade_item->is_normal_item() or ($grade_item->gradetype != GRADE_TYPE_VALUE
redirect($returnurl, get_string('erornocalculationallowed', 'grades')); //TODO: localize
}
$mform = new edit_calculation_form();
$mform = new edit_calculation_form(null, array('gpr'=>$gpr));
if ($mform->is_cancelled()) {
redirect($returnurl);

View File

@ -21,6 +21,10 @@ class edit_calculation_form extends moodleform {
$mform->addElement('hidden', 'courseid', 0);
$mform->setType('courseid', PARAM_INT);
/// add return tracking info
$gpr = $this->_customdata['gpr'];
$gpr->add_mform_elements($mform);
//-------------------------------------------------------------------------------
// buttons
$this->add_action_buttons();

View File

@ -1,6 +1,7 @@
<?php //$Id$
require_once '../../config.php';
require_once $CFG->dirroot.'/grade/lib.php';
require_once $CFG->libdir.'/gradelib.php';
require_once 'category_form.php';
@ -17,10 +18,11 @@ $context = get_context_instance(CONTEXT_COURSE, $course->id);
//require_capability() here!!
// default return url
$returnurl = 'tree.php?id='.$course->id;
$gpr = new grade_plugin_return();
$returnurl = $gpr->get_return_url('tree.php?id='.$course->id);
$mform = new edit_category_form();
$mform = new edit_category_form(null, array('gpr'=>$gpr));
if ($category = get_record('grade_categories', 'id', $id, 'courseid', $course->id)) {
$mform->set_data($category);
} else {

View File

@ -36,6 +36,10 @@ class edit_category_form extends moodleform {
$mform->addElement('hidden', 'courseid', 0);
$mform->setType('courseid', PARAM_INT);
/// add return tracking info
$gpr = $this->_customdata['gpr'];
$gpr->add_mform_elements($mform);
//-------------------------------------------------------------------------------
// buttons
$this->add_action_buttons();

View File

@ -1,6 +1,7 @@
<?php //$Id$
require_once '../../config.php';
require_once $CFG->dirroot.'/grade/lib.php';
require_once $CFG->libdir.'/gradelib.php';
require_once 'grade_form.php';
@ -18,15 +19,15 @@ $context = get_context_instance(CONTEXT_COURSE, $course->id);
require_capability('gradereport/grader:manage', $context);
// default return url
//TODO: implement proper return support
$returnurl = $CFG->wwwroot.'/grade/report.php?report=grader&amp;id='.$course->id;
$gpr = new grade_plugin_return();
$returnurl = $gpr->get_return_url($CFG->wwwroot.'/grade/report.php?id='.$course->id);
// TODO: add proper check that grade is editable
$grade_grades = get_record('grade_grades', 'id', $id);
$gradeitem = get_record('grade_items', 'id', $grade_grades->itemid);
$mform = new edit_grade_form(qualified_me(), array('gradeitem'=>$gradeitem));
$mform = new edit_grade_form(null, array('gradeitem'=>$gradeitem, 'gpr'=>$gpr));
if ($grade_grades = get_record('grade_grades', 'id', $id)) {
if ($grade_text = get_record('grade_grades_text', 'gradeid', $id)) {
if (can_use_html_editor()) {
@ -64,7 +65,7 @@ if ($mform->is_cancelled()) {
// set locktime
$grade_grades->set_locktime($data->locktime);
redirect($returnurl, get_string('feedbacksaved', 'grades'), 1);
redirect($returnurl);
}
// Get extra data related to this feedback

View File

@ -54,6 +54,10 @@ class edit_grade_form extends moodleform {
$mform->addElement('hidden', 'courseid', 0);
$mform->setType('courseid', PARAM_INT);
/// add return tracking info
$gpr = $this->_customdata['gpr'];
$gpr->add_mform_elements($mform);
//-------------------------------------------------------------------------------
// buttons
$this->add_action_buttons();

View File

@ -1,5 +1,6 @@
<?php //$Id$
require_once '../../config.php';
require_once $CFG->dirroot.'/grade/lib.php';
require_once $CFG->libdir.'/gradelib.php';
require_once 'item_form.php';
@ -16,9 +17,10 @@ $context = get_context_instance(CONTEXT_COURSE, $course->id);
//require_capability() here!!
// default return url
$returnurl = 'tree.php?id='.$course->id;
$gpr = new grade_plugin_return();
$returnurl = $gpr->get_return_url('tree.php?id='.$course->id);
$mform = new edit_item_form();
$mform = new edit_item_form(null, array('gpr'=>$gpr));
if ($item = get_record('grade_items', 'id', $id, 'courseid', $course->id)) {
$item->calculation = grade_item::denormalize_formula($item->calculation, $course->id);
$mform->set_data($item);

View File

@ -82,6 +82,10 @@ class edit_item_form extends moodleform {
$mform->addElement('hidden', 'itemtype', 0);
$mform->setType('itemtype', PARAM_ALPHA);
/// add return tracking info
$gpr = $this->_customdata['gpr'];
$gpr->add_mform_elements($mform);
//-------------------------------------------------------------------------------
// buttons
$this->add_action_buttons();

View File

@ -25,6 +25,7 @@
///////////////////////////////////////////////////////////////////////////
require_once '../../config.php';
require_once $CFG->dirroot.'/grade/lib.php';
require_once $CFG->libdir.'/gradelib.php';
$courseid = required_param('id', PARAM_INT);
@ -169,12 +170,11 @@ switch ($action) {
print_header_simple($strgrades . ': ' . $strgraderreport, ': ' . $strcategoriesedit, $navigation, '', '', true, '', navmenu($course));
/// Print the plugin selector at the top
print_grade_plugin_selector($courseid, 'edit', 'tree');
print_heading(get_string('categoriesedit', 'grades'));
// Add tabs
// TODO: implement return support - use tabs from the report plugin
/*$currenttab = 'editcategory';
include('tabs.php');*/
print_box_start('gradetreebox generalbox');
echo '<ul id="grade_tree">';

File diff suppressed because it is too large Load Diff

View File

@ -23,11 +23,14 @@
///////////////////////////////////////////////////////////////////////////
require_once("../config.php");
require_once("../lib/gradelib.php");
require_once '../config.php';
require_once $CFG->libdir.'/gradelib.php';
require_once $CFG->dirroot.'/grade/lib.php';
$courseid = required_param('id'); // course id
$report = optional_param('report', get_user_preferences('grade_defaultreport', 'user'), PARAM_FILE);
$report = optional_param('report', get_user_preferences('grade_defaultreport', 'user'), PARAM_SAFEDIR);
$userid = optional_param('userid', 0, PARAM_INT); // user detail
$page = optional_param('page', 0, PARAM_INT); // active page
$edit = optional_param('edit', -1, PARAM_BOOL); // sticky editting mode
/// Make sure they can even access this course
@ -67,26 +70,17 @@
set_user_preference('grade_defaultreport', $report);
}
/// Create menu of reports
$reportnames = array();
if (count($reports) > 1) {
foreach ($reports as $plugin) {
$reportnames[$plugin] = get_string('modulename', 'gradereport_'.$plugin);
}
}
asort($reportnames); // Alphabetical sort
/// return tracking object
$gpr = new grade_plugin_return(array('type'=>'report', 'plugin'=>$report, 'courseid'=>$courseid,
'userid'=>$userid, 'page'=>$page));
/// Build navigation
$strgrades = get_string('grades');
$reportname = get_string('modulename', 'gradereport_'.$report);
$navlinks = array();
$navlinks[] = array('name' => $strgrades, 'link' => $CFG->wwwroot . '/grade/index.php?id='.$courseid, 'type' => 'misc');
$navlinks[] = array('name' => $reportnames[$report], 'link' => '', 'type' => 'misc');
$navlinks[] = array('name' => $reportname, 'link' => '', 'type' => 'misc');
$navigation = build_navigation($navlinks);
@ -104,9 +98,7 @@
}
// params for the turn editting on
$options = array();
$options['id'] = $courseid;
$options['report'] = $report;
$options = $gpr->get_options();
if ($USER->gradeediting) {
$options['edit'] = 0;
@ -125,15 +117,11 @@
/// Print header
print_header_simple($strgrades.':'.$reportnames[$report], ':'.$strgrades, $navigation,
print_header_simple($strgrades.':'.$reportname, ':'.$strgrades, $navigation,
'', '', true, $buttons, navmenu($course));
/// Print the report selector at the top if there is more than one report
if ($reportnames) {
popup_form($CFG->wwwroot.'/grade/report.php?id='.$course->id.'&amp;report=', $reportnames,
'choosegradereport', $report, '', '', '', false, 'self', get_string('gradereports', 'grades').':');
}
/// Print the plugin selector at the top
print_grade_plugin_selector($courseid, 'report', $report);
/// Now simply include the report here and we're done

View File

@ -7,7 +7,6 @@ require_once($CFG->dirroot.'/grade/report/grader/lib.php');
$gradeserror = array();
// get the params ($report, $courseid and $context are already set in grade/report.php)
$page = optional_param('page', 0, PARAM_INT);
$sortitemid = optional_param('sortitemid', 0, PARAM_ALPHANUM); // sort by which grade item
$action = optional_param('action', 0, PARAM_ALPHA);
$move = optional_param('move', 0, PARAM_INT);
@ -65,11 +64,11 @@ echo $report->get_toggles_html();
print_paging_bar($numusers, $report->page, $report->get_pref('studentsperpage'), $report->pbarurl);
$reporthtml = '<table class="gradestable">';
$reporthtml .= $report->get_headerhtml();
$reporthtml .= $report->get_scalehtml();
$reporthtml .= $report->get_studentshtml();
$reporthtml .= $report->get_groupavghtml();
$reporthtml .= $report->get_gradeavghtml($numusers);
$reporthtml .= $report->get_headerhtml($gpr);
$reporthtml .= $report->get_scalehtml($gpr);
$reporthtml .= $report->get_studentshtml($gpr);
$reporthtml .= $report->get_groupavghtml($gpr);
$reporthtml .= $report->get_gradeavghtml($gpr, $numusers); //TODO: numusers not in function definition??
$reporthtml .= "</table>";
// print submit button
if ($USER->gradeediting) {

View File

@ -441,7 +441,7 @@ class grade_report_grader extends grade_report {
* Builds and returns the HTML code for the headers.
* @return string $headerhtml
*/
function get_headerhtml() {
function get_headerhtml($gpr) {
global $CFG, $USER;
$strsortasc = $this->get_lang_string('sortasc', 'grades');
@ -510,7 +510,7 @@ class grade_report_grader extends grade_report {
// Print icons
if ($USER->gradeediting) {
$headerhtml .= $this->get_icons($element);
$headerhtml .= $this->get_icons($element, $gpr);
}
$headerhtml .= '</th>';
@ -544,7 +544,7 @@ class grade_report_grader extends grade_report {
. $element['object']->id .'">'. $element['object']->get_name()
. '</a>' . $arrow;
$headerhtml .= $this->get_icons($element) . '</th>';
$headerhtml .= $this->get_icons($element, $gpr) . '</th>';
$this->items[$element['object']->sortorder] =& $element['object'];
}
@ -560,7 +560,7 @@ class grade_report_grader extends grade_report {
* Builds and return the HTML rows of the table (grades headed by student).
* @return string HTML
*/
function get_studentshtml() {
function get_studentshtml($gpr) {
global $CFG, $USER;
$studentshtml = '';
$strfeedback = $this->get_lang_string("feedback");
@ -616,7 +616,7 @@ class grade_report_grader extends grade_report {
$states = array('is_hidden' => $item->hidden,
'is_locked' => $item->locked,
'is_editable' => $item->gradetype != GRADE_TYPE_NONE && !$grade->locked && !$item->locked);
$studentshtml .= $this->get_icons($element, null, true, $states);
$studentshtml .= $this->get_icons($element, $gpr, null, true, $states);
}
// if in editting mode, we need to print either a text box
@ -724,7 +724,7 @@ class grade_report_grader extends grade_report {
* Builds and return the HTML rows of the table (grades headed by student).
* @return string HTML
*/
function get_groupavghtml() {
function get_groupavghtml($gpr) {
global $CFG;
$groupavghtml = '';
@ -759,7 +759,7 @@ class grade_report_grader extends grade_report {
$groupavghtml .= '<td>-</td>';
} else {
$sum = $groupsum[$item->id];
if ($item->scaleid) {
$gradeitemsum = $groupsum[$item->id];
$gradeitemavg = $gradeitemsum/$groupscount[$item->id];
@ -769,12 +769,12 @@ class grade_report_grader extends grade_report {
$scales_array = get_records_list('scale', 'id', $item->scaleid);
$scale = $scales_array[$item->scaleid];
$scales = explode(",", $scale->scale);
// this could be a 0 when summed and rounded, e.g, 1, no grade, no grade, no grade
if ($scaleval < 1) {
$scaleval = 1;
$scaleval = 1;
}
$gradehtml = $scales[$scaleval-1];
} else {
$gradeval = $this->get_grade_clean($sum/$groupscount[$item->id]);
@ -792,7 +792,7 @@ class grade_report_grader extends grade_report {
* Builds and return the HTML row of column totals.
* @return string HTML
*/
function get_gradeavghtml() {
function get_gradeavghtml($gpr) {
global $CFG;
$gradeavghtml = '';
@ -830,17 +830,17 @@ class grade_report_grader extends grade_report {
$scales_array = get_records_list('scale', 'id', $item->scaleid);
$scale = $scales_array[$item->scaleid];
$scales = explode(",", $scale->scale);
// this could be a 0 when summed and rounded, e.g, 1, no grade, no grade, no grade
if ($scaleval < 1) {
$scaleval = 1;
$scaleval = 1;
}
$gradehtml = $scales[$scaleval-1];
} else {
} else {
$gradeval = $this->get_grade_clean($sum/$classcount[$itemid]);
$gradehtml = $gradeval;
}
}
$gradeavghtml .= '<td>'.$gradehtml.'</td>';
}
}
@ -853,7 +853,7 @@ class grade_report_grader extends grade_report {
* Builds and return the HTML row of scales for each column (i.e. range).
* @return string HTML
*/
function get_scalehtml() {
function get_scalehtml($gpr) {
$scalehtml = '';
if ($this->get_pref('showranges')) {
$scalehtml = '<tr><th class="range">'.$this->get_lang_string('range','grades').'</th>';
@ -876,7 +876,7 @@ class grade_report_grader extends grade_report {
* @param object $states An optional array of states (hidden, locked, editable), shortcuts to increase performance.
* @return string HTML
*/
function get_icons($element, $icons=null, $limit=true, $states=array()) {
function get_icons($element, $gpr, $icons=null, $limit=true, $states=array()) {
global $CFG;
global $USER;
@ -931,18 +931,21 @@ class grade_report_grader extends grade_report {
$edit_icon = '';
if ($states['is_editable']) {
if ($type == 'category') {
$edit_icon = '<a href="'. GRADE_EDIT_URL . '/category.php?courseid='.$object->courseid.'&amp;id='.$object->id.'">'
. '<img src="'.$CFG->pixpath.'/t/edit.gif" class="iconsmall" alt="'
$url = GRADE_EDIT_URL . '/category.php?courseid='.$object->courseid.'&amp;id='.$object->id;
$url = $gpr->add_url_params($url);
$edit_icon = '<a href="'.$url.'"><img src="'.$CFG->pixpath.'/t/edit.gif" class="iconsmall" alt="'
. $stredit.'" title="'.$stredit.'" /></a>'. "\n";
} else if ($type == 'item' or $type == 'categoryitem' or $type == 'courseitem'){
$edit_icon = '<a href="'. GRADE_EDIT_URL . '/item.php?courseid='.$object->courseid.'&amp;id='.$object->id.'">'
. '<img src="'.$CFG->pixpath.'/t/edit.gif" class="iconsmall" alt="'
$url = GRADE_EDIT_URL . '/item.php?courseid='.$object->courseid.'&amp;id='.$object->id;
$url = $gpr->add_url_params($url);
$edit_icon = '<a href="'.$url.'"><img src="'.$CFG->pixpath.'/t/edit.gif" class="iconsmall" alt="'
. $stredit.'" title="'.$stredit.'" /></a>'. "\n";
} else if ($type == 'grade' and ($states['is_editable'] or empty($object->id))) {
// TODO: change link to use itemid and userid to allow creating of new grade objects
$edit_icon = '<a href="'. GRADE_EDIT_URL . '/grade.php?courseid='.$object->courseid.'&amp;id='.$object->id.'">'
. '<img ' . $overlib . ' src="'.$CFG->pixpath.'/t/edit.gif"'
. 'class="iconsmall" alt="' . $stredit.'" title="'.$stredit.'" /></a>'. "\n";
$url = GRADE_EDIT_URL . '/grade.php?courseid='.$object->courseid.'&amp;id='.$object->id;
$url = $gpr->add_url_params($url);
$edit_icon = '<a href="'.$url.'"><img ' . $overlib . ' src="'.$CFG->pixpath.'/t/edit.gif"'
. 'class="iconsmall" alt="' . $stredit.'" title="'.$stredit.'" /></a>'. "\n";
}
}
@ -950,8 +953,9 @@ class grade_report_grader extends grade_report {
if ($type == 'item' or $type == 'courseitem' or $type == 'categoryitem') {
// show calculation icon only when calculation possible
if (!$object->is_normal_item() and ($object->gradetype == GRADE_TYPE_SCALE or $object->gradetype == GRADE_TYPE_VALUE)) {
$edit_calculation_icon = '<a href="'. GRADE_EDIT_URL . '/calculation.php?courseid='.$object->courseid.'&amp;id='.$object->id.'">'
. '<img src="'.$CFG->pixpath.'/t/calc.gif" class="iconsmall" alt="'
$url = GRADE_EDIT_URL . '/calculation.php?courseid='.$object->courseid.'&amp;id='.$object->id;
$url = $gpr->add_url_params($url);
$edit_calculation_icon = '<a href="'. $url.'"><img src="'.$CFG->pixpath.'/t/calc.gif" class="iconsmall" alt="'
. $streditcalculation.'" title="'.$streditcalculation.'" /></a>'. "\n";
}
}

View File

@ -4,10 +4,6 @@
$CFG->wwwroot.'/grade/report.php?id='.$courseid.'&amp;report=grader',
get_string('graderreport', 'grades'));
$row[] = new tabobject('editcategory',
$CFG->wwwroot.'/grade/edit/tree.php?id='.$courseid,
get_string('categoriesedit', 'grades'));
$row[] = new tabobject('preferences',
$CFG->wwwroot.'/grade/report/grader/preferences.php?id='.$courseid,
get_string('preferences'));