/**
  * Prepares the data for the grading form.
  *
  * @param $course
  * @param $assignment
  * @param $submission
  * @param $user
  * @param $coursemodule
  * @param assignment_base $assignmentinstance
  * @global $USER
  * @global $CFG
  * @return array
  */
 private function get_mform_data_object($course, $assignment, $submission, $user, $coursemodule, $assignmentinstance)
 {
     global $USER, $CFG;
     $context = context_module::instance($coursemodule->id);
     // Get grading information to see whether we should be allowed to make changed at all.
     $grading_info = grade_get_grades($course->id, 'mod', 'assignment', $assignment->id, array($user->id));
     $locked = $grading_info->items[0]->grades[$user->id]->locked;
     $overridden = $grading_info->items[0]->grades[$user->id]->overridden;
     $gradingdisabled = $locked || $overridden;
     $mformdata = new stdClass();
     $mformdata->context = $context;
     $mformdata->maxbytes = $course->maxbytes;
     $mformdata->courseid = $course->id;
     $mformdata->teacher = $USER;
     $mformdata->assignment = $assignment;
     $mformdata->submission = $submission;
     $mformdata->lateness = assignment_display_lateness($submission->timemodified, $assignment->timedue);
     $mformdata->user = $user;
     $mformdata->offset = false;
     $mformdata->userid = $user->id;
     $mformdata->cm = $coursemodule;
     $mformdata->grading_info = $grading_info;
     $mformdata->enableoutcomes = $CFG->enableoutcomes;
     $mformdata->grade = $assignment->grade;
     $mformdata->gradingdisabled = $gradingdisabled;
     // TODO set nextid to the nextnode id.
     $mformdata->nextid = false;
     $mformdata->submissioncomment = $submission->submissioncomment;
     $mformdata->submissioncommentformat = FORMAT_HTML;
     $mformdata->submission_content = $assignmentinstance->print_user_files($user->id, true);
     if ($assignment->assignmenttype == 'upload') {
         $mformdata->fileui_options = array('subdirs' => 1, 'maxbytes' => $assignment->maxbytes, 'maxfiles' => $assignment->var1, 'accepted_types' => '*', 'return_types' => FILE_INTERNAL);
     } else {
         if ($assignment->assignmenttype == 'uploadsingle') {
             $mformdata->fileui_options = array('subdirs' => 0, 'maxbytes' => $CFG->userquota, 'maxfiles' => 1, 'accepted_types' => '*', 'return_types' => FILE_INTERNAL);
         }
     }
     $advancedgradingwarning = false;
     $gradingmanager = get_grading_manager($context, 'mod_assignment', 'submission');
     if ($gradingmethod = $gradingmanager->get_active_method()) {
         // This returns a gradingform_controller instance, not grading_controller as docs
         // say.
         /* @var gradingform_controller $controller */
         $controller = $gradingmanager->get_controller($gradingmethod);
         if ($controller->is_form_available()) {
             $itemid = null;
             if (!empty($submission->id)) {
                 $itemid = $submission->id;
             }
             if ($gradingdisabled && $itemid) {
                 $mformdata->advancedgradinginstance = $controller->get_current_instance($USER->id, $itemid);
                 return array($mformdata, $advancedgradingwarning);
             } else {
                 if (!$gradingdisabled) {
                     $instanceid = optional_param('advancedgradinginstanceid', 0, PARAM_INT);
                     $mformdata->advancedgradinginstance = $controller->get_or_create_instance($instanceid, $USER->id, $itemid);
                     return array($mformdata, $advancedgradingwarning);
                 }
             }
             return array($mformdata, $advancedgradingwarning);
         } else {
             $advancedgradingwarning = $controller->form_unavailable_notification();
             return array($mformdata, $advancedgradingwarning);
         }
     }
     return array($mformdata, $advancedgradingwarning);
 }