alpinux-portail/web/helloasso/renew.php
Alpinux fcdd094e26 Portail membres complet : profil, adhésion, historique, OTP
- Inscription sans redirection HelloAsso (acte volontaire séparé)
- Génération automatique d'identifiant AlpID (prenom.code mnémotechnique)
- Profil en tuiles : identité, compte, mot de passe, OTP, adhésion, adresse, connexions
- Double authentification : activation/suppression OTP via Keycloak
- Page d'accueil contextuelle (bienvenue si connecté, CTA adhésion si non adhérent)
- Historique des connexions avec statistiques et graphiques Chart.js
- Géocodage Nominatim + lien OpenStreetMap pour l'adresse
- HelloAsso : checkout intent, validation paiement, mise à jour Dolibarr

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-04 00:43:38 +02:00

92 lines
3.2 KiB
PHP

<?php
require_once __DIR__ . '/../inc/config.php';
require_once __DIR__ . '/../inc/auth.php';
require_once __DIR__ . '/../inc/helloasso.php';
require_once __DIR__ . '/../inc/dolibarr.php';
session_start_safe();
require_login();
$user = current_user();
$membership = doli_get_membership($user['email']);
$first_name = $membership['firstname'] ?? $user['username'];
$last_name = $membership['lastname'] ?? $user['username'];
$address = $membership['address'] ?? '';
$zip = $membership['zip'] ?? '';
$town = $membership['town'] ?? '';
$country = $membership['country_code'] ?? 'FR';
$errors = [];
// Si l'adresse est complète, on part directement vers HelloAsso
if ($address && $zip && $town && $_SERVER['REQUEST_METHOD'] !== 'POST') {
_redirect_to_helloasso($first_name, $last_name, $user['email'], $user['sub'], $address, $zip, $town, $country);
}
// Traitement du formulaire d'adresse
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$address = trim($_POST['address'] ?? '');
$zip = trim($_POST['zip'] ?? '');
$town = trim($_POST['town'] ?? '');
if (!$address) $errors[] = 'L\'adresse est obligatoire.';
if (!$zip) $errors[] = 'Le code postal est obligatoire.';
if (!$town) $errors[] = 'La ville est obligatoire.';
if (!$errors) {
_redirect_to_helloasso($first_name, $last_name, $user['email'], $user['sub'], $address, $zip, $town, $country);
}
}
function _redirect_to_helloasso(string $fn, string $ln, string $email, string $uid,
string $addr, string $zip, string $town, string $country): void {
try {
$checkout = ha_create_checkout($fn, $ln, $email, $uid, $addr, $zip, $town, $country);
header('Location: ' . $checkout['redirectUrl']);
exit;
} catch (Exception $e) {
set_flash('error', 'Impossible de créer le lien de paiement : ' . $e->getMessage());
header('Location: /dashboard.php');
exit;
}
}
$title = 'Renouveler mon adhésion';
require __DIR__ . '/../views/layout.php';
?>
<div class="card">
<h1>Renouveler mon adhésion</h1>
<p class="subtitle">Votre adresse postale est nécessaire pour finaliser l'adhésion.</p>
<?php if ($errors): ?>
<div class="alert alert-error">
<ul><?php foreach ($errors as $e): ?><li><?= htmlspecialchars($e) ?></li><?php endforeach; ?></ul>
</div>
<?php endif; ?>
<form method="post" novalidate>
<div class="form-group">
<label for="address">Adresse</label>
<input type="text" id="address" name="address" required
placeholder="1 rue de la Paix"
value="<?= htmlspecialchars($address) ?>">
</div>
<div class="form-row">
<div class="form-group">
<label for="zip">Code postal</label>
<input type="text" id="zip" name="zip" required maxlength="10"
value="<?= htmlspecialchars($zip) ?>">
</div>
<div class="form-group">
<label for="town">Ville</label>
<input type="text" id="town" name="town" required
value="<?= htmlspecialchars($town) ?>">
</div>
</div>
<button type="submit" class="btn-primary btn-full">Continuer vers le paiement</button>
</form>
</div>
<?php require __DIR__ . '/../views/layout_end.php'; ?>