original_string: public function summary_table($attemptobj, $displayoptions) {
          // Prepare the summary table header.
          $table = new html_table();
          $table->attributes['class'] = 'generaltable quizsummaryofattempt boxaligncenter';
          $table->head = array(get_string('question', 'quiz'), get_string('status', 'quiz'));
          $table->align = array('left', 'left');
          $table->size = array('', '');
          $markscolumn = $displayoptions->marks >= question_display_options::MARK_AND_MAX;
          if ($markscolumn) {
              $table->head[] = get_string('marks', 'quiz');
              $table->align[] = 'left';
              $table->size[] = '';
          }
          $tablewidth = count($table->align);
          $table->data = array();
  
          // Get the summary info for each question.
          $slots = $attemptobj->get_slots();
          foreach ($slots as $slot) {
              // Add a section headings if we need one here.
              $heading = $attemptobj->get_heading_before_slot($slot);
              if ($heading) {
                  $cell = new html_table_cell(format_string($heading));
                  $cell->header = true;
                  $cell->colspan = $tablewidth;
                  $table->data[] = array($cell);
                  $table->rowclasses[] = 'quizsummaryheading';
              }
  
              // Don't display information items.
              if (!$attemptobj->is_real_question($slot)) {
                  continue;
              }
  
              // Real question, show it.
              $flag = '';
              if ($attemptobj->is_question_flagged($slot)) {
                  // Quiz has custom JS manipulating these image tags - so we can't use the pix_icon method here.
                  $flag = html_writer::empty_tag('img', array('src' => $this->image_url('i/flagged'),
                          'alt' => get_string('flagged', 'question'), 'class' => 'questionflag icon-post'));
              }
              if ($attemptobj->can_navigate_to($slot)) {
                  $row = array(html_writer::link($attemptobj->attempt_url($slot),
                          $attemptobj->get_question_number($slot) . $flag),
                          $attemptobj->get_question_status($slot, $displayoptions->correctness));
              } else {
                  $row = array($attemptobj->get_question_number($slot) . $flag,
                                  $attemptobj->get_question_status($slot, $displayoptions->correctness));
              }
              if ($markscolumn) {
                  $row[] = $attemptobj->get_question_mark($slot);
              }
              $table->data[] = $row;
              $table->rowclasses[] = 'quizsummary' . $slot . ' ' . $attemptobj->get_question_state_class(
                      $slot, $displayoptions->correctness);
          }
  
          // Print the summary table.
          $output = html_writer::table($table);
  
          return $output;
      }
code: public function summary_table($attemptobj, $displayoptions) {
          // Prepare the summary table header.
          $table = new html_table();
          $table->attributes['class'] = 'generaltable quizsummaryofattempt boxaligncenter';
          $table->head = array(get_string('question', 'quiz'), get_string('status', 'quiz'));
          $table->align = array('left', 'left');
          $table->size = array('', '');
          $markscolumn = $displayoptions->marks >= question_display_options::MARK_AND_MAX;
          if ($markscolumn) {
              $table->head[] = get_string('marks', 'quiz');
              $table->align[] = 'left';
              $table->size[] = '';
          }
          $tablewidth = count($table->align);
          $table->data = array();
  
          // Get the summary info for each question.
          $slots = $attemptobj->get_slots();
          foreach ($slots as $slot) {
              // Add a section headings if we need one here.
              $heading = $attemptobj->get_heading_before_slot($slot);
              if ($heading) {
                  $cell = new html_table_cell(format_string($heading));
                  $cell->header = true;
                  $cell->colspan = $tablewidth;
                  $table->data[] = array($cell);
                  $table->rowclasses[] = 'quizsummaryheading';
              }
  
              // Don't display information items.
              if (!$attemptobj->is_real_question($slot)) {
                  continue;
              }
  
              // Real question, show it.
              $flag = '';
              if ($attemptobj->is_question_flagged($slot)) {
                  // Quiz has custom JS manipulating these image tags - so we can't use the pix_icon method here.
                  $flag = html_writer::empty_tag('img', array('src' => $this->image_url('i/flagged'),
                          'alt' => get_string('flagged', 'question'), 'class' => 'questionflag icon-post'));
              }
              if ($attemptobj->can_navigate_to($slot)) {
                  $row = array(html_writer::link($attemptobj->attempt_url($slot),
                          $attemptobj->get_question_number($slot) . $flag),
                          $attemptobj->get_question_status($slot, $displayoptions->correctness));
              } else {
                  $row = array($attemptobj->get_question_number($slot) . $flag,
                                  $attemptobj->get_question_status($slot, $displayoptions->correctness));
              }
              if ($markscolumn) {
                  $row[] = $attemptobj->get_question_mark($slot);
              }
              $table->data[] = $row;
              $table->rowclasses[] = 'quizsummary' . $slot . ' ' . $attemptobj->get_question_state_class(
                      $slot, $displayoptions->correctness);
          }
  
          // Print the summary table.
          $output = html_writer::table($table);
  
          return $output;
      }
