- 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>
92 lines
3.2 KiB
PHP
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'; ?>
|