You are here

commerce_currency_resolver.install in Commerce Currency Resolver 8

Install file for commerce_currency_resolver.

File

commerce_currency_resolver.install
View source
<?php

/**
 * @file
 * Install file for commerce_currency_resolver.
 */
use CommerceGuys\Addressing\Country\CountryRepository;
use Drupal\commerce_exchanger\Entity\ExchangeRates;

/**
 * Implements hook_install().
 */
function commerce_currency_resolver_install() {

  // @see commerce_price_install().
  if (!\Drupal::isConfigSyncing()) {

    // Get default country and their currency.
    $default_country = \Drupal::config('system.date')
      ->get('country.default');
    $default_country = $default_country ?: 'US';
    $country_repository = new CountryRepository();
    $country = $country_repository
      ->get($default_country);
    $currency_code = $country
      ->getCurrencyCode();

    // Set initial default currency by default country.
    // User can change it later.
    \Drupal::service('config.factory')
      ->getEditable('commerce_currency_resolver.settings')
      ->set('currency_default', $currency_code)
      ->save();
  }
}

/**
 * Implements hook_uninstall().
 */
function commerce_currency_resolver_uninstall() {

  // Remove all stored states.
  \Drupal::state()
    ->deleteMultiple([
    'commerce_currency_resolver.last_update_time',
  ]);
}

/**
 * Fix issues with plugin discovery and using same plugin ID.
 */
function commerce_currency_resolver_update_8001() {

  // Set module weight to 10. We are extending some commerce stuff,
  // where this module should be after commerce_promotion.
  module_set_weight('commerce_currency_resolver', 10);
}

/**
 * Set back weight of the module to 0.
 *
 * @see https://www.drupal.org/project/commerce_currency_resolver/issues/3082160
 */
function commerce_currency_resolver_update_8002() {
  module_set_weight('commerce_currency_resolver', 0);
}

/**
 * Enable commerce_exchanger.
 *
 * @see https://www.drupal.org/project/commerce_currency_resolver/issues/3082160
 */
function commerce_currency_resolver_update_8003() {
  \Drupal::service('module_installer')
    ->install([
    'commerce_exchanger',
  ]);
}

/**
 * Upgrade path for commerce_exchanger.
 *
 * @see https://www.drupal.org/project/commerce_currency_resolver/issues/3082267
 */
function commerce_currency_resolver_update_8004() {

  // Default currency.
  $default_currency = \Drupal::configFactory()
    ->get('commerce_currency_resolver.settings')
    ->get('currency_default');

  // Get existing settings for exchange rates.
  $config = \Drupal::configFactory()
    ->get('commerce_currency_resolver.currency_conversion');

  // Provide some defaults.
  $plugin_id = 'manual';
  $label = 'Manual';
  $cron = 1;
  $cross_sync = 1;
  $api_key = '';
  $auth = '';
  $mode = 'live';
  if ($config) {
    $source = $config
      ->get('source');
    $cron = $config
      ->get('cron');
    $cross_sync = $config
      ->get('use_cross_sync');
    $api_key = $config
      ->get('api_key');
    $auth = $config
      ->get('auth');
    switch ($source) {
      case 'exchange_rate_bluesnap':
        $plugin_id = 'bluesnap';
        $label = 'BlueSnap';
        $default_currency = 'USD';
        if (!empty($config
          ->get('bluesnap'))) {
          $mode = $config
            ->get('bluesnap')['mode'] === 'production' ? 'live' : 'test';
          $auth = [
            'username' => $config
              ->get('bluesnap')['username'],
            'password' => $config
              ->get('bluesnap')['password'],
          ];
        }
        break;
      case 'exchange_rate_ecb':
        $plugin_id = 'ecb';
        $label = 'European Central Bank';
        $default_currency = 'EUR';
        break;
      case 'exchange_rate_fixer_paid':
      case 'exchange_rate_fixer':
        $plugin_id = 'fixer';
        $label = 'Fixer.io';
        break;
      default:
    }
  }
  $values = [
    'id' => $plugin_id,
    'label' => $label,
    'plugin' => $plugin_id,
  ];
  $values['configuration'] = [
    'cron' => $cron,
    'use_cross_sync' => $cross_sync,
    'demo_amount' => 100,
    'base_currency' => $default_currency,
    'mode' => $mode,
  ];
  if ($api_key) {
    $values['configuration']['api_key'] = $api_key;
  }
  if ($auth) {
    $values['configuration']['auth'] = $auth;
  }
  $values['configuration']['manual'] = $plugin_id === 'manual';

  // Create new exchange rates.
  $entity = ExchangeRates::create($values);
  $entity
    ->save();

  // Set new value to currency resolver.
  $settings = \Drupal::configFactory()
    ->getEditable('commerce_currency_resolver.settings');
  $settings
    ->set('currency_exchange_rates', $entity
    ->id());
  $settings
    ->save();

  // Delete now old configuration.
  // commerce_currency_resolver.currency_conversion.
  \Drupal::configFactory()
    ->getEditable('commerce_currency_resolver.currency_conversion')
    ->delete();
}

/**
 * Enable shipping submodule if needed.
 *
 * @see https://www.drupal.org/project/commerce_currency_resolver/issues/3111998
 */
function commerce_currency_resolver_update_8006() {
  if (\Drupal::service('module_handler')
    ->moduleExists('commerce_shipping')) {
    \Drupal::service('module_installer')
      ->install([
      'commerce_currency_resolver_shipping',
    ]);
  }
}

Functions

Namesort descending Description
commerce_currency_resolver_install Implements hook_install().
commerce_currency_resolver_uninstall Implements hook_uninstall().
commerce_currency_resolver_update_8001 Fix issues with plugin discovery and using same plugin ID.
commerce_currency_resolver_update_8002 Set back weight of the module to 0.
commerce_currency_resolver_update_8003 Enable commerce_exchanger.
commerce_currency_resolver_update_8004 Upgrade path for commerce_exchanger.
commerce_currency_resolver_update_8006 Enable shipping submodule if needed.