QuizQuestionFeedbackForm.php in Quiz 8.6
File
src/Form/QuizQuestionFeedbackForm.php
View source
<?php
namespace Drupal\quiz\Form;
use Drupal;
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\quiz\Entity\QuizResult;
class QuizQuestionFeedbackForm extends FormBase {
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()) {
$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');
$out = array();
foreach ($quiz_result
->getLayout() as $question) {
if ($question
->get('number')
->getString() == $question_number && $question->qqr_pid) {
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),
);
}
}
}
}
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;
}
public function getFormId() {
return 'quiz_take_question_feedback_form';
}
public function submitForm(array &$form, FormStateInterface $form_state) {
$quiz = $form_state
->getBuildInfo()['args'][0];
$form_state
->setRedirect('quiz.question.take', [
'quiz' => $quiz
->id(),
'question_number' => $_SESSION['quiz'][$quiz
->id()]['current'],
]);
}
function submitEnd($form, &$form_state) {
$result_id = $_SESSION['quiz']['temp']['result_id'];
$quiz = $form_state
->getBuildInfo()['args'][0];
$form_state
->setRedirect('entity.quiz_result.canonical', [
'quiz' => $quiz
->id(),
'quiz_result' => $result_id,
]);
}
}