original_string: protected function output_individual_question_response_analysis($question, $variantno, $s, $reporturl, $qubaids,
                                                                      $whichtries = question_attempt::LAST_TRY) {
          global $OUTPUT;
  
          if (!question_bank::get_qtype($question->qtype, false)->can_analyse_responses()) {
              return;
          }
  
          $qtable = new quiz_statistics_question_table($question->id);
          $exportclass = $this->table->export_class_instance();
          $qtable->export_class_instance($exportclass);
          if (!$this->table->is_downloading()) {
              // Output an appropriate title.
              echo $OUTPUT->heading(get_string('analysisofresponses', 'quiz_statistics'), 3);
  
          } else {
              // Work out an appropriate title.
              $a = clone($question);
              $a->variant = $variantno;
  
              if (!empty($question->number) && !is_null($variantno)) {
                  $questiontabletitle = get_string('analysisnovariant', 'quiz_statistics', $a);
              } else if (!empty($question->number)) {
                  $questiontabletitle = get_string('analysisno', 'quiz_statistics', $a);
              } else if (!is_null($variantno)) {
                  $questiontabletitle = get_string('analysisvariant', 'quiz_statistics', $a);
              } else {
                  $questiontabletitle = get_string('analysisnameonly', 'quiz_statistics', $a);
              }
  
              if ($this->table->is_downloading() == 'html') {
                  $questiontabletitle = get_string('analysisofresponsesfor', 'quiz_statistics', $questiontabletitle);
              }
  
              // Set up the table.
              $exportclass->start_table($questiontabletitle);
  
              if ($this->table->is_downloading() == 'html') {
                  echo $this->render_question_text($question);
              }
          }
  
          $responesanalyser = new \core_question\statistics\responses\analyser($question, $whichtries);
          $responseanalysis = $responesanalyser->load_cached($qubaids, $whichtries);
  
          $qtable->question_setup($reporturl, $question, $s, $responseanalysis);
          if ($this->table->is_downloading()) {
              $exportclass->output_headers($qtable->headers);
          }
  
          // Where no variant no is specified the variant no is actually one.
          if ($variantno === null) {
              $variantno = 1;
          }
          foreach ($responseanalysis->get_subpart_ids($variantno) as $partid) {
              $subpart = $responseanalysis->get_analysis_for_subpart($variantno, $partid);
              foreach ($subpart->get_response_class_ids() as $responseclassid) {
                  $responseclass = $subpart->get_response_class($responseclassid);
                  $tabledata = $responseclass->data_for_question_response_table($subpart->has_multiple_response_classes(), $partid);
                  foreach ($tabledata as $row) {
                      $qtable->add_data_keyed($qtable->format_row($row));
                  }
              }
          }
  
          $qtable->finish_output(!$this->table->is_downloading());
      }
code: protected function output_individual_question_response_analysis($question, $variantno, $s, $reporturl, $qubaids,
                                                                      $whichtries = question_attempt::LAST_TRY) {
          global $OUTPUT;
  
          if (!question_bank::get_qtype($question->qtype, false)->can_analyse_responses()) {
              return;
          }
  
          $qtable = new quiz_statistics_question_table($question->id);
          $exportclass = $this->table->export_class_instance();
          $qtable->export_class_instance($exportclass);
          if (!$this->table->is_downloading()) {
              // Output an appropriate title.
              echo $OUTPUT->heading(get_string('analysisofresponses', 'quiz_statistics'), 3);
  
          } else {
              // Work out an appropriate title.
              $a = clone($question);
              $a->variant = $variantno;
  
              if (!empty($question->number) && !is_null($variantno)) {
                  $questiontabletitle = get_string('analysisnovariant', 'quiz_statistics', $a);
              } else if (!empty($question->number)) {
                  $questiontabletitle = get_string('analysisno', 'quiz_statistics', $a);
              } else if (!is_null($variantno)) {
                  $questiontabletitle = get_string('analysisvariant', 'quiz_statistics', $a);
              } else {
                  $questiontabletitle = get_string('analysisnameonly', 'quiz_statistics', $a);
              }
  
              if ($this->table->is_downloading() == 'html') {
                  $questiontabletitle = get_string('analysisofresponsesfor', 'quiz_statistics', $questiontabletitle);
              }
  
              // Set up the table.
              $exportclass->start_table($questiontabletitle);
  
              if ($this->table->is_downloading() == 'html') {
                  echo $this->render_question_text($question);
              }
          }
  
          $responesanalyser = new \core_question\statistics\responses\analyser($question, $whichtries);
          $responseanalysis = $responesanalyser->load_cached($qubaids, $whichtries);
  
          $qtable->question_setup($reporturl, $question, $s, $responseanalysis);
          if ($this->table->is_downloading()) {
              $exportclass->output_headers($qtable->headers);
          }
  
          // Where no variant no is specified the variant no is actually one.
          if ($variantno === null) {
              $variantno = 1;
          }
          foreach ($responseanalysis->get_subpart_ids($variantno) as $partid) {
              $subpart = $responseanalysis->get_analysis_for_subpart($variantno, $partid);
              foreach ($subpart->get_response_class_ids() as $responseclassid) {
                  $responseclass = $subpart->get_response_class($responseclassid);
                  $tabledata = $responseclass->data_for_question_response_table($subpart->has_multiple_response_classes(), $partid);
                  foreach ($tabledata as $row) {
                      $qtable->add_data_keyed($qtable->format_row($row));
                  }
              }
          }
  
          $qtable->finish_output(!$this->table->is_downloading());
      }
