bat-8.x-1.x-dev/modules/bat_event/src/Util/EventManager.php

modules/bat_event/src/Util/EventManager.php
<?php

namespace Drupal\bat_event\Util;

use Drupal\Core\Database\Connection;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Logger\LoggerChannelFactoryInterface;
use Drupal\Core\Render\RendererInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * A Manager for BAT events.
 */
class EventManager {

  /**
   * The logger factory.
   *
   * @var \Drupal\Core\Logger\LoggerChannelFactoryInterface
   */
  protected $loggerFactory;

  /**
   * The entity type manager.
   *
   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
   */
  protected $entityTypeManager;

  /**
   * The database connection.
   *
   * @var \Drupal\Core\Database\Connection
   */
  protected $database;

  /**
   * The renderer.
   *
   * @var \Drupal\Core\Render\RendererInterface
   */
  protected $renderer;

  /**
   * Constructs a new Event object.
   *
   * @param \Drupal\Core\Logger\LoggerChannelFactoryInterface $logger_factory
   *   The logger factory.
   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
   *   The entity type manager.
   * @param \Drupal\Core\Database\Connection $database
   *   The database connection.
   * @param \Drupal\Core\Render\RendererInterface $renderer
   *   The renderer.
   */
  public function __construct(LoggerChannelFactoryInterface $logger_factory, EntityTypeManagerInterface $entity_type_manager, Connection $database, RendererInterface $renderer) {
    $this->loggerFactory = $logger_factory;
    $this->entityTypeManager = $entity_type_manager;
    $this->database = $database;
    $this->renderer = $renderer;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('logger.factory'),
      $container->get('entity_type.manager'),
      $container->get('database'),
      $container->get('renderer'),
    );
  }

  /**
   * Get a BAT event id from values.
   *
   * @param array $values
   *   An array of values, originally created by form API.
   *
   * @return array
   *   An array of useful data.
   */
  public function getEventByValues(array $values) {

    $start_date = new \DateTime($values['bat_start_date']);
    $end_date = new \DateTime($values['bat_end_date']);
    $entity_id = $values['entity_id'];
    $event_type = $values['event_type'];
    $field_name = $values['field_name'];

    $event = bat_event_create(['type' => $event_type]);
    $event->uid = $this->currentUser()->id();

    $event_dates = [
      'value' => $start_date->format('Y-m-d\TH:i:00'),
      'end_value' => $end_date->format('Y-m-d\TH:i:00'),
    ];
    $event->set('event_dates', $event_dates);

    $event_type_entity = bat_event_type_load($event_type);
    // Construct target entity reference field name using this
    // event type's target entity type.
    $target_field_name = 'event_' . $event_type_entity->getTargetEntityType() . '_reference';
    $event->set($target_field_name, $entity_id);

    $event->set($field_name, $values[$field_name]);
    $event->save();

    $data['unit'] = $this->entityTypeManager->getStorage($event_type_entity->getTargetEntityType())->load($entity_id);
    $data['elements'] = $event->{$field_name}->view(['label' => 'hidden']);
    $data['value'] = $value = $this->renderer->render($data['elements']);

    return $data;

  }

  /**
   * Delete a BAT event.
   *
   * @param array $values
   *   An array of values, originally created by form API.
   */
  public function deleteEvent(array $values) {
    $event->delete($event_id);
  }

  /**
   * Create a BAT event.
   *
   * Moved here from FullcalendarEventManagerForm as service,
   * to be consumed by more methods and modules.
   *
   * @param array $values
   *   An array of values, originally created by form API.
   *
   * @return array
   *   An array of useful data.
   */
  public function createEvent(array $values) {

    $start_date = new \DateTime($values['bat_start_date']);
    $end_date = new \DateTime($values['bat_end_date']);
    $entity_id = $values['entity_id'];
    $event_type = $values['event_type'];
    $field_name = $values['field_name'];

    $event = bat_event_create(['type' => $event_type]);
    $event->uid = $this->currentUser()->id();

    $event_dates = [
      'value' => $start_date->format('Y-m-d\TH:i:00'),
      'end_value' => $end_date->format('Y-m-d\TH:i:00'),
    ];
    $event->set('event_dates', $event_dates);

    $event_type_entity = bat_event_type_load($event_type);
    // Construct target entity reference field name using this
    // event type's target entity type.
    $target_field_name = 'event_' . $event_type_entity->getTargetEntityType() . '_reference';
    $event->set($target_field_name, $entity_id);

    $event->set($field_name, $values[$field_name]);
    $event->save();
    $data['event_id'] = $event->Id();
    $data['unit'] = $this->entityTypeManager->getStorage($event_type_entity->getTargetEntityType())->load($entity_id);
    $data['elements'] = $event->{$field_name}->view(['label' => 'hidden']);
    $data['value'] = $value = $this->renderer->render($data['elements']);

    return $data;

  }

  /**
   * Updat status to a given BAT event.
   *
   * Moved here from FullcalendarEventManagerForm as service,
   * to be consumed by more methods and modules.
   *
   * @param array $values
   *   An array of values, originally created by form API.
   *
   * @todo Coding.
   *   Code this method when the use case arises.
   */
  public function updateStatus(array $values) {}

}

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

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