You are here

public function AcsfThemeNotify::sendNotification in Acquia Cloud Site Factory Connector 8.2

Same name and namespace in other branches
  1. 8 src/AcsfThemeNotify.php \Drupal\acsf\AcsfThemeNotify::sendNotification()

Sends a theme notification to the Factory.

This is going to contact the Factory, so it qualifies as a third-party call, therefore calling it during a normal page load is not advisable. A possibly safer solution could be executing this via a menu callback called through an asynchronous JavaScript call.

If the request does not succeed (and $store_failed_notification is truthy), the notification will be stored so that we may try again later when cron runs.

Parameters

string $scope: The scope. Either "theme", "site", "group", or "global".

string $event_type: The type of theme event that occurred. Either "create", "modify", or "delete".

int $nid: The node ID associated with the scope. Only required for "group" scope notifications. If empty, it will be filled in automatically for "theme" and "site" scope notifications.

string $theme: The system name of the theme the event relates to. Only relevant for "theme" scope notifications.

int $timestamp: The timestamp when the notification was created.

bool $store_failed_notification: (optional) If TRUE, disable storing a notification when the sending fails. Should be only used in case of notifications which have been already added to the pending notification table.

Return value

array The message response body and code.

1 call to AcsfThemeNotify::sendNotification()
AcsfThemeNotify::processNotifications in src/AcsfThemeNotify.php
Resends failed theme notifications.

File

src/AcsfThemeNotify.php, line 79

Class

AcsfThemeNotify
Manages theme notifications that need to be sent to the Factory.

Namespace

Drupal\acsf

Code

public function sendNotification($scope, $event_type, $nid = NULL, $theme = NULL, $timestamp = NULL, $store_failed_notification = TRUE) {
  if (!$this
    ->isEnabled()) {
    return [
      'code' => 500,
      'data' => [
        'message' => $this
          ->t('The theme change notification feature is not enabled.'),
      ],
    ];
  }
  try {
    if (empty($nid) && in_array($scope, [
      'theme',
      'site',
    ])) {
      $site = AcsfSite::load();
      $nid = $site->site_id;
    }
    $parameters = [
      'scope' => $scope,
      'event' => $event_type,
      'nid' => $nid,
    ];
    if ($theme) {
      $parameters['theme'] = $theme;
    }
    if ($timestamp) {
      $parameters['timestamp'] = $timestamp;
    }
    $message = new AcsfMessageRest('POST', 'site-api/v1/theme/notification', $parameters);
    $message
      ->send();
    $response = [
      'code' => $message
        ->getResponseCode(),
      'data' => $message
        ->getResponseBody(),
    ];
  } catch (\Exception $e) {
    $error_message = $this
      ->t('AcsfThemeNotify failed with error: @message.', [
      '@message' => $e
        ->getMessage(),
    ]);
    syslog(LOG_ERR, $error_message);

    // Send a log message to the Factory.
    $acsf_log = new AcsfLog();
    $acsf_log
      ->log('theme_notify', $error_message, LOG_ERR);
    $response = [
      'code' => 500,
      'data' => [
        'message' => $error_message,
      ],
    ];
  }
  if ($store_failed_notification && $response['code'] !== 200) {
    $this
      ->addNotification($event_type, $theme);
  }
  return $response;
}