diff --git a/config/sync/block.block.userlogin.yml b/config/sync/block.block.userlogin.yml index e23bab0..f877954 100644 --- a/config/sync/block.block.userlogin.yml +++ b/config/sync/block.block.userlogin.yml @@ -15,7 +15,7 @@ provider: null plugin: user_login_block settings: id: user_login_block - label: 'Membre access' + label: 'Accès membre' label_display: visible provider: user visibility: diff --git a/config/sync/core.extension.yml b/config/sync/core.extension.yml index 1610860..d48567d 100644 --- a/config/sync/core.extension.yml +++ b/config/sync/core.extension.yml @@ -140,6 +140,7 @@ module: materio_graphql: 0 materio_home: 0 materio_jsonapi: 0 + materio_mailjet: 0 materio_samples: 0 materio_sapi: 0 materio_simplenews: 0 diff --git a/config/sync/rules.reaction.mailjet_blocked_event.yml b/config/sync/rules.reaction.mailjet_blocked_event.yml index a47ab7e..609a37c 100644 --- a/config/sync/rules.reaction.mailjet_blocked_event.yml +++ b/config/sync/rules.reaction.mailjet_blocked_event.yml @@ -1,6 +1,6 @@ uuid: 230f2c4e-c4b4-4179-b9fb-c999cf7a2ddf langcode: en -status: true +status: false dependencies: { } _core: default_config_hash: 1yiBtHZuy8FsRApYQ9KutX2GXWP6ZmxePqYl2PlyYRo @@ -26,6 +26,8 @@ expression: - id: rules_condition uuid: 1c701012-abc3-4fbd-94ee-6e0e4d56b610 + condition_id: rules_data_comparison + negate: false context_values: operation: '==' value: blocked @@ -37,8 +39,6 @@ expression: value: rules_tokens: { } provides_mapping: { } - condition_id: rules_data_comparison - negate: false actions: id: rules_action_set uuid: c2a204bc-1679-415e-b67d-d7a2665f87ca diff --git a/config/sync/rules.reaction.mailjet_bounce_event_.yml b/config/sync/rules.reaction.mailjet_bounce_event_.yml index 4f7b686..e17f9f5 100644 --- a/config/sync/rules.reaction.mailjet_bounce_event_.yml +++ b/config/sync/rules.reaction.mailjet_bounce_event_.yml @@ -1,6 +1,6 @@ uuid: 391a5122-6639-4be1-ab72-cecd14167ca1 langcode: en -status: true +status: false dependencies: { } _core: default_config_hash: U_GmlNbp5E1n9UAmEVzmCbLUL5dMoYvsQ47BZrdUT6w @@ -26,6 +26,8 @@ expression: - id: rules_condition uuid: 10af217b-e797-4bcc-9789-d3ae3e333762 + condition_id: rules_data_comparison + negate: false context_values: operation: '==' value: bounce @@ -37,8 +39,6 @@ expression: value: rules_tokens: { } provides_mapping: { } - condition_id: rules_data_comparison - negate: false actions: id: rules_action_set uuid: 6f2219f0-df60-4f5d-9ebb-f4dc21e0d2af diff --git a/config/sync/rules.reaction.mailjet_click_event.yml b/config/sync/rules.reaction.mailjet_click_event.yml index 48a22ad..bc87275 100644 --- a/config/sync/rules.reaction.mailjet_click_event.yml +++ b/config/sync/rules.reaction.mailjet_click_event.yml @@ -1,6 +1,6 @@ uuid: 4396179b-baf3-4613-bdb0-a304d48261c1 langcode: en -status: true +status: false dependencies: { } _core: default_config_hash: DcQy3zLhh7gJFz1DMcClcpvGDtMeA0yio_sVGADE82o @@ -26,6 +26,8 @@ expression: - id: rules_condition uuid: ff98f6a0-0428-460f-808d-cd85da30812e + condition_id: rules_data_comparison + negate: false context_values: operation: '==' value: clicked @@ -37,8 +39,6 @@ expression: value: rules_tokens: { } provides_mapping: { } - condition_id: rules_data_comparison - negate: false actions: id: rules_action_set uuid: 5ef4a8a2-891d-4d6f-aaf5-4fd61fd88784 diff --git a/config/sync/rules.reaction.mailjet_open_event.yml b/config/sync/rules.reaction.mailjet_open_event.yml index b859520..b62fd66 100644 --- a/config/sync/rules.reaction.mailjet_open_event.yml +++ b/config/sync/rules.reaction.mailjet_open_event.yml @@ -1,6 +1,6 @@ uuid: 6f3712ca-b451-429d-816f-dd1c4063a9ae langcode: en -status: true +status: false dependencies: { } _core: default_config_hash: A3m7CCcbVLT6GKSYfmEL4doWJRPs332bdm4HX3Bxz2Q @@ -26,6 +26,8 @@ expression: - id: rules_condition uuid: 41580ec0-e516-4098-b1c7-034ab13db2f4 + condition_id: rules_data_comparison + negate: false context_values: operation: '==' value: open @@ -37,8 +39,6 @@ expression: value: rules_tokens: { } provides_mapping: { } - condition_id: rules_data_comparison - negate: false actions: id: rules_action_set uuid: 15a6fd6f-dcc5-4f05-8775-670a337c7823 diff --git a/config/sync/rules.reaction.mailjet_spam_event.yml b/config/sync/rules.reaction.mailjet_spam_event.yml index 7c2d51c..a5096b1 100644 --- a/config/sync/rules.reaction.mailjet_spam_event.yml +++ b/config/sync/rules.reaction.mailjet_spam_event.yml @@ -1,6 +1,6 @@ uuid: 4ee8baa3-ec10-4716-a490-c67888e601ec langcode: en -status: true +status: false dependencies: { } _core: default_config_hash: TuDPeYYD1x870iE1SLR_YFsuPC3oTRW8BO-coBkLXtc @@ -26,6 +26,8 @@ expression: - id: rules_condition uuid: 1053b6b5-efcb-4339-a618-ee4719cd41c6 + condition_id: rules_data_comparison + negate: false context_values: operation: '==' value: spam @@ -37,8 +39,6 @@ expression: value: rules_tokens: { } provides_mapping: { } - condition_id: rules_data_comparison - negate: false actions: id: rules_action_set uuid: 9e5b9e63-86a9-4740-b20d-c79ae00b74a8 diff --git a/config/sync/rules.reaction.mailjet_unsubscribe_event.yml b/config/sync/rules.reaction.mailjet_unsubscribe_event.yml index 78f7f8b..1c34255 100644 --- a/config/sync/rules.reaction.mailjet_unsubscribe_event.yml +++ b/config/sync/rules.reaction.mailjet_unsubscribe_event.yml @@ -1,6 +1,6 @@ uuid: 1308193a-4425-4fc9-95a0-2e7f6c271278 langcode: en -status: true +status: false dependencies: { } _core: default_config_hash: MyY_Lp-SmU46vjiG1JfDXfyjoOc_O-YBiWnBlfDMC_8 @@ -46,29 +46,4 @@ expression: id: rules_action_set uuid: 5c91a286-ea41-47f7-b6a9-451cb4bb2324 weight: 0 - 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: { } + actions: { } diff --git a/web/modules/custom/materio_mailjet/materio_mailjet.info.yml b/web/modules/custom/materio_mailjet/materio_mailjet.info.yml new file mode 100644 index 0000000..a6fe5fb --- /dev/null +++ b/web/modules/custom/materio_mailjet/materio_mailjet.info.yml @@ -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 diff --git a/web/modules/custom/materio_mailjet/materio_mailjet.routing.yml b/web/modules/custom/materio_mailjet/materio_mailjet.routing.yml new file mode 100644 index 0000000..5c105b4 --- /dev/null +++ b/web/modules/custom/materio_mailjet/materio_mailjet.routing.yml @@ -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' diff --git a/web/modules/custom/materio_mailjet/src/Controller/MaterioMailjetWebhookCallbackController.php b/web/modules/custom/materio_mailjet/src/Controller/MaterioMailjetWebhookCallbackController.php new file mode 100644 index 0000000..c45ddfa --- /dev/null +++ b/web/modules/custom/materio_mailjet/src/Controller/MaterioMailjetWebhookCallbackController.php @@ -0,0 +1,116 @@ +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'); + } + } + } + +}