class Memory in SMS Framework 8
Same name and namespace in other branches
- 2.x tests/modules/sms_test_gateway/src/Plugin/SmsGateway/Memory.php \Drupal\sms_test_gateway\Plugin\SmsGateway\Memory
- 2.1.x tests/modules/sms_test_gateway/src/Plugin/SmsGateway/Memory.php \Drupal\sms_test_gateway\Plugin\SmsGateway\Memory
Defines a gateway storing transmitted SMS in memory.
Plugin annotation
@SmsGateway(
id = "memory",
label = @Translation("Memory"),
outgoing_message_max_recipients = -1,
incoming = TRUE,
schedule_aware = FALSE,
reports_pull = TRUE,
reports_push = TRUE,
credit_balance_available = TRUE,
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\sms\Plugin\SmsGatewayPluginBase implements SmsGatewayPluginInterface
- class \Drupal\sms_test_gateway\Plugin\SmsGateway\Memory implements SmsIncomingEventProcessorInterface
- class \Drupal\sms\Plugin\SmsGatewayPluginBase implements SmsGatewayPluginInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of Memory
1 string reference to 'Memory'
- sms_test_gateway.schema.yml in tests/
modules/ sms_test_gateway/ config/ schema/ sms_test_gateway.schema.yml - tests/modules/sms_test_gateway/config/schema/sms_test_gateway.schema.yml
File
- tests/
modules/ sms_test_gateway/ src/ Plugin/ SmsGateway/ Memory.php, line 32
Namespace
Drupal\sms_test_gateway\Plugin\SmsGatewayView source
class Memory extends SmsGatewayPluginBase implements SmsIncomingEventProcessorInterface {
/**
* {@inheritdoc}
*/
public function defaultConfiguration() {
return [
'widget' => '',
// Store the ID of gateway config. See static::send().
'gateway_id' => '',
];
}
/**
* {@inheritdoc}
*/
public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
$form = parent::buildConfigurationForm($form, $form_state);
$config = $this
->getConfiguration();
$form['widget'] = [
'#type' => 'textfield',
'#title' => t('Widget'),
'#description' => t('Enter a widget.'),
'#default_value' => $config['widget'],
];
return $form;
}
/**
* {@inheritdoc}
*/
public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
$this->configuration['widget'] = $form_state
->getValue('widget');
}
/**
* {@inheritdoc}
*/
public function send(SmsMessageInterface $sms_message) {
$gateway_id = $this->configuration['gateway_id'];
// Message.
$state = \Drupal::state()
->get('sms_test_gateway.memory.send', []);
$state[$gateway_id][] = $sms_message;
\Drupal::state()
->set('sms_test_gateway.memory.send', $state);
// Reports.
$reports = \Drupal::state()
->get('sms_test_gateway.memory.report', []);
$gateway_reports = isset($reports[$gateway_id]) ? $reports[$gateway_id] : [];
$new_reports = $this
->randomDeliveryReports($sms_message);
$reports[$gateway_id] = array_merge($gateway_reports, $new_reports);
\Drupal::state()
->set('sms_test_gateway.memory.report', $reports);
return (new SmsMessageResult())
->setReports($new_reports);
}
/**
* {@inheritdoc}
*/
public function incomingEvent(SmsMessageEvent $event) {
// @todo Contents of this method are subject to proposals made in
// https://www.drupal.org/node/2712579
// Set state so we test this method is executed, remove this after above is
// addressed.
\Drupal::state()
->set('sms_test_gateway.memory.incoming', TRUE);
$execution_order = \Drupal::state()
->get('sms_test_event_subscriber__execution_order', []);
$execution_order[] = __METHOD__;
\Drupal::state()
->set('sms_test_event_subscriber__execution_order', $execution_order);
}
/**
* {@inheritdoc}
*/
public function parseDeliveryReports(Request $request, Response $response) {
$gateway_id = $this->configuration['gateway_id'];
$memory_reports = \Drupal::state()
->get('sms_test_gateway.memory.report', []);
$data = Json::decode($request->request
->get('delivery_report'));
$return = [];
foreach ($data['reports'] as $report) {
$message_id = $report['message_id'];
$new_report = (new SmsDeliveryReport())
->setRecipient($report['recipient'])
->setMessageId($message_id)
->setStatus($report['status'])
->setStatusMessage($report['status_message'])
->setStatusTime($report['status_time']);
// Backfill the specific values.
if ($report['status'] === SmsMessageReportStatus::QUEUED) {
$new_report
->setTimeQueued($report['status_time']);
}
if ($report['status'] === SmsMessageReportStatus::DELIVERED) {
$new_report
->setTimeDelivered($report['status_time']);
}
// Set separately since this method should not have meaningful keys.
$return[] = $new_report;
// Reports in state must be keyed by message ID.
$memory_reports[$gateway_id][$message_id] = $new_report;
}
\Drupal::state()
->set('sms_test_gateway.memory.report', $memory_reports);
// Set the response.
$response
->setContent('custom response content');
return $return;
}
/**
* {@inheritdoc}
*/
public function getDeliveryReports(array $message_ids = NULL) {
return [];
}
/**
* Generates random delivery reports for each of the recipients of a message.
*
* @param \Drupal\sms\Message\SmsMessageInterface $sms_message
* The SMS message.
*
* @return \Drupal\sms\Message\SmsDeliveryReportInterface[]
* An array of delivery reports.
*/
protected function randomDeliveryReports(SmsMessageInterface $sms_message) {
$random = new Random();
$request_time = \Drupal::time()
->getRequestTime();
$reports = [];
foreach ($sms_message
->getRecipients() as $number) {
$reports[] = (new SmsDeliveryReport())
->setRecipient($number)
->setMessageId($random
->name(16))
->setStatus(SmsMessageReportStatus::QUEUED)
->setStatusTime($request_time)
->setStatusMessage('Sent to memory gateway')
->setTimeQueued($request_time)
->setTimeDelivered($request_time + rand(0, 10));
}
return $reports;
}
/**
* {@inheritdoc}
*/
public function getCreditsBalance() {
return 13.36;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
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 | |
Memory:: |
public | function |
Form constructor. Overrides SmsGatewayPluginBase:: |
|
Memory:: |
public | function |
Gets default configuration for this plugin. Overrides SmsGatewayPluginBase:: |
2 |
Memory:: |
public | function |
Returns the credit balance available on this gateway. Overrides SmsGatewayPluginBase:: |
|
Memory:: |
public | function |
Gets delivery reports from the gateway. Overrides SmsGatewayPluginBase:: |
|
Memory:: |
public | function |
Process a SMS message from this gateway. Overrides SmsIncomingEventProcessorInterface:: |
|
Memory:: |
public | function |
Parses incoming delivery reports and returns the created delivery reports. Overrides SmsGatewayPluginBase:: |
|
Memory:: |
protected | function | Generates random delivery reports for each of the recipients of a message. | |
Memory:: |
public | function |
Sends an SMS. Overrides SmsGatewayPluginInterface:: |
2 |
Memory:: |
public | function |
Form submission handler. Overrides SmsGatewayPluginBase:: |
|
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
PluginBase:: |
protected | property | Configuration information passed into the plugin. | 1 |
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. | |
SmsGatewayPluginBase:: |
public | function |
Calculates dependencies for the configured plugin. Overrides DependentPluginInterface:: |
|
SmsGatewayPluginBase:: |
public | function |
Gets this plugin's configuration. Overrides ConfigurablePluginInterface:: |
|
SmsGatewayPluginBase:: |
public | function |
Sets the configuration for this plugin instance. Overrides ConfigurablePluginInterface:: |
|
SmsGatewayPluginBase:: |
public | function |
Form validation handler. Overrides PluginFormInterface:: |
|
SmsGatewayPluginBase:: |
public | function |
Constructs a new SmsGateway plugin. Overrides PluginBase:: |
1 |
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. |