/**
 * Update activity grades.
 *
 * @param stdClass $sepl database record
 * @param int $userid specific user only, 0 means all
 * @param bool $nullifnone - not used
 */
function sepl_update_grades($sepl, $userid = 0, $nullifnone = true)
{
    global $CFG;
    require_once $CFG->libdir . '/gradelib.php';
    if ($sepl->grade == 0) {
        sepl_grade_item_update($sepl);
    } else {
        if ($grades = sepl_get_user_grades($sepl, $userid)) {
            foreach ($grades as $k => $v) {
                if ($v->rawgrade == -1) {
                    $grades[$k]->rawgrade = null;
                }
            }
            sepl_grade_item_update($sepl, $grades);
        } else {
            sepl_grade_item_update($sepl);
        }
    }
}
 /**
  * Update grades in the gradebook.
  *
  * @param mixed $submission stdClass|null
  * @param mixed $grade stdClass|null
  * @return bool
  */
 protected function gradebook_item_update($submission = null, $grade = null)
 {
     global $CFG;
     require_once $CFG->dirroot . '/mod/sepl/lib.php';
     // Do not push grade to gradebook if blind marking is active as
     // the gradebook would reveal the students.
     if ($this->is_blind_marking()) {
         return false;
     }
     // If marking workflow is enabled and grade is not released then remove any grade that may exist in the gradebook.
     if ($this->get_instance()->markingworkflow && !empty($grade) && $this->get_grading_status($grade->userid) != ASSIGN_MARKING_WORKFLOW_STATE_RELEASED) {
         // Remove the grade (if it exists) from the gradebook as it is not 'final'.
         $grade->grade = -1;
         $grade->feedbacktext = '';
     }
     if ($submission != null) {
         if ($submission->userid == 0) {
             // This is a group submission update.
             $team = groups_get_members($submission->groupid, 'u.id');
             foreach ($team as $member) {
                 $membersubmission = clone $submission;
                 $membersubmission->groupid = 0;
                 $membersubmission->userid = $member->id;
                 $this->gradebook_item_update($membersubmission, null);
             }
             return;
         }
         $gradebookgrade = $this->convert_submission_for_gradebook($submission);
     } else {
         $gradebookgrade = $this->convert_grade_for_gradebook($grade);
     }
     // Grading is disabled, return.
     if ($this->grading_disabled($gradebookgrade['userid'])) {
         return false;
     }
     $sepl = clone $this->get_instance();
     $sepl->cmidnumber = $this->get_course_module()->idnumber;
     // Set sepl gradebook feedback plugin status (enabled and visible).
     $sepl->gradefeedbackenabled = $this->is_gradebook_feedback_enabled();
     return sepl_grade_item_update($sepl, $gradebookgrade) == GRADE_UPDATE_OK;
 }