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();
}
}
}
