contacts_events-8.x-1.x-dev/src/EventSubscriber/TicketUserCancelConfirmationSubscriber.php
src/EventSubscriber/TicketUserCancelConfirmationSubscriber.php
<?php
namespace Drupal\contacts_events\EventSubscriber;
use Drupal\contacts\Event\UserCancelConfirmationEvent;
use Drupal\Core\Database\Connection;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* Event subscriber invoked on user cancel confirmation form.
*
* Provides additional information, confirmations and errors about the
* cancellation based on Contacts tickets.
*/
class TicketUserCancelConfirmationSubscriber implements EventSubscriberInterface {
use StringTranslationTrait;
/**
* The database connection for the Contacts tickets table.
*
* @var \Drupal\Core\Database\Connection
*/
protected $database;
/**
* TicketUserCancelConfirmationSubscriber constructor.
*
* @param \Drupal\Core\Database\Connection $database
* The database connection.
*/
public function __construct(Connection $database) {
$this->database = $database;
}
/**
* Invoked when a user cancel form is created.
*
* @param \Drupal\contacts\Event\UserCancelConfirmationEvent $event
* The event representing the user cancel confirmation.
*/
public function onCancelConfirm(UserCancelConfirmationEvent $event) {
$user = $event->getUser();
// Check if the user has any tickets.
$query = $this->database->select('contacts_ticket', 'ct');
$query->fields('ct', ['id']);
$query->condition('ct.contact', $user->id());
$user_bookings = $query->execute()->fetchAll();
if (count($user_bookings)) {
$error = $this->formatPlural(
count($user_bookings),
'%user has a ticket',
'%user has %count tickets',
['%count' => count($user_bookings), '%user' => $user->label()]
);
$event->addError($error);
}
}
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents() {
$events[UserCancelConfirmationEvent::NAME][] = ['onCancelConfirm'];
return $events;
}
}
