bee_hotel-1.x-dev/src/BeeHotelGuestMessageTokens.php

src/BeeHotelGuestMessageTokens.php
<?php

namespace Drupal\bee_hotel;

use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Yaml\Yaml;
use Drupal\Core\File\FileSystemInterface;

/**
 * Provides route responses for BeeHotel module.
 */
class BeeHotelGuestMessageTokens {

  use StringTranslationTrait;

  /**
   * The module handler.
   *
   * @var \Drupal\Core\Extension\ModuleHandlerInterface
   */
  protected $moduleHandler;

  /**
   * The file system service.
   *
   * @var \Drupal\Core\File\FileSystemInterface
   */
  protected $fileSystem;

  /**
   * The Hooks container.
   *
   * @var \Drupal\bee_hotel\BeeHotelGuestMessageHooks
   */
  protected $beeHotelGuestMessageHooks;

  /**
   * Constructs a new TokensReader object.
   *
   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
   *   The module handler.
   * @param \Drupal\Core\File\FileSystemInterface $file_system
   *   The file system service.
   * @param \Drupal\bee_hotel\BeeHotelGuestMessageHooks $bee_hotel_guest_message_hooks
   *   The guest message hook container.
   */
  public function __construct(ModuleHandlerInterface $module_handler, FileSystemInterface $file_system, BeeHotelGuestMessageHooks $bee_hotel_guest_message_hooks) {
    $this->moduleHandler = $module_handler;
    $this->fileSystem = $file_system;
    $this->beeHotelGuestMessageHooks = $bee_hotel_guest_message_hooks;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('module_handler'),
      $container->get('file_system'),
      $container->get('beehotel.guest_message_hooks'),
    );
  }

  /**
   * Tokens list with schema.
   *
   * Get Tokens.
   *
   * @param object $commerce_order
   *   (mandatory) The commer order we're comnucating for.
   *
   *   Every token is an item with defined key => value pairs.
   *
   *   An associative array containing:
   *   - description: string describing the token.
   *   - entiy: where into value are fund.
   *   - field: entity field
   *   - hook: after basic resolution of value, hook is needed.
   *   - property: field property
   *   - value: default value.
   *
   * @return array
   *   An array of tokens with values
   */
  public function get($commerce_order) {

    $d = [];
    $d['commerce_order'] = $commerce_order;

    // Load YML tokens.
    $d['tokens'] = $this->readTokens();

    foreach ($d['tokens'] as $id => $token) {

      if (isset($token['#value']['value']) && $token['#value']['value'] != NULL) {
        $d['tokens'][$token['#value']['id']]['value'] = $token['#value']['value'];
        continue;
      }

      // D. Assign value from standard field.
      $tmp = $token['#value']['settings']['property'];
      $d['tokens'][$token['#value']['id']]['value'] = $d['commerce_order']->get($token['#value']['settings']['field'])->$tmp;

      // Z. HOOKS.
      // Hook overriding.
      if (isset($token['#value']['settings']['hook']) && $token['#value']['settings']['hook'] == TRUE) {
        $d['tokens'][$token['#value']['id']]['value'] = $this
          ->beeHotelGuestMessageHooks
          ->main($token['#value']['id'], $token, $d);
      }

      // Tokens from top level fields are ready to be formatted and delivered.
      if (!is_object($d['tokens'][$token['#value']['id']]['value']) && !isset($token['#value']['settings']['hook'])) {
        if ($token['#value']['settings']['property'] == "number") {
          $d['tokens'][$token['#value']['id']]['value'] = bee_hotel_number_format((float) $d['tokens'][$token['#value']['id']]['value']);
        }
      }

      if ($token['#value']['id'] == "balance_cash_currencies") {
      }
    }

    return $d['tokens'];

  }

  /**
   * Read Tokens.
   *
   * Read token YML file from directory and
   * return them as array.
   *
   * return array
   */
  public function readTokens() {

    $module_path = $this->moduleHandler->getModule('bee_hotel')->getPath();
    $yaml_directory = $module_path . '/config/guest_messages';

    $files = $this->fileSystem->scanDirectory($yaml_directory, '/\.yml$/');

    if (empty($files)) {
      $build['#markup'] = $this->t('No YAML files found in @path.', ['@path' => $yaml_directory]);
      return $build;
    }

    $output = [];

    foreach ($files as $file) {

      $file_path = $file->uri;
      try {
        // Read the file content.
        $yaml_content = file_get_contents($file_path);
        // Parse the YAML content.
        $data = Yaml::parse($yaml_content);

        $output[] = [
          '#type' => 'html_tag',
          '#tag' => 'pre',
          '#value' => $data,
        ];

      }
      catch (\Exception $e) {
        $output[] = [
          '#type' => 'html_tag',
          '#tag' => 'p',
          '#value' => $this->t('Error parsing file @filename: @message', [
            '@filename' => $file->name,
            '@message' => $e->getMessage(),
          ]),
        ];
        $this->getLogger('my_yaml_reader')->error('Error parsing YAML file @filename: @message', [
          '@filename' => $file->name,
          '@message' => $e->getMessage(),
        ]);
      }
    }

    return $output;

  }

  /**
   * Consume token contributed module.
   */
  private function getTokenFromTokenModule($beehotel_token, $options) {
    $d['tokens'] = \Drupal::service('token.tree_builder')->buildRenderable([
      'node',
      'user',
      'commerce_order',
    ]);
    return $token;
  }

  /**
   * Tokens list with schema.
   *
   * Every token is an item with defined key => value pairs.
   *
   *  An associative array containing:
   *  - description: string describing the token.
   *  - entiy: where into value are fund.
   *  - field: entity field
   *  - hook: after basic resolution of value, hook is needed.
   *  - property: field property
   *  - value: default value.
   */
  public function guestMessageTokensSchema() {
    // Moved as YML.
  }

}

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

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