class RulesHttpClient in Rules HTTP Client 8
Provides "Rules Http client" rules action.
@RulesAction( id = "rules_http_client", label = @Translation("Request HTTP data"), category = @Translation("Data"), context = { "url" = @ContextDefinition("string", label = @Translation("URL"), description = @Translation("Url address where to post, get and delete request send."), required = TRUE, multiple = TRUE, ), "headers" = @ContextDefinition("string", label = @Translation("Headers"), description = @Translation("Request headers to send as 'name: value' pairs, one per line (e.g., Accept: text/plain). See <a href='https://www.wikipedia.org/wiki/List_of_HTTP_header_fields'>wikipedia.org... for more information."), required = FALSE, ), "method" = @ContextDefinition("string", label = @Translation("Method"), description = @Translation("The HTTP request methods like'HEAD','POST','PUT','DELETE','TRACE','OPTIONS','CONNECT','PATCH' etc."), required = FALSE, ), "data" = @ContextDefinition("string", label = @Translation("Data"), description = @Translation("The request body, formatter as 'param=value¶m=value&...' or one 'param=value' per line.."), required = FALSE, multiple = TRUE, assignment_restriction = "data", ), "max_redirects" = @ContextDefinition("integer", label = @Translation("Max Redirect"), description = @Translation("How many times a redirect may be followed."), default_value = 3, required = FALSE, assignment_restriction = "input", ), "timeout" = @ContextDefinition("float", label = @Translation("Timeout"), description = @Translation("The maximum number of seconds the request may take.."), default_value = 30, required = FALSE, ), }, provides = { "http_response" = @ContextDefinition("string", label = @Translation("HTTP data") ) } )
@todo: Define that message Context should be textarea comparing with textfield Subject @todo: Add access callback information from Drupal 7.
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Component\Plugin\ContextAwarePluginBase implements ContextAwarePluginInterface
- class \Drupal\Core\Plugin\ContextAwarePluginBase implements CacheableDependencyInterface, ContextAwarePluginInterface uses DependencySerializationTrait, StringTranslationTrait, TypedDataTrait
- class \Drupal\rules\Core\RulesActionBase implements RulesActionInterface uses ContextProviderTrait, ConfigurationAccessControlTrait, ExecutablePluginTrait
- class \Drupal\rules_http_client\Plugin\RulesAction\RulesHttpClient implements ContainerFactoryPluginInterface
- class \Drupal\rules\Core\RulesActionBase implements RulesActionInterface uses ContextProviderTrait, ConfigurationAccessControlTrait, ExecutablePluginTrait
- class \Drupal\Core\Plugin\ContextAwarePluginBase implements CacheableDependencyInterface, ContextAwarePluginInterface uses DependencySerializationTrait, StringTranslationTrait, TypedDataTrait
- class \Drupal\Component\Plugin\ContextAwarePluginBase implements ContextAwarePluginInterface
Expanded class hierarchy of RulesHttpClient
File
- src/
Plugin/ RulesAction/ RulesHttpClient.php, line 67
Namespace
Drupal\rules_http_client\Plugin\RulesActionView source
class RulesHttpClient extends RulesActionBase implements ContainerFactoryPluginInterface {
/**
* The logger for the rules channel.
*
* @var \Psr\Log\LoggerInterface
*/
protected $logger;
/**
* The HTTP client to fetch the feed data with.
*
* @var \GuzzleHttp\ClientInterface
*/
protected $httpClient;
/**
* Constructs a httpClient object.
*
* @param array $configuration
* A configuration array containing information about the plugin instance.
* @param string $plugin_id
* The plugin ID for the plugin instance.
* @param mixed $plugin_definition
* The plugin implementation definition.
* @param \Drupal\Core\Logger\LoggerChannelFactoryInterface $logger_factory
* The logger factory service.
* @param GuzzleHttp\ClientInterface $http_client
* The guzzle http client instance.
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, LoggerChannelFactoryInterface $logger_factory, ClientInterface $http_client) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->logger = $logger_factory
->get('rules_http_client');
$this->http_client = $http_client;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container
->get('logger.factory'), $container
->get('http_client'));
}
/**
* Send a system email.
*
* @param string[] $url
* Url addresses HTTP request.
* @param string|null $headers
* (optional) Header information of HTTP Request.
* @param string $method
* (optional) Method of HTTP request.
* @param string|null $data
* (optional) Raw data of HTTP request.
* @param int|null $maxRedirect
* (optional) Max redirect for HTTP request.
* @param int|null $timeOut
* (optional) Time Out for HTTP request.
*/
protected function doExecute(array $url, $headers, $method, $data = NULL, $maxRedirect = 3, $timeOut = 30) {
// Headers section.
$headers = explode("\r\n", $headers);
if (is_array($headers)) {
foreach ($headers as $header) {
if (!empty($header) && strpos($header, ':') !== FALSE) {
list($name, $value) = explode(':', $header, 2);
if (!empty($name)) {
$options['headers'][$name] = ltrim($value);
}
}
}
}
$finalArray = [];
if (is_array($data)) {
// Data section.
foreach ($data as $singleArray) {
$finalSingleArray = explode('=', $singleArray);
$finalArray[$finalSingleArray[0]] = $finalSingleArray[1];
}
// Json decode array.
$finalArray = json_encode($finalArray);
}
// Payload data.
$options['data'] = $finalArray;
// Max redirects.
$options['max_redirects'] = empty($maxRedirect) ? 3 : $maxRedirect;
// Timeout.
$options['timeout'] = empty($timeOut) ? 30 : $timeOut;
$postUrl = $url[0];
// Method.
$method = strtoupper($method);
// Options.
$options['method'] = $method == 'POST' ? 'POST' : 'GET';
$options = [
'method' => $method,
'body' => $finalArray,
];
$client = $this->http_client;
try {
$response = $client
->request($method, $postUrl, $options);
// Status of request.
$status = $response
->getStatusCode();
// Check if we succesfully get the output.
if ($status == '200') {
$stream = $response
->getBody();
$stream
->rewind();
$output = $stream
->getContents();
// Set the response output from service call.
$this
->setProvidedValue('http_response', $output);
}
} catch (RequestException $e) {
$variables = [
'@message' => 'Could not get access token',
'@error_message' => $e
->getMessage(),
];
$this->logger
->error('@message. Details: @error_message', $variables);
}
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
ConfigurationAccessControlTrait:: |
public | function | Checks configuration permission. | |
ContextAwarePluginBase:: |
protected | property | The data objects representing the context of this plugin. | |
ContextAwarePluginBase:: |
private | property | Data objects representing the contexts passed in the plugin configuration. | |
ContextAwarePluginBase:: |
protected | function | Wraps the context handler. | |
ContextAwarePluginBase:: |
protected | function |
Overrides ContextAwarePluginBase:: |
|
ContextAwarePluginBase:: |
public | function |
The cache contexts associated with this object. Overrides CacheableDependencyInterface:: |
9 |
ContextAwarePluginBase:: |
public | function |
The maximum age for which this object may be cached. Overrides CacheableDependencyInterface:: |
7 |
ContextAwarePluginBase:: |
public | function |
The cache tags associated with this object. Overrides CacheableDependencyInterface:: |
4 |
ContextAwarePluginBase:: |
public | function |
This code is identical to the Component in order to pick up a different
Context class. Overrides ContextAwarePluginBase:: |
|
ContextAwarePluginBase:: |
public | function |
Overrides ContextAwarePluginBase:: |
|
ContextAwarePluginBase:: |
public | function |
Overrides ContextAwarePluginBase:: |
|
ContextAwarePluginBase:: |
public | function |
Gets a mapping of the expected assignment names to their context names. Overrides ContextAwarePluginInterface:: |
|
ContextAwarePluginBase:: |
public | function |
Gets the defined contexts. Overrides ContextAwarePluginInterface:: |
|
ContextAwarePluginBase:: |
public | function |
Gets the values for all defined contexts. Overrides ContextAwarePluginInterface:: |
|
ContextAwarePluginBase:: |
public | function |
Set a context on this plugin. Overrides ContextAwarePluginBase:: |
|
ContextAwarePluginBase:: |
public | function |
Sets a mapping of the expected assignment names to their context names. Overrides ContextAwarePluginInterface:: |
|
ContextAwarePluginBase:: |
public | function |
Sets the value for a defined context. Overrides ContextAwarePluginBase:: |
|
ContextAwarePluginBase:: |
public | function |
Validates the set values for the defined contexts. Overrides ContextAwarePluginInterface:: |
|
ContextAwarePluginBase:: |
public | function | Implements magic __get() method. | |
ContextProviderTrait:: |
protected | property | The data objects that are provided by this plugin. | |
ContextProviderTrait:: |
public | function | ||
ContextProviderTrait:: |
public | function | ||
ContextProviderTrait:: |
public | function | ||
ContextProviderTrait:: |
public | function | ||
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
ExecutablePluginTrait:: |
protected | function | Get the translated label from the plugin definition. | |
ExecutablePluginTrait:: |
public | function | Get the translated summary from the label annotation. | 4 |
PluginBase:: |
protected | property | The plugin implementation definition. | 1 |
PluginBase:: |
protected | property | The plugin_id. | |
PluginBase:: |
constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
PluginBase:: |
public | function |
Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
3 |
PluginBase:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
RulesActionBase:: |
protected | property |
The plugin configuration. Overrides PluginBase:: |
|
RulesActionBase:: |
public | function |
Checks object access. Overrides RulesActionInterface:: |
|
RulesActionBase:: |
public | function |
Asserts additional metadata for the selected data. Overrides ContextAwarePluginInterface:: |
|
RulesActionBase:: |
public | function |
Returns a list of context names that should be auto-saved after execution. Overrides RulesActionInterface:: |
14 |
RulesActionBase:: |
public | function | @todo this documentation is not actually inherited from any interface. Do we need this empty implementation? | |
RulesActionBase:: |
public | function | @todo this documentation is not actually inherited from any interface. Do we need this empty implementation? | |
RulesActionBase:: |
public | function |
Executes the plugin. Overrides ExecutableInterface:: |
2 |
RulesActionBase:: |
public | function | @todo this documentation is not actually inherited from any interface. Do we need this empty implementation? | |
RulesActionBase:: |
public | function | @todo this documentation is not actually inherited from any interface. | |
RulesActionBase:: |
public | function |
Gets the value for a defined context. Overrides ContextAwarePluginBase:: |
|
RulesActionBase:: |
public | function |
Refines used and provided context definitions based upon context values. Overrides ContextAwarePluginInterface:: |
5 |
RulesActionBase:: |
public | function | @todo this documentation is not actually inherited from any interface. | |
RulesHttpClient:: |
protected | property | The HTTP client to fetch the feed data with. | |
RulesHttpClient:: |
protected | property | The logger for the rules channel. | |
RulesHttpClient:: |
public static | function |
Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface:: |
|
RulesHttpClient:: |
protected | function | Send a system email. | |
RulesHttpClient:: |
public | function |
Constructs a httpClient object. Overrides ContextAwarePluginBase:: |
|
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. | |
TypedDataTrait:: |
protected | property | The typed data manager used for creating the data types. | |
TypedDataTrait:: |
public | function | Gets the typed data manager. | 2 |
TypedDataTrait:: |
public | function | Sets the typed data manager. | 2 |