contacts_events-8.x-1.x-dev/src/EventSubscriber/CreateIndividualProfileOnTicketAcquisition.php

src/EventSubscriber/CreateIndividualProfileOnTicketAcquisition.php
<?php

namespace Drupal\contacts_events\EventSubscriber;

use Drupal\contacts_events\Event\TicketContactAcquisitionEvent;
use Drupal\profile\Entity\Profile;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
 * Event subscriber invoked on acquiring a contact during ticket creation.
 *
 * Handles setting up the individual profile on newly created users.
 *
 * @package Drupal\contacts_events\EventSubscriber
 */
class CreateIndividualProfileOnTicketAcquisition implements EventSubscriberInterface {

  /**
   * Invoked after an acquisition has ocurred after a ticket has been added.
   *
   * @param \Drupal\contacts_events\Event\TicketContactAcquisitionEvent $event
   *   The event representing the acquisition.
   */
  public function onAcquisition(TicketContactAcquisitionEvent $event) {
    // No action if ticket has no email.
    if (empty($event->ticket->get('email')->value)) {
      return;
    }

    /** @var \Drupal\profile\Entity\Profile $profile */
    $profile = $event->user->profile_crm_indiv->entity
      ?? Profile::create(['type' => 'crm_indiv', 'uid' => $event->user->id()]);

    $is_create = $event->acquisitionMethod == 'create';
    $should_save_profile = FALSE;

    if ($is_create || empty($event->user->getEmail())) {
      $event->user->setEmail($event->ticket->get('email')->value);
      $event->user->addRole('crm_indiv');
      $event->entitiesToSave[] = $event->user;
    }

    if ($profile->hasField('crm_dob')) {
      if ($is_create || $profile->get('crm_dob')->isEmpty()) {
        $profile->set('crm_dob', $event->ticket->get('date_of_birth')->getValue());
        $should_save_profile = TRUE;
      }
    }

    if ($profile->hasField('crm_name')) {
      if ($is_create || $profile->get('crm_name')->isEmpty()) {
        $profile->set('crm_name', $event->ticket->get('name')->getValue());
        $should_save_profile = TRUE;
      }
    }

    if ($should_save_profile) {
      $event->entitiesToSave[] = $profile;
    }
  }

  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents() {
    $events[TicketContactAcquisitionEvent::NAME][] = ['onAcquisition'];
    return $events;
  }

}

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

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