code_tokens: public function summary_table ( $ attemptobj , $ displayoptions ) { // Prepare the summary table header. $ table = new html_table ( ) ; $ table -> attributes [ 'class' ] = 'generaltable quizsummaryofattempt boxaligncenter' ; $ table -> head = array ( get_string ( 'question' , 'quiz' ) , get_string ( 'status' , 'quiz' ) ) ; $ table -> align = array ( 'left' , 'left' ) ; $ table -> size = array ( '' , '' ) ; $ markscolumn = $ displayoptions -> marks >= question_display_options :: MARK_AND_MAX ; if ( $ markscolumn ) { $ table -> head [ ] = get_string ( 'marks' , 'quiz' ) ; $ table -> align [ ] = 'left' ; $ table -> size [ ] = '' ; } $ tablewidth = count ( $ table -> align ) ; $ table -> data = array ( ) ; // Get the summary info for each question. $ slots = $ attemptobj -> get_slots ( ) ; foreach ( $ slots as $ slot ) { // Add a section headings if we need one here. $ heading = $ attemptobj -> get_heading_before_slot ( $ slot ) ; if ( $ heading ) { $ cell = new html_table_cell ( format_string ( $ heading ) ) ; $ cell -> header = true ; $ cell -> colspan = $ tablewidth ; $ table -> data [ ] = array ( $ cell ) ; $ table -> rowclasses [ ] = 'quizsummaryheading' ; } // Don't display information items. if ( ! $ attemptobj -> is_real_question ( $ slot ) ) { continue ; } // Real question, show it. $ flag = '' ; if ( $ attemptobj -> is_question_flagged ( $ slot ) ) { // Quiz has custom JS manipulating these image tags - so we can't use the pix_icon method here. $ flag = html_writer :: empty_tag ( 'img' , array ( 'src' => $ this -> image_url ( 'i/flagged' ) , 'alt' => get_string ( 'flagged' , 'question' ) , 'class' => 'questionflag icon-post' ) ) ; } if ( $ attemptobj -> can_navigate_to ( $ slot ) ) { $ row = array ( html_writer :: link ( $ attemptobj -> attempt_url ( $ slot ) , $ attemptobj -> get_question_number ( $ slot ) . $ flag ) , $ attemptobj -> get_question_status ( $ slot , $ displayoptions -> correctness ) ) ; } else { $ row = array ( $ attemptobj -> get_question_number ( $ slot ) . $ flag , $ attemptobj -> get_question_status ( $ slot , $ displayoptions -> correctness ) ) ; } if ( $ markscolumn ) { $ row [ ] = $ attemptobj -> get_question_mark ( $ slot ) ; } $ table -> data [ ] = $ row ; $ table -> rowclasses [ ] = 'quizsummary' . $ slot . ' ' . $ attemptobj -> get_question_state_class ( $ slot , $ displayoptions -> correctness ) ; } // Print the summary table. $ output = html_writer :: table ( $ table ) ; return $ output ; }
docstring: Generates the table of summarydata
  
  @param quiz_attempt $attemptobj
  @param mod_quiz_display_options $displayoptions
docstring_tokens: Generates the table of summarydata