/** * Create or update grade item and grades for given subcourse * * @access public * @param int $courseid ID of referencing course (the course containing the instance of * subcourse) * @param int $subcourseid ID of subcourse instance * @param int $refcourseid ID of referenced course (the course to take grades from) * @param str $itemname Set the itemname * @param bool $gradeitemonly If true, fetch only grade item info without grades * @param bool $reset Reset grades in gradebook * @return int 0 if ok, error code otherwise */ function subcourse_grades_update($courseid, $subcourseid, $refcourseid, $itemname = null, $gradeitemonly = false, $reset = false) { global $CFG; $fetchedfields = subcourse_get_fetched_item_fields(); if (!function_exists('grade_update')) { //workaround for buggy PHP versions require_once $CFG->libdir . '/gradelib.php'; } $refgrades = subcourse_fetch_refgrades($subcourseid, $refcourseid, $gradeitemonly); if (!empty($refgrades->localremotescale)) { // unable to fetch remote grades - local scale is used in the remote course throw new subcourse_localremotescale_exception($subcourseid); } $params = array(); foreach ($fetchedfields as $property) { if (!empty($refgrades->{$property})) { $params[$property] = $refgrades->{$property}; } } if (!empty($itemname)) { $params['itemname'] = $itemname; } $grades = $refgrades->grades; if ($reset) { $params['reset'] = true; $grades = null; } return grade_update('mod/subcourse', $courseid, 'mod', 'subcourse', $subcourseid, 0, $grades, $params); }
/** * Create or update grade item and grades for given subcourse * * @access public * @param int $courseid ID of referencing course (the course containing the instance of * subcourse) * @param int $subcourseid ID of subcourse instance * @param int $refcourseid ID of referenced course (the course to take grades from) * @param str $itemname Set the itemname * @param bool $gradeitemonly If true, fetch only grade item info without grades * @param bool $reset Reset grades in gradebook * @return int GRADE_UPDATE_OK etc */ function subcourse_grades_update($courseid, $subcourseid, $refcourseid, $itemname = null, $gradeitemonly = false, $reset = false) { global $DB; if (empty($refcourseid)) { return GRADE_UPDATE_FAILED; } if (!$DB->record_exists('course', array('id' => $refcourseid))) { return GRADE_UPDATE_FAILED; } $fetchedfields = subcourse_get_fetched_item_fields(); $refgrades = subcourse_fetch_refgrades($subcourseid, $refcourseid, $gradeitemonly); if (!empty($refgrades->localremotescale)) { // unable to fetch remote grades - local scale is used in the remote course return GRADE_UPDATE_FAILED; } $params = array(); foreach ($fetchedfields as $property) { if (!empty($refgrades->{$property})) { $params[$property] = $refgrades->{$property}; } } if (!empty($itemname)) { $params['itemname'] = $itemname; } $grades = $refgrades->grades; if ($reset) { $params['reset'] = true; $grades = null; } return grade_update('mod/subcourse', $courseid, 'mod', 'subcourse', $subcourseid, 0, $grades, $params); }