]> _ Git - fluidbook-toolbox.git/commitdiff
wait #6626 @1.5
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 16 Jan 2024 15:40:44 +0000 (16:40 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 16 Jan 2024 15:40:44 +0000 (16:40 +0100)
app/Jobs/MailjetSyncList.php

index ff4744a2ec82e33a4e89a5e30bc8a944e8768a93..1b9885cae57a8de67eb0d8104106fff2880056a9 100644 (file)
@@ -11,6 +11,7 @@ use Egulias\EmailValidator\Validation\DNSCheckValidation;
 use Egulias\EmailValidator\Validation\MultipleValidationWithAnd;
 use Egulias\EmailValidator\Validation\RFCValidation;
 use Illuminate\Support\Facades\Cache;
+use Illuminate\Support\Facades\DB;
 use Mailjet\Client;
 use Mailjet\Resources;
 
@@ -23,7 +24,8 @@ class MailjetSyncList extends Base
      */
     public function handle()
     {
-
+        $this->syncStatusFromMailjet();
+        dump('Synced status from mailjet');
 
         $skippedCompanies = [];
         $companies = [];
@@ -106,6 +108,7 @@ class MailjetSyncList extends Base
         foreach ($contacts as $action => $list) {
             $this->addContactsToList($list, $action);
         }
+
     }
 
     protected function addContactsToList($contacts, $action = 'addnoforce')
@@ -134,6 +137,48 @@ class MailjetSyncList extends Base
         }
     }
 
+    protected function syncStatusFromMailjet()
+    {
+        $mj = static::_api();
+        $i = 0;
+        $batchs = 500;
+        $unsub = [];
+        $unsubEmails = [];
+        while (true) {
+            $response = $mj->get(Resources::$Listrecipient, ['filters' => ['ContactsList' => static::LIST_ID,
+                'Limit' => $batchs,
+                'Offset' => $i * $batchs,
+                'Unsub' => "true"]]);
+
+
+            foreach ($response->getData() as $contact) {
+                $unsub[] = $contact['ContactID'];
+            }
+
+            if ($response->getCount() < $batchs) {
+                break;
+            }
+            $i++;
+        }
+        while (true) {
+            $response = $mj->get(Resources::$Contact, ['filters' => ['ContactsList' => static::LIST_ID,
+                'Limit' => $batchs,
+                'Offset' => $i * $batchs,
+            ]]);
+
+            foreach ($response->getData() as $contact) {
+                if (in_array($contact['ID'], $unsub)) {
+                    $unsubEmails[] = $contact['Email'];
+                }
+            }
+            if ($response->getCount() < $batchs) {
+                break;
+            }
+            $i++;
+        }
+        DB::table('extranet_users.user')->whereIn('email', $unsubEmails)->update(['marketing' => 0]);
+    }
+
     /**
      * @return Client
      */