original_string: public static function submit_choice_response($choiceid, $responses) {
          global $USER;
  
          $warnings = array();
          $params = self::validate_parameters(self::submit_choice_response_parameters(),
                                              array(
                                                  'choiceid' => $choiceid,
                                                  'responses' => $responses
                                              ));
  
          if (!$choice = choice_get_choice($params['choiceid'])) {
              throw new moodle_exception("invalidcoursemodule", "error");
          }
          list($course, $cm) = get_course_and_cm_from_instance($choice, 'choice');
  
          $context = context_module::instance($cm->id);
          self::validate_context($context);
  
          require_capability('mod/choice:choose', $context);
  
          $timenow = time();
          if (!empty($choice->timeopen) && ($choice->timeopen > $timenow)) {
              throw new moodle_exception("notopenyet", "choice", '', userdate($choice->timeopen));
          } else if (!empty($choice->timeclose) && ($timenow > $choice->timeclose)) {
              throw new moodle_exception("expired", "choice", '', userdate($choice->timeclose));
          }
  
          if (!choice_get_my_response($choice) or $choice->allowupdate) {
              // When a single response is given, we convert the array to a simple variable
              // in order to avoid choice_user_submit_response to check with allowmultiple even
              // for a single response.
              if (count($params['responses']) == 1) {
                  $params['responses'] = reset($params['responses']);
              }
              choice_user_submit_response($params['responses'], $choice, $USER->id, $course, $cm);
          } else {
              throw new moodle_exception('missingrequiredcapability', 'webservice', '', 'allowupdate');
          }
          $answers = choice_get_my_response($choice);
  
          return array(
              'answers' => $answers,
              'warnings' => $warnings
          );
      }
code: public static function submit_choice_response($choiceid, $responses) {
          global $USER;
  
          $warnings = array();
          $params = self::validate_parameters(self::submit_choice_response_parameters(),
                                              array(
                                                  'choiceid' => $choiceid,
                                                  'responses' => $responses
                                              ));
  
          if (!$choice = choice_get_choice($params['choiceid'])) {
              throw new moodle_exception("invalidcoursemodule", "error");
          }
          list($course, $cm) = get_course_and_cm_from_instance($choice, 'choice');
  
          $context = context_module::instance($cm->id);
          self::validate_context($context);
  
          require_capability('mod/choice:choose', $context);
  
          $timenow = time();
          if (!empty($choice->timeopen) && ($choice->timeopen > $timenow)) {
              throw new moodle_exception("notopenyet", "choice", '', userdate($choice->timeopen));
          } else if (!empty($choice->timeclose) && ($timenow > $choice->timeclose)) {
              throw new moodle_exception("expired", "choice", '', userdate($choice->timeclose));
          }
  
          if (!choice_get_my_response($choice) or $choice->allowupdate) {
              // When a single response is given, we convert the array to a simple variable
              // in order to avoid choice_user_submit_response to check with allowmultiple even
              // for a single response.
              if (count($params['responses']) == 1) {
                  $params['responses'] = reset($params['responses']);
              }
              choice_user_submit_response($params['responses'], $choice, $USER->id, $course, $cm);
          } else {
              throw new moodle_exception('missingrequiredcapability', 'webservice', '', 'allowupdate');
          }
          $answers = choice_get_my_response($choice);
  
          return array(
              'answers' => $answers,
              'warnings' => $warnings
          );
      }
code_tokens: public static function submit_choice_response ( $ choiceid , $ responses ) { global $ USER ; $ warnings = array ( ) ; $ params = self :: validate_parameters ( self :: submit_choice_response_parameters ( ) , array ( 'choiceid' => $ choiceid , 'responses' => $ responses ) ) ; if ( ! $ choice = choice_get_choice ( $ params [ 'choiceid' ] ) ) { throw new moodle_exception ( "invalidcoursemodule" , "error" ) ; } list ( $ course , $ cm ) = get_course_and_cm_from_instance ( $ choice , 'choice' ) ; $ context = context_module :: instance ( $ cm -> id ) ; self :: validate_context ( $ context ) ; require_capability ( 'mod/choice:choose' , $ context ) ; $ timenow = time ( ) ; if ( ! empty ( $ choice -> timeopen ) && ( $ choice -> timeopen > $ timenow ) ) { throw new moodle_exception ( "notopenyet" , "choice" , '' , userdate ( $ choice -> timeopen ) ) ; } else if ( ! empty ( $ choice -> timeclose ) && ( $ timenow > $ choice -> timeclose ) ) { throw new moodle_exception ( "expired" , "choice" , '' , userdate ( $ choice -> timeclose ) ) ; } if ( ! choice_get_my_response ( $ choice ) or $ choice -> allowupdate ) { // When a single response is given, we convert the array to a simple variable // in order to avoid choice_user_submit_response to check with allowmultiple even // for a single response. if ( count ( $ params [ 'responses' ] ) == 1 ) { $ params [ 'responses' ] = reset ( $ params [ 'responses' ] ) ; } choice_user_submit_response ( $ params [ 'responses' ] , $ choice , $ USER -> id , $ course , $ cm ) ; } else { throw new moodle_exception ( 'missingrequiredcapability' , 'webservice' , '' , 'allowupdate' ) ; } $ answers = choice_get_my_response ( $ choice ) ; return array ( 'answers' => $ answers , 'warnings' => $ warnings ) ; }
docstring: Submit choice responses
  
  @param int $choiceid the choice instance id
  @param array $responses the response ids
  @return array answers information and warnings
  @since Moodle 3.0
docstring_tokens: Submit choice responses