diff --git a/src/Entity/Subscriber.php b/src/Entity/Subscriber.php index 039a5f2..eccc0d7 100644 --- a/src/Entity/Subscriber.php +++ b/src/Entity/Subscriber.php @@ -289,7 +289,6 @@ class Subscriber extends ContentEntityBase implements SubscriberInterface { $this->subscriptions->appendItem($data); } - \Drupal::moduleHandler()->invokeAll('simplenews_subscribe', [$this, $newsletter_id]); return $this; } @@ -312,7 +311,6 @@ class Subscriber extends ContentEntityBase implements SubscriberInterface { // Clear any existing mail spool rows for this subscriber. \Drupal::service('simplenews.spool_storage')->deleteMails(['snid' => $this->id(), 'newsletter_id' => $newsletter_id]); - \Drupal::moduleHandler()->invokeAll('simplenews_unsubscribe', [$this, $newsletter_id]); return $this; } @@ -326,6 +324,19 @@ class Subscriber extends ContentEntityBase implements SubscriberInterface { if ($this->isConfirmed() && $user = $this->getUser()) { $this->copyToAccount($user); } + + if ($this->isConfirmed() && isset($this->original)) { + $added = array_diff($this->getSubscribedNewsletterIds(), $this->original->getSubscribedNewsletterIds()); + $removed = array_diff($this->original->getSubscribedNewsletterIds(), $this->getSubscribedNewsletterIds()); + + foreach ($added as $newsletter_id) { + \Drupal::moduleHandler()->invokeAll('simplenews_subscribe', [$this, $newsletter_id]); + } + + foreach ($removed as $newsletter_id) { + \Drupal::moduleHandler()->invokeAll('simplenews_unsubscribe', [$this, $newsletter_id]); + } + } } /**