You are here

function QuizQuestionFeedbackForm::buildForm in Quiz 8.6

Same name and namespace in other branches
  1. 8.5 src/Form/QuizQuestionFeedbackForm.php \Drupal\quiz\Form\QuizQuestionFeedbackForm::buildForm()
  2. 6.x src/Form/QuizQuestionFeedbackForm.php \Drupal\quiz\Form\QuizQuestionFeedbackForm::buildForm()

Show feedback for a question response.

Overrides FormInterface::buildForm

File

src/Form/QuizQuestionFeedbackForm.php, line 15

Class

QuizQuestionFeedbackForm

Namespace

Drupal\quiz\Form

Code

function buildForm(array $form, FormStateInterface $form_state) {
  $quiz = $form_state
    ->getBuildInfo()['args'][0];
  $question_number = $form_state
    ->getBuildInfo()['args'][1];
  $quiz_result = \Drupal\quiz\Util\QuizUtil::resultOrTemp($quiz);
  $form = array();
  $form['actions']['#type'] = 'actions';
  if (!$quiz_result
    ->get('time_end')
    ->isEmpty()) {

    // Quiz is done.
    $form['actions']['finish'] = array(
      '#type' => 'submit',
      '#submit' => array(
        '::submitEnd',
      ),
      '#value' => t('Finish'),
    );
  }
  else {
    $form['actions']['next'] = array(
      '#type' => 'submit',
      '#value' => t('Next question'),
    );
  }
  $view_builder = Drupal::entityTypeManager()
    ->getViewBuilder('quiz_result_answer');

  // Add feedback.
  $out = array();
  foreach ($quiz_result
    ->getLayout() as $question) {
    if ($question
      ->get('number')
      ->getString() == $question_number && $question->qqr_pid) {

      // Question is in a page.
      foreach ($quiz_result
        ->getLayout() as $qra) {
        if ($qra->qqr_pid == $question->qqr_pid) {
          $out[] = array(
            '#title' => t('Question @num', array(
              '@num' => $qra
                ->get('display_number')
                ->getString(),
            )),
            '#type' => 'fieldset',
            'feedback' => $view_builder
              ->view($qra),
          );
        }
      }
    }
  }

  // Single question.
  if (empty($out)) {
    $qra = $quiz_result
      ->getLayout()[$question_number];
    $feedback = $view_builder
      ->view($qra);
    $out[] = array(
      '#title' => t('Question @num', array(
        '@num' => $quiz_result
          ->getLayout()[$question_number]
          ->get('display_number')
          ->getString(),
      )),
      '#type' => 'fieldset',
      'feedback' => $feedback,
    );
  }
  $form['feedback'] = $out;
  return $form;
}