3 require_once '../../../config.php';
4 require_once $CFG->dirroot
.'/grade/lib.php';
5 require_once $CFG->dirroot
.'/grade/report/lib.php';
6 require_once 'item_form.php';
8 $courseid = required_param('courseid', PARAM_INT
);
9 $id = optional_param('id', 0, PARAM_INT
);
11 if (!$course = get_record('course', 'id', $courseid)) {
12 print_error('nocourseid');
15 require_login($course);
16 $context = get_context_instance(CONTEXT_COURSE
, $course->id
);
17 require_capability('moodle/grade:manage', $context);
20 $gpr = new grade_plugin_return();
21 $returnurl = $gpr->get_return_url('index.php?id='.$course->id
);
23 $mform = new edit_item_form(null, array('gpr'=>$gpr));
25 if ($mform->is_cancelled()) {
29 if ($item = grade_item
::fetch(array('id'=>$id, 'courseid'=>$courseid))) {
30 // redirect if outcomeid present
31 if (!empty($item->outcomeid
) && !empty($CFG->enableoutcomes
)) {
32 $url = $CFG->wwwroot
.'/grade/edit/tree/outcomeitem.php?id='.$id.'&courseid='.$courseid;
33 redirect($gpr->add_url_params($url));
35 $item->calculation
= grade_item
::denormalize_formula($item->calculation
, $courseid);
37 $item = new grade_item(array('courseid'=>$courseid, 'itemtype'=>'manual'), false);
39 $decimalpoints = $item->get_decimals();
41 if ($item->hidden
> 1) {
42 $item->hiddenuntil
= $item->hidden
;
45 $item->hiddenuntil
= 0;
48 $item->locked
= !empty($item->locked
);
50 $item->grademax
= format_float($item->grademax
, $decimalpoints);
51 $item->grademin
= format_float($item->grademin
, $decimalpoints);
52 $item->gradepass
= format_float($item->gradepass
, $decimalpoints);
53 $item->multfactor
= format_float($item->multfactor
, 4);
54 $item->plusfactor
= format_float($item->plusfactor
, 4);
55 $item->aggregationcoef
= format_float($item->aggregationcoef
, 4);
57 $mform->set_data($item);
59 if ($data = $mform->get_data(false)) {
60 if (array_key_exists('calculation', $data)) {
61 $data->calculation
= grade_item
::normalize_formula($data->calculation
, $course->id
);
64 $hidden = empty($data->hidden
) ?
0: $data->hidden
;
65 $hiddenuntil = empty($data->hiddenuntil
) ?
0: $data->hiddenuntil
;
67 unset($data->hiddenuntil
);
69 $locked = empty($data->locked
) ?
0: $data->locked
;
70 $locktime = empty($data->locktime
) ?
0: $data->locktime
;
72 unset($data->locktime
);
74 $convert = array('grademax', 'grademin', 'gradepass', 'multfactor', 'plusfactor', 'aggregationcoef');
75 foreach ($convert as $param) {
76 if (array_key_exists($param, $data)) {
77 $data->$param = unformat_float($data->$param);
81 $grade_item = new grade_item(array('id'=>$id, 'courseid'=>$courseid));
82 grade_item
::set_properties($grade_item, $data);
83 $grade_item->outcomeid
= null;
85 // Handle null decimals value
86 if (strlen($data->decimals
) < 1) {
87 $grade_item->decimals
= null;
90 if (empty($grade_item->id
)) {
91 $grade_item->itemtype
= 'manual'; // all new items to be manual only
92 $grade_item->insert();
95 $grade_item->update();
100 $grade_item->set_hidden($hiddenuntil, false);
102 $grade_item->set_hidden($hidden, false);
105 $grade_item->set_locktime($locktime); // locktime first - it might be removed when unlocking
106 $grade_item->set_locked($locked, false, true);
108 redirect($returnurl);
111 $strgrades = get_string('grades');
112 $strgraderreport = get_string('graderreport', 'grades');
113 $stritemsedit = get_string('itemsedit', 'grades');
114 $stritem = get_string('item', 'grades');
116 $navigation = grade_build_nav(__FILE__
, $stritem, array('courseid' => $courseid));
119 print_header_simple($strgrades . ': ' . $strgraderreport, ': ' . $stritemsedit, $navigation, '', '', true, '', navmenu($course));
123 print_footer($course);