developped own webhook controller for mailjet synch
This commit is contained in:
parent
ba4a025335
commit
97a9178006
|
@ -15,7 +15,7 @@ provider: null
|
||||||
plugin: user_login_block
|
plugin: user_login_block
|
||||||
settings:
|
settings:
|
||||||
id: user_login_block
|
id: user_login_block
|
||||||
label: 'Membre access'
|
label: 'Accès membre'
|
||||||
label_display: visible
|
label_display: visible
|
||||||
provider: user
|
provider: user
|
||||||
visibility:
|
visibility:
|
||||||
|
|
|
@ -140,6 +140,7 @@ module:
|
||||||
materio_graphql: 0
|
materio_graphql: 0
|
||||||
materio_home: 0
|
materio_home: 0
|
||||||
materio_jsonapi: 0
|
materio_jsonapi: 0
|
||||||
|
materio_mailjet: 0
|
||||||
materio_samples: 0
|
materio_samples: 0
|
||||||
materio_sapi: 0
|
materio_sapi: 0
|
||||||
materio_simplenews: 0
|
materio_simplenews: 0
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
uuid: 230f2c4e-c4b4-4179-b9fb-c999cf7a2ddf
|
uuid: 230f2c4e-c4b4-4179-b9fb-c999cf7a2ddf
|
||||||
langcode: en
|
langcode: en
|
||||||
status: true
|
status: false
|
||||||
dependencies: { }
|
dependencies: { }
|
||||||
_core:
|
_core:
|
||||||
default_config_hash: 1yiBtHZuy8FsRApYQ9KutX2GXWP6ZmxePqYl2PlyYRo
|
default_config_hash: 1yiBtHZuy8FsRApYQ9KutX2GXWP6ZmxePqYl2PlyYRo
|
||||||
|
@ -26,6 +26,8 @@ expression:
|
||||||
-
|
-
|
||||||
id: rules_condition
|
id: rules_condition
|
||||||
uuid: 1c701012-abc3-4fbd-94ee-6e0e4d56b610
|
uuid: 1c701012-abc3-4fbd-94ee-6e0e4d56b610
|
||||||
|
condition_id: rules_data_comparison
|
||||||
|
negate: false
|
||||||
context_values:
|
context_values:
|
||||||
operation: '=='
|
operation: '=='
|
||||||
value: blocked
|
value: blocked
|
||||||
|
@ -37,8 +39,6 @@ expression:
|
||||||
value:
|
value:
|
||||||
rules_tokens: { }
|
rules_tokens: { }
|
||||||
provides_mapping: { }
|
provides_mapping: { }
|
||||||
condition_id: rules_data_comparison
|
|
||||||
negate: false
|
|
||||||
actions:
|
actions:
|
||||||
id: rules_action_set
|
id: rules_action_set
|
||||||
uuid: c2a204bc-1679-415e-b67d-d7a2665f87ca
|
uuid: c2a204bc-1679-415e-b67d-d7a2665f87ca
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
uuid: 391a5122-6639-4be1-ab72-cecd14167ca1
|
uuid: 391a5122-6639-4be1-ab72-cecd14167ca1
|
||||||
langcode: en
|
langcode: en
|
||||||
status: true
|
status: false
|
||||||
dependencies: { }
|
dependencies: { }
|
||||||
_core:
|
_core:
|
||||||
default_config_hash: U_GmlNbp5E1n9UAmEVzmCbLUL5dMoYvsQ47BZrdUT6w
|
default_config_hash: U_GmlNbp5E1n9UAmEVzmCbLUL5dMoYvsQ47BZrdUT6w
|
||||||
|
@ -26,6 +26,8 @@ expression:
|
||||||
-
|
-
|
||||||
id: rules_condition
|
id: rules_condition
|
||||||
uuid: 10af217b-e797-4bcc-9789-d3ae3e333762
|
uuid: 10af217b-e797-4bcc-9789-d3ae3e333762
|
||||||
|
condition_id: rules_data_comparison
|
||||||
|
negate: false
|
||||||
context_values:
|
context_values:
|
||||||
operation: '=='
|
operation: '=='
|
||||||
value: bounce
|
value: bounce
|
||||||
|
@ -37,8 +39,6 @@ expression:
|
||||||
value:
|
value:
|
||||||
rules_tokens: { }
|
rules_tokens: { }
|
||||||
provides_mapping: { }
|
provides_mapping: { }
|
||||||
condition_id: rules_data_comparison
|
|
||||||
negate: false
|
|
||||||
actions:
|
actions:
|
||||||
id: rules_action_set
|
id: rules_action_set
|
||||||
uuid: 6f2219f0-df60-4f5d-9ebb-f4dc21e0d2af
|
uuid: 6f2219f0-df60-4f5d-9ebb-f4dc21e0d2af
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
uuid: 4396179b-baf3-4613-bdb0-a304d48261c1
|
uuid: 4396179b-baf3-4613-bdb0-a304d48261c1
|
||||||
langcode: en
|
langcode: en
|
||||||
status: true
|
status: false
|
||||||
dependencies: { }
|
dependencies: { }
|
||||||
_core:
|
_core:
|
||||||
default_config_hash: DcQy3zLhh7gJFz1DMcClcpvGDtMeA0yio_sVGADE82o
|
default_config_hash: DcQy3zLhh7gJFz1DMcClcpvGDtMeA0yio_sVGADE82o
|
||||||
|
@ -26,6 +26,8 @@ expression:
|
||||||
-
|
-
|
||||||
id: rules_condition
|
id: rules_condition
|
||||||
uuid: ff98f6a0-0428-460f-808d-cd85da30812e
|
uuid: ff98f6a0-0428-460f-808d-cd85da30812e
|
||||||
|
condition_id: rules_data_comparison
|
||||||
|
negate: false
|
||||||
context_values:
|
context_values:
|
||||||
operation: '=='
|
operation: '=='
|
||||||
value: clicked
|
value: clicked
|
||||||
|
@ -37,8 +39,6 @@ expression:
|
||||||
value:
|
value:
|
||||||
rules_tokens: { }
|
rules_tokens: { }
|
||||||
provides_mapping: { }
|
provides_mapping: { }
|
||||||
condition_id: rules_data_comparison
|
|
||||||
negate: false
|
|
||||||
actions:
|
actions:
|
||||||
id: rules_action_set
|
id: rules_action_set
|
||||||
uuid: 5ef4a8a2-891d-4d6f-aaf5-4fd61fd88784
|
uuid: 5ef4a8a2-891d-4d6f-aaf5-4fd61fd88784
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
uuid: 6f3712ca-b451-429d-816f-dd1c4063a9ae
|
uuid: 6f3712ca-b451-429d-816f-dd1c4063a9ae
|
||||||
langcode: en
|
langcode: en
|
||||||
status: true
|
status: false
|
||||||
dependencies: { }
|
dependencies: { }
|
||||||
_core:
|
_core:
|
||||||
default_config_hash: A3m7CCcbVLT6GKSYfmEL4doWJRPs332bdm4HX3Bxz2Q
|
default_config_hash: A3m7CCcbVLT6GKSYfmEL4doWJRPs332bdm4HX3Bxz2Q
|
||||||
|
@ -26,6 +26,8 @@ expression:
|
||||||
-
|
-
|
||||||
id: rules_condition
|
id: rules_condition
|
||||||
uuid: 41580ec0-e516-4098-b1c7-034ab13db2f4
|
uuid: 41580ec0-e516-4098-b1c7-034ab13db2f4
|
||||||
|
condition_id: rules_data_comparison
|
||||||
|
negate: false
|
||||||
context_values:
|
context_values:
|
||||||
operation: '=='
|
operation: '=='
|
||||||
value: open
|
value: open
|
||||||
|
@ -37,8 +39,6 @@ expression:
|
||||||
value:
|
value:
|
||||||
rules_tokens: { }
|
rules_tokens: { }
|
||||||
provides_mapping: { }
|
provides_mapping: { }
|
||||||
condition_id: rules_data_comparison
|
|
||||||
negate: false
|
|
||||||
actions:
|
actions:
|
||||||
id: rules_action_set
|
id: rules_action_set
|
||||||
uuid: 15a6fd6f-dcc5-4f05-8775-670a337c7823
|
uuid: 15a6fd6f-dcc5-4f05-8775-670a337c7823
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
uuid: 4ee8baa3-ec10-4716-a490-c67888e601ec
|
uuid: 4ee8baa3-ec10-4716-a490-c67888e601ec
|
||||||
langcode: en
|
langcode: en
|
||||||
status: true
|
status: false
|
||||||
dependencies: { }
|
dependencies: { }
|
||||||
_core:
|
_core:
|
||||||
default_config_hash: TuDPeYYD1x870iE1SLR_YFsuPC3oTRW8BO-coBkLXtc
|
default_config_hash: TuDPeYYD1x870iE1SLR_YFsuPC3oTRW8BO-coBkLXtc
|
||||||
|
@ -26,6 +26,8 @@ expression:
|
||||||
-
|
-
|
||||||
id: rules_condition
|
id: rules_condition
|
||||||
uuid: 1053b6b5-efcb-4339-a618-ee4719cd41c6
|
uuid: 1053b6b5-efcb-4339-a618-ee4719cd41c6
|
||||||
|
condition_id: rules_data_comparison
|
||||||
|
negate: false
|
||||||
context_values:
|
context_values:
|
||||||
operation: '=='
|
operation: '=='
|
||||||
value: spam
|
value: spam
|
||||||
|
@ -37,8 +39,6 @@ expression:
|
||||||
value:
|
value:
|
||||||
rules_tokens: { }
|
rules_tokens: { }
|
||||||
provides_mapping: { }
|
provides_mapping: { }
|
||||||
condition_id: rules_data_comparison
|
|
||||||
negate: false
|
|
||||||
actions:
|
actions:
|
||||||
id: rules_action_set
|
id: rules_action_set
|
||||||
uuid: 9e5b9e63-86a9-4740-b20d-c79ae00b74a8
|
uuid: 9e5b9e63-86a9-4740-b20d-c79ae00b74a8
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
uuid: 1308193a-4425-4fc9-95a0-2e7f6c271278
|
uuid: 1308193a-4425-4fc9-95a0-2e7f6c271278
|
||||||
langcode: en
|
langcode: en
|
||||||
status: true
|
status: false
|
||||||
dependencies: { }
|
dependencies: { }
|
||||||
_core:
|
_core:
|
||||||
default_config_hash: MyY_Lp-SmU46vjiG1JfDXfyjoOc_O-YBiWnBlfDMC_8
|
default_config_hash: MyY_Lp-SmU46vjiG1JfDXfyjoOc_O-YBiWnBlfDMC_8
|
||||||
|
@ -46,29 +46,4 @@ expression:
|
||||||
id: rules_action_set
|
id: rules_action_set
|
||||||
uuid: 5c91a286-ea41-47f7-b6a9-451cb4bb2324
|
uuid: 5c91a286-ea41-47f7-b6a9-451cb4bb2324
|
||||||
weight: 0
|
weight: 0
|
||||||
actions:
|
actions: { }
|
||||||
-
|
|
||||||
id: rules_action
|
|
||||||
uuid: 9e184f51-443d-41ec-94c0-2c5ec5bdb1db
|
|
||||||
weight: -50
|
|
||||||
action_id: 'rules_entity_create:commerce_log'
|
|
||||||
context_values: { }
|
|
||||||
context_mapping: { }
|
|
||||||
context_processors: { }
|
|
||||||
provides_mapping:
|
|
||||||
commerce_log_created: mailjet_event_log_created
|
|
||||||
-
|
|
||||||
id: rules_action
|
|
||||||
uuid: 7eb49497-8830-46d4-975c-6b25b5d6dee6
|
|
||||||
weight: -49
|
|
||||||
action_id: rules_simplenews_mailjet_subscriptions_unsubscribe_from_list
|
|
||||||
context_values:
|
|
||||||
listID: mailjet_event.event_field
|
|
||||||
email: mailjet_event.event_field
|
|
||||||
context_mapping: { }
|
|
||||||
context_processors:
|
|
||||||
listID:
|
|
||||||
rules_tokens: { }
|
|
||||||
email:
|
|
||||||
rules_tokens: { }
|
|
||||||
provides_mapping: { }
|
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
name: Materio Mailjet
|
||||||
|
description: Add support for MailJet Webhooks.
|
||||||
|
package: Materio
|
||||||
|
type: module
|
||||||
|
core_version_requirement: ^8.8 || ^9
|
||||||
|
|
||||||
|
dependencies:
|
||||||
|
- mailjet:mailjet
|
|
@ -0,0 +1,7 @@
|
||||||
|
materio_mailjet.webhook:
|
||||||
|
path: '/materio_mailjet_webhook'
|
||||||
|
defaults:
|
||||||
|
_controller: 'Drupal\materio_mailjet\Controller\MaterioMailjetWebhookCallbackController::callback'
|
||||||
|
_title: 'Event callback'
|
||||||
|
requirements:
|
||||||
|
_access: 'TRUE'
|
|
@ -0,0 +1,116 @@
|
||||||
|
<?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');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue