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