class QuizResultAnswerViewBuilder in Quiz 6.x
Same name and namespace in other branches
- 8.6 src/View/QuizResultAnswerViewBuilder.php \Drupal\quiz\View\QuizResultAnswerViewBuilder
- 8.5 src/View/QuizResultAnswerViewBuilder.php \Drupal\quiz\View\QuizResultAnswerViewBuilder
Hierarchy
- class \Drupal\Core\Entity\EntityHandlerBase uses DependencySerializationTrait, StringTranslationTrait
- class \Drupal\Core\Entity\EntityViewBuilder implements EntityHandlerInterface, EntityViewBuilderInterface, TrustedCallbackInterface
- class \Drupal\quiz\View\QuizResultAnswerViewBuilder
- class \Drupal\Core\Entity\EntityViewBuilder implements EntityHandlerInterface, EntityViewBuilderInterface, TrustedCallbackInterface
Expanded class hierarchy of QuizResultAnswerViewBuilder
File
- src/
View/ QuizResultAnswerViewBuilder.php, line 14
Namespace
Drupal\quiz\ViewView source
class QuizResultAnswerViewBuilder extends EntityViewBuilder {
/**
* Build the response content with feedback.
*
* @todo d8 putting this here, but needs to be somewhere else.
*/
public function alterBuild(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display, $view_mode) {
// Add the question display if configured.
$view_modes = \Drupal::service('entity_display.repository')
->getViewModes('quiz_question');
$view_builder = Drupal::entityTypeManager()
->getViewBuilder('quiz_question');
if ($entity
->canReview("quiz_question_view_full")) {
// Default view mode.
$build["quiz_question_view_full"] = $view_builder
->view($entity
->getQuizQuestion());
}
foreach (array_keys($view_modes) as $view_mode) {
// Custom view modes.
if ($entity
->canReview("quiz_question_view_" . $view_mode)) {
$build["quiz_question_view_" . $view_mode] = $view_builder
->view($entity
->getQuizQuestion(), $view_mode);
}
}
$rows = [];
$labels = [
'attempt' => t('Your answer'),
'choice' => t('Choice'),
'correct' => t('Correct?'),
'score' => t('Score'),
'answer_feedback' => t('Feedback'),
'solution' => t('Correct answer'),
];
Drupal::moduleHandler()
->alter('quiz_feedback_labels', $labels);
foreach ($entity
->getFeedbackValues() as $idx => $row) {
foreach ($labels as $reviewType => $label) {
if (isset($row[$reviewType]) && $entity
->canReview($reviewType)) {
// Add to table.
if (!is_null($row[$reviewType])) {
$rows[$idx][$reviewType]['data'] = $row[$reviewType];
// Add to render.
if ($display
->getComponent($reviewType)) {
$build[$reviewType] = [
'#title' => $label,
'#type' => 'item',
'#markup' => render($row[$reviewType]),
];
}
}
}
}
}
if ($entity
->isEvaluated()) {
$score = $entity
->getPoints();
if ($entity
->isCorrect()) {
$class = 'q-correct';
}
else {
$class = 'q-wrong';
}
}
else {
$score = t('?');
$class = 'q-waiting';
}
$quiz_result = QuizResult::load($entity
->get('result_id')
->getString());
if ($entity
->canReview('score') || $quiz_result
->access('update')) {
$build['score']['#theme'] = 'quiz_question_score';
$build['score']['#score'] = $score;
$build['score']['#max_score'] = $entity
->getMaxScore();
$build['score']['#class'] = $class;
}
if ($rows) {
$headers = array_intersect_key($labels, $rows[0]);
$build['table'] = [
'#type' => 'table',
'#header' => $headers,
'#rows' => $rows,
];
}
if ($entity
->canReview('question_feedback')) {
$account = $quiz_result
->get('uid')
->referencedEntities()[0];
$token_data = [
'global' => NULL,
'quiz_question' => $entity
->getQuizQuestion(),
'user' => $account,
];
$feedback = Drupal::token()
->replace($entity
->getQuizQuestion()
->get('feedback')
->first()
->getValue()['value'], $token_data);
$build['question_feedback']['#markup'] = check_markup($feedback, $entity
->getQuizQuestion()
->get('feedback')
->first()
->getValue()['format']);
}
// Question feedback is dynamic.
$build['#cache']['max-age'] = 0;
return $build;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
DependencySerializationTrait:: |
protected | property | ||
DependencySerializationTrait:: |
protected | property | ||
DependencySerializationTrait:: |
public | function | 2 | |
DependencySerializationTrait:: |
public | function | 2 | |
EntityHandlerBase:: |
protected | property | The module handler to invoke hooks on. | 5 |
EntityHandlerBase:: |
protected | function | Gets the module handler. | 5 |
EntityHandlerBase:: |
public | function | Sets the module handler for this handler. | |
EntityViewBuilder:: |
protected | property | The cache bin used to store the render cache. | |
EntityViewBuilder:: |
protected | property | The entity display repository. | |
EntityViewBuilder:: |
protected | property | The entity repository service. | |
EntityViewBuilder:: |
protected | property | Information about the entity type. | |
EntityViewBuilder:: |
protected | property | The type of entities for which this view builder is instantiated. | |
EntityViewBuilder:: |
protected | property | The language manager. | |
EntityViewBuilder:: |
protected | property | The EntityViewDisplay objects created for individual field rendering. | |
EntityViewBuilder:: |
protected | property | The theme registry. | |
EntityViewBuilder:: |
protected | function | Add contextual links. | |
EntityViewBuilder:: |
public | function | Builds an entity's view; augments entity defaults. | |
EntityViewBuilder:: |
public | function |
Builds the component fields and properties of a set of entities. Overrides EntityViewBuilderInterface:: |
7 |
EntityViewBuilder:: |
public | function | Builds multiple entities' views; augments entity defaults. | |
EntityViewBuilder:: |
public static | function |
Instantiates a new instance of this entity handler. Overrides EntityHandlerInterface:: |
3 |
EntityViewBuilder:: |
protected | function | Provides entity-specific defaults to the build process. | 4 |
EntityViewBuilder:: |
public | function |
The cache tag associated with this entity view builder. Overrides EntityViewBuilderInterface:: |
|
EntityViewBuilder:: |
protected | function | Gets an EntityViewDisplay for rendering an individual field. | |
EntityViewBuilder:: |
protected | function | Determines whether the view mode is cacheable. | |
EntityViewBuilder:: |
public | function |
Resets the entity render cache. Overrides EntityViewBuilderInterface:: |
|
EntityViewBuilder:: |
public static | function |
Lists the trusted callbacks provided by the implementing class. Overrides TrustedCallbackInterface:: |
2 |
EntityViewBuilder:: |
public | function |
Builds the render array for the provided entity. Overrides EntityViewBuilderInterface:: |
4 |
EntityViewBuilder:: |
public | function |
Builds a renderable array for the value of a single field in an entity. Overrides EntityViewBuilderInterface:: |
|
EntityViewBuilder:: |
public | function |
Builds a renderable array for a single field item. Overrides EntityViewBuilderInterface:: |
|
EntityViewBuilder:: |
public | function |
Builds the render array for the provided entities. Overrides EntityViewBuilderInterface:: |
4 |
EntityViewBuilder:: |
public | function | Constructs a new EntityViewBuilder. | 2 |
QuizResultAnswerViewBuilder:: |
public | function |
Build the response content with feedback. Overrides EntityViewBuilder:: |
|
StringTranslationTrait:: |
protected | property | The string translation service. | 4 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. | |
TrustedCallbackInterface:: |
constant | Untrusted callbacks throw exceptions. | ||
TrustedCallbackInterface:: |
constant | Untrusted callbacks trigger silenced E_USER_DEPRECATION errors. | ||
TrustedCallbackInterface:: |
constant | Untrusted callbacks trigger E_USER_WARNING errors. |