headless_cms-1.0.3/modules/headless_cms_notify/headless_cms_notify.module
modules/headless_cms_notify/headless_cms_notify.module
<?php
/**
* @file
* Module file.
*/
declare(strict_types=1);
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\Core\Url;
use Drupal\headless_cms\HeadlessCmsUtility;
use Drupal\headless_cms_notify\HeadlessNotificationEntityOperation;
use Drupal\headless_cms_notify\HeadlessNotifyService;
require_once 'headless_cms_notify.basefields.inc';
/**
* Implements hook_entity_base_field_info().
*/
function headless_cms_notify_entity_base_field_info(EntityTypeInterface $entity_type) {
$fields = [];
if ($entity_type->id() === 'consumer') {
$fields = array_merge($fields, headless_cms_notify_consumer_basefields_01());
}
return $fields;
}
/**
* Implements hook_form_FORM_ID_alter().
*
* Add consumer specific form alterations.
*/
function headless_cms_notify_form_consumer_form_alter(&$form, FormStateInterface &$form_state, $form_id) {
HeadlessCmsUtility::alterConsumerForm($form);
$form['headless_cms_notify_transport']['widget']['#description'] = new TranslatableMarkup(
'The transport to use for sending notifications. <a href=":url">Manage transports here</a>.', [
':url' => Url::fromRoute('entity.headless_notify_transport.collection')->toString(),
]
);
$form['headless_cms_notify_enabled']['#weight'] = -10;
$form['headless_cms_notify_transport']['#weight'] = -9;
$form['headless_cms_notify_notification_types']['#weight'] = -8;
$form['headless_cms_notify_entity_types']['#weight'] = -7;
$form['headless_cms_notify_entity_types']['widget']['#attributes']['class'][] = 'contained-form-checkboxes';
// Show message if no transports are available.
if (count($form['headless_cms_notify_transport']['widget']['#options']) === 0) {
$form['headless_cms_notify_transport'] = [
'#type' => 'fieldset',
'#title' => new TranslatableMarkup('No transports available'),
'#description' => new TranslatableMarkup('No transports are available. Please <a href=":url">add a transport</a>.', [
':url' => Url::fromRoute('entity.headless_notify_transport.add_form')->toString(),
]),
'#weight' => -9,
];
}
$form['additional_settings']['headless_cms_settings']['notify_settings'] = [
'#type' => 'details',
'#title' => new TranslatableMarkup('Notify'),
'#open' => TRUE,
'headless_cms_notify_enabled' => $form['headless_cms_notify_enabled'],
'headless_cms_notify_transport' => $form['headless_cms_notify_transport'],
'headless_cms_notify_notification_types' => $form['headless_cms_notify_notification_types'],
'headless_cms_notify_entity_types' => $form['headless_cms_notify_entity_types'],
];
unset($form['headless_cms_notify_enabled']);
unset($form['headless_cms_notify_transport']);
unset($form['headless_cms_notify_notification_types']);
unset($form['headless_cms_notify_entity_types']);
}
/**
* Implements hook_options_list_alter().
*/
function headless_cms_notify_options_list_alter(array &$options, array $context) {
// Check if this is our transport field.
if ($context['fieldDefinition']->getName() === 'headless_cms_notify_transport') {
$storage = \Drupal::entityTypeManager()->getStorage('headless_notify_transport');
/** @var \Drupal\headless_cms_notify\Entity\HeadlessNotifyTransportInterface[] $entities */
$entities = $storage->loadMultiple();
$options = [];
foreach ($entities as $entity) {
$pluginLabel = $entity->getTransportPlugin()->getLabel();
$label = $entity->label();
$options[$entity->id()] = sprintf('%s (%s)', $label, $pluginLabel);
}
}
}
/**
* Handle any entity insert.
*/
function headless_cms_notify_entity_insert(EntityInterface $entity) {
/** @var \Drupal\headless_cms_notify\HeadlessNotifyService $service */
$service = \Drupal::service(HeadlessNotifyService::class);
$service->sendEntityOperationNotification(HeadlessNotificationEntityOperation::Create, $entity);
}
/**
* Handle eny entity update.
*/
function headless_cms_notify_entity_update(EntityInterface $entity) {
if ($entity->isNew()) {
return;
}
/** @var \Drupal\headless_cms_notify\HeadlessNotifyService $service */
$service = \Drupal::service(HeadlessNotifyService::class);
$service->sendEntityOperationNotification(HeadlessNotificationEntityOperation::Update, $entity);
}
/**
* Handle any entity delete.
*/
function headless_cms_notify_entity_delete(EntityInterface $entity) {
/** @var \Drupal\headless_cms_notify\HeadlessNotifyService $service */
$service = \Drupal::service(HeadlessNotifyService::class);
$service->sendEntityOperationNotification(HeadlessNotificationEntityOperation::Delete, $entity);
}
/**
* Handle cache rebuild.
*/
function headless_cms_notify_rebuild() {
/** @var \Drupal\headless_cms_notify\HeadlessNotifyService $service */
$service = \Drupal::service(HeadlessNotifyService::class);
$service->sendCacheRebuildNotification();
}
