contacts_events-8.x-1.x-dev/modules/teams/src/Plugin/views/field/DbsStatus.php

modules/teams/src/Plugin/views/field/DbsStatus.php
<?php

namespace Drupal\contacts_events_teams\Plugin\views\field;

use Drupal\contacts_events_teams\Entity\TeamApplication;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\views\Plugin\views\field\FieldPluginBase;
use Drupal\views\ResultRow;

/**
 * A handler to provide a field that works out the DBS Status for a team app.
 *
 * @ingroup views_field_handlers
 *
 * @ViewsField("ce_teams_dbs_status")
 */
class DbsStatus extends FieldPluginBase {

  /**
   * {@inheritdoc}
   */
  public function render(ResultRow $values) {
    /** @var \Drupal\contacts_events_teams\Entity\TeamApplication $app */
    $app = $this->getEntity($values);
    if ($app && $app->getTeam() && $app->getTeam()->hasField('dbs_workforce') && $workforce = $app->getTeam()->get('dbs_workforce')->value) {
      return $this->getDbsStatus($app, $workforce);
    }
  }

  /**
   * Check DBS record for specific status information.
   *
   * @param \Drupal\contacts_events_teams\Entity\TeamApplication $app
   *   The team application.
   * @param string $workforce
   *   The workforce to check against.
   *
   * @return \Drupal\Core\StringTranslation\TranslatableMarkup
   *   The public status label for DBS.
   *
   * @todo Inject this somehow.
   *
   * @see \Drupal\contacts_events_teams\Controller\TeamApplicationController::getDbsStatus
   */
  private function getDbsStatus(TeamApplication $app, $workforce): TranslatableMarkup {
    /** @var \Drupal\contacts_dbs\DBSManager $dbs_manager */
    $dbs_manager = \Drupal::service('contacts_dbs.dbs_manager');
    $dbs_record = $dbs_manager->getDbs($app->getOwnerId(), $workforce);
    $dbs_status = $dbs_record ? $dbs_record->get('status')->value : NULL;

    switch ($dbs_status) {
      case 'letter_required':
      case 'letter_sent':
      case 'dbs_expired':
        return $this->t('DBS required');

      case 'disclosure_requested':
      case 'update_service_check_required':
      case 'disclosure_review':
        return $this->t('DBS in progress');

      case 'dbs_clear':
      case 'update_service_checked':
      case 'dbs_exception':
      case 'disclosure_accepted':
      case 'living_abroad':
        return $this->t('DBS clear');

      case 'dbs_not_clear':
        return $this->t('DBS not clear');

      default:
        return $this->t('DBS Error');
    }
  }

}

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

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