materio-d9/web/modules/custom/materio_mailjet/src/Controller/MaterioMailjetWebhookCallbackController.php

117 lines
3.4 KiB
PHP
Raw Normal View History

<?php
namespace Drupal\materio_mailjet\Controller;
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\simplenews_mailjet_subscriptions\Entity\SimplenewsMailjetSubscriptionEntity;
use Drupal\simplenews\Entity\Subscriber;
use Drupal\simplenews\Subscription\SubscriptionManagerInterface;
/**
* Module callback Controller.
*/
class MaterioMailjetWebhookCallbackController extends ControllerBase {
/**
* The subscription manager.
*
* @var \Drupal\simplenews\Subscription\SubscriptionManagerInterface
*/
protected $subscriptionManager;
/**
* Constructs a \Drupal\simplenews\Controller\ConfirmationController object.
*
* @param \Drupal\simplenews\Subscription\SubscriptionManagerInterface $subscription_manager
* The subscription manager service.
*/
public function __construct(SubscriptionManagerInterface $subscription_manager) {
$this->subscriptionManager = $subscription_manager;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static(
$container->get('simplenews.subscription_manager')
);
}
/**
* Callback for uninstall the module.
*/
public function callback() {
// No Event sent.
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
print 'No data';
// return false;
}
$post = trim(file_get_contents('php://input'));
$this->getLogger('materio_mailjet')->notice(print_r($post, TRUE));
$event = json_decode($post);
// $event = $json_post[0];
// No information sent with the Event.
if (!is_object($event) && !isset($event)) {
$this->getLogger('materio_mailjet')
->error('No Informations sent with the Event.');
// return false;
}
switch ($event->event) {
case 'unsub':
$this->unsub($event);
break;
};
return [];
}
private function unsub($event) {
// \Drupal::logger('simplenews_mailjet_subscriptions')->info("Unsubscribe webhook triggered");
$MjlistID = $event->mj_list_id;
$email = $event->email;
// find corresponding simplenews list from mailjet listID
$newsletter_id = null;
$entities = SimplenewsMailjetSubscriptionEntity::loadMultiple();
foreach ((array) $entities as $entity) {
$listID = (int)$entity->getID();
if ($listID === $MjlistID) {
$table = $entity->get('mapping_table');
if (is_array($table)) {
foreach ($table as $category) {
$newsletter_id = $category['simplenews_news'];
break;
}
}
break;
}
}
// \Drupal::logger('simplenews_mailjet_subscriptions')->info("Unsubscribe webhook triggered for listID: " . $listID . "and email: " . $email . ".");
// get subscriber entity
// Load entities by their property values.
$subscribers = \Drupal::entityTypeManager()->getStorage('simplenews_subscriber')->loadByProperties(['mail' => $email]);
// unsubscribe subscriber from simplenews list
if (is_array($subscribers) && count($subscribers) && $newsletter_id) {
$subscriber = array_shift($subscribers);
if ($subscriber instanceof Subscriber) {
// $subscriber->unsubscribe($simplenews_news, 'mailjet');
$this->subscriptionManager->unsubscribe($subscriber->getMail(), $newsletter_id, FALSE, 'materio_mailjet');
}
}
}
}