info('Synchronisation ISPConfig MAIL'); $ispMail = new ISPConfigMailService(); //Récupération de tous les mail users $mailUsers = collect($ispMail->getAllMailUsers()); $progressBar = progress(label: 'ISPConfig Mail Members import', steps: $mailUsers->count()); $progressBar->start(); $emailToMailUserId = $mailUsers ->filter(fn ($u) => isset($u['email'], $u['mailuser_id'])) ->mapWithKeys(fn ($u) => [ strtolower($u['email']) => (int) $u['mailuser_id'], ]); $synced = 0; // Parcours des membres Member::whereNotNull('email')->chunk(100, function ($members) use ( $progressBar, $emailToMailUserId, $ispMail, &$synced ) { foreach ($members as $member) { $emails = array_map('trim', explode(';', $member->email)); $retzienEmail = collect($emails) ->map(fn ($e) => strtolower($e)) ->first(fn ($e) => str_ends_with($e, '@retzien.fr')); if (!$retzienEmail) { continue; } $mailUserId = $emailToMailUserId->get($retzienEmail); if (!$mailUserId) { $this->warn("Aucun mail user ISPConfig pour {$retzienEmail}"); continue; } //Récupération des données complètes de la boîte mail $mailUserData = $ispMail->getMailUserDetails($retzienEmail); // Création / mise à jour IspconfigMember::updateOrCreate( [ 'member_id' => $member->id, //@todo : 'ispconfig_client_id' => ?, 'type' => IspconfigType::MAIL, 'email' => $retzienEmail, ], [ 'ispconfig_service_user_id' => $mailUserId, 'data' => [ // @todo: traiter plus tard le cas de plusieurs mail pour un adhérent 'mailuser' => [$mailUserData], ], ] ); $synced++; $progressBar->advance(); } }); $progressBar->finish(); $this->info("{$synced} services mail synchronisés"); } }