feat: add PayPal donation
This commit is contained in:
+235
@@ -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>
|
||||
Reference in New Issue
Block a user