quiz-6.0.0-alpha4/src/Entity/QuizResultAnswer.php

src/Entity/QuizResultAnswer.php
<?php

namespace Drupal\quiz\Entity;

use Drupal\Core\Entity\ContentEntityBase;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\quiz\QuizAnswerInterface;

/**
 * Defines the Quiz entity class.
 *
 * @ContentEntityType(
 *   id = "quiz_result_answer",
 *   label = @Translation("Quiz result answer"),
 *   label_collection = @Translation("Quiz result answer"),
 *   label_singular = @Translation("quiz result answer"),
 *   label_plural = @Translation("quiz result answers"),
 *   label_count = @PluralTranslation(
 *     singular = "@count quiz result answer",
 *     plural = "@count quiz result answers",
 *   ),
 *   bundle_label = @Translation("Quiz result answer type"),
 *   bundle_entity_type = "quiz_result_answer_type",
 *   admin_permission = "administer quiz_result_answer",
 *   base_table = "quiz_result_answer",
 *   fieldable = TRUE,
 *   field_ui_base_route = "entity.quiz_result_answer_type.edit_form",
 *   show_revision_ui = FALSE,
 *   entity_keys = {
 *     "id" = "result_answer_id",
 *     "bundle" = "type",
 *     "uuid" = "uuid",
 *   },
 *   handlers = {
 *     "view_builder" = "Drupal\quiz\View\QuizResultAnswerViewBuilder",
 *     "access" = "Drupal\quiz\Access\QuizResultAnswerAccessControlHandler",
 *     "permission_provider" = "Drupal\entity\UncacheableEntityPermissionProvider",
 *     "route_provider" = {
 *       "html" = "Drupal\Core\Entity\Routing\AdminHtmlRouteProvider",
 *     },
 *    "form" = {
 *       "default" = "Drupal\Core\Entity\ContentEntityForm",
 *       "delete" = "Drupal\Core\Entity\EntityDeleteForm",
 *     },
 *     "views_data" = "Drupal\entity\EntityViewsData",
 *   },
 *   links = {
 *     "canonical" = "/quiz/{quiz}/result/{quiz_result}/answer/{quiz_result_answer}",
 *   }
 * )
 */
class QuizResultAnswer extends ContentEntityBase implements QuizAnswerInterface {

  use QuizResultAnswerEntityTrait;

  /**
   * {@inheritdoc}
   */
  public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
    $fields = parent::baseFieldDefinitions($entity_type);

    $fields['result_id'] = BaseFieldDefinition::create('entity_reference')
      ->setSetting('target_type', 'quiz_result')
      ->setLabel('Quiz result ID');

    $fields['type'] = BaseFieldDefinition::create('string')
      ->setLabel('Answer type');

    $fields['question_id'] = BaseFieldDefinition::create('entity_reference')
      ->setSetting('target_type', 'quiz_question')
      ->setLabel('Question ID');

    $fields['question_vid'] = BaseFieldDefinition::create('integer')
      ->setLabel('Question revision ID');

    $fields['tid'] = BaseFieldDefinition::create('entity_reference')
      ->setLabel('Taxonomy term');

    $fields['is_correct'] = BaseFieldDefinition::create('boolean')
      ->setLabel('Correct');

    $fields['is_skipped'] = BaseFieldDefinition::create('boolean')
      ->setLabel('Skipped');

    $fields['points_awarded'] = BaseFieldDefinition::create('integer')
      ->setLabel('Scaled points awarded');

    $fields['answer_timestamp'] = BaseFieldDefinition::create('timestamp')
      ->setLabel('Date answered');

    $fields['number'] = BaseFieldDefinition::create('integer')
      ->setLabel('Question number');

    $fields['display_number'] = BaseFieldDefinition::create('integer')
      ->setLabel('Display number');

    $fields['is_doubtful'] = BaseFieldDefinition::create('boolean')
      ->setLabel('Doubtful');

    $fields['created'] = BaseFieldDefinition::create('created')
      ->setLabel('Created');

    $fields['changed'] = BaseFieldDefinition::create('changed')
      ->setLabel('Changed');

    $fields['is_evaluated'] = BaseFieldDefinition::create('boolean')
      ->setDefaultValue(0)
      ->setLabel('Evaluated');

    $fields['answer_feedback'] = BaseFieldDefinition::create('text_long')
      ->setLabel(t('Answer feedback'))
      ->setDisplayConfigurable('form', TRUE)
      ->setDisplayConfigurable('view', TRUE)
      ->setDisplayOptions('form', [
        'type' => 'text_textarea',
      ]);

    return $fields;
  }

  /**
   * Get the next question.
   *
   * @return QuizResultAnswer|null
   *   The next question in the layout or NULL.
   */
  public function getNext(): ?QuizResultAnswer {
    $result = $this->getQuizResult();
    foreach ($result->getLayout() as $idx => $qra) {
      if ($qra->id() == $this->id()) {
        if (isset($result->getLayout()[$idx + 1])) {
          return $result->getLayout()[$idx + 1];
        }
      }
    }
    return NULL;
  }

  /**
   * Get the previous question.
   *
   * @return QuizResultAnswer|null
   *   The next question in the layout or NULL.
   */
  public function getPrevious(): ?QuizResultAnswer {
    $result = $this->getQuizResult();
    foreach ($result->getLayout() as $idx => $qra) {
      if ($qra->id() == $this->id()) {
        if (isset($result->getLayout()[$idx - 1])) {
          return $result->getLayout()[$idx - 1];
        }
      }
    }
    return NULL;
  }

  /**
   * {@inheritdoc}
   *
   * Quiz result answers are never viewed outside a Quiz result, so we
   * enforce that a Quiz result route parameter is added.
   */
  public function toUrl($rel = 'canonical', array $options = []) {
    $url = parent::toUrl($rel, $options);
    $url->setRouteParameter('quiz', $this->getQuizResult()->getQuiz()->id());
    $url->setRouteParameter('quiz_result', $this->getQuizResult()->id());
    return $url;
  }

  /**
   * {@inheritdoc}
   */
  public function score(array $values): ?int {
    return NULL;
  }

  /**
   * {@inheritdoc}
   */
  public function getResponse() {
    return NULL;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc