commerce_signifyd-1.0.x-dev/commerce_signifyd.install

commerce_signifyd.install
<?php

/**
 * @file
 * Contains install and update functions for Signifyd.
 */

use Drupal\commerce_signifyd\SignifydClientInterface;
use Drupal\Component\Serialization\Json;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\Site\Settings;

/**
 * Increase field from int to big int.
 *
 * Implements hook_update_N().
 */
function commerce_signifyd_update_8201(&$sandbox) {
  $entity_definition_update_manager = \Drupal::entityDefinitionUpdateManager();
  $field = $entity_definition_update_manager->getFieldStorageDefinition('investigation_id', 'signifyd_case');
  $field->setSetting('size', 'big');
  $entity_definition_update_manager->updateFieldStorageDefinition($field);

  $database = \Drupal::database();
  $database->schema()->changeField('signifyd_case', 'investigation_id', 'investigation_id', [
    'type' => 'int',
    'size' => 'big',
  ]);
}

/**
 * Add decision field.
 *
 * Implements hook_update_N().
 */
function commerce_signifyd_update_8202(&$sandbox) {
  $entity_definition_update_manager = \Drupal::entityDefinitionUpdateManager();
  $storage_definition = BaseFieldDefinition::create('string')
    ->setLabel(t('Decision'))
    ->setDescription(t('The Signifyd decision'));
  $entity_definition_update_manager->installFieldStorageDefinition('decision', 'signifyd_case', 'commerce_signifyd', $storage_definition);
}

/**
 * Install Signifyd Team entity type.
 *
 * Implements hook_update_N().
 */
function commerce_signifyd_update_8204(&$sandbox) {
  $signifyd_team = \Drupal::entityTypeManager()->getDefinition('signifyd_team');
  $entity_definition_update_manager = \Drupal::entityDefinitionUpdateManager();
  $entity_definition_update_manager->installEntityType($signifyd_team);
}

/**
 * Add team_id field.
 *
 * Implements hook_update_N().
 */
function commerce_signifyd_update_8205(&$sandbox) {
  $entity_definition_update_manager = \Drupal::entityDefinitionUpdateManager();
  $storage_definition = BaseFieldDefinition::create('entity_reference')
    ->setLabel(t('Signifyd team'))
    ->setDescription(t('The team for the case.'))
    ->setSetting('target_type', 'signifyd_team')
    ->setSetting('handler', 'default');

  $entity_definition_update_manager->installFieldStorageDefinition('team_id', 'signifyd_case', 'commerce_signifyd', $storage_definition);
}

/**
 * Migrate from using single api key to new Signifyd team entity.
 *
 * Implements hook_update_N().
 */
function commerce_signifyd_update_8206(&$sandbox) {
  // In some cases where the entity is already created manually
  // we want to skip this update.
  if (!Settings::get('commerce_signifyd_skip_update_8206', TRUE)) {
    $config = \Drupal::configFactory()->getEditable('commerce_signifyd.settings');

    // If we have webhooks set, we can pull existing team id
    // by webhook data. And create default Signifyd team
    // with reassigning existing cases to proper team.
    $api_key = $config->get('api_key');
    $apiToken = base64_encode($api_key);

    $values = [
      'headers' => [
        'Content-Type' => 'application/json',
        'Authorization' => 'Basic ' . $apiToken,
      ],
    ];

    $webhooks = [];
    try {
      $request = \Drupal::httpClient()->request('GET', SignifydClientInterface::SIGNIFYD_API_URL . 'teams/webhooks', $values);
      $webhooks = Json::decode($request->getBody());
    }
    catch (\Exception) {
      // Do nothing.
    }

    if ($webhooks) {
      $webhook = end($webhooks);
      $entity_storage = \Drupal::entityTypeManager()->getStorage('signifyd_team');

      // Create signifyd team.
      $signifyd_team = $entity_storage->create([
        'id' => 'default',
        'label' => $webhook['team']['teamName'],
        'status' => TRUE,
        'api_key' => $api_key,
        'team_id' => $webhook['team']['teamId'],
      ]);

      $signifyd_team->save();

      $config->set('team', 'default');
      $config->save();

      // Update existing case records to assign proper team.
      \Drupal::database()->update('signifyd_case')->fields(['team_id' => 'default'])->isNull('team_id')->execute();
    }
  }
}

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

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