MDL-9628 Refactored display "Raw" string into "Real" to avoid confusion with raw...
[moodle-pu.git] / grade / edit / item_form.php
blobf37fc45b9697ed1e9053141e4cc44f429b1833ae
1 <?php //$Id$
3 require_once $CFG->libdir.'/formslib.php';
5 class edit_item_form extends moodleform {
6 function definition() {
7 global $COURSE;
9 $mform =& $this->_form;
11 /// visible elements
12 $mform->addElement('header', 'general', get_string('gradeitem', 'grades'));
14 $mform->addElement('text', 'itemname', get_string('itemname', 'grades'));
15 $mform->addElement('text', 'iteminfo', get_string('iteminfo', 'grades'));
16 $mform->addElement('text', 'idnumber', get_string('idnumber'));
18 // allow setting of outcomes on module items too
19 $options = array(0=>get_string('usenooutcome', 'grades'));
20 if ($outcomes = grade_outcome::fetch_all(array('courseid'=>$COURSE->id))) {
21 foreach ($outcomes as $outcome) {
22 $options[$scale->id] = $outcome->get_name();
25 $mform->addElement('select', 'outcomeid', get_string('outcome', 'grades'), $options);
27 $options = array(GRADE_TYPE_NONE=>get_string('typenone', 'grades'),
28 GRADE_TYPE_VALUE=>get_string('typevalue', 'grades'),
29 GRADE_TYPE_SCALE=>get_string('typescale', 'grades'),
30 GRADE_TYPE_TEXT=>get_string('typetext', 'grades'));
31 $mform->addElement('select', 'gradetype', get_string('gradetype', 'grades'), $options);
32 $mform->setDefault('gradetype', GRADE_TYPE_VALUE);
34 $mform->addElement('text', 'calculation', get_string('calculation', 'grades'));
35 $mform->disabledIf('calculation', 'gradetype', 'eq', GRADE_TYPE_TEXT);
36 $mform->disabledIf('calculation', 'gradetype', 'eq', GRADE_TYPE_NONE);
38 $options = array(0=>get_string('usenoscale', 'grades'));
39 if ($scales = get_records('scale')) {
40 foreach ($scales as $scale) {
41 $options[$scale->id] = format_string($scale->name);
44 $mform->addElement('select', 'scaleid', get_string('scale'), $options);
45 $mform->disabledIf('scaleid', 'gradetype', 'noteq', GRADE_TYPE_SCALE);
47 $mform->addElement('text', 'grademax', get_string('grademax', 'grades'));
48 $mform->disabledIf('grademax', 'gradetype', 'noteq', GRADE_TYPE_VALUE);
49 $mform->setDefault('grademax', 100);
51 $mform->addElement('text', 'grademin', get_string('grademin', 'grades'));
52 $mform->disabledIf('grademin', 'gradetype', 'noteq', GRADE_TYPE_VALUE);
53 $mform->setDefault('grademin', 0);
55 $mform->addElement('text', 'gradepass', get_string('gradepass', 'grades'));
56 $mform->disabledIf('gradepass', 'gradetype', 'eq', GRADE_TYPE_NONE);
57 $mform->disabledIf('gradepass', 'gradetype', 'eq', GRADE_TYPE_TEXT);
58 $mform->setDefault('gradepass', 0);
60 $mform->addElement('text', 'multfactor', get_string('multfactor', 'grades'));
61 $mform->disabledIf('multfactor', 'gradetype', 'eq', GRADE_TYPE_NONE);
62 $mform->disabledIf('multfactor', 'gradetype', 'eq', GRADE_TYPE_TEXT);
63 $mform->setDefault('multfactor', 1);
65 $mform->addElement('text', 'plusfactor', get_string('plusfactor', 'grades'));
66 $mform->disabledIf('plusfactor', 'gradetype', 'eq', GRADE_TYPE_NONE);
67 $mform->disabledIf('plusfactor', 'gradetype', 'eq', GRADE_TYPE_TEXT);
68 $mform->setDefault('plusfactor', 0);
70 $mform->addElement('advcheckbox', 'locked', get_string('locked', 'grades'));
72 $mform->addElement('date_time_selector', 'locktime', get_string('locktime', 'grades'), array('optional'=>true));
73 $mform->disabledIf('locktime', 'gradetype', 'eq', GRADE_TYPE_NONE);
75 /// user preferences
76 $mform->addElement('header', 'general', get_string('userpreferences', 'grades'));
78 $mform->addElement('select', 'pref_gradedisplaytype', get_string('gradedisplaytype', 'grades'),
79 array(GRADE_REPORT_PREFERENCE_DEFAULT => get_string('default', 'grades'),
80 GRADE_REPORT_GRADE_DISPLAY_TYPE_REAL => get_string('real', 'grades'),
81 GRADE_REPORT_GRADE_DISPLAY_TYPE_PERCENTAGE => get_string('percentage', 'grades')));
82 $mform->setHelpButton('pref_gradedisplaytype', array(false, get_string('gradedisplaytype', 'grades'),
83 false, true, false, get_string("config_gradedisplaytype", 'grades')));
84 $mform->setDefault('pref_gradedisplaytype', GRADE_REPORT_PREFERENCE_DEFAULT);
86 $mform->addElement('select', 'pref_decimalpoints', get_string('decimalpoints', 'grades'),
87 array(GRADE_REPORT_PREFERENCE_DEFAULT => get_string('default', 'grades'), 0, 1, 2, 3, 4, 5));
88 $mform->setHelpButton('pref_decimalpoints', array(false, get_string('decimalpoints', 'grades'),
89 false, true, false, get_string("config_decimalpoints", 'grades')));
90 $mform->setDefault('pref_decimalpoints', GRADE_REPORT_PREFERENCE_DEFAULT);
92 /// hidden params
93 $mform->addElement('hidden', 'id', 0);
94 $mform->setType('id', PARAM_INT);
96 $mform->addElement('hidden', 'courseid', 0);
97 $mform->setType('courseid', PARAM_INT);
99 $mform->addElement('hidden', 'itemtype', 0);
100 $mform->setType('itemtype', PARAM_ALPHA);
102 /// add return tracking info
103 $gpr = $this->_customdata['gpr'];
104 $gpr->add_mform_elements($mform);
106 //-------------------------------------------------------------------------------
107 // buttons
108 $this->add_action_buttons();
112 /// tweak the form - depending on existing data
113 function definition_after_data() {
114 global $CFG;
116 $mform =& $this->_form;
118 if ($id = $mform->getElementValue('id')) {
119 $grade_item = grade_item::fetch(array('id'=>$id));
120 if ($grade_item->is_normal_item()) {
121 // following items are set up from modules and should not be overrided by user
122 $mform->hardFreeze('itemname,idnumber,calculation,gradetype,grademax,grademin,scaleid');
124 if ($grade_item->is_manual_item()) {
125 // manual grade item does not use these - uses only final grades
126 $mform->hardFreeze('plusfactor,multfactor');
132 /// perform extra validation before submission
133 function validation($data){
134 $errors= array();
136 if (array_key_exists('calculation', $data) and $data['calculation'] != '') {
137 $grade_item = new grade_item(array('id'=>$data['id'], 'itemtype'=>$data['itemtype'], 'courseid'=>$data['courseid']));
138 $result = $grade_item->validate_formula($data['calculation']);
139 if ($result !== true) {
140 $errors['calculation'] = $result;
144 if (array_key_exists('grademin', $data) and array_key_exists('grademax', $data)) {
145 if ($data['grademax'] == $data['grademin'] or $data['grademax'] < $data['grademin']) {
146 $errors['grademin'] = get_String('incorrectminmax', 'grades');
147 $errors['grademax'] = get_String('incorrectminmax', 'grades');
151 if (0 == count($errors)){
152 return true;
153 } else {
154 return $errors;