code_tokens: protected function output_individual_question_response_analysis ( $ question , $ variantno , $ s , $ reporturl , $ qubaids , $ whichtries = question_attempt :: LAST_TRY ) { global $ OUTPUT ; if ( ! question_bank :: get_qtype ( $ question -> qtype , false ) -> can_analyse_responses ( ) ) { return ; } $ qtable = new quiz_statistics_question_table ( $ question -> id ) ; $ exportclass = $ this -> table -> export_class_instance ( ) ; $ qtable -> export_class_instance ( $ exportclass ) ; if ( ! $ this -> table -> is_downloading ( ) ) { // Output an appropriate title. echo $ OUTPUT -> heading ( get_string ( 'analysisofresponses' , 'quiz_statistics' ) , 3 ) ; } else { // Work out an appropriate title. $ a = clone ( $ question ) ; $ a -> variant = $ variantno ; if ( ! empty ( $ question -> number ) && ! is_null ( $ variantno ) ) { $ questiontabletitle = get_string ( 'analysisnovariant' , 'quiz_statistics' , $ a ) ; } else if ( ! empty ( $ question -> number ) ) { $ questiontabletitle = get_string ( 'analysisno' , 'quiz_statistics' , $ a ) ; } else if ( ! is_null ( $ variantno ) ) { $ questiontabletitle = get_string ( 'analysisvariant' , 'quiz_statistics' , $ a ) ; } else { $ questiontabletitle = get_string ( 'analysisnameonly' , 'quiz_statistics' , $ a ) ; } if ( $ this -> table -> is_downloading ( ) == 'html' ) { $ questiontabletitle = get_string ( 'analysisofresponsesfor' , 'quiz_statistics' , $ questiontabletitle ) ; } // Set up the table. $ exportclass -> start_table ( $ questiontabletitle ) ; if ( $ this -> table -> is_downloading ( ) == 'html' ) { echo $ this -> render_question_text ( $ question ) ; } } $ responesanalyser = new \ core_question \ statistics \ responses \ analyser ( $ question , $ whichtries ) ; $ responseanalysis = $ responesanalyser -> load_cached ( $ qubaids , $ whichtries ) ; $ qtable -> question_setup ( $ reporturl , $ question , $ s , $ responseanalysis ) ; if ( $ this -> table -> is_downloading ( ) ) { $ exportclass -> output_headers ( $ qtable -> headers ) ; } // Where no variant no is specified the variant no is actually one. if ( $ variantno === null ) { $ variantno = 1 ; } foreach ( $ responseanalysis -> get_subpart_ids ( $ variantno ) as $ partid ) { $ subpart = $ responseanalysis -> get_analysis_for_subpart ( $ variantno , $ partid ) ; foreach ( $ subpart -> get_response_class_ids ( ) as $ responseclassid ) { $ responseclass = $ subpart -> get_response_class ( $ responseclassid ) ; $ tabledata = $ responseclass -> data_for_question_response_table ( $ subpart -> has_multiple_response_classes ( ) , $ partid ) ; foreach ( $ tabledata as $ row ) { $ qtable -> add_data_keyed ( $ qtable -> format_row ( $ row ) ) ; } } } $ qtable -> finish_output ( ! $ this -> table -> is_downloading ( ) ) ; }
docstring: Display the response analysis for a question.
  
  @param object           $question  the question to report on.
  @param int|null         $variantno the variant
  @param int              $s
  @param moodle_url       $reporturl the URL to redisplay this report.
  @param qubaid_condition $qubaids
  @param string           $whichtries
docstring_tokens: Display the response analysis for a question .