contacts_events-8.x-1.x-dev/modules/teams/src/EventSubscriber/DbsTeamApplicationStateSubscriber.php

modules/teams/src/EventSubscriber/DbsTeamApplicationStateSubscriber.php
<?php

namespace Drupal\contacts_events_teams\EventSubscriber;

use Drupal\contacts_dbs\DBSManager;
use Drupal\state_machine\Event\WorkflowTransitionEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
 * Event subscriber for handling team application state transitions.
 *
 * This event subscriber depends on the contacts_dbs module.
 *
 * @package Drupal\contacts_events\EventSubscriber
 */
class DbsTeamApplicationStateSubscriber implements EventSubscriberInterface {

  /**
   * The DBS manager service.
   *
   * @var \Drupal\contacts_dbs\DBSManager
   */
  protected $dbsManager;

  /**
   * Construct the team application state subscriber event subscriber.
   *
   * @param \Drupal\contacts_dbs\DBSManager $dbs_manager
   *   The price calculator.
   */
  public function __construct(DBSManager $dbs_manager) {
    $this->dbsManager = $dbs_manager;
  }

  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents() {
    // Start a DBS check when an application is submitted.
    $events['contacts_events_teams_applications.submit.post_transition'][] = ['startDbsCheck'];

    return $events;
  }

  /**
   * Triggered after the team application is moved to the submitted state.
   *
   * If the team being applied for requires DBS this will start a check for the
   * relevant workforce.
   *
   * @param \Drupal\state_machine\Event\WorkflowTransitionEvent $event
   *   The workflow transition event.
   */
  public function startDbsCheck(WorkflowTransitionEvent $event) {
    /** @var \Drupal\contacts_events_teams\Entity\TeamApplication $team_app */
    $team_app = $event->getEntity();
    $team = $team_app->getTeam();
    if (!$team || $team->get('dbs_workforce')->isEmpty()) {
      return;
    }

    $workforce = $team->get('dbs_workforce')->value;

    $event = $team->getEvent();
    $valid_at = $event->get('date')->start_date;

    $message = "Team application {$team_app->id()} for {$event->label()} submitted.";
    $this->dbsManager->start($team_app->getOwnerId(), $workforce, $valid_at, $message);
  }

}

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

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