class SocialSendEmail in Open Social 8.9
Same name in this branch
- 8.9 modules/social_features/social_group/src/Plugin/Action/SocialSendEmail.php \Drupal\social_group\Plugin\Action\SocialSendEmail
- 8.9 modules/social_features/social_user/src/Plugin/Action/SocialSendEmail.php \Drupal\social_user\Plugin\Action\SocialSendEmail
Same name and namespace in other branches
- 8.5 modules/social_features/social_user/src/Plugin/Action/SocialSendEmail.php \Drupal\social_user\Plugin\Action\SocialSendEmail
- 8.6 modules/social_features/social_user/src/Plugin/Action/SocialSendEmail.php \Drupal\social_user\Plugin\Action\SocialSendEmail
- 8.7 modules/social_features/social_user/src/Plugin/Action/SocialSendEmail.php \Drupal\social_user\Plugin\Action\SocialSendEmail
- 8.8 modules/social_features/social_user/src/Plugin/Action/SocialSendEmail.php \Drupal\social_user\Plugin\Action\SocialSendEmail
- 10.3.x modules/social_features/social_user/src/Plugin/Action/SocialSendEmail.php \Drupal\social_user\Plugin\Action\SocialSendEmail
- 10.0.x modules/social_features/social_user/src/Plugin/Action/SocialSendEmail.php \Drupal\social_user\Plugin\Action\SocialSendEmail
- 10.1.x modules/social_features/social_user/src/Plugin/Action/SocialSendEmail.php \Drupal\social_user\Plugin\Action\SocialSendEmail
- 10.2.x modules/social_features/social_user/src/Plugin/Action/SocialSendEmail.php \Drupal\social_user\Plugin\Action\SocialSendEmail
An example action covering most of the possible options.
Plugin annotation
@Action(
id = "social_user_send_email",
label = @Translation("Send email"),
type = "user",
confirm = TRUE,
)
Hierarchy
- class \Drupal\social_user\Plugin\Action\SocialSendEmail extends \Drupal\views_bulk_operations\Action\ViewsBulkOperationsActionBase implements \Drupal\views_bulk_operations\Action\ViewsBulkOperationsPreconfigurationInterface, ContainerFactoryPluginInterface
Expanded class hierarchy of SocialSendEmail
2 files declare their use of SocialSendEmail
- SocialEventManagersSendEmail.php in modules/
social_features/ social_event/ modules/ social_event_managers/ src/ Plugin/ Action/ SocialEventManagersSendEmail.php - SocialSendEmail.php in modules/
social_features/ social_group/ src/ Plugin/ Action/ SocialSendEmail.php
File
- modules/
social_features/ social_user/ src/ Plugin/ Action/ SocialSendEmail.php, line 29
Namespace
Drupal\social_user\Plugin\ActionView source
class SocialSendEmail extends ViewsBulkOperationsActionBase implements ContainerFactoryPluginInterface, ViewsBulkOperationsPreconfigurationInterface {
/**
* The token service.
*
* @var \Drupal\Core\Utility\Token
*/
protected $token;
/**
* The user storage.
*
* @var \Drupal\Core\Entity\EntityStorageInterface
*/
protected $storage;
/**
* A logger instance.
*
* @var \Psr\Log\LoggerInterface
*/
protected $logger;
/**
* The language manager.
*
* @var \Drupal\Core\Language\LanguageManagerInterface
*/
protected $languageManager;
/**
* The email validator.
*
* @var \Egulias\EmailValidator\EmailValidator
*/
protected $emailValidator;
/**
* The queue factory.
*
* @var \Drupal\Core\Queue\QueueFactory
*/
protected $queue;
/**
* TRUE if the current user can use the "Mail HTML" text format.
*
* @var bool
*/
protected $allowTextFormat;
/**
* Constructs a SocialSendEmail 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\Utility\Token $token
* The token service.
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager.
* @param \Psr\Log\LoggerInterface $logger
* A logger instance.
* @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
* The language manager.
* @param \Egulias\EmailValidator\EmailValidator $email_validator
* The email validator.
* @param \Drupal\Core\Queue\QueueFactory $queue_factory
* The queue factory.
* @param bool $allow_text_format
* TRUE if the current user can use the "Mail HTML" text format.
*
* @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
* @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, Token $token, EntityTypeManagerInterface $entity_type_manager, LoggerInterface $logger, LanguageManagerInterface $language_manager, EmailValidator $email_validator, QueueFactory $queue_factory, $allow_text_format) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->token = $token;
$this->storage = $entity_type_manager;
$this->logger = $logger;
$this->languageManager = $language_manager;
$this->emailValidator = $email_validator;
$this->queue = $queue_factory;
$this->allowTextFormat = $allow_text_format;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container
->get('token'), $container
->get('entity_type.manager'), $container
->get('logger.factory')
->get('action'), $container
->get('language_manager'), $container
->get('email.validator'), $container
->get('queue'), $container
->get('current_user')
->hasPermission('use text format mail_html'));
}
/**
* {@inheritdoc}
*/
public function setContext(array &$context) {
parent::setContext($context);
// @todo: make the batch size configurable.
$context['batch_size'] = 25;
}
/**
* {@inheritdoc}
*/
public function executeMultiple(array $objects) {
// Array $objects contain all the entities of this bulk operation batch.
// We want smaller queue items then this so we chunk these.
// @todo: make the chunk size configurable or dependable on the batch size.
$chunk_size = 10;
$chunks = array_chunk($objects, $chunk_size);
foreach ($chunks as $chunk) {
$users = [];
// The chunk items contain entities, we want to perform an action on this.
foreach ($chunk as $entity) {
// The action retrieves the user ID of the user.
$users[] = $this
->execute($entity);
}
// Get the entity ID of the email that is send.
$data['mail'] = $this->configuration['queue_storage_id'];
// Add the list of user IDs.
$data['users'] = $users;
// Put the $data in the queue item.
/** @var \Drupal\Core\Queue\QueueInterface $queue */
$queue = $this->queue
->get('user_email_queue');
$queue
->createItem($data);
}
// Add a clarifying message.
$this
->messenger()
->addMessage($this
->t('The email(s) will be send in the background. You will be notified upon completion.'));
return [];
}
/**
* {@inheritdoc}
*/
public function execute($entity = NULL) {
/** @var \Drupal\user\UserInterface $entity */
return $entity
->id();
}
/**
* Returns the email address of this account.
*
* @param \Drupal\user\UserInterface $account
* The user object.
*
* @return string|null
* The email address, or NULL if the account is anonymous or the user does
* not have an email address.
*/
public function getEmail(UserInterface $account) {
return $account
->getEmail();
}
/**
* {@inheritdoc}
*/
public function buildPreConfigurationForm(array $form, array $values, FormStateInterface $form_state) {
}
/**
* Configuration form builder.
*
* If this method has implementation, the action is
* considered to be configurable.
*
* @param array $form
* Form array.
* @param \Drupal\Core\Form\FormStateInterface $form_state
* The form state object.
*
* @return array
* The configuration form.
*/
public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
$form['reply'] = [
'#type' => 'email',
'#title' => $this
->t('Reply-to'),
'#description' => $this
->t("The email you are about to send is sent from the platform's email address. If you wish to receive replies on this email on your own email address, please specify your email address in this field."),
];
$form['subject'] = [
'#type' => 'textfield',
'#title' => $this
->t('Subject'),
'#required' => TRUE,
'#default_value' => $form_state
->getValue('subject'),
'#maxlength' => '254',
];
$form['message'] = [
'#type' => 'textarea',
'#title' => $this
->t('Message'),
'#required' => TRUE,
'#default_value' => $form_state
->getValue('message'),
'#cols' => '80',
'#rows' => '20',
'#description' => $this
->t("You can use the token [social_user:recipient] for a personalized salutation, to add the users name in your email"),
];
if ($this->allowTextFormat) {
$form['message']['#type'] = 'text_format';
$form['message']['#allowed_formats'] = [
'mail_html',
];
}
$form['#title'] = $this
->t('Send an email to :selected_count members', [
':selected_count' => $this->context['selected_count'],
]);
if (isset($form['list'])) {
unset($form['list']);
}
$form['actions']['submit']['#value'] = $this
->t('Send email');
$classes = [
'button',
'btn',
'waves-effect',
'waves-btn',
];
$form['actions']['submit']['#attributes']['class'] = [
'button--primary',
'js-form-submit',
'form-submit',
'js-form-submit',
'btn-raised',
'btn-primary',
'waves-light',
] + $classes;
$form['actions']['cancel']['#attributes']['class'] = [
'button--danger',
'btn-flat',
] + $classes;
return $form;
}
/**
* {@inheritdoc}
*/
public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
parent::submitConfigurationForm($form, $form_state);
// Clean form values.
$form_state
->cleanValues();
// Get the queue storage entity and create a new entry.
$queue_storage = $this->storage
->getStorage('queue_storage_entity');
$entity = $queue_storage
->create([
'name' => 'user_email_queue',
'type' => 'email',
'finished' => FALSE,
'field_reply_to' => $form_state
->getValue('reply'),
'field_subject' => $form_state
->getValue('subject'),
'field_message' => $form_state
->getValue('message')['value'],
]);
// When the new entity is saved, get the ID and save it within the bulk
// operation action configuration.
if ($entity
->save()) {
$this->configuration['queue_storage_id'] = $entity
->id();
}
}
/**
* {@inheritdoc}
*/
public function access($object, AccountInterface $account = NULL, $return_as_object = FALSE) {
// @TODO Check for proper access here.
return TRUE;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
SocialSendEmail:: |
protected | property | TRUE if the current user can use the "Mail HTML" text format. | |
SocialSendEmail:: |
protected | property | The email validator. | |
SocialSendEmail:: |
protected | property | The language manager. | |
SocialSendEmail:: |
protected | property | A logger instance. | |
SocialSendEmail:: |
protected | property | The queue factory. | |
SocialSendEmail:: |
protected | property | The user storage. | |
SocialSendEmail:: |
protected | property | The token service. | |
SocialSendEmail:: |
public | function | 2 | |
SocialSendEmail:: |
public | function | Configuration form builder. | 2 |
SocialSendEmail:: |
public | function | 1 | |
SocialSendEmail:: |
public static | function |
Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface:: |
1 |
SocialSendEmail:: |
public | function | 1 | |
SocialSendEmail:: |
public | function | 1 | |
SocialSendEmail:: |
public | function | Returns the email address of this account. | |
SocialSendEmail:: |
public | function | ||
SocialSendEmail:: |
public | function | ||
SocialSendEmail:: |
public | function | Constructs a SocialSendEmail object. | 1 |