From: nicolasconnault Date: Wed, 19 Sep 2007 13:49:26 +0000 (+0000) Subject: MDL-11340 Almost complete: Just need the "Add grade letter" button X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=bc6969ddeb0a31b30fdeb2ef74cee42e8fcf6839;p=moodle.git MDL-11340 Almost complete: Just need the "Add grade letter" button --- diff --git a/grade/edit/gradedisplay/gradedisplay_form.php b/grade/edit/gradedisplay/gradedisplay_form.php new file mode 100644 index 0000000000..abbce701c2 --- /dev/null +++ b/grade/edit/gradedisplay/gradedisplay_form.php @@ -0,0 +1,111 @@ +libdir.'/formslib.php'; + +class edit_grade_display_form extends moodleform { + + function definition() { + global $CFG, $COURSE; + + $mform =& $this->_form; + $context = get_context_instance(CONTEXT_COURSE, $COURSE->id); + $course_has_letters = $this->_customdata['course_has_letters']; + $coursegradedisplaytype = get_field('grade_items', 'display', 'courseid', $COURSE->id, 'itemtype', 'course'); + + $mform->addElement('header', 'coursesettings', get_string('coursesettings', 'grades')); + + $gradedisplaytypes = array(GRADE_REPORT_GRADE_DISPLAY_TYPE_DEFAULT => get_string('default'), + GRADE_REPORT_GRADE_DISPLAY_TYPE_REAL => get_string('real', 'grades'), + GRADE_REPORT_GRADE_DISPLAY_TYPE_PERCENTAGE => get_string('percentage', 'grades'), + GRADE_REPORT_GRADE_DISPLAY_TYPE_LETTER => get_string('letter', 'grades')); + $mform->addElement('select', 'gradedisplaytype', get_string('coursegradedisplaytype', 'grades'), $gradedisplaytypes); + $mform->setHelpButton('gradedisplaytype', array(false, get_string('coursegradedisplaytype', 'grades'), + false, true, false, get_string('coursegradedisplaytypehelp', 'grades'))); + $mform->setDefault('gradedisplaytype', $coursegradedisplaytype); + $mform->setType($coursegradedisplaytype, PARAM_INT); + + $course_set_to_letters = $coursegradedisplaytype == GRADE_REPORT_GRADE_DISPLAY_TYPE_LETTER; + $course_set_to_default = $coursegradedisplaytype == GRADE_REPORT_GRADE_DISPLAY_TYPE_DEFAULT; + $site_set_to_letters = $CFG->grade_report_gradedisplaytype == GRADE_REPORT_GRADE_DISPLAY_TYPE_LETTER; + + if ($course_set_to_letters || ($course_set_to_default && $site_set_to_letters)) { + + $mform->addElement('header', 'gradeletters', get_string('gradeletters', 'grades')); + $percentages = array(null => get_string('unused', 'grades')); + + $mform->addElement('checkbox', 'override', get_string('overridesitedefaultgradedisplaytype', 'grades')); + $mform->setHelpButton('override', array(false, get_string('overridesitedefaultgradedisplaytype', 'grades'), + false, true, false, get_string('overridesitedefaultgradedisplaytypehelp', 'grades'))); + $mform->setDefault('override', $course_has_letters); + + for ($i=100; $i > -1; $i--) { + $percentages[$i] = "$i%"; + } + + $elementsarray = array(); + + // Get course letters if they exist + if ($letters = get_records('grade_letters', 'contextid', $context->id, 'lowerboundary DESC')) { + $i = 1; + foreach ($letters as $letter) { + $elementsarray[$i]['letter'] = $letter->letter; + $elementsarray[$i]['boundary'] = $letter->lowerboundary; + $i++; + } + } else { // Get site default for each letter + for ($i = 1; $i <= 10; $i++) { + $elementsarray[$i]['letter'] = $CFG->{'grade_report_gradeletter'.$i}; + $elementsarray[$i]['boundary'] = $CFG->{'grade_report_gradeboundary'.$i}; + } + } + + foreach ($elementsarray as $i => $element) { + $letter = $element['letter']; + $boundary = $element['boundary']; + + $gradelettername = 'gradeletter' . $i; + $gradeletterstring = get_string('gradeletter', 'grades') . " $i"; + $gradeletterhelp = get_string('configgradeletter', 'grades'); + + $gradeboundaryname = 'gradeboundary' . $i; + $gradeboundarystring = get_string('gradeboundary', 'grades') . " $i"; + $gradeboundaryhelp = get_string('configgradeboundary', 'grades'); + + $mform->addElement('text', $gradelettername, $gradeletterstring); + $mform->setHelpButton($gradelettername, array(false, $gradeletterstring, false, true, false, $gradeletterhelp)); + $mform->setDefault($gradelettername, $letter); + $mform->setType($gradelettername, PARAM_ALPHANUM); + $mform->disabledIf($gradelettername, 'override'); + + $mform->addElement('select', $gradeboundaryname, $gradeboundarystring, $percentages); + $mform->setHelpButton($gradeboundaryname, array(false, $gradeboundarystring, false, true, false, $gradeboundaryhelp)); + $mform->setDefault($gradeboundaryname, $boundary); + $mform->setType($gradeboundaryname, PARAM_ALPHANUM); + $mform->disabledIf($gradeboundaryname, 'override'); + } + + $mform->addElement('submit', 'action', get_string('addelement', 'grades')); + } + + // hidden params + $mform->addElement('hidden', 'id', $COURSE->id); + $mform->setType('id', PARAM_INT); + +/// add return tracking info + $gpr = $this->_customdata['gpr']; + $gpr->add_mform_elements($mform); + +//------------------------------------------------------------------------------- + // buttons + $this->add_action_buttons(); + } + + function definition_after_data() { + global $CFG, $COURSE; + + $context = get_context_instance(CONTEXT_COURSE, $COURSE->id); + + } +} + +?> diff --git a/grade/edit/gradedisplay/index.php b/grade/edit/gradedisplay/index.php new file mode 100644 index 0000000000..aa67506b62 --- /dev/null +++ b/grade/edit/gradedisplay/index.php @@ -0,0 +1,164 @@ +dirroot.'/grade/lib.php'; +require_once $CFG->libdir.'/gradelib.php'; +require_once $CFG->dirroot.'/grade/report/lib.php'; +require_once 'gradedisplay_form.php'; + +$courseid = optional_param('id', 0, PARAM_INT); +$action = optional_param('action', '', PARAM_ALPHA); + +/// Make sure they can even access this course +if ($courseid) { + if (!$course = get_record('course', 'id', $courseid)) { + print_error('nocourseid'); + } + require_login($course); + $context = get_context_instance(CONTEXT_COURSE, $course->id); + require_capability('moodle/course:managescales', $context); +} else { + require_once $CFG->libdir.'/adminlib.php'; + admin_externalpage_setup('scales'); +} + +$straddelement = get_string('addelement', 'grades'); +switch ($action) { + case $straddelement: + // Insert a record in the grade_letters table, with 0 as lower boundary and ' - ' as letter + $record = new stdClass(); + $record->contextid = $context->id; + $record->letter = '-'; + $record->lowerboundary = 0; + insert_record('grade_letters', $record); + break; + default: + break; +} + +$course_has_letters = get_field('grade_letters', 'contextid', 'contextid', $context->id); + +/// return tracking object +$gpr = new grade_plugin_return(array('type'=>'edit', 'plugin'=>'gradedisplay', 'courseid'=>$courseid)); +$returnurl = $gpr->get_return_url($CFG->wwwroot.'/grade/edit/gradedisplay/index.php?id='.$course->id); + +$mform = new edit_grade_display_form(null, array('gpr'=>$gpr, 'course_has_letters' => $course_has_letters, 'action' => $action)); + +if ($mform->is_cancelled()) { + redirect($returnurl); + +// form processing +} else if ($data = $mform->get_data(false)) { + // Delete existing grade_letters for this contextid, whether we add, update or set the grade letters to defaults + if ($course_has_letters) { + delete_records('grade_letters', 'contextid', $context->id); + } + + // Update course item's gradedisplay type + if (isset($data->gradedisplaytype)) { + set_field('grade_items', 'display', $data->gradedisplaytype, 'courseid', $courseid, 'itemtype', 'course'); + } + + // If override is present, add/update entries in grade_letters table + if (!empty($data->override)) { + $records = array(); + + // Loop through grade letters and boundaries + foreach ($data as $key => $variable) { + preg_match('/[gradeletter|gradeboundary]([0-9]{1,2})/', $key, $matches); + $index = null; + if (isset($matches[1])) { + $index = $matches[1]; + } + + if (strstr($key, 'gradeletter')) { + $records[$index] = new stdClass(); + $records[$index]->letter = $variable; + } elseif (strstr($key, 'gradeboundary')) { + if (!empty($records[$index])) { + $records[$index]->lowerboundary = $variable; + } + } + } + + foreach ($records as $key => $record) { + // Do not insert if either value is empty or set to "unused" + $values_set = isset($record->letter) && isset($record->lowerboundary); + + if ($values_set && strlen($record->letter) > 0 && strlen($record->lowerboundary) > 0) { + $record->contextid = $context->id; + if ($id = insert_record('grade_letters', $record)) { + $record = new stdClass(); + } else { + debugging('Error inserting grade_letters record!'); + die(); + } + } + } + } else { + + } + + redirect($returnurl, get_string('coursegradedisplayupdated', 'grades')); +} + +$strgrades = get_string('grades'); +$pagename = get_string('gradedisplay'); + +$navigation = grade_build_nav(__FILE__, $pagename, array('courseid' => $courseid)); + +$strname = get_string('name'); +$strdelete = get_string('delete'); +$stredit = get_string('edit'); +$strused = get_string('used'); +$stredit = get_string('edit'); + +switch ($action) { + case 'delete': + if (!confirm_sesskey()) { + break; + } + $scaleid = required_param('scaleid', PARAM_INT); + if (!$scale = grade_scale::fetch(array('id'=>$scaleid))) { + break; + } + + if (empty($scale->courseid)) { + require_capability('moodle/course:managescales', get_context_instance(CONTEXT_SYSTEM)); + } else if ($scale->courseid != $courseid) { + error('Incorrect courseid!'); + } + + if (!$scale->can_delete()) { + break; + } + + //TODO: add confirmation + $scale->delete(); + break; +} + +if ($courseid) { + /// Print header + print_header_simple($strgrades.': '.$pagename, ': '.$strgrades, $navigation, '', '', true, '', navmenu($course)); + /// Print the plugin selector at the top + print_grade_plugin_selector($courseid, 'edit', 'scale'); + +} else { + admin_externalpage_print_header(); +} + +print_simple_box_start("center"); +$mform->display(); +print_simple_box_end(); + +if ($courseid) { + print_footer($course); +} else { + admin_externalpage_print_footer(); +} + + +?> +