You are here

class WSConnectorGraphQL in Web Service Data 8

Same name and namespace in other branches
  1. 2.0.x src/Plugin/WSConnector/WSConnectorGraphQL.php \Drupal\wsdata\Plugin\WSConnector\WSConnectorGraphQL

HTTP Connector.

Plugin annotation


@WSConnector(
  id = "WSConnectorGraphQL",
  label = @Translation("GraphQL Connector", context = "WSConnector"),
)

Hierarchy

Expanded class hierarchy of WSConnectorGraphQL

File

src/Plugin/WSConnector/WSConnectorGraphQL.php, line 19

Namespace

Drupal\wsdata\Plugin\WSConnector
View source
class WSConnectorGraphQL extends WSConnectorSimpleHTTP {

  /**
   * {@inheritdoc}
   */
  public function __construct(array $configuration, $plugin_id, $plugin_definition, Client $http_client, Token $token, LanguageManagerInterface $language_manager) {
    parent::__construct($configuration, $plugin_id, $plugin_definition, $http_client, $token, $language_manager);
    $this->http_client = $http_client;
    $this->token = $token;
    $this->language_manager = $language_manager;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    return new static($configuration, $plugin_id, $plugin_definition, $container
      ->get('http_client'), $container
      ->get('token'), $container
      ->get('language_manager'));
  }

  /**
   * {@inheritdoc}
   */
  public function getMethods() {
    return [
      'post',
    ];
  }

  /**
   * {@inheritdoc}
   */
  public function getOptions() {
    return [
      'path' => '',
      'method' => [],
      'headers' => [],
      'query' => '',
      'operationName' => '',
      'variables' => [],
    ];
  }

  /**
   * {@inheritdoc}
   */
  public function getReplacements(array $options) {
    $replacements = array_unique($this
      ->findTokens($this->endpoint . '/' . $options['path']) + $this
      ->findTokens($options['query']) + $this
      ->findTokens(json_encode($options['variables'])));
    unset($replacements[array_search('LANGUAGE', $replacements)]);
    return $replacements;
  }

  /**
   * {@inheritdoc}
   */
  public function getOptionsForm($options = []) {
    $form = parent::getOptionsForm($options);
    $form['query'] = [
      '#type' => 'textarea',
      '#title' => $this
        ->t('GraphQL Query'),
      '#required' => TRUE,
    ];
    $form['operationName'] = [
      '#type' => 'textfield',
      '#title' => $this
        ->t('Operation Name (optional)'),
    ];
    $form['variables'] = [
      '#type' => 'textarea',
      '#title' => $this
        ->t('GraphQL Variables (optional)'),
    ];
    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function call($options, $method, $replacements = [], $data = NULL, array $tokens = []) {
    $langcode = $options['langcode'] ?? $this->language_manager
      ->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)
      ->getId();
    $replacements['LANGUAGE'] = strtoupper($langcode);
    $contenttype = FALSE;
    if (!isset($options['headers'])) {
      $options['headers'] = [];
    }
    foreach ($options['headers'] as $key => $header) {
      if (isset($header['key_' . $key]) and strtolower($header['key_' . $key]) == strtolower('Content-Type')) {
        $contenttype = TRUE;
      }
    }
    if (!$contenttype) {
      $i = count($options['headers']);
      $options['headers'][$i] = [
        'key_' . $i => 'Content-Type',
        'value_' . $i => 'application/json',
      ];
    }
    $graphql = [
      'query' => $this
        ->applyReplacements($options['query'], $replacements, $tokens),
      'operationName' => !empty($options['operationName']) ? $options['operationName'] : NULL,
      'variables' => json_decode($options['variables']),
    ];
    unset($options['query']);
    unset($options['operationName']);
    unset($options['variables']);
    $data = json_encode($graphql);
    return parent::call($options, $method, $replacements, $data, $tokens);
  }

  /**
   * {@inheritdoc}
   */
  public function getCache() {
    return $this->language_manager
      ->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)
      ->getId();
  }

}

Members

Namesort descending Modifiers Type Description Overrides
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 3
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
WSConnectorBase::$cacheDefaultOverride protected property
WSConnectorBase::$cacheDefaultTime protected property
WSConnectorBase::$endpoint protected property
WSConnectorBase::$error protected property
WSConnectorBase::$expires protected property
WSConnectorBase::$languagePlugins protected property
WSConnectorBase::$staleCache protected property
WSConnectorBase::$status protected property
WSConnectorBase::applyReplacements protected function Internal function for applying replacements.
WSConnectorBase::clearError protected function Clear current error.
WSConnectorBase::defaultCache public function Figure out the overrides for cache times.
WSConnectorBase::expires public function Get the expired time for caching.
WSConnectorBase::findTokens protected function Internal function for finding tokens.
WSConnectorBase::getEndpoint public function Getter for the endpoint.
WSConnectorBase::getError public function Return the last error the connector received.
WSConnectorBase::getStatus public function Return the status of the last call.
WSConnectorBase::getSupportedLanguagePlugins public function Return the list of supported language handling plugins.
WSConnectorBase::isDegraded public function Whether the connector is in a dead state and shouldn't be called.
WSConnectorBase::setEndpoint public function Setter for the endpoint.
WSConnectorBase::setError protected function Setter for the connector errors.
WSConnectorGraphQL::call public function Make the connector call. Overrides WSConnectorSimpleHTTP::call
WSConnectorGraphQL::create public static function Creates an instance of the plugin. Overrides WSConnectorSimpleHTTP::create
WSConnectorGraphQL::getCache public function Return cache cid for cases cache rules change. Overrides WSConnectorBase::getCache
WSConnectorGraphQL::getMethods public function Return available methods supported by the connector. Overrides WSConnectorSimpleHTTP::getMethods
WSConnectorGraphQL::getOptions public function Return available options supported by the connector. Overrides WSConnectorSimpleHTTP::getOptions
WSConnectorGraphQL::getOptionsForm public function Return the settings form provided by the connector. Overrides WSConnectorSimpleHTTP::getOptionsForm
WSConnectorGraphQL::getReplacements public function Return an array of replacements. Overrides WSConnectorSimpleHTTP::getReplacements
WSConnectorGraphQL::__construct public function Constructs a \Drupal\Component\Plugin\PluginBase object. Overrides WSConnectorSimpleHTTP::__construct
WSConnectorSimpleHTTP::saveOptions public function Saves the options form. Overrides WSConnectorBase::saveOptions
WSConnectorSimpleHTTP::setCacheExpire public function Sets the expires times based on the response.
WSConnectorSimpleHTTP::supportsCaching public function Whether returned data can be cached. Overrides WSConnectorBase::supportsCaching
WSConnectorSimpleHTTP::wsconnectorHttpHeaderAjaxCallback public static function Ajax callback function. 1