feat: add PayPal donation

This commit is contained in:
2025-09-28 20:39:47 +04:00
parent 1365953b97
commit 5bbc6f1c66
9 changed files with 737 additions and 0 deletions
+235
View File
@@ -0,0 +1,235 @@
<?php
/**
* Page de dons - Template d'exemple
*
* Pour personnaliser cette page :
* 1. Copiez ce fichier vers dons.php
* 2. Activez les dons dans config.local.php :
* define('DONATIONS_ENABLED', true);
* define('PAYPAL_ME_URL', 'https://www.paypal.com/paypalme/votre-compte');
* 3. Personnalisez le contenu selon vos besoins
*/
require_once 'includes/config.php';
require_once 'includes/security.php';
// Vérifier si les dons sont activés
if (!defined('DONATIONS_ENABLED') || !DONATIONS_ENABLED || empty(PAYPAL_ME_URL)) {
http_response_code(404);
include '404.php';
exit;
}
// Définir les headers de sécurité
setSecurityHeaders();
// Validation et nettoyage de l'URL PayPal
$paypalUrl = filter_var(PAYPAL_ME_URL, FILTER_VALIDATE_URL);
if (!$paypalUrl || !str_contains($paypalUrl, 'paypal.com/paypalme/')) {
http_response_code(500);
error_log('Configuration PayPal invalide: ' . PAYPAL_ME_URL);
include '500.php';
exit;
}
// Configuration des montants et devise
$donationAmounts = defined('DONATION_AMOUNTS') ? DONATION_AMOUNTS : [5, 10, 20, 50];
$currency = defined('DONATION_CURRENCY') ? DONATION_CURRENCY : 'EUR';
$currencySymbol = $currency === 'EUR' ? '€' : '$';
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- PERSONNALISEZ: Titre et description de votre page de dons -->
<title>Soutenir [VOTRE ORGANISATION] - Dons</title>
<meta name="description" content="Soutenez [VOTRE ORGANISATION] par un don. Chaque contribution compte pour [VOTRE CAUSE].">
<!-- Styles -->
<link rel="stylesheet" href="css/styles.css?v=<?php echo filemtime('css/styles.css'); ?>">
<link rel="stylesheet" href="css/donations.css?v=<?php echo filemtime('css/donations.css'); ?>">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/7.0.1/css/all.min.css" crossorigin="anonymous">
<!-- Favicons -->
<link rel="apple-touch-icon" sizes="180x180" href="img/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="img/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="img/favicon-16x16.png">
<link rel="manifest" href="manifest.json">
<!-- Schema.org pour les dons - PERSONNALISEZ -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "[VOTRE ORGANISATION]",
"description": "[DESCRIPTION DE VOTRE ORGANISATION]",
"url": "<?php echo htmlspecialchars($_SERVER['HTTP_HOST']); ?>",
"potentialAction": {
"@type": "DonateAction",
"target": {
"@type": "EntryPoint",
"urlTemplate": "<?php echo htmlspecialchars($paypalUrl); ?>"
}
}
}
</script>
</head>
<body>
<?php include 'includes/header.php'; ?>
<!-- Sidebar gauche -->
<div class="sidebar-container">
<?php include 'includes/sidebar.php'; ?>
</div>
<main class="main-content">
<div class="container">
<!-- En-tête de la page - PERSONNALISEZ -->
<section class="donation-hero">
<div class="donation-hero-content">
<h1><i class="fas fa-heart"></i> Soutenir [VOTRE ORGANISATION]</h1>
<p class="hero-subtitle">Votre soutien est essentiel pour [VOTRE CAUSE]</p>
</div>
</section>
<!-- Section principale de don -->
<section class="donation-main">
<div class="donation-content">
<div class="donation-message">
<!-- PERSONNALISEZ: Votre message de don -->
<h2>Pourquoi nous soutenir ?</h2>
<p>[VOTRE ORGANISATION] est [DESCRIPTION].
Vos dons nous permettent de :</p>
<ul>
<!-- PERSONNALISEZ: Vos objectifs -->
<li><i class="fas fa-bullhorn"></i> [OBJECTIF 1]</li>
<li><i class="fas fa-users"></i> [OBJECTIF 2]</li>
<li><i class="fas fa-laptop"></i> [OBJECTIF 3]</li>
<li><i class="fas fa-book"></i> [OBJECTIF 4]</li>
</ul>
<p><strong>Chaque don, même petit, fait la différence !</strong></p>
</div>
<!-- Interface de don -->
<div class="donation-interface">
<h3>Choisissez votre montant</h3>
<div class="donation-amounts">
<?php foreach ($donationAmounts as $amount): ?>
<button class="donation-btn"
data-amount="<?php echo $amount; ?>"
onclick="redirectToPayPal(<?php echo $amount; ?>)">
<?php echo $amount . $currencySymbol; ?>
</button>
<?php endforeach; ?>
</div>
<div class="custom-amount">
<label for="custom-amount-input">Ou entrez un montant personnalisé :</label>
<div class="custom-amount-input">
<input type="number"
id="custom-amount-input"
min="1"
max="10000"
step="1"
placeholder="Montant">
<span class="currency"><?php echo htmlspecialchars($currencySymbol); ?></span>
<button onclick="redirectToPayPalCustom()" class="btn-custom-donate">
Donner
</button>
</div>
</div>
<div class="donation-security">
<p><i class="fas fa-shield-alt"></i>
Paiement sécurisé via PayPal. Aucune donnée bancaire n'est stockée sur ce site.</p>
</div>
</div>
</div>
</section>
<!-- Informations supplémentaires - PERSONNALISEZ -->
<section class="donation-info">
<div class="info-grid">
<div class="info-card">
<i class="fas fa-server"></i>
<h4>Hébergement & Infrastructure</h4>
<p>Maintenir nos serveurs, notre plateforme et nos outils numériques, représente des coûts mensuels importants.</p>
</div>
<div class="info-card">
<i class="fas fa-tools"></i>
<h4>Maintenance & Développement</h4>
<p>Assurer la sécurité, les mises à jour et l'évolution de nos outils technologiques demande un investissement constant.</p>
</div>
<div class="info-card">
<i class="fas fa-shield-alt"></i>
<h4>Indépendance Numérique</h4>
<p>Vos dons nous permettent de rester indépendants des plateformes commerciales et de préserver notre souveraineté numérique.</p>
</div>
</div>
</section>
</div>
</main>
<?php include 'includes/footer.php'; ?>
<!-- Script de redirection PayPal -->
<script>
const PAYPAL_BASE_URL = <?php echo json_encode($paypalUrl, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT); ?>;
const CURRENCY = <?php echo json_encode($currency, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT); ?>;
function redirectToPayPal(amount) {
if (amount && amount > 0) {
// Construction de l'URL PayPal Me avec montant
const url = `${PAYPAL_BASE_URL}/${amount}${CURRENCY}`;
window.open(url, '_blank', 'noopener,noreferrer');
}
}
function redirectToPayPalCustom() {
const input = document.getElementById('custom-amount-input');
const amount = parseFloat(input.value);
if (!amount || amount <= 0) {
alert('Veuillez entrer un montant valide.');
input.focus();
return;
}
if (amount > 10000) {
alert('Le montant maximum est de 10000' + <?php echo json_encode($currencySymbol); ?> + '.');
return;
}
redirectToPayPal(amount);
}
// Permettre la validation par Entrée
document.getElementById('custom-amount-input').addEventListener('keypress', function(e) {
if (e.key === 'Enter') {
redirectToPayPalCustom();
}
});
// Highlight des boutons de montant
document.querySelectorAll('.donation-btn').forEach(btn => {
btn.addEventListener('click', function() {
// Retirer la classe active de tous les boutons
document.querySelectorAll('.donation-btn').forEach(b => b.classList.remove('active'));
// Ajouter la classe active au bouton cliqué
this.classList.add('active');
// Vider le champ personnalisé
document.getElementById('custom-amount-input').value = '';
});
});
// Réinitialiser la sélection si on tape dans le champ personnalisé
document.getElementById('custom-amount-input').addEventListener('input', function() {
document.querySelectorAll('.donation-btn').forEach(b => b.classList.remove('active'));
});
</script>
</body>
</html>