learnosity-1.0.x-dev/src/Plugin/Field/FieldFormatter/LearnosityAssessmentPlayerFormatter.php

src/Plugin/Field/FieldFormatter/LearnosityAssessmentPlayerFormatter.php
<?php

namespace Drupal\learnosity\Plugin\Field\FieldFormatter;

use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;

/**
 * Plugin implementation of the 'entity reference rendered entity' formatter.
 *
 * @FieldFormatter(
 *   id = "learnosity_assessment_player",
 *   label = @Translation("Default"),
 *   description = @Translation("Display the referenced entities rendered by entity_view()."),
 *   field_types = {
 *     "learnosity_activity",
 *   }
 * )
 */
class LearnosityAssessmentPlayerFormatter extends LearnosityActivityFormatterBase implements ContainerFactoryPluginInterface {

  /**
   * {@inheritdoc}
   */
  public static function defaultSettings() {
    return [
      'player' => '',
    ] + parent::defaultSettings();
  }

  /**
   * {@inheritdoc}
   */
  public function settingsForm(array $form, FormStateInterface $form_state) {
    $form = parent::settingsForm($form, $form_state);

    $players = $this->entityTypeManager->getStorage('learnosity_activity_player')->loadMultiple();
    if (!empty($players)) {
      $options = [];
      foreach ($players as $player) {
        $options[$player->id()] = $player->label();
      }

      $form['player'] = [
        '#type' => 'select',
        '#title' => $this->t('Assessment player'),
        '#options' => $options,
        '#default_value' => $this->getSetting('player'),
        '#empty_option' => $this->t('Default'),
        '#description' => $this->t('Choose which player you want to use with this assessment.'),
      ];
    }
    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function settingsSummary() {
    $summary = [];

    $player = $this->t('Default');
    $entity = $this->entityTypeManager->getStorage('learnosity_activity_player')->load($this->getSetting('player'));
    if (!empty($entity)) {
      $player = $entity->label();
    }

    $summary[] = $this->t('Player: @player', [
      '@player' => $player,
    ]);

    return $summary;
  }

  /**
   * {@inheritdoc}
   */
  public function viewElements(FieldItemListInterface $items, $langcode) {
    $elements = [];
    $host_entity = $items->getEntity();
    $user = $this->entityTypeManager->getStorage('user')->load(\Drupal::currentUser()->id());
    $mappingsHandler = \Drupal::service('learnosity.mappings_handler');

    foreach ($items as $delta => $item) {
      $view_value = $this->viewValue($item);
      $activity = $this->getActivityEntity($item);
      $data = $activity->getData(TRUE);

      // Fetch the learnosity activity player entity from the field settings.
      $entity_type = $this->entityTypeManager->getStorage('learnosity_activity_player')->load($this->getSetting('player'));
      if (!empty($entity_type)) {
        $config = $entity_type->getConfig(TRUE);
        $data['config'] = $config;
      }

      $elements[$delta] = [
        '#type' => 'learnosity_assessment_item',
        '#activity' => $activity,
        '#activity_template_id' => $view_value,
        '#activity_id' => $mappingsHandler->get($host_entity, 'activity_id'),
        '#name' => $mappingsHandler->get($host_entity, 'name'),
        '#user_id' => $mappingsHandler->get($user, 'id'),
        '#context' => [
          'entity' => $items->getEntity(),
          'activity_id' => $activity->id(),
          'user_id' => \Drupal::currentUser()->id(),
          'entity_type' => $items->getEntity()->getEntityTypeId(),
          'entity_id' => $items->getEntity()->id(),
          'langcode' => $langcode,
          'view_mode' => $this->viewMode,
        ],
      ];

      // If any configuration values are provided on the entity then pass
      // those in.
      if (isset($data['config'])) {
        $elements[$delta]['#config'] = $data['config'];
      }
      // Otherwise rely on the default element values.
      // Note that we grabbing those default values and re-applying them
      // because in this case we need to pass a redirect URL which needs to be
      // passed during runtime.
      else {
        $elementInfoManager = \Drupal::service('plugin.manager.element_info');
        $info = $elementInfoManager->getInfo('learnosity_assessment_item');
        $elements[$delta] = array_merge($info, $elements[$delta]);
      }

      // By default, always redirect back to this entity when submitted.
      // @todo: Make this configurable (Redirect vs AJAX).
      // See test:finished:submit in learnosity.init.js.
      if (!isset($elements[$delta]['#config']['configuration']['onsubmit_redirect_url'])) {
        $elements[$delta]['#config']['configuration']['onsubmit_redirect_url'] = $items->getEntity()->toUrl();
      }

    }

    return $elements;
  }

}

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

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