feat(ISP config web and webhost imports)
All checks were successful
Deploy Roxane to Preprod / deploy (push) Successful in 43s

This commit is contained in:
2025-12-31 11:21:20 +01:00
parent 54f056ca5f
commit fb6c62f19c
11 changed files with 704 additions and 147 deletions

View File

@@ -0,0 +1,89 @@
<?php
namespace App\Console\Commands;
use App\Enums\IspconfigType;
use App\Models\IspconfigMember;
use App\Models\Member;
use App\Services\ISPConfig\ISPConfigMailService;
use Illuminate\Console\Command;
use function Laravel\Prompts\progress;
class SyncISPConfigMailMembers extends Command
{
protected $signature = 'sync:ispconfig-mail-members';
protected $description = 'Synchronise les services MAIL ISPConfig des membres - Email Retzien';
public function handle(): void
{
$this->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");
}
}