38394-vm/index.php
2026-02-13 06:51:33 +00:00

406 lines
14 KiB
PHP

<?php
require_once 'db/config.php';
// Language configuration
$lang = $_GET['lang'] ?? 'en';
if (!in_array($lang, ['en', 'ar'])) $lang = 'en';
$dir = ($lang === 'ar') ? 'rtl' : 'ltr';
// UI Text
$texts = [
'en' => [
'title' => 'Support a Cause',
'subtitle' => 'Empower communities worldwide through your generosity.',
'all_orgs' => 'All Organizations',
'raised' => 'Raised',
'of' => 'of',
'goal' => 'Goal',
'donate_now' => 'Donate Now',
'lang_name' => 'العربية',
'lang_code' => 'ar',
'hero_title' => 'Make a Real Impact Today',
'hero_sub' => 'Choose a campaign from our trusted partner organizations and help change lives in minutes.',
'no_cases' => 'No active cases found for this organization.',
'admin_panel' => 'Admin Panel',
'modal_title' => 'Make a Donation',
'modal_amount' => 'Amount (OMR)',
'modal_name' => 'Your Name',
'modal_email' => 'Your Email',
'modal_submit' => 'Proceed to Payment',
],
'ar' => [
'title' => 'ادعم قضية',
'subtitle' => 'مكن المجتمعات في جميع أنحاء العالم من خلال كرمك.',
'all_orgs' => 'جميع المؤسسات',
'raised' => 'تم جمع',
'of' => 'من',
'goal' => 'الهدف',
'donate_now' => 'تبرع الآن',
'lang_name' => 'English',
'lang_code' => 'en',
'hero_title' => 'أحدث تأثيراً حقيقياً اليوم',
'hero_sub' => 'اختر حملة من مؤسساتنا الشريكة الموثوقة وساعد في تغيير الأرواح في دقائق.',
'no_cases' => 'لا توجد حالات نشطة لهذه المؤسسة.',
'admin_panel' => 'لوحة التحكم',
'modal_title' => 'تبرع الآن',
'modal_amount' => 'المبلغ (ريال عماني)',
'modal_name' => 'الاسم',
'modal_email' => 'البريد الإلكتروني',
'modal_submit' => 'الانتقال للدفع',
]
];
$t = $texts[$lang];
// Database fetch
$pdo = db();
$orgs = $pdo->query("SELECT * FROM organizations")->fetchAll();
$selected_org = $_GET['org'] ?? 'all';
$sql = "SELECT c.*, o.name_en as org_name_en, o.name_ar as org_name_ar
FROM cases c
JOIN organizations o ON c.org_id = o.id";
if ($selected_org !== 'all') {
$sql .= " WHERE c.org_id = " . (int)$selected_org;
}
$cases = $pdo->query($sql)->fetchAll();
// Project meta
$projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? $t['subtitle'];
$projectImageUrl = $_SERVER['PROJECT_IMAGE_URL'] ?? '';
?>
<!DOCTYPE html>
<html lang="<?= $lang ?>" dir="<?= $dir ?>">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?= $t['title'] ?></title>
<!-- Meta Tags -->
<meta name="description" content="<?= htmlspecialchars($projectDescription) ?>">
<?php if ($projectImageUrl): ?>
<meta property="og:image" content="<?= htmlspecialchars($projectImageUrl) ?>">
<?php endif; ?>
<!-- Fonts & CSS -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<?php if ($lang === 'en'): ?>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
<?php else: ?>
<link href="https://fonts.googleapis.com/css2?family=Cairo:wght@400;500;600;700&display=swap" rel="stylesheet">
<?php endif; ?>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css">
<?php if ($lang === 'ar'): ?>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.rtl.min.css">
<?php endif; ?>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.1/font/bootstrap-icons.css">
<style>
:root {
--primary-color: #059669;
--primary-hover: #047857;
--bg-light: #f9fafb;
--text-main: #111827;
--text-muted: #6b7280;
--font-family: <?= ($lang === 'ar') ? "'Cairo', sans-serif" : "'Inter', sans-serif" ?>;
}
body {
font-family: var(--font-family);
background-color: var(--bg-light);
color: var(--text-main);
margin: 0;
padding: 0;
}
.navbar {
background: #fff;
border-bottom: 1px solid #e5e7eb;
padding: 1rem 0;
}
.brand-text {
font-weight: 700;
font-size: 1.5rem;
color: var(--primary-color);
text-decoration: none;
}
.hero {
padding: 5rem 0;
background: linear-gradient(rgba(255,255,255,0.9), rgba(255,255,255,0.9)), url('https://images.pexels.com/photos/6646917/pexels-photo-6646917.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1');
background-size: cover;
background-position: center;
text-align: center;
margin-bottom: 3rem;
}
.hero h1 {
font-size: 3rem;
font-weight: 800;
margin-bottom: 1.5rem;
letter-spacing: -0.025em;
}
.hero p {
font-size: 1.25rem;
color: var(--text-muted);
max-width: 700px;
margin: 0 auto;
}
.org-tabs {
margin-bottom: 2rem;
display: flex;
gap: 1rem;
overflow-x: auto;
padding-bottom: 1rem;
}
.org-tab {
padding: 0.5rem 1.5rem;
border-radius: 9999px;
background: #fff;
border: 1px solid #e5e7eb;
color: var(--text-muted);
text-decoration: none;
white-space: nowrap;
transition: all 0.2s;
}
.org-tab:hover, .org-tab.active {
background: var(--primary-color);
color: #fff;
border-color: var(--primary-color);
}
.case-card {
background: #fff;
border-radius: 12px;
overflow: hidden;
border: 1px solid #e5e7eb;
transition: transform 0.2s, box-shadow 0.2s;
height: 100%;
display: flex;
flex-direction: column;
}
.case-card:hover {
transform: translateY(-4px);
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
}
.case-image {
height: 200px;
width: 100%;
object-fit: cover;
}
.case-content {
padding: 1.5rem;
flex-grow: 1;
display: flex;
flex-direction: column;
}
.case-org {
font-size: 0.875rem;
color: var(--primary-color);
font-weight: 600;
margin-bottom: 0.5rem;
}
.case-title {
font-size: 1.25rem;
font-weight: 700;
margin-bottom: 1rem;
color: var(--text-main);
}
.progress-container {
margin: 1.5rem 0;
}
.progress {
height: 10px;
border-radius: 9999px;
background-color: #e5e7eb;
margin-bottom: 0.5rem;
}
.progress-bar {
background-color: var(--primary-color);
}
.progress-stats {
display: flex;
justify-content: space-between;
font-size: 0.875rem;
color: var(--text-muted);
}
.btn-donate {
background-color: var(--primary-color);
color: #fff;
border: none;
padding: 0.75rem 1.5rem;
border-radius: 8px;
font-weight: 600;
width: 100%;
transition: background 0.2s;
}
.btn-donate:hover {
background-color: var(--primary-hover);
color: #fff;
}
footer {
background: #fff;
border-top: 1px solid #e5e7eb;
padding: 3rem 0;
margin-top: 5rem;
text-align: center;
}
/* RTL Adjustments */
[dir="rtl"] .hero h1 {
letter-spacing: 0;
}
</style>
</head>
<body>
<nav class="navbar sticky-top">
<div class="container">
<a class="brand-text" href="index.php?lang=<?= $lang ?>">
<i class="bi bi-heart-fill me-2"></i>CharityHub
</a>
<div class="d-flex align-items-center gap-3">
<a href="admin/" class="text-decoration-none text-muted small"><i class="bi bi-person-lock me-1"></i><?= $t['admin_panel'] ?></a>
<a href="?lang=<?= $t['lang_code'] ?>" class="btn btn-outline-secondary btn-sm rounded-pill">
<i class="bi bi-translate me-1"></i><?= $t['lang_name'] ?>
</a>
</div>
</div>
</nav>
<header class="hero">
<div class="container">
<h1><?= $t['hero_title'] ?></h1>
<p><?= $t['hero_sub'] ?></p>
</div>
</header>
<main class="container">
<div class="org-tabs">
<a href="?lang=<?= $lang ?>&org=all" class="org-tab <?= $selected_org === 'all' ? 'active' : '' ?>">
<?= $t['all_orgs'] ?>
</a>
<?php foreach ($orgs as $org): ?>
<a href="?lang=<?= $lang ?>&org=<?= $org['id'] ?>" class="org-tab <?= $selected_org == $org['id'] ? 'active' : '' ?>">
<?= $lang === 'en' ? $org['name_en'] : $org['name_ar'] ?>
</a>
<?php endforeach; ?>
</div>
<div class="row g-4">
<?php if (empty($cases)): ?>
<div class="col-12 text-center py-5">
<i class="bi bi-search d-block mb-3 fs-1 text-muted"></i>
<p class="text-muted"><?= $t['no_cases'] ?></p>
</div>
<?php endif; ?>
<?php foreach ($cases as $case): ?>
<?php
$pct = min(100, round(($case['raised'] / $case['goal']) * 100));
?>
<div class="col-md-6 col-lg-4">
<div class="case-card">
<img src="<?= $case['image_url'] ?>" class="case-image" alt="Case Image">
<div class="case-content">
<span class="case-org"><?= $lang === 'en' ? $case['org_name_en'] : $case['org_name_ar'] ?></span>
<h3 class="case-title"><?= $lang === 'en' ? $case['title_en'] : $case['title_ar'] ?></h3>
<p class="text-muted flex-grow-1 small"><?= $lang === 'en' ? $case['desc_en'] : $case['desc_ar'] ?></p>
<div class="progress-container">
<div class="progress">
<div class="progress-bar" role="progressbar" style="width: <?= $pct ?>%" aria-valuenow="<?= $pct ?>" aria-valuemin="0" aria-valuemax="100"></div>
</div>
<div class="progress-stats">
<span><strong><?= $t['raised'] ?>:</strong> OMR <?= number_format($case['raised']) ?></span>
<span><strong><?= $t['goal'] ?>:</strong> OMR <?= number_format($case['goal']) ?></span>
</div>
</div>
<button class="btn btn-donate" data-bs-toggle="modal" data-bs-target="#donateModal"
data-case-id="<?= $case['id'] ?>"
data-case-title="<?= htmlspecialchars($lang === 'en' ? $case['title_en'] : $case['title_ar']) ?>">
<?= $t['donate_now'] ?>
</button>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
</main>
<!-- Donate Modal -->
<div class="modal fade" id="donateModal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<form action="checkout.php" method="POST">
<div class="modal-header">
<h5 class="modal-title"><?= $t['modal_title'] ?></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<p id="modalCaseTitle" class="fw-bold text-success"></p>
<input type="hidden" name="case_id" id="modalCaseId">
<div class="mb-3">
<label class="form-label"><?= $t['modal_amount'] ?></label>
<input type="number" name="amount" class="form-control form-control-lg" step="0.100" min="1" placeholder="5.000" required>
</div>
<div class="mb-3">
<label class="form-label"><?= $t['modal_name'] ?></label>
<input type="text" name="donor_name" class="form-control" placeholder="John Doe">
</div>
<div class="mb-3">
<label class="form-label"><?= $t['modal_email'] ?></label>
<input type="email" name="donor_email" class="form-control" placeholder="john@example.com">
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-success w-100 py-2 fw-bold"><?= $t['modal_submit'] ?></button>
</div>
</form>
</div>
</div>
</div>
<footer>
<div class="container">
<p class="mb-0 text-muted">&copy; <?= date('Y') ?> CharityHub. All rights reserved.</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script>
const donateModal = document.getElementById('donateModal');
if (donateModal) {
donateModal.addEventListener('show.bs.modal', event => {
const button = event.relatedTarget;
const caseId = button.getAttribute('data-case-id');
const caseTitle = button.getAttribute('data-case-title');
donateModal.querySelector('#modalCaseId').value = caseId;
donateModal.querySelector('#modalCaseTitle').textContent = caseTitle;
});
}
</script>
</body>
</html>