tamper-8.x-1.x-dev/src/Plugin/Tamper/CountryToCode.php

src/Plugin/Tamper/CountryToCode.php
<?php

namespace Drupal\tamper\Plugin\Tamper;

use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\tamper\Exception\TamperException;
use Drupal\tamper\TamperBase;
use Drupal\tamper\TamperableItemInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Plugin implementation for converting country to ISO code.
 *
 * @Tamper(
 *   id = "country_to_code",
 *   label = @Translation("Country to ISO code"),
 *   description = @Translation("Converts this field from a country name string to the two character ISO 3166-1 alpha-2 code."),
 *   category = "Text"
 * )
 */
class CountryToCode extends TamperBase implements ContainerFactoryPluginInterface {

  /**
   * Holds the CountryManager object so we can grab the country list.
   *
   * @var \Drupal\Core\Locale\CountryManagerInterface
   */
  protected $countryManager;

  /**
   * {@inheritdoc}
   */
  public function tamper($data, ?TamperableItemInterface $item = NULL) {
    if (!is_string($data)) {
      throw new TamperException('Input should be a string.');
    }

    /**
     * Holds the list of countries in an array.
     * @static
     */
    static $countries = [];

    if (empty($countries)) {
      $countries = $this->countryManager->getList();
      foreach ($countries as $country_code => $country_name) {
        $countries[$country_code] = mb_strtolower((string) $country_name);
      }
      $countries = array_flip($countries);
    }

    // If it's already a valid country code, leave it alone.
    if (in_array($data, $countries)) {
      return $data;
    }

    // Trim whitespace, set to lowercase.
    $country = mb_strtolower(trim($data));
    if (isset($countries[$country])) {
      return $countries[$country];
    }
    else {
      throw new TamperException('Could not find country name ' . $country . ' in list of countries.');
    }
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    $instance = new static($configuration, $plugin_id, $plugin_definition, $configuration['source_definition']);
    $instance->setCountryManager($container->get('country_manager'));
    return $instance;
  }

  /**
   * Setter function for the CountryManagerInterface.
   *
   * @param object $country_manager
   *   The country manager used to grab country list.
   */
  public function setCountryManager($country_manager) {
    $this->countryManager = $country_manager;
  }

}

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

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