original_string: public static function save_grade_parameters() {
          global $CFG;
          require_once("$CFG->dirroot/grade/grading/lib.php");
          $instance = new assign(null, null, null);
          $pluginfeedbackparams = array();
  
          foreach ($instance->get_feedback_plugins() as $plugin) {
              if ($plugin->is_visible()) {
                  $pluginparams = $plugin->get_external_parameters();
                  if (!empty($pluginparams)) {
                      $pluginfeedbackparams = array_merge($pluginfeedbackparams, $pluginparams);
                  }
              }
          }
  
          $advancedgradingdata = array();
          $methods = array_keys(grading_manager::available_methods(false));
          foreach ($methods as $method) {
              require_once($CFG->dirroot.'/grade/grading/form/'.$method.'/lib.php');
              $details  = call_user_func('gradingform_'.$method.'_controller::get_external_instance_filling_details');
              if (!empty($details)) {
                  $items = array();
                  foreach ($details as $key => $value) {
                      $value->required = VALUE_OPTIONAL;
                      unset($value->content->keys['id']);
                      $items[$key] = new external_multiple_structure (new external_single_structure(
                          array(
                              'criterionid' => new external_value(PARAM_INT, 'criterion id'),
                              'fillings' => $value
                          )
                      ));
                  }
                  $advancedgradingdata[$method] = new external_single_structure($items, 'items', VALUE_OPTIONAL);
              }
          }
  
          return new external_function_parameters(
              array(
                  'assignmentid' => new external_value(PARAM_INT, 'The assignment id to operate on'),
                  'userid' => new external_value(PARAM_INT, 'The student id to operate on'),
                  'grade' => new external_value(PARAM_FLOAT, 'The new grade for this user. Ignored if advanced grading used'),
                  'attemptnumber' => new external_value(PARAM_INT, 'The attempt number (-1 means latest attempt)'),
                  'addattempt' => new external_value(PARAM_BOOL, 'Allow another attempt if the attempt reopen method is manual'),
                  'workflowstate' => new external_value(PARAM_ALPHA, 'The next marking workflow state'),
                  'applytoall' => new external_value(PARAM_BOOL, 'If true, this grade will be applied ' .
                                                                 'to all members ' .
                                                                 'of the group (for group assignments).'),
                  'plugindata' => new external_single_structure($pluginfeedbackparams, 'plugin data', VALUE_DEFAULT, array()),
                  'advancedgradingdata' => new external_single_structure($advancedgradingdata, 'advanced grading data',
                                                                         VALUE_DEFAULT, array())
              )
          );
      }
code: public static function save_grade_parameters() {
          global $CFG;
          require_once("$CFG->dirroot/grade/grading/lib.php");
          $instance = new assign(null, null, null);
          $pluginfeedbackparams = array();
  
          foreach ($instance->get_feedback_plugins() as $plugin) {
              if ($plugin->is_visible()) {
                  $pluginparams = $plugin->get_external_parameters();
                  if (!empty($pluginparams)) {
                      $pluginfeedbackparams = array_merge($pluginfeedbackparams, $pluginparams);
                  }
              }
          }
  
          $advancedgradingdata = array();
          $methods = array_keys(grading_manager::available_methods(false));
          foreach ($methods as $method) {
              require_once($CFG->dirroot.'/grade/grading/form/'.$method.'/lib.php');
              $details  = call_user_func('gradingform_'.$method.'_controller::get_external_instance_filling_details');
              if (!empty($details)) {
                  $items = array();
                  foreach ($details as $key => $value) {
                      $value->required = VALUE_OPTIONAL;
                      unset($value->content->keys['id']);
                      $items[$key] = new external_multiple_structure (new external_single_structure(
                          array(
                              'criterionid' => new external_value(PARAM_INT, 'criterion id'),
                              'fillings' => $value
                          )
                      ));
                  }
                  $advancedgradingdata[$method] = new external_single_structure($items, 'items', VALUE_OPTIONAL);
              }
          }
  
          return new external_function_parameters(
              array(
                  'assignmentid' => new external_value(PARAM_INT, 'The assignment id to operate on'),
                  'userid' => new external_value(PARAM_INT, 'The student id to operate on'),
                  'grade' => new external_value(PARAM_FLOAT, 'The new grade for this user. Ignored if advanced grading used'),
                  'attemptnumber' => new external_value(PARAM_INT, 'The attempt number (-1 means latest attempt)'),
                  'addattempt' => new external_value(PARAM_BOOL, 'Allow another attempt if the attempt reopen method is manual'),
                  'workflowstate' => new external_value(PARAM_ALPHA, 'The next marking workflow state'),
                  'applytoall' => new external_value(PARAM_BOOL, 'If true, this grade will be applied ' .
                                                                 'to all members ' .
                                                                 'of the group (for group assignments).'),
                  'plugindata' => new external_single_structure($pluginfeedbackparams, 'plugin data', VALUE_DEFAULT, array()),
                  'advancedgradingdata' => new external_single_structure($advancedgradingdata, 'advanced grading data',
                                                                         VALUE_DEFAULT, array())
              )
          );
      }
