commerce_square-8.x-1.x-dev/commerce_square.install

commerce_square.install
<?php

/**
 * @file
 * Contains install and update functions for Commerce Square.
 */

use Drupal\Core\Url;
use Square\Environment;
use Square\Exceptions\ApiException;

/**
 * @file
 * Provides install and update hooks for Commerce Square.
 */

/**
 * Implements hook_requirements().
 */
function commerce_square_requirements($phase) {
  $requirements = [];
  if ($phase == 'install') {
    if (!class_exists('\Square\SquareClient')) {
      $requirements['commerce_square_library'] = [
        'description' => t('Commerce Square requires the square/square library.'),
        'severity' => REQUIREMENT_ERROR,
      ];
    }
  }
  elseif ($phase === 'update') {
    $state = \Drupal::state();
    if ($state->get('commerce_square.production_refresh_token') === NULL) {
      $request = \Drupal::request();
      $try_again_url = Url::fromUri($request->getUriForPath(''))->setOptions(['query' => ['continue' => 1]])->toString(TRUE)->getGeneratedUrl();
      $requirements['commerce_square_authentication'] = [
        'title' => t('Commerce Square Connect'),
        'description' => t('<p>In the <a href="https://connect.squareup.com/apps">Square Developer Portal</a> make sure your application is on Connect API version 2019-03-13 or later.</p><p>Once you have updated your application, you may <a href=":url">click here to continue.</a></p>', [
          ':url' => $try_again_url,
        ]),
        'severity' => REQUIREMENT_WARNING,
      ];
    }
  }
  elseif ($phase === 'runtime') {
    $connect = \Drupal::getContainer()->get('commerce_square.connect');
    $client = $connect->getClient(Environment::PRODUCTION);

    $success = TRUE;
    try {
      $locations_api = $client->getLocationsApi();
      $api_response = $locations_api->listLocations();

      if ($api_response->isError()) {
        $success = FALSE;
      }
    }
    catch (ApiException $e) {
      $success = FALSE;
    }

    if ($success) {
      $requirements['commerce_square_authentication'] = [
        'title' => t('Commerce Square Connect'),
        'description' => t('Square Connect OAuth is connected.'),
        'severity' => REQUIREMENT_OK,
      ];
    }
    else {
      $requirements['commerce_square_authentication'] = [
        'title' => t('Commerce Square Connect'),
        'description' => t('Square Connect OAuth access token is not valid. Please reconnect by submitting the <a href=":url">Square settings form</a>.', [
          ':url' => Url::fromRoute('commerce_square.settings')->toString(),
        ]),
        'severity' => REQUIREMENT_ERROR,
      ];
    }
  }

  return $requirements;
}

/**
 * Implements hook_uninstall().
 */
function commerce_square_uninstall() {
  $state = \Drupal::state();
  $state->deleteMultiple([
    'commerce_square.production_access_token',
    'commerce_square.production_access_token_expiry',
    'commerce_square.production_refresh_token',
  ]);
}

/**
 * Migrates gateway settings into new configuration object.
 */
function commerce_square_update_8001() {
  $config_factory = \Drupal::configFactory();
  $gateway_storage = \Drupal::entityTypeManager()->getStorage('commerce_payment_gateway');
  /** @var \Drupal\commerce_payment\Entity\PaymentGatewayInterface[] $gateways */
  $gateways = $gateway_storage->loadByProperties(['plugin' => 'square']);
  foreach ($gateways as $gateway) {
    $configuration = $gateway->getPlugin()->getConfiguration();

    $config = $config_factory->getEditable('commerce_square.settings');
    $config
      ->set('app_name', $configuration['app_name'])
      ->set('app_secret', $configuration['app_secret'])
      ->set('sandbox_app_id', $configuration['test_app_id'])
      ->set('sandbox_access_token', $configuration['test_access_token'])
      ->set('production_app_id', $configuration['live_app_id'])
      ->set('production_access_token', $configuration['live_access_token'])
      ->set('production_access_token_expiry', $configuration['live_access_token_expiry']);
    $config->save();

    unset($configuration['app_name']);
    unset($configuration['app_secret']);
    unset($configuration['test_app_id']);
    unset($configuration['test_access_token']);
    unset($configuration['live_app_id']);
    unset($configuration['live_access_token']);
    unset($configuration['live_access_token_expiry']);
  }
}

/**
 * Use site state for production access token and expiration time.
 */
function commerce_square_update_8002() {
  $config_factory = \Drupal::configFactory();
  $state = \Drupal::state();
  $config = $config_factory->getEditable('commerce_square.settings');
  $state->set('commerce_square.production_access_token', $config->get('production_access_token'));
  $state->set('commerce_square.production_access_token_expiry', $config->get('production_access_token_expiry'));
  $config->clear('production_access_token');
  $config->clear('production_access_token_expiry');
  $config->save();
}

/**
 * Disables credit card icon settings on existing payment gateways.
 */
function commerce_square_update_8003() {
  $payment_gateways = \Drupal::entityTypeManager()
    ->getStorage('commerce_payment_gateway')
    ->loadMultiple();

  foreach ($payment_gateways as $payment_gateway) {
    if ($payment_gateway->getPluginId() == 'square') {
      $configuration = $payment_gateway->getPluginConfiguration();
      $configuration['enable_credit_card_icons'] = FALSE;
      $payment_gateway->setPluginConfiguration($configuration);
      $payment_gateway->save();
    }
  }
}

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

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