code_tokens: public static function save_grade_parameters ( ) { global $ CFG ; require_once ( "$CFG->dirroot/grade/grading/lib.php" ) ; $ instance = new assign ( null , null , null ) ; $ pluginfeedbackparams = array ( ) ; foreach ( $ instance -> get_feedback_plugins ( ) as $ plugin ) { if ( $ plugin -> is_visible ( ) ) { $ pluginparams = $ plugin -> get_external_parameters ( ) ; if ( ! empty ( $ pluginparams ) ) { $ pluginfeedbackparams = array_merge ( $ pluginfeedbackparams , $ pluginparams ) ; } } } $ advancedgradingdata = array ( ) ; $ methods = array_keys ( grading_manager :: available_methods ( false ) ) ; foreach ( $ methods as $ method ) { require_once ( $ CFG -> dirroot . '/grade/grading/form/' . $ method . '/lib.php' ) ; $ details = call_user_func ( 'gradingform_' . $ method . '_controller::get_external_instance_filling_details' ) ; if ( ! empty ( $ details ) ) { $ items = array ( ) ; foreach ( $ details as $ key => $ value ) { $ value -> required = VALUE_OPTIONAL ; unset ( $ value -> content -> keys [ 'id' ] ) ; $ items [ $ key ] = new external_multiple_structure ( new external_single_structure ( array ( 'criterionid' => new external_value ( PARAM_INT , 'criterion id' ) , 'fillings' => $ value ) ) ) ; } $ advancedgradingdata [ $ method ] = new external_single_structure ( $ items , 'items' , VALUE_OPTIONAL ) ; } } return new external_function_parameters ( array ( 'assignmentid' => new external_value ( PARAM_INT , 'The assignment id to operate on' ) , 'userid' => new external_value ( PARAM_INT , 'The student id to operate on' ) , 'grade' => new external_value ( PARAM_FLOAT , 'The new grade for this user. Ignored if advanced grading used' ) , 'attemptnumber' => new external_value ( PARAM_INT , 'The attempt number (-1 means latest attempt)' ) , 'addattempt' => new external_value ( PARAM_BOOL , 'Allow another attempt if the attempt reopen method is manual' ) , 'workflowstate' => new external_value ( PARAM_ALPHA , 'The next marking workflow state' ) , 'applytoall' => new external_value ( PARAM_BOOL , 'If true, this grade will be applied ' . 'to all members ' . 'of the group (for group assignments).' ) , 'plugindata' => new external_single_structure ( $ pluginfeedbackparams , 'plugin data' , VALUE_DEFAULT , array ( ) ) , 'advancedgradingdata' => new external_single_structure ( $ advancedgradingdata , 'advanced grading data' , VALUE_DEFAULT , array ( ) ) ) ) ; }
docstring: Describes the parameters for save_grade
  @return external_function_parameters
  @since  Moodle 2.6
docstring_tokens: Describes the parameters for save_grade