From 08fcb2dae02569891bb907d89217725c77b8bba6 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Mon, 1 Dec 2025 21:25:15 +0000 Subject: [PATCH] 0.2 --- add_user.php | 41 +++++ admin/bookings.php | 115 ++++++++++++++ admin/withdrawals.php | 193 ++++++++++++++++++++++++ admin_dashboard.php | 154 +++++++++++++++++++ ai_agent.php | 33 +++++ assets/css/auth.css | 132 +++++++++++++++++ assets/css/custom.css | 54 ------- assets/css/dashboard.css | 250 +++++++++++++++++++++++++++++++ assets/images/about-us.jpg | Bin 0 -> 83398 bytes auth.php | 54 ++++++- contact_error.php | 25 ++++ contact_success.php | 25 ++++ content.json | 19 +++ cron/process_passive_income.php | 60 ++++++++ dashboard.php | 208 +++++++++++++++++++------- db/setup.php | 153 ++++++++++++++++++- delete_user.php | 23 +++ edit_content.php | 83 +++++++++++ edit_user.php | 134 +++++++++++++++++ genealogy.php | 168 +++++++++++++++++++++ index.php | 207 ++++++++++++++++++++++---- ledger.php | 156 +++++++++++++++++++ login.php | 105 ++++++++----- mlm_logic.php | 255 ++++++++++++++++++++++++++++++++ register.php | 127 +++++++++------- submit_booking.php | 111 ++++++++++++++ submit_contact.php | 43 ++++++ withdraw.php | 149 +++++++++++++++++++ 28 files changed, 2847 insertions(+), 230 deletions(-) create mode 100644 add_user.php create mode 100644 admin/bookings.php create mode 100644 admin/withdrawals.php create mode 100644 admin_dashboard.php create mode 100644 ai_agent.php create mode 100644 assets/css/auth.css delete mode 100644 assets/css/custom.css create mode 100644 assets/css/dashboard.css create mode 100644 assets/images/about-us.jpg create mode 100644 contact_error.php create mode 100644 contact_success.php create mode 100644 content.json create mode 100644 cron/process_passive_income.php create mode 100644 delete_user.php create mode 100644 edit_content.php create mode 100644 edit_user.php create mode 100644 genealogy.php create mode 100644 ledger.php create mode 100644 mlm_logic.php create mode 100644 submit_booking.php create mode 100644 submit_contact.php create mode 100644 withdraw.php diff --git a/add_user.php b/add_user.php new file mode 100644 index 0000000..418b7d0 --- /dev/null +++ b/add_user.php @@ -0,0 +1,41 @@ +prepare('INSERT INTO users (name, email, password, referral_code, role, agent_tier, phone, company, notes) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)'); + $stmt->execute([$name, $email, $hashed_password, $referral_code, $role, $agent_tier, $phone, $company, $notes]); + + header('Location: admin_dashboard.php'); + exit; +} else { + header('Location: admin_dashboard.php'); + exit; +} +?> \ No newline at end of file diff --git a/admin/bookings.php b/admin/bookings.php new file mode 100644 index 0000000..7d48990 --- /dev/null +++ b/admin/bookings.php @@ -0,0 +1,115 @@ +prepare("UPDATE bookings SET status = 'approved' WHERE id = :id AND status = 'pending'"); + $stmt->execute([':id' => $bookingId]); + + // Calculate commissions + calculate_commissions($bookingId); + + $message = "Booking #$bookingId has been approved and commissions have been processed."; + } catch (Exception $e) { + $error = "Error approving booking: " . $e->getMessage(); + } + } elseif ($action === 'reject') { + $stmt = $db->prepare("UPDATE bookings SET status = 'rejected' WHERE id = :id AND status = 'pending'"); + $stmt->execute([':id' => $bookingId]); + $message = "Booking #$bookingId has been rejected."; + } +} + +// 3. Fetch Bookings +$db = db(); +$stmt = $db->query("SELECT b.*, u.name as user_name, u.email as user_email FROM bookings b JOIN users u ON b.user_id = u.id ORDER BY b.created_at DESC"); +$bookings = $stmt->fetchAll(PDO::FETCH_ASSOC); + +?> + + + + + + Manage Bookings + + + + +
+

Manage Bookings

+

Review, approve, or reject new bookings.

+ + +
+ + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDUserPlot IDAmountBooking DateProofStatusSubmitted AtActions

View Proof + +
+ + +
+
+ + +
+ +
+
+ Back to Dashboard +
+ + \ No newline at end of file diff --git a/admin/withdrawals.php b/admin/withdrawals.php new file mode 100644 index 0000000..eb66870 --- /dev/null +++ b/admin/withdrawals.php @@ -0,0 +1,193 @@ +prepare("SELECT * FROM withdrawals WHERE id = ? AND status = 'pending'"); + $stmt->execute([$withdrawal_id]); + $withdrawal = $stmt->fetch(); + + if ($withdrawal) { + try { + $db->beginTransaction(); + + if ($action === 'approve') { + // Update withdrawal status + $stmt = $db->prepare("UPDATE withdrawals SET status = 'approved', processed_at = CURRENT_TIMESTAMP WHERE id = ?"); + $stmt->execute([$withdrawal_id]); + + // Update the corresponding transaction description + $stmt = $db->prepare("UPDATE transactions SET description = 'Withdrawal approved and processed' WHERE type = 'withdrawal_request' AND related_withdrawal_id = ?"); + $stmt->execute([$withdrawal_id]); + + $message = 'Withdrawal has been approved.'; + + } elseif ($action === 'reject') { + $rejection_reason = $_POST['rejection_reason'] ?? 'Rejected by admin.'; + + // 1. Update withdrawal status + $stmt = $db->prepare("UPDATE withdrawals SET status = 'rejected', rejection_reason = ?, processed_at = CURRENT_TIMESTAMP WHERE id = ?"); + $stmt->execute([$rejection_reason, $withdrawal_id]); + + // 2. Refund the amount to the user's wallet + $stmt = $db->prepare("UPDATE users SET wallet_balance = wallet_balance + ? WHERE id = ?"); + $stmt->execute([$withdrawal['amount'], $withdrawal['user_id']]); + + // 3. Record the reversal transaction + $stmt = $db->prepare("INSERT INTO transactions (user_id, amount, type, description, related_withdrawal_id) VALUES (?, ?, 'withdrawal_reversal', ?, ?)"); + $stmt->execute([$withdrawal['user_id'], $withdrawal['amount'], 'Withdrawal request rejected. Amount refunded.', $withdrawal_id]); + + // 4. Invalidate the original withdrawal request transaction + $stmt = $db->prepare("UPDATE transactions SET description = 'Withdrawal request rejected' WHERE type = 'withdrawal_request' AND related_withdrawal_id = ?"); + $stmt->execute([$withdrawal_id]); + + + $message = 'Withdrawal has been rejected and the amount refunded.'; + } + + $db->commit(); + } catch (PDOException $e) { + $db->rollBack(); + $error = 'Database error: ' . $e->getMessage(); + } + } else { + $error = 'Invalid or already processed withdrawal request.'; + } +} + +// Pagination +$limit = 20; +$page = isset($_GET['page']) ? (int)$_GET['page'] : 1; +$offset = ($page - 1) * $limit; +$status_filter = $_GET['status'] ?? 'all'; + +// Fetch total withdrawals +$count_sql = "SELECT COUNT(*) FROM withdrawals w JOIN users u ON w.user_id = u.id"; +$params = []; +if($status_filter !== 'all') { + $count_sql .= " WHERE w.status = ?"; + $params[] = $status_filter; +} +$total_stmt = $db->prepare($count_sql); +$total_stmt->execute($params); +$total_withdrawals = $total_stmt->fetchColumn(); +$total_pages = ceil($total_withdrawals / $limit); + +// Fetch withdrawals with user info +$sql = "SELECT w.*, u.name as user_name, u.email as user_email FROM withdrawals w JOIN users u ON w.user_id = u.id"; +if($status_filter !== 'all') { + $sql .= " WHERE w.status = ?"; +} +$sql .= " ORDER BY w.created_at DESC LIMIT ? OFFSET ?"; +$stmt = $db->prepare($sql); +$params[] = $limit; +$params[] = $offset; +$stmt->execute($params); +$withdrawals = $stmt->fetchAll(); + +?> + + + + + + Manage Withdrawals + + + +
+

Manage Withdrawals

+ Back to Dashboard + + $message
"; ?> + $error"; ?> + + + +
+ + + + + + + + + + + + + + + + +
IDUserAmountDateStatusActions
' . htmlspecialchars($w['user_email']) . ''; ?> + +
+ + + +
+ + + + + + Processed on
+ Reason: ".htmlspecialchars($w['rejection_reason']).""; ?> + +
+
+ + + + + + + diff --git a/admin_dashboard.php b/admin_dashboard.php new file mode 100644 index 0000000..af1a446 --- /dev/null +++ b/admin_dashboard.php @@ -0,0 +1,154 @@ + + + + + + + Admin Dashboard + + + + + + + + +
+
+

User Management

+ +
+ +
+
+
+
+ + + + + + + + + + + + + + + query('SELECT id, name, email, phone, company, role, agent_tier FROM users ORDER BY id DESC'); + while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ''; + echo ""; + } + ?> + +
IDNameEmailPhoneCompanyRoleAgent TierActions
" . htmlspecialchars($row['id']) . "" . htmlspecialchars($row['name']) . "" . htmlspecialchars($row['email']) . "" . htmlspecialchars($row['phone']) . "" . htmlspecialchars($row['company']) . "" . htmlspecialchars($row['role']) . "" . htmlspecialchars($row['agent_tier']) . " + + +
+
+
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/ai_agent.php b/ai_agent.php new file mode 100644 index 0000000..c9c2a53 --- /dev/null +++ b/ai_agent.php @@ -0,0 +1,33 @@ + 'Please provide a message.']); + exit; +} + +$resp = LocalAIApi::createResponse([ + 'input' => [ + ['role' => 'system', 'content' => 'You are a helpful assistant for a real estate MLM company called Kutumbh Infra.'], + ['role' => 'user', 'content' => $user_message], + ], +]); + +if (!empty($resp['success'])) { + $text = LocalAIApi::extractText($resp); + if ($text === '') { + $decoded = LocalAIApi::decodeJsonFromResponse($resp); + $text = $decoded ? json_encode($decoded, JSON_UNESCAPED_UNICODE) : (string)($resp['data'] ?? ''); + } + $aiReply = $text; +} else { + error_log('AI error: ' . ($resp['error'] ?? 'unknown')); + $aiReply = 'Sorry, I am having trouble connecting to the AI service.'; +} + +header('Content-Type: application/json'); +echo json_encode(['reply' => $aiReply]); diff --git a/assets/css/auth.css b/assets/css/auth.css new file mode 100644 index 0000000..7ac7b97 --- /dev/null +++ b/assets/css/auth.css @@ -0,0 +1,132 @@ + +:root { + --primary-color: #6a11cb; + --secondary-color: #2575fc; + --input-bg: #f0f2f5; + --text-color: #333; + --light-text-color: #777; + --card-bg: #ffffff; + --box-shadow: 0 10px 40px rgba(0, 0, 0, 0.1); +} + +.auth-wrapper { + font-family: 'Poppins', sans-serif; + background: linear-gradient(135deg, var(--primary-color), var(--secondary-color)); + min-height: 100vh; + display: flex; + align-items: center; + justify-content: center; + color: var(--text-color); +} + +.auth-container { + display: flex; + width: 100%; + max-width: 1000px; + background-color: var(--card-bg); + border-radius: 20px; + box-shadow: var(--box-shadow); + overflow: hidden; + min-height: 600px; +} + +.auth-form-section { + flex: 1; + padding: 3rem 2.5rem; + display: flex; + flex-direction: column; + justify-content: center; +} + +.auth-branding-section { + flex: 1; + background: linear-gradient(135deg, var(--secondary-color), var(--primary-color)); + color: white; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + text-align: center; + padding: 3rem; +} + +.auth-branding-section h1 { + font-weight: 700; + font-size: 2.5rem; + margin-bottom: 1rem; +} + +.auth-branding-section p { + font-size: 1.1rem; + max-width: 350px; +} + +.auth-form-section h2 { + font-weight: 600; + font-size: 2rem; + margin-bottom: 0.5rem; +} + +.auth-form-section .lead { + color: var(--light-text-color); + margin-bottom: 2rem; +} + +.form-label { + font-weight: 500; +} + +.form-control { + background-color: var(--input-bg); + border: none; + border-radius: 10px; + padding: 12px 15px; + transition: all 0.3s ease; +} + +.form-control:focus { + background-color: var(--card-bg); + box-shadow: none; + border: 1px solid var(--primary-color); +} + +.input-group-text { + background-color: var(--input-bg); + border: none; + border-radius: 10px 0 0 10px; +} + +.btn-primary { + background: linear-gradient(135deg, var(--primary-color), var(--secondary-color)); + border: none; + border-radius: 10px; + padding: 12px; + font-weight: 600; + letter-spacing: 0.5px; + transition: all 0.3s ease; + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); +} + +.btn-primary:hover { + transform: translateY(-2px); + box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15); +} + +.auth-form-section a { + color: var(--primary-color); + text-decoration: none; + font-weight: 500; +} + +.auth-form-section a:hover { + text-decoration: underline; +} + +@media (max-width: 768px) { + .auth-container { + flex-direction: column; + } + .auth-branding-section { + display: none; /* Or a simplified version */ + } +} diff --git a/assets/css/custom.css b/assets/css/custom.css deleted file mode 100644 index fa9a2e1..0000000 --- a/assets/css/custom.css +++ /dev/null @@ -1,54 +0,0 @@ -body { - background-color: #f9fafb; - font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; - color: #111827; -} - -.card { - border-radius: 0.5rem; - border: 1px solid #e5e7eb; -} - -.btn-primary { - background-color: #1e3a8a; - border-color: #1e3a8a; -} - -.btn-primary:hover { - background-color: #1c327a; - border-color: #1c327a; -} - -.btn-secondary { - background-color: #f59e0b; - border-color: #f59e0b; -} - -.genealogy-tree ul { - padding-left: 20px; - list-style-type: none; -} - -.genealogy-tree li { - margin: 10px 0; - position: relative; -} - -.genealogy-tree li::before { - content: ''; - position: absolute; - top: -10px; - left: -20px; - border-left: 1px solid #ccc; - border-bottom: 1px solid #ccc; - width: 20px; - height: 20px; -} - -.genealogy-tree li:first-child::before { - border-top: 1px solid #ccc; -} - -.genealogy-tree li:last-child::before { - height: 20px; -} diff --git a/assets/css/dashboard.css b/assets/css/dashboard.css new file mode 100644 index 0000000..543f47e --- /dev/null +++ b/assets/css/dashboard.css @@ -0,0 +1,250 @@ +:root { + --primary-color: #6f42c1; + --secondary-color: #f8f9fa; + --text-color: #343a40; + --heading-font: 'Poppins', sans-serif; + --body-font: 'Poppins', sans-serif; + --sidebar-bg: #1e1e2d; + --sidebar-text: #a5a5a9; + --sidebar-active: #ffffff; + --content-bg: #f4f7f6; +} + +body { + font-family: var(--body-font); + color: var(--text-color); + background-color: var(--content-bg); +} + +.sidebar { + position: fixed; + top: 0; + left: 0; + height: 100%; + width: 260px; + background-color: var(--sidebar-bg); + padding-top: 20px; + transition: all 0.3s; + z-index: 1000; +} + +.sidebar .logo { + font-family: var(--heading-font); + font-weight: 700; + color: var(--sidebar-active) !important; + font-size: 1.5rem; + text-align: center; + display: block; + margin-bottom: 30px; +} + +.sidebar .nav-link { + color: var(--sidebar-text); + font-weight: 500; + padding: 12px 25px; + display: flex; + align-items: center; + transition: all 0.3s; +} + +.sidebar .nav-link i { + margin-right: 15px; + font-size: 1.1rem; + width: 20px; + text-align: center; +} + +.sidebar .nav-link:hover, +.sidebar .nav-link.active { + color: var(--sidebar-active); + background-color: rgba(255, 255, 255, 0.05); +} + +.sidebar .nav-item-header { + text-transform: uppercase; + font-size: 0.8rem; + font-weight: 600; + color: #4a4a5a; + padding: 10px 25px; + margin-top: 15px; +} + +.main-content { + margin-left: 260px; + padding: 0; + transition: all 0.3s; +} + +.header { + background-color: #fff; + padding: 20px 30px; + display: flex; + justify-content: space-between; + align-items: center; + border-bottom: 1px solid #e5e9f2; +} + +.wallet-card { + background: linear-gradient(135deg, var(--primary-color), #2575fc); + color: white; + border-radius: 15px; +} + +.wallet-balance { + font-weight: 700; +} + +.income-card { + background: #fff; + border: none; + border-radius: 15px; + box-shadow: 0 10px 30px rgba(0, 0, 0, 0.05); +} + +.income-card .card-body { + display: flex; + align-items: center; +} + +.income-card .icon { + font-size: 2.5rem; + margin-right: 20px; + padding: 20px; + border-radius: 50%; + background-color: rgba(0,0,0,0.05); +} + +.table-striped > tbody > tr:nth-of-type(odd) > * { + background-color: rgba(0,0,0,0.02); +} + +.feature-card { + background: white; + border-radius: 10px; + padding: 40px; + text-align: center; + box-shadow: 0 10px 30px rgba(0, 0, 0, 0.05); + transition: transform 0.3s; +} + +.feature-card:hover { + transform: translateY(-10px); +} + +.feature-icon { + font-size: 3rem; + color: var(--primary-color); + margin-bottom: 20px; +} +.chat-open-button { + position: fixed; + bottom: 20px; + right: 20px; + background-color: var(--primary-color); + color: white; + padding: 15px 20px; + border-radius: 50%; + cursor: pointer; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); + z-index: 1000; + border: none; + font-size: 24px; +} + +.chat-popup { + display: none; + position: fixed; + bottom: 20px; + right: 20px; + width: 350px; + height: 500px; + background-color: white; + flex-direction: column; + border-radius: 10px; + box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2); + z-index: 1001; +} +.chat-header { + background-color: var(--primary-color); + color: white; + padding: 15px; + border-top-left-radius: 10px; + border-top-right-radius: 10px; + display: flex; + justify-content: space-between; + align-items: center; +} +.chat-messages { + flex-grow: 1; + padding: 15px; + overflow-y: auto; + background-color: #f9f9f9; +} +.chat-input { + display: flex; + padding: 10px; + border-top: 1px solid #ddd; +} +.chat-message { + margin-bottom: 10px; + padding: 8px 12px; + border-radius: 18px; + max-width: 80%; +} +.user-message { + background-color: var(--primary-color); + color: white; + align-self: flex-end; + margin-left: auto; +} +.bot-message { + background-color: #e9e9eb; + color: var(--text-color); + align-self: flex-start; +} + +.nav-link-custom { + font-weight: 500; + color: var(--text-color); + transition: color 0.3s; + position: relative; + padding-bottom: 0.5rem; +} + +.nav-link-custom::after { + content: ''; + position: absolute; + bottom: 0; + left: 0; + width: 0; + height: 2px; + background-color: var(--primary-color); + transition: width 0.3s ease-in-out; +} + +.nav-link-custom:hover::after, .nav-link-custom.active::after { + width: 100%; +} + +.nav-link-custom:hover { + color: var(--primary-color); +} + +.navbar-nav .btn { + margin-left: 0.5rem; +} + +.btn-primary { + background-color: var(--primary-color); + border-color: var(--primary-color); +} + +.btn-primary:hover { + background-color: #5a3e9a; + border-color: #5a3e9a; +} + +.btn-outline-secondary:hover { + background-color: var(--primary-color); + color: white; +} \ No newline at end of file diff --git a/assets/images/about-us.jpg b/assets/images/about-us.jpg new file mode 100644 index 0000000000000000000000000000000000000000..57d13595d35d333178e037401794b2505db1bf20 GIT binary patch literal 83398 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

vUwV*Zo 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%0ASSKKtx|04KzP0dnh~OH zo3aZ?At3wEPLMs(hsoHo{g;b|3Vkv>kh=NSmu~DfMQ7>yxK)yh5BG0_SC(kC=w!Q$ zN2kEZcR!`=IBNL}%~$0ADUJ@e$v z(~<|2SOV`%LWmS`?M|OTpSJmiK`ZrsogF9}93trIqyH|_;^uu;Yt=1P8_MZuU|21K zV^`!wfpNst7V(J>-c9(PmxyNjOjSDLiJJQX*t=wfObF;d>EWgzlLBZzJ|xk^g05;J@ zL$Q6=**S3jffx9iiBnbTm;a2Tlec+eAQfHAmYJwysHfVZ$U*HUaLq|iu)4QghQpS& zb;Uok?Ear|>PJyZh&!&>K)ex6%6HGLEsITP}iz(>>gg?E z_LN-q*Klr^M0Pchi zQe|+25LX`36S^j`lAs4x4xfJ>cZu`V-fVWUzE?N(LTusXoxdr-E?Eyyy>F-akW81( zI%tJ>>ni99=6%yCn+VYry{xc5KL{!nh3qVK+dHi{br=nM2adHdGmcr|TLy4v*-aZn zAg%mnIPIY@^1I!TjdQKigLy~5++I%_ZkL6}!1YH%iwsDQ+XwZz20&Ztkg5a82~Dt9 zcW~J`5!>dth2QF~U=s@&q!0stI@DjOnYbAv^4hIj^HPmVycy+rePsP!r*AdwKaQw6 zOc3+K*Epy7K0@q1Ot~(sioqdcFeRxKo3Akr#JwqNGS)gqCHq~8;atr463#kyI(Dwp zH3~GCR*r_3ErovOQ?FpErQ1s)lEg#p+QsqCKpNAX>`fgM&lLGpiXFjrWkm5@<*4HI zJ9icA_DI6;+#pYOra^;_EWw-s(sFq_px92fwBQ+!5{)hG{-zga8ad#ypEK^uP5F8C zDsB0|M%x^f7EVYRoL0fd1z+9X@c6~y#kg@@1)U$ZmKXNhQ1Umi{o2q+57ftS7fnHF zkD=?^#t(&WI0$*8G>b;&lrO_S^spzzN>Sc4Y97l(?xl~>_l*EAVRKLG0->yF5qO}| z+uC5!3N{%@1k0dmLbT&Hui+9gqVMw5G+=v`_r7{V+Uq0JJ`>PqV&_ucMSs7eT#@t0 z_N`Bunb4qr-_e|LrGOG)TEd*3tz#{{&il~CkFX_(M3r@z)P~m&s$MZ7w|u2g7EX|= zchT-zloOs_i5RY?=^rxmY~?oA{4i4h9V1nb7A2de%WPT~l?oEUJm9PRX#g7U5?{s} zL=ylk%!>ZBKlnvm4=YWT4dZOshK3mRQIx_}OKkzI ztALAd!elzCq{7@1GcFlqaoSA?Gzd->jjXPjmE*3O^&-}5r=O{>DocKYuo`87qBdt3 z4pQgul-`XAKv~|rDn~bb7c(SslA^#+k!RS2bpgvpoXz8z)AwMFTCP;}&QA2F5D4N!X0Q&H9-E*ycc;$nKN zVmDk&m-0=gjO;#~YAM#{s0dCfOBS1w?OscRO(JRJtgcrWYpv@kWM4RUoTLiiyxWST za-(ZtSYnPu+e+VWsYO#5qhc(1rr|IOcCJNp`v!z|WnCM4;pt$+#3z+XDe-t_N7c^_ z_?ePN_pgcvc!bE_dlCE~ra)ZPwCB=NQW|~FfOm9Fwtd|!V-aRt7DFq@3Qgi{Y6l2L z9m_+W)0eimuBQKZZE9UC#*paM4_$j!<#fiSrRU!xCW5^2Sfp-uxG!9cR+b5p=cPAM7mvVh?WCzm`0jFtJN7%g+topTQ7S9Z6A2*@OE-r_s~F3; zf8KT?tUX-+tyI>mSX%f}V*20#bH%}0Tr*|T2B`1K3m@hyJ~|URC?@MA_cCaO6%-~q zw7dg)b!D(%8Yb1xHGMF2_qSHvN{KHVlN(H33-nitV4F8Xh*0yscI#x|Yn^!i{y)Y5`$A3fq2m$N#O0rIEx2Ybn&^ouAr#6X z?VeJ$vFT|Jp+h<}freE7Ymmn*qATexF6YE%Cj3c1J`ZflMP*3t9>49%2a2U44Cm>` z39E>)vtk!`o+Xfnt1lpAh*YWLo0n%&-wfcd!gz5CS^`P zDySILRQo_g`8H8vNKWuOpBi+s%PkhrBZbS8m^IE(Yka2#|x@!L0uAs`d@`q+!TeHpC%v z;5Fd@V?vff__q=6)cbsMXXnrI6pEQSlrdXB8&qo>IUqot%7`$RReq{&(c4ON z!-=JEQ*~M+trnIdT{K!zo247_u}C=!fzbntmE^=3mJc~Nb`}1?PS9iE z*xUO_Sy&vpF+$oZy*^M>R2+!A^0ZhT7kRXJTmeR4&5zsm(2xm|4-J;k>D&JID|Hak zDU)?o0&s)si-mz8P4T<`aSUl83-Px8YQNlP$7OE0?OHZk;8tnL@+Pa&pq`R2Y8i2dJAZu}S{YAZKVi1>&dB6!gyTzji zK@&@fDG8h|Ih`!FycHak@|Pyj{>EAUDrYqJZ!lIlsdN&x`Chv3KrAd-EXxU63Uy{I zNY_fO$9-9s8fo(ug;W6lmgasH2E-Ao>y~_A#;XtKmj1eJgx%l)jRaT)4}wBbRZHLt z6cslYP91@qIsb+-$01wPqQGzAD9$GdMa2?;Ww#7Pso0^|$=peN`aJ`NwJ$@(o<%9r zM`rmE7ET=7NcW7<5HFjorKd$k4g^-8I~aTtR(S4{lS5S_=48^%0iA?*;o+e8XCgyf zEw;S64QujkwazKnP$l#XQWsF$g?)!_-H2__hewWnlgVOQRwtjf-f38@$^8GOGwS@W{pME}=vN1y z`ONCG85t$1+3W=t$)LCZ$ze3O%+?;9^Gfdo47`y7OgN;ZX7a%XAO`h*X001l)} zQ$fCYC`g}c`G&Ym$wzZX!-N9q+ahW*-rTg=-hZjCxU2JV@4R@7lVkAMk1AfANSX7G z7mE{nO##o+s4sPno{Dy=PXq?^p-s313Y4G*lKQz?zEOhxZN$c*3nAaQuHi9 z+!$;uMbtZa-PqR1hWl-6JD#}t#U)*%>iIwIEYIilHMH|Ce#UWr`D(+`NI&ho?(vm> zla2M+N*X2gnX#S8v3DjvQD~RzM?=mtcZb~7&9~_**>}0E)CG7BE8vK@$fvlk*}2p0 zFsje%h3*vUrFqog;$g_rGm{OkWDXZ%MPfSf-ZMiTGV`R;v=ilT&ZV6S@{)f)sB{Rk zC9dM$!IZ2rjM051>nX!fMwP?Tn~89;c~jdBrt)w`Zx*FSjLsQ*%SDP;vobx3*H=|C zTG7QmQC|>ml0%Kg|6@d#t#DO~mW4(;<4NTpRmsB6RG+qAiP_p2?*sf@fCFpIWbKfq z9hv7nC4b~5f?xk5=&q4T?7`nN;8_;2GuIU)BFCK@rCD~fTHj?Va5Z{-X-W7) z_WoXW)9+x(EU$lH?JLd0z{`f$whcZ$Ut|h97$TIBy^J7?sSG?ac@mj5@SU^_@6Ym~ zfckUP?=%fMx91n^6+9GE*w#C69E>hU-YkDUVb~Saud5!+e44t^T_Q=kzoO-{i-?cx z?_e}~><1$;$C>)oJE&lL=w9+4YDof#v@3o#BzaRIq>ynH$S)Ol?kXE+)S7pU@AvKl zuaTGEr+FAEH@m>hWfr)4O3k%#tRk|Y3m)|35xTJ-Lu#2qBzJ5fohN`<7e)DVsM^wJ zfry_c$x_?UX0iKkMm!tgA_O^c6unOJ76>tubHYZKcO`aV@#FrCW=Kj!3U^r0Ofc`9 z_w+A^d~~-N>6c1hoau;jr9-4CfANDYbqz`5n7jg0u(0Kr@bGCW%t$kXkzL4o)C%Ph z{Keo2QS>hRkt*4C)b;{NQ)>+L_}vy$5hLeNVdM_+i3R~xg15{l8npM4J=BE6=$NCa zQ2ZkiilpHF5w6n1V?T7dj489cOZ4FXL6PlQatoEWg{B<;;=<*yd}wQR+wxr2Na;(( zzXeB16G9Rb>2Fxi2|?<9OC%F|LF{9tPZhaVHMRMBw;0~E@#Wl3JuH#ns!oUWA=8z! zIL{jJK!&+$xh2O!xV28tb5R-&e}jO%R}Io>ZR&B{Oztp56{n%Jp{M4*0_awx9pCHN zJbL@JuX#T_N2)ACK760h{^nWQl6;X4S=03w(wwJa*aPp7;E(I&0dC%dGW3Us^)Yvr zVDEf0{0LpEfmuNZ`T1Vpo^{O^XZ(~k_@o~%Uv5hpJ&FGILGI!ko2{$=tU+P^^zm7# z`llW)hEZDL$h^Yow_AfUKY^zvGMl9PQ%tCS2uuCyhkOCgs;DmE+NW$wPBs%cD&#&b zGS^Id$;n({&$+}r?p>Ko4O$BG;Huv+Z;S^7{Zx47Ln#k)zd}2hIQ!Pe{@#Bac3FST z*tAak-}S8mHN6iGoE8=pV;9Id#=4$+Sd1OXbVhrY=6y|Ff~nldc(STgfHP}5s>NFWyVV3 zGS+&y=4EP6ovrlX3E#Ey$3@f9NS=OTW0^Hwe@Zzx8;pKs%Dl$!FsM(=<3xS8zLVbk z9U70ipp-yKjd8~ma9o(b95PqxL%IR}8f*$pb)V|S{0L$K-|+q550~SO`mOFI70_~Z zCh>`cPi;O|ae>|uJ9axSpC=-mw1f?ofu3^G*JRS>ZCqpVE&ko_OSQX03I1c^r?twb z4h(6qae!kL>_nC$%59K$sc;k{k6|{gC>r+0j&g<0N16ps!^0pwOcu$%GF=E*XHO8b zyI{r2ep((hFa1jeGCTAN@y??(ql% zYRgdDOncae{^-+$hRjX(KHjR$ara9z5mN}S(+TA4t{Y$TIR&K-u3es7_-mfLEK^0v z^B-~1GdM_~PxH`;+H07!(eu}H@~k=bgjT#l`~Fu`K3U zpY`2>Rn^rK-{?OEj(Ecj*Vf8`a7vhZ*YWuVdY6TyO3!lcYT(80%V%_!vn|uj{$*4( zfo*0l20a=5q!Cn;R$Y8AN!e=B>j!YCbxSZJJpZ?prNeK;R9dIW+}jT&%EtA0cQ@oc zbWE6vXdl~Xtwb7?<#sXSbr2JuJvUO1f8@7AICm(E)_OaOlUR=>dSo>vN}a7VVQ@eS+)a@t zXRJms@sQPP#iKxuh7?&Z4rC=U=#rvKsluYTWE6xaa%4jKx{S(0Z2=EwHGi24s{-Ni z9GU-8y}V>3O4zB-H0%beWWAzJ2wix57CTVx0HEP_Fz(lwErx_=*GiMu8A>3@{@byr zSGq;w>RI-9mvmM|>#jPXAu2hWF4wiIj%);=zit_kL?@9lJefyVLC6W*!{{10lV&EY z`i8qx-ca;dbxuaEq#xS?RoqDE-3*j7)a1by!N(PM;gE66D#YdQvki@pYC>a+8J_Zf z*UrMywZiV8TUz{L;oNey<&@IT#t|ktW8ed7lg0*~{(uV`y(EbrVcTZso^Wi8MBc~(A{40QdQS;~u-Xkd1BX=^1=xUU_p zUS|hkseU#U=pG39a)ncSY3bKYEM?mEjYDb0aw98+5o+xGOKEfE>IGDS2}hrx+Te zhr^38g=Nwt`Nj~Um0pIE1N3-CbWS(gXqa-_ptT^Nxk|!UaQw=%S!-IJElN53A93io zrBKI~+8m&$J7OB(siR=qIq?~Ih{PxU zk4*Oa(wC3oN6=c64u=ZCO^GE|Z$ecg%4f)l$tRG8RU=OWZ)JrCbDvGBYy&D9-# z=O2oLV|b^BC;^Ci`C(N>$M`DSf>715JmHbXx|^m~Hc8Cw^f!18&HS-MxV{QB#7KE# zDaK3+U_P=X7~&pR=E~r%Uk^nP}) zUUzcP0kP-G5OO@?bFM}6Zf-g+wmR&*P*WIhPA~CO{0#P)UE_`0vq@?^@AOS{;E?=Y z;?+Z@L`TxAw=U(iH-z8)1nU_mo62(%gdEpU@d#S zYBrT-onN6_t0I84(d`v^N%34Ut9rc}g!pjt1}Yw1>zhU~zE-f=#FpIoR``|;9*lqE zY7lEsFH}zED?V`CadkDjT71UsEvW5`=-GClzvc_v?sSXM zKY}=;*Eo`2elHF+(2;pAZo}nvV@R`zU4>CNhjhNCg%x>v z`UVE_K>FUT`QpQ$NkXm2-j1{C(RudHT>KY6;|*DjTyUqrN_u5bos?cT9!^-)C<4tr zG;B{FH0Iy>%{#TLr$_L+N_m^H!L<G{{T|iOKX`=5KdsQ1|#g7!loffYd#YU#Job1)*9Jx?T3HG z3RY=M1Gb~7;wx)^#APj1D%-WsxBy@{D5b_xT$0kDt(dC65SPn!sqJG`zJ@_@JehafMIZdYun*RXJHQ$mAp#xL92Jin+L{8>gM>V@fvuC9+k4SmqBh=UN#<0tbL2@c|g=SHUi;(}D$} z03yUNQ4L#QmrO(mf*{J-V@WFY2`Vr+E)X~l_WuA8R->Bv9czCu3Yi)Fa|}u|fH<^G z2b9r9zvV<~__sB_(ttoRDWS*AubSGbo^i*h9c~m8X~sK((61+oezyQ>YeR>^Wd$r| zkDew0O6^;EWxCS=jV}UJP?f9(3>HD{U;V^ZgP>0u*0^+Jw5UHzXYBpjeUAy>*WDYkJaspmq zXl`h~#LM#mv(&o5^D|%6TUpJ_7t{p0q`gFPZsYsAlq4>bjDIm1aNztz6_V5Yf#3*T zta<_JMnd`tVoHrb;tge*MYP3&1{lJZ64qF{1;f+Cd3nX!aV&t`=nwUn1!9QJTFL!N zQzF*=Yvk$_EsF1)zN2CUrC!3b4{6wd;rN%+D_)OnM(sftf%OFB4X%NVS)LTZ>1D(R z47yGsnn8sE`gwq}vaFTtkUCnx2@g!tD>%S;A;5{IFVddn3f;(s$Y{4%8aW||Suqnt zSY*yz2T+`H#{@yFC)oH(6m}ig{JFRRxOjIm*u~BArE>kEG0GjKB07M&o`}9B(~T@? zXGi3QucdJk(aAt86qRU-U-bYf{gVb?iIlK?K=+8%cTq|W^aVD zyI3KHTg*3W|F)s@c?MmgL>Xfw%8H71fogjg0|cnV zyP0teGZ7LI60?hzjd_m)GU60-;123Jp;nS&uUFwUfBlr^O~3{Ni02DiE`NK7jEDl) z+25%`M@TxcAk*@){@@!A2;#ZSvCn$Dt|Rd!zMoHWn*n1q{re!^ORc~<kt+DRrmR zG%ipyNMMa77B$~<3d(V2uhZ&Tg$m(2%wctj!;etLqvrvD3@X;Q00I$i@N+5xAbScX z8XW;Suf%P`VcYy-TT4r~UlO6+mTVN=#uBh{kh1;3m_eQ=iwMBH3EH#K0fru>fNWDU zoaTdZBeF;bPu%1ROD`gpyCE{zOrEgxQf7+c)sYg-R6|19tC^+_1~7Nsj3_Yu#45{MNtu*C7}r%~`X3aI0@DwyH~*#_qMnV7NBa^k^{P4N+! zf08g$eiGmsfR!K7J1VI93!H0#UvvDY#0R$6u+?)?aUK@&d*{@ppq8q?X_y#4qftVFTrYw*T|7$oju;{!$x(oKf<*92oU=%{ z4%&xA3DGa*B2Dfz!)`Y+j5u3Rv}L}}@ihe$!g3Gw8xYwU2;cWDZI;7!zFwe;H1IFK z%mIQ1@-}?S0z-K-@aA5KO5F4CjR29GC)tb2!$XtqDsYddpP1z)9ss9N1(q+iP78#L zI#`a*#sDp4D9&)#aEnWa(5S>jRk^=#2*4G*d{kS@nQ(_?!ev+wUD=jYgPD`BFNs51 zQm-DL_95aPrisYCLXap@Q*KwTc$I8yWXH37#G%@r%IomKmdjx&xC#d%V{ZDq7@Yy=@QmVXqZ770+^9}!!C0ap^_sm zj0&>(sG)Vs1?jaGy3UEAtZpI-fKWh?q$R~H`j4Y-pC8m$0dZZe#-exfz~#%_t3)}5eIQqv@Q+%B z;IJ?L%RInf4(sAp#H*K_z$M;gn7TwFw-ew3FJ!eH>IznHmPrT*F2RgNXe~8Y@0eO5 zEO0o-5Ugr&Y4VAJ1&uygwhZ1&F&h_?q5FU!a1q8F#a-L53N=d&+-Azv+MrdljL)Dh z9zAyK#nektvaSL{w9dM4vY_d~XXZL-SY97Vs|=Z0)0A@~P3swI8g3xiGTX$eF?lJ3 zXqwQirzU#p6Dq#WqCc$;`|cy`n6X@aRJ~h5>aLx@^1*JP3=@n%A|@cTNVuAa(yxe) z9={TzgZY`D8pOMQGL5tSK!78@qP9@SG226GfV3+M^KlkB&4dDBqB&{?rDz-epaU@V zh@^KXx*(Xh2J;2D-ckrO!9>=UGL;mzbaEeuvMovgq#4}%fI&LnwRAMUyWjIzWW`%4Vn^$nGrB?4dAhy+22XF*hRkJXPY|Gjg0v0Lf z@c{!x4j}+&#$>KYF6E3`i*U5p$W&%y56r8Qeas9Wa4QIdEHSSJX_pDH^HEY6;uWqg zIdHq1cGTLCyh-4U;ji2+7yV1#;|yvzt-ulO;NXa9h{6mUvlGiI>eK>+R|68_jJ6Pd zwPD*5j6r2LE{N_|l3c*7u&WGFK*e#ySVvwK;`T4?F`gJY1ImR;w=otmL~w)PjOB+R z@en?uDK!!cYY-I46zKI32XOX&VuG(XF#iA$gIwG@z9~JzfE1d(VMb|R;Fb$fx?$QV zM&A8P*>P_kqQ1;$(Wn56YbA#CRCI7T>G$ytRFz|~*LZ}8dI)g*lRgS4&^f7()xtAaA;iX1IW5&i zim#KEhGl9MwiGy0tnGs7U{Gzi!R#9{v8)ADE>CjQFM2S37?{kKY5ny3n|UJsVR9fa zzNOQZ;iebj0ANEi3fUi+;)bC+vO>E4$QCwJq>+pLFq&I&1ks66Vk{7e-_(LJ`Hp*r z!*Zbo!(jgaiDjU_aRV>WESOQ^wKjTYzq$X5*rb zphH;`+(m@1W+35LbVIWz8VqsF-WIl&489x*8~`HYv#| zV3{Sb^Q4uAAgakV-I(kCuD>feHYZBQ|R|Hxx zoPl;Y_?N@DtOq}sV0K;4XX3Fg@I5&92GC@_gYH`K#sUpPvPN5T5$s}=s+Pgu4NyPK zy#gE2oTb+Ln(&4GOhq-(wpE zij`(| zK2G8QZEAHuKq(qXEjVG9KqENBhfpY&4>%7*v=@xU*=uF$83LSK+Gx?-aAK6E`(hPz zMnGnu!3Ow<@TJSy<75b%n}#@}nV2s)l~~VaKH%Y3P0Zy|(vN=Ngc8DEw~1`BT3>-^ z_z4m$cxIq1SBMC*mZzp7YG#d4Ig}cJY6NRU%dviVGyFg)U}Gl>{vlIkRj~Sw3=l|L z#Kl9zp!8e%faeel<(B7o`a;5K?xC=dGw6*-zJ}A;H>y}^gPe>aO%3N?7^^ZejAf<8 zzG2B(tc60$l!Diq#IkB!CJrFC4ajYU$IZPQ80<*?zp)| ztXSZkLX=vL1saJR%0mQl3e<7ZF&b)#vv3YAC{v zT6|OttbN98K2uijW@Q`+_?%PaGU)n&EW3sKofcJ|;t%A{TK>dVihNCmAfrTEkrJ75 zgQ$uKmREzqr9irbwf%&zbG154-Ajd0>plRNEG3ym=55c2l_L0N(={+Zc+lj;P;nj? zB{10R@R0!vE2KqQ3+VpuwbV6QCE9CWI638zM#`l z+-oS<{Yoq2Rlw|r0`eq#DEBQWG|RV_sf+qr$~QG7CF9~3Dky{0t@VnkjBeo|HUb#8 zn}u4dDka9jVRMAGb6{_2inNCY`-Y_atMKgcmKnzIWVVR?M*;W~oJ-qt>R$zZ(KurL z+-U^%MJNa2J>umA*GgAK+tE6$a-3$Pf6Gb!c^ zhz=t~Bw3~k%HCm103qy_GRQ$LQsU-SmO;`ivvDkeJB@L{=XAL{?{A+91Dd6?4*`hpi(C5!k}cUIR)c&@H&1WZJy#$v3uWUwtc7|R`rw~CaJ zE)z`jOV*(7p%q~A!Ats?wH2%rDH$9h0yPnF0*HyYmjPRb0*t`g7sN0M>s^P_#6VV< zLk&Bq?8-1;`i=r1vv}+>ly#Q#Ys-cfv68A~6Md?3uptvnO7=tK{(9@1R#wv8Qq~OLOWon1>Rz4z@YO?geN-S*Ayi1fNsk^QY zWu&Lg*+ck_OaiRM!qY$%KeTeCq1wJ?2y=$k{$&CwSlRqUx>j(tA9AS`kp#JmC9&!E z84(d0PD!>1w-azm(#%%#ElHrDnIy^>hQX9lUA#gJltXP|0nA%(Q#4bObF8JrFv%V2 zD6=uJX_myq77pl9)@K^*JuT+9Q+6RC$#2NN*73V?~!2dELUH(QMe zq=m!aPDrf8mf@7=!o)EgzNO;=@m0BEj1>jz+&5&=v3}T@jgr-7ztmxEu4#Jw_Z-vE zs>C#ll9<>0lPiOcIID!Q`dG`Ct{~{H4?F4i3ns`RL)t@uP^x_lbtr-=C><{qD)yQb zXg6=(RS_5qUuW+t`wF=aUo$Y?=u|;=szod0mGW>+K4smjVcmSdAhCsQb#Ng=WMyAk zmfPZ^BEFy+e4ok^wpQR|m^*B|$6z9-6z;iJk?LiIv0&sc|2$m&ROBkf2e4aG*Cmn35F|ltG~mW1%Vc0 zEr%K0s%P)tQG&4GmwU{`48djt=$aIPa$FZ96Qry#wjf|TlzXa@+n5bp2X0E`=3Gq$ zg(Gn;3-b(N!Vypo;s`Yi;;IP&%#^`56v-GND+2KdWz#ODVj}k~a7P)0V^7`zt6DA0 z7zJc){P7yB*e=TZIGbh|*#7`by4e=jRo3+ukwxLaK)0MvT>QcvNkxEgfhA}M33|S| zmTVr@74NvP3r7k%N7Sr@)~D;Gg||4eX`i^Vqz+?ssZ~#tXxWF*gdX<0pacB@1Z_Ph*IH*AAT96R8qXfK3Bu_bLTtv@Xw5f~Kzp-=-TiF&RBQ zkrU6rJ3KZ-sIxEuYAZq+h72mK9Ih!Tq-Gd1TJCcpDRS^?45F=BKa3^Cf z<6$&}xU_!Zg8mFtzj1GRhW>&gXNtOvp+!Q>#kxj!!df!mF^Eio_6PE_eI+^BJ zYbfSiJni;$zF=2TqT1&qWX8G8_uJdx3$r>0;ba zQJK*8)S}TSWs1h&7~PZKaH{mWg_WWlXD}`zg1ZrJz=Ckg8v=p7kn0Rn$h?t-O_ip- z&;P^#G7$g*0s#X90|WvA0|fyA000010ucic5+N}`Q3N1i6CyBiGJ%mJp|J%NKtfV- zV*lCz2mt~C0Y3mkD5ESCd0h)E+$KtUrD9?%l#Dsll|H1oAn4q09Jnu?E!Pa3=jD`P zZZgq(t@~LB+?TS1%Q8x$*qEe?EV9PSFWp+&EgOp#(r-l*X|&o-3Q=f6MG|hQA5Ekr zA+fS9nT~s-dONX1$-^(55jd6bTOjTzu|H+v$i*WRFYabl_OcIw6Jug#JdP}kl$D{y-J%j}sX1JV(GQ^_ z5pr~p@okFyZ8K{iswoM3ER#uDlQ#L^VLcR$#g<>T^j`KZno|=K6E9Cw7UG|QNXHG* z_!6W`qani+Chd{N*x;6sn~StZDrSeM#E6O%FGQB;XW(_a1ti=oKe zLfn_X)?}#dU0+fyrb2pj6B83J-(~9bWtLfFF;BW0uEmxq5^71WB%7UQV{YOQNo$o<{{VjG%Nx?n9LoGHZ&^ts+vtqB zT&CMXuL5tu2{WlwC!#E|GSRtsIVh*9EqEEUq;ag)jIzd~CCHPEs6>hX03s|>;K=Qi zL~RY2f`vYUJEVhJZrIz zHzToHqoM1i#AE%52t-i5ss1K&r#{YfXR43hQz18WMXw}h2(C$FzJ-sJN-p^l(k%_D z8xb#NEYgIn7_&ztQ(xLF$Bt8V6>OF{sZ(6|8f#3;l>LiH^wB{nUWt@b6J?&S8-H-G zN)VFvUWu3Z=%KACX(hqxqsnI3`973>*gVteN@+dAN$b>C%wM{XO zT&1NH%VI?hCaBMa!e0dm2?$!(v1wm|iW(_auc7K=aTtWe#Pw8gOBaHK$E1*#w;Uwj zALNDCF8)tR#x~DGn;theC(G!6)485mvlP>oX4URZf03$n?M|6F(lJHdy%W;3z6H>n z6r)U>9A!+Rh3u_s-+zM7tvJ8FJb6Op8I{43B6E5z5)^(IqWl|J@h8=i#?X!NyAmbKvEbSv_1 zEVgl_>d#QV?Gfp%Hopv)2Xr{5xhINI>B=vI3~okT7azBhN$8l0D5D-(LGZnPrw)dZLQfwVUp>}7>J^@Vr>gF$CbZ<$rQ%Y6rJ!x)#Qt&?R=QMOegTmS}#?*A00_eMK;Vn zqklaYZ)V;MxYU(0adC9S*%Pg|}i&kE^^W&4K@+4#l}d#pT&^I z_|})Qc%vd%WgeW0M&>SqEr@)wiA#g26+>K`Ur}Yr9+GAsQ)(&oGUZTRIeie*lexdt zQHuj|+}G)9nq0TRDc><1o9cRq#lqO4Brz0Fkr>;dLL-9mZ22}bYbl6+|o!!%~XWuvZ*lsDMgMJpvP!d5Y(5Au)y0HjT~DodXx zJSlSe`4ZUgu|B#=DfQBMBObj;=5k`K7`5caxU&W=^RC16*t`$YW4;?7q+O&xN0YNd z^x0Qo;>fzijXwn=YBrk7(AOoTgvPAH{Nw)s=@5!zl1iDEKFHAzR-9UJU4ND9m((S~ zB__lz9SLg{Y@^d-+aH!Oqv=Na3094fjC#@@I7!_qKke~8#QiKgHa|<@pZ3!7hng$7 zFHpNQOFjPp?8)WhixYQtIojwXdPn|}`1~)RxRAdB5tb30X`KqW6KX1#_9eNJ;R!Ro ziVcv$**3Z(3c1JkqL&Ub?cAK)owE#F+g-booMO2%XOy^I3(;9-=5TIBqReZHJw7ed z{SJ~oqU~a8w0R<*EZ+|% z`DLLrZ#NB`iY!rz8bl#%OQJ>$YB4f@HGKuPyAqn{igZg8Z2C<4PvBUWmQeI0+hvw>;Kdro+efH>>9TR?uc|vlM8At0aGag3)7Ql3m4`9mwRy`ZOxm^u0Yq zzW)H|o9*1XMmRY$D_HQ->cotA$C1aOJg!TX$kzgtUB2X+*q3rIN*d!wDjbVB5VVT1 zLOx7!q5YZZ<1P?)BVsE3quwkey~rqq+Z$##RpkrR!TA11ChjH6tkI2&0~ zE=KtaG>@+Q3p(&D(LStA(ef(tS!I{46j4PKV9e5{&#Z@-d06s4Bgyh_v9oaGDGli! zqKUdIu-%l(Vst4a`6l-@NW%zYR^KLhxpnE_j9jI{F+o9mn};HJw{+?>)21<3bB$h- zMHIxwzDhVK#FJx3BFiJ|Gwb{xS|Z5;;8abf(`!ECbdRYc>NDz``%z_yo0++mHdv%s z*=3<}aokc}i)EvFH=BzSFTzXob?-vKIe#gt_#p^IaBeJwT!(4dk};faiDPS~siT3t zc^hJ}CUPM(VXM;}*F%lZ?HYxy2|^x6iFrPYuA;{yY`hmW zJw$GE{)V)&^rD5W>Y5dc_o78IguX~eO7}v3Oly?S{h1vvMot!t5OKTjq@tvnW=v9q ztG8x%_EEwe35l3inA+O94M*UN6%mgwmL$`p%94Mx?oQ}(cAXNP*9?@^4aU0(Mu@>Q zDBbc?y0IyFGC0O8`ga*O)w?GO5*pUaWiyhCqmeBTt@bId$0Cb1l!c}HV!1Y$vN%60 z!HuTguh|`E1tmsEH71y!wb^2qCI@;#G1|Bs7V7vMX{4Cq;<#l=TNdlO9Gk8QO;G0= z6ODEu7_>$z*rUxRQ%{C9B+s~%r8jSkAvyNlzCi|jH{@(G<`<6 zq7&k%-itz#B{Y#ds-Fa=&C(l_Dd>?*P?v#WlNY9a+5Z4+ypAb46k|hLCMJl!b$-Yq zxE;`~B6yr58|u}OLw@M=M14f3jboGHbTVUce;Q=SqO6`*CNfA*OCpa>mL{VZExgmUu+loBj zxe-G}TQIAdzKfP-o1B%G?~g^MPg4o{br~hEE8iZP zEhzO6eOLBMSkvWL)(LzuM~=7hLkpAmBNUY{{8&s=W0Pd1!6LLmdRe=XNQ~H<6B|@Z zjzuw9jxEbq?1~c7DKyGDIu8Sy*lhTG>4K&@M25p?waIP2st&& z=!{T*&VSM}OYZySOTrdM%EuBuo>S&*jyT7Nuk1>T64C0Akd}!Nk700S{v>|}DYTt; z8@());~uQZ>X$@MD`mD>Un7#U)6MR$BK#Ivy&KWF7w%DZMhSH;7s#cLwHYH*QcI5J zcvQD`WE?z_n}q(y*Rdz|tLpn0@l>}yy^!V2)xY*7F7jx3B`3!pEL(4g?tVoKudCWZ zJS4gliuOGb6h#RXL35`p%lv<_E(PvnI%wKmOunWu=u0z`8x@j&C95|fvjo4@kMBz; zuWb}KMZ09NMfBil#h+40S()|4oeMNis~;nbo907;U1Y_N4|!R$)A?jJrNr%cWT2X+ zxFzZB{jHe4>C<0xeF;WUmA*+zUJ1OZa;V3SZ=Ju}920!D{{Y~GWY-NP@J1KK zvN04&(JD(u`QXV__+!w?nlb&EGdJ9AG150!)3U~&gKWGD6J&9;(<3Wd+0U^Jjg-c? zHjX6;CT%FLd;b7#ieLW#Kjiy7#7;l`NBk8yt7yk_d+5pvMZ6Yw8)a^?S2Ml%_zO7 zZMI6zMHw++ms9Br5)w$IqGmUx2^C0ZBI8=oqa(=~QE$5w;ESU4P+nvHO`aSD2|kVt zaBKNNSCm4OX*-Mm0Ag}&Ds?D}B;~`RmyxMHh)`WeB*;T|E$}3}boO=C>mH;~v`Aj2 zv+aF4e|k5hiYTJJx!2$Q4h-0hh^i3uuVQ2;e0LDp$wl&07M5O;ijt;f#^Lh3n~cboQqnsFQ=|!)4-^-ZYlNK{#fRd{ww^CGOn$Ex%EB=HqGp|QCeV338pJH!;B8o#= zSF_Zw^#1_8IVp`C92emWsE!6vLed!=NKG}P_djM#YFw_Pl{Sz6!~iuB00II50tNvC z0|EvD0|5X4009CK0}vqu5+E@_QDGAzaWH|A1u_&PGeAPIQqgju!SMgu00;pC0RcY% zXp7jfvlQ=UQAa4z7}6+uMkZ_yF4u4RBNHwuN>+u#$XqMF<~|#icHPli6iN|qb!2ek zU6K_eB2q%^F_c!5-iku#MCDLyLt0qSk%~OiNNJLZ%5t2g2^3LU?WLEZOyy@QDWTbo z7D?G>Gc1hUWS>fsV`C78lSJdoD$^ZPv`w!D6>%$JjEg*X5=55m6g90ATL}xHBR7OJ zY&JEo2OZ?eEyvrY&B|vhISy2EqL8AFR8X~{B8`U{DH{&7!z+*DM-wEgV;lRB#zAX1 zDI!s6(;=EEaYa%_|6qA9mX z#fOp=<@Y4CX%taKezG2xhY`eS`YGv#RVouQPLSQQJ)Ys~LR{nK3q1iYG4QsYSno!1{PRcP?ky zb~~a_+fL(+4kKMQ^{rT*sT5H}_^e(eMrumaD51rQEjuG@$c9J0k73P`O|dG~t3+eB zdo$$aq_<+vD*n;uoA5bJ`5e?$lbe&aJvdo&WBd&jrRzdM5;N@z_RiWhtYYNSUD=Ns zj8a|=$|n?dF2UJ!%Lm_@KETsNOo?HZ-KYyOnnqm zD_SU_B7`$yj8ds0F|;*BqnS|M_#)b5hFPl^3~-GkY>}sGHei-$u^o^!V>7e#MM-NsQdzR=-Ib8yje}v^JX{&K6gR5o1Ss`e(d;N`QA@1q=x z(<-U4GC5m~F|@{+Vv-zDTbveXr^v@cEMw@Qp~PsSzedhun6ku(J_bR&EGD0#`(U*pC-ENL21D-aQbBzB0FNBO=mT?l6J_-poo1-Rt znD{74{^wh>`hIy8&;4nvUSS!}bIY;13?w62w+;P7Qn=+Ex|0LAwu7a3FTjuKUtBy?Ic zVpEFphngPIE+PZs7lbY*OR|9h9 zU!_l&;!~F$jvlN30A^kn>NP9uaMHX`T`Db1j`-zr4 zGD$Xf>66~MTXE9HHdlNw&ehLOs0lsX+78yg!N z7K<#jS}h4L{Ek=u0Fh7GPuYV8EGcBmB;R!v{{ZQqG_vHB-*(77j1s(Ye+B9NLN%2? zYoTj;V|$UyOMb*;q_$&2DvRcI;H`-*XmL$b+{=R3+x!hQ_t}`Hrv&`@IYh?Q6UlwM z537#PDCCMyW!!|hqMyNsXwCUZZJ*Pm$ov&C{IS&@ zMzp;tl=Y@0$6k(7ibmxWHuQryDPAPK37p9Op-n}utJV*6cT7{19j0R9V=bk#5;IGd zCLSdzRJQpd(_1mbaT*&NWs`(vw_mvhEHmGDzax@D-@uV9P?vN|gln|Fl6dDH>8_ml zIp;6Qg;qGPf-`X$!toHr3A+2*r2P%sAvYG9*`p5=DaXG4Pra_B$mf3qm`DBqT4xAi7p!)({)eUGVqxp^1cUpW8mM_ zZT3urH%OlgF40ZWwmodamBLA;Vw`6b(9#=Tx>_12qO@b^MHEq+fz6ILI$syLD7vyY zwVV`^$@>UKb$Fz{2l_Z(#%1?wZ=)9#k{)e(WH_8zJHA))OBJ6%4J#L6q{zo|Ekzc{ z!rtPfkvUuVA=s8p#|TTjQJ;jTCmoX9$BoJQUd%XUEug6`^Jf#rLKuFIH+%ik_pC9_ za!M(-$>MO6jF^>nI7!W9Np^k5A+ZgXSlT5dm6FXn+px1s(mubmeQ1j$eVozuTI-aj zCvCQJvy~h>tdabPL)|n@RG;VcaI-go{)QeVc>Y(T9$4j%+Ufa2gI&<=30aN=n!Si5 zm9v`nGB%gw#f>*?%OsT>k!FANr~d%OoIV^e$MrJLZxLPD#PPGpxnuUlc8VM3{E)iS z7HQ+YS5Mg|Z+_-16QAJ6fkkXP(IKrUNg3z8BP{u1EYtRXh>)|tF&23FLd_3ioL`Yk zO>PY&p(6b}z$JtC+=KCfr86SfW4AhfiLJ`C&%P-I9<9nHV4@>HOh)z(FY12k5 zt1K;k>(MJr#}@Y{);RpW#yGagNnIG=lDGR4NQ0!ua+RE-jTyhvpZ@?C{{Tdr6daz$ z3=boID9Qajrkcp^zqYn1rX<_g!NNDZh`}XPGFmGnUXzzBTO0CbpEJ_WsK)e7*xNbU zRpeQwyo)r2o%%kq^hbyIqBs|kV~X&EgoP87TK%CX~8 z{{WNO5XULKj2tXuyWN$eN{&==qkji0WipKNw?*2s9}=y8y)&S%YR zu}D%mg{=t`#D7zd-52rtD2up~@A@pk9&E8+Bx2m(uE`lyRDY8mHQ&LSeDbB)5RWPx z?oPZIwkI<-dhNS7c)3Z=Ti0*N1l*1-N?7EhxYI`u3zhgnZL>BRWXi9yRAa)TwnB>< zXCUAtjfqJi&Tq0J+U{h?lv^9_%(HGrH}<;jH!BfnSt%b=V8 z*%$NrSf0jC{S~DY$|o=LqLcBt!K=!Q2|JZ`>_$#m8#2xIU%8GRP9rnsP>*(Ek7T@qE=HmN*h{cox1d9ohs2f z>^U|&8#g0*uB0tDu^o~9Lwpb6uhPQzGWXJ$qRK}!QO-8roRPb&&IxYW^(83PBwEJ{ z^Wem`+|8SoKlF@vB^#8#x&Hw4N9~EkaSAOjg(dAN>e+9GSeb1qHjSYtK! zD>37aJ(G3mk(K0Mlagtr;BK-u`*tR`(GhgW?vpu6)r}hxb-40N(Vl$LGTYeXV}m(# zEnr*Q z&hkr^JMa9MaPmb(ckax&7C5))mTZo0R$$_9XR{=Rm$7GjzRanu8!WRHR~PUmyP-5T zSv1@J;UcyunyA0QF7BA`T1P555%iGp4-+0a4iC}F%4Ygji3tf5R=N0CN!p6BaNh#q z#eyQng#(aCaS|v?NiomTIcEHcP@GF%2NcH%Ni`nkD6DDQ{G3i{<@;ivFTZCE1s$TT z`H@Nxw$a38c_r|>9HNN~{Hmq8_Hw4JJ&66J+^=SR-bbR-7EWIMg(O-U6R!oE>BUK` zZ$xsVl;tUu`l#hcB0icvnM1KRru{TgT2Vy{N*QhT92@S$k|~_5B7LAHWDk$Y;GMg6c1 z(8)_`=v((EjV}b6vnE+o*u^_vCP_(Dm*J3;XV#0Ggq1rS5-4k2 zIV)x=KHowpmt&28Z|)(KR*9B3rpN9p_FFBMS!N9L$28ZnX*C%x&2%j{=txAO-!8fiAI>lv_?7jV$#tmBaUm8espL{eH&*pFW}hN*rJX4 zRkI)Z5MK=CVu?Z$C`+QXYo^N^Gv;aXuiv3+hS`=@nlJ4{yO*jkW>MLkW@ydEye%O& z878}!vqvN^&y-3dTGEs~h)Zs}EV9efeOoW!a%Oq+Pw~=*HjK$A_aQD>Dl*Gz z_Dit(W8C7f^FC$W96osDOx#>cto2c zCw<7WtmQdM>1gsw4!Ewm>q1|qld*DaHKXqjkIG{j9et~ z@lJ7<*(JJqVaVY$(F~E2+p!s2*$b?xw zqXq50$dshpZSSRTt$(nTY(M-JE#B|g(AKmvhx$HxSkXcg*2~t*(`^;% z(m0u1>3HZ`IU%vVGE13}?j%X|A?Yb4-JJO(>N_uFF(~)l`+9KMxhL?*+bTZ>OmUQJ za&T$W8d^}qzt~yiVi9GQS!I`}GWIznw-oQP9Fkj^GC6sqW6Kn`*vrHuzTFX8A&h!u zl`8V|#=hb9W9mk1stGnjh|f9F$4lAtt*0&864w?9&FqYDsHN!@621(Wl+`kDadgM9 z*q2LR>}yF%s8X>zeTlhqRDW^YrOKYmxha3fKf5BSeX9Ogdnn!?(KZJ|08GCE#iLD6WoVIWz7WpRx|(;@9$IL$xW0tk-tJiW11YVS<2+}ifL}_$KOdiT}YR67Y#Xh*u%rdJ_QzpnaU=LHZ2Zm z5|U}B*_ko8NujcsqH?5A(8ef=C{89R)czUFDGEbv9L0#SHgDcTYdTMiu`6vn2Tz%W=uKZ@F5@@6fcH8`mVNI$oIDt7@3r zW%Weia6(I&`x1&<5v?0T%MN49c`O(DUVR64jXx@}MUB|eU9fvI=CX5dp;F|r) zUWT_MtrbkN{uzG^wdt3AnD=XK(4$TIXCzm%e?_I-=3+)nyqhlLZTH=ktCe&lA@(Nv zC&IaK{N8*1+9>b&>8^w>=Lr7*%X|40(ag?vU5yJ)Z952Q8L>FK@ud!E=YA2(?VETR zMLR1Y?LX?tW+O1vCqAE%ME+4d}34_hy%h5rCg_ZM-p%VMz{ry~?TMHDEZBuz$9 zS?A zRJD|?m!+HzKJ%}HN$znNex^3O_!_50Uf#yH>AsE)x6HqBL7z>ZO!{b1OTk)fH=?#x z6ix}MW^NV7cY_F5SvAC?V^k!TU ep8c7V9H8mwht&IPgNc+jd&mBW)S{YuGymDTj@Cc` literal 0 HcmV?d00001 diff --git a/auth.php b/auth.php index 4734aeb..af0b087 100644 --- a/auth.php +++ b/auth.php @@ -19,7 +19,7 @@ function register($name, $email, $password, $sponsor_code) { $referral_code = uniqid(); try { - $stmt = $db->prepare("INSERT INTO users (name, email, password, referral_code, sponsor_id) VALUES (?, ?, ?, ?, ?)"); + $stmt = $db->prepare("INSERT INTO users (name, email, password, referral_code, sponsor_id, role, agent_tier) VALUES (?, ?, ?, ?, ?, 'Agent', 'Normal')"); $stmt->execute([$name, $email, $password_hash, $referral_code, $sponsor_id]); return true; } catch (PDOException $e) { @@ -38,6 +38,7 @@ function login($email, $password) { if ($user && password_verify($password, $user['password'])) { $_SESSION['user_id'] = $user['id']; + $_SESSION['role'] = $user['role']; return true; } return false; @@ -56,3 +57,54 @@ function get_downline($user_id) { $stmt->execute([$user_id]); return $stmt->fetchAll(); } + +function is_logged_in() { + return isset($_SESSION['user_id']); +} + +function is_admin() { + return isset($_SESSION['role']) && $_SESSION['role'] === 'Admin'; +} + +function is_super_admin() { + return isset($_SESSION['role']) && $_SESSION['role'] === 'Super Admin'; +} + +function is_agent() { + return isset($_SESSION['role']) && $_SESSION['role'] === 'Agent'; +} + +function update_agent_tier($user_id) { + $db = db(); + $stmt = $db->prepare("SELECT cumulative_bookings, agent_tier FROM users WHERE id = ?"); + $stmt->execute([$user_id]); + $user = $stmt->fetch(); + + if (!$user) { + return; + } + + $cumulative_bookings = $user['cumulative_bookings']; + $current_tier = $user['agent_tier']; + $new_tier = 'Normal'; + + // Tier thresholds in INR + $tier_thresholds = [ + 'Diamond' => 1000000, + 'Gold' => 500000, + 'Silver' => 100000, + 'Normal' => 0 + ]; + + foreach ($tier_thresholds as $tier => $threshold) { + if ($cumulative_bookings >= $threshold) { + $new_tier = $tier; + break; + } + } + + if ($new_tier !== $current_tier) { + $stmt = $db->prepare("UPDATE users SET agent_tier = ? WHERE id = ?"); + $stmt->execute([$new_tier, $user_id]); + } +} diff --git a/contact_error.php b/contact_error.php new file mode 100644 index 0000000..60f69d5 --- /dev/null +++ b/contact_error.php @@ -0,0 +1,25 @@ + + + + + + + Error | <?php echo htmlspecialchars($content['site_title']); ?> + + + + +

+ + \ No newline at end of file diff --git a/contact_success.php b/contact_success.php new file mode 100644 index 0000000..dfc77dc --- /dev/null +++ b/contact_success.php @@ -0,0 +1,25 @@ + + + + + + + Message Sent | <?php echo htmlspecialchars($content['site_title']); ?> + + + + +
+
+
+

Message Sent!

+

Thank you for contacting us. We will get back to you shortly.

+ Go back to Homepage +
+
+
+ + \ No newline at end of file diff --git a/content.json b/content.json new file mode 100644 index 0000000..8daaedb --- /dev/null +++ b/content.json @@ -0,0 +1,19 @@ +{ + "site_title": "Kutumbh Infra - Welcome to the Future of Real Estate", + "site_name": "Kutumbh Infra", + "hero_title": "Welcome to the Future of Real Estate", + "hero_subtitle": "Your partner in building a successful real estate business.", + "about_us_title": "About Our Mission", + "about_us_content_1": "We are dedicated to redefining the real estate landscape. Our mission is to empower individuals to achieve financial independence through our innovative multi-level marketing (MLM) platform.", + "about_us_content_2": "Our company is built on a foundation of integrity, transparency, and a deep understanding of the real estate market. We provide our members with the tools, training, and support they need to thrive.", + "features_title": "Why Choose Us?", + "feature_1_title": "Innovative Platform", + "feature_1_content": "Access a wide range of properties with our user-friendly platform, designed for you to easily search, filter, and manage listings.", + "feature_2_title": "Growth Opportunity", + "feature_2_content": "Our MLM program is designed to help you build a successful business with a competitive commission structure and a supportive community.", + "feature_3_title": "Cutting-Edge Tools", + "feature_3_content": "We provide advanced analytics, marketing materials, and a CRM system to help you manage leads and close deals efficiently.", + "contact_us_title": "Get In Touch", + "contact_us_content": "Have questions? We're here to help. Reach out to us to learn more about our program and join the Kutumbh Infra family.", + "contact_us_button_text": "Contact Us Now" +} \ No newline at end of file diff --git a/cron/process_passive_income.php b/cron/process_passive_income.php new file mode 100644 index 0000000..bfd1119 --- /dev/null +++ b/cron/process_passive_income.php @@ -0,0 +1,60 @@ +beginTransaction(); + +try { + // 1. Find pending payments + $stmt = $db->prepare("SELECT * FROM passive_income_schedule WHERE status = 'pending' AND payment_date <= CURDATE()"); + $stmt->execute(); + $pending_payments = $stmt->fetchAll(PDO::FETCH_ASSOC); + + if (empty($pending_payments)) { + echo "No pending passive income payments to process.\n"; + $db->commit(); + exit; + } + + echo "Found " . count($pending_payments) . " pending payment(s).\n"; + + foreach ($pending_payments as $payment) { + $userId = $payment['user_id']; + $amount = $payment['amount']; + $scheduleId = $payment['id']; + + // 2. Insert into transactions + $trans_stmt = $db->prepare( + "INSERT INTO transactions (user_id, amount, type, description, related_user_id) VALUES (:user_id, :amount, 'passive_income', :description, NULL)" + ); + $trans_stmt->execute([ + ':user_id' => $userId, + ':amount' => $amount, + ':description' => 'Monthly passive income payment from schedule #' . $scheduleId + ]); + + // 3. Update user's wallet + $user_stmt = $db->prepare("UPDATE users SET wallet_balance = wallet_balance + :amount, total_passive_income = total_passive_income + :amount WHERE id = :user_id"); + $user_stmt->execute([':amount' => $amount, ':user_id' => $userId]); + + // 4. Update schedule status to 'paid' + $schedule_stmt = $db->prepare("UPDATE passive_income_schedule SET status = 'paid' WHERE id = :id"); + $schedule_stmt->execute([':id' => $scheduleId]); + + echo "Processed payment for user #$userId (Amount: $amount).\n"; + } + + $db->commit(); + echo "Passive income processing finished successfully.\n"; + +} catch (Exception $e) { + $db->rollBack(); + echo "Error processing passive income: " . $e->getMessage() . "\n"; + // It's crucial to log this error to a file in a real-world scenario + error_log("Passive Income Cron Failed: " . $e->getMessage()); +} \ No newline at end of file diff --git a/dashboard.php b/dashboard.php index 2a9433d..d0e8748 100644 --- a/dashboard.php +++ b/dashboard.php @@ -1,78 +1,186 @@ prepare("SELECT * FROM users WHERE id = :id"); +$stmt->execute([':id' => $_SESSION['user_id']]); +$user = $stmt->fetch(PDO::FETCH_ASSOC); +// Fetch last 5 transactions +$stmt = $db->prepare("SELECT * FROM transactions WHERE user_id = :user_id ORDER BY created_at DESC LIMIT 5"); +$stmt->execute([':user_id' => $_SESSION['user_id']]); +$recent_transactions = $stmt->fetchAll(PDO::FETCH_ASSOC); + +$site_name = 'Kutumbh Infra'; ?> - + - Dashboard + + + Dashboard - <?php echo htmlspecialchars($site_name); ?> - + + + - + -
-
-
-
-
Dashboard
-
-

Welcome, !

-

Your referral code is:

-

Your user type is:

+
+ +
+
+
+
+
Wallet Balance
+

+ Request Withdrawal +
-
-
-
-
-
Genealogy Tree
-
-
    - -
  • Upline:
  • - -
  • - You: - 0): ?> -
      - -
    • ()
    • - -
    - -

    You have no direct downline members yet.

    - -
  • -
+ +
+
+
+
+
+
+
Direct Income
+

+
+
+
+
+
+
+
+
+
+
Team Income
+

+
+
+
+
+
+
+
+
+
+
Leg Match Bonus
+

+
+
+
+
+
+
+
+
+
+
Passive Income
+

+
+
-
+ + +
+
+
+
+
Recent Transactions
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
DateTypeAmountDescription
No recent transactions.
+
+ +
+
+
+
+
+ + diff --git a/db/setup.php b/db/setup.php index 496f6ef..f656ec9 100644 --- a/db/setup.php +++ b/db/setup.php @@ -1,21 +1,164 @@ exec($sql); + echo $message . "
"; + } catch (PDOException $e) { + // Suppress errors if the alteration already exists, but show others + if (!str_contains($e->getMessage(), 'Duplicate') && !str_contains($e->getMessage(), 'already exists') && !str_contains($e->getMessage(), 'Unknown table')) { + echo "Error: " . $e->getMessage() . "
"; + } + } +} + try { $db = db(); - $sql = "CREATE TABLE IF NOT EXISTS `users` ( + + // 0. Drop dependent tables first to avoid foreign key issues + run_sql($db, "DROP TABLE IF EXISTS `passive_income_schedule`", "Table 'passive_income_schedule' dropped if exists."); + run_sql($db, "DROP TABLE IF EXISTS `commissions`", "Table 'commissions' dropped if exists."); + run_sql($db, "DROP TABLE IF EXISTS `wallet_ledger`", "Table 'wallet_ledger' dropped if exists."); + + // 1. Users table + $sqlUsers = "CREATE TABLE IF NOT EXISTS `users` ( `id` INT AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(255) NOT NULL, `email` VARCHAR(255) NOT NULL UNIQUE, `password` VARCHAR(255) NOT NULL, `referral_code` VARCHAR(50) NOT NULL UNIQUE, `sponsor_id` INT NULL, - `user_type` ENUM('Normal', 'Silver', 'Gold') NOT NULL DEFAULT 'Normal', + `role` ENUM('Super Admin', 'Admin', 'Finance', 'Agent', 'Support') NOT NULL DEFAULT 'Agent', + `agent_tier` ENUM('Normal', 'Silver', 'Gold', 'Diamond') NULL DEFAULT 'Normal', + `cumulative_bookings` DECIMAL(15, 2) DEFAULT 0.00, + `phone` VARCHAR(255) NULL, + `company` VARCHAR(255) NULL, + `notes` TEXT NULL, + `wallet_balance` DECIMAL(15, 2) NOT NULL DEFAULT 0.00, + `total_direct_income` DECIMAL(15, 2) NOT NULL DEFAULT 0.00, + `total_team_income` DECIMAL(15, 2) NOT NULL DEFAULT 0.00, + `total_passive_income` DECIMAL(15, 2) NOT NULL DEFAULT 0.00, + `total_leg_match_income` DECIMAL(15, 2) NOT NULL DEFAULT 0.00, `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (sponsor_id) REFERENCES users(id) ON DELETE SET NULL )"; - $db->exec($sql); - echo "Table 'users' created successfully."; + run_sql($db, $sqlUsers, "Table 'users' created or already exists."); + + // Add columns to users table if they don't exist + run_sql($db, "ALTER TABLE users ADD COLUMN wallet_balance DECIMAL(15, 2) NOT NULL DEFAULT 0.00", "Column 'wallet_balance' added to 'users' table."); + run_sql($db, "ALTER TABLE users ADD COLUMN total_direct_income DECIMAL(15, 2) NOT NULL DEFAULT 0.00", "Column 'total_direct_income' added to 'users' table."); + run_sql($db, "ALTER TABLE users ADD COLUMN total_team_income DECIMAL(15, 2) NOT NULL DEFAULT 0.00", "Column 'total_team_income' added to 'users' table."); + run_sql($db, "ALTER TABLE users ADD COLUMN total_passive_income DECIMAL(15, 2) NOT NULL DEFAULT 0.00", "Column 'total_passive_income' added to 'users' table."); + run_sql($db, "ALTER TABLE users ADD COLUMN total_leg_match_income DECIMAL(15, 2) NOT NULL DEFAULT 0.00", "Column 'total_leg_match_income' added to 'users' table."); + run_sql($db, "ALTER TABLE users MODIFY cumulative_bookings DECIMAL(15, 2) DEFAULT 0.00", "Column 'cumulative_bookings' in 'users' table modified."); + run_sql($db, "ALTER TABLE users MODIFY `role` ENUM('Super Admin', 'Admin', 'Finance', 'Agent', 'Support') NOT NULL DEFAULT 'Agent'", "Column 'role' in 'users' table modified."); + + + // 2. Bookings table + $sqlBookings = "CREATE TABLE IF NOT EXISTS `bookings` ( + `id` INT AUTO_INCREMENT PRIMARY KEY, + `user_id` INT NOT NULL, + `plot_id` VARCHAR(255) NOT NULL, + `amount` DECIMAL(15, 2) NOT NULL, + `booking_date` DATE NOT NULL, + `proof_document` VARCHAR(255) NOT NULL, + `status` ENUM('pending', 'approved', 'rejected') NOT NULL DEFAULT 'pending', + `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE + )"; + run_sql($db, $sqlBookings, "Table 'bookings' created or already exists."); + run_sql($db, "ALTER TABLE bookings MODIFY amount DECIMAL(15, 2) NOT NULL", "Column 'amount' in 'bookings' table modified."); + + // 3. Transactions table (replaces wallet_ledger and commissions) + $sqlTransactions = "CREATE TABLE IF NOT EXISTS `transactions` ( + `id` INT AUTO_INCREMENT PRIMARY KEY, + `user_id` INT NOT NULL, + `amount` DECIMAL(15, 2) NOT NULL, + `type` ENUM('commission_direct', 'commission_team', 'passive_income', 'leg_match_bonus', 'withdrawal', 'withdrawal_fee', 'deposit', 'booking_refund') NOT NULL, + `description` TEXT, + `related_booking_id` INT NULL, + `related_user_id` INT NULL, + `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, + FOREIGN KEY (related_booking_id) REFERENCES bookings(id) ON DELETE SET NULL, + FOREIGN KEY (related_user_id) REFERENCES users(id) ON DELETE SET NULL + )"; + run_sql($db, $sqlTransactions, "Table 'transactions' created or already exists."); + + // 4. Withdrawals table + $sqlWithdrawals = "CREATE TABLE IF NOT EXISTS `withdrawals` ( + `id` INT AUTO_INCREMENT PRIMARY KEY, + `user_id` INT NOT NULL, + `amount` DECIMAL(15, 2) NOT NULL, + `status` ENUM('pending', 'approved', 'rejected') NOT NULL DEFAULT 'pending', + `rejection_reason` TEXT NULL, + `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + `processed_at` TIMESTAMP NULL, + FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE + )"; + run_sql($db, $sqlWithdrawals, "Table 'withdrawals' created or already exists."); + run_sql($db, "ALTER TABLE withdrawals MODIFY amount DECIMAL(15, 2) NOT NULL", "Column 'amount' in 'withdrawals' table modified."); + + // 5. Leg Milestones table + $sqlLegMilestones = "CREATE TABLE IF NOT EXISTS `leg_milestones` ( + `id` INT AUTO_INCREMENT PRIMARY KEY, + `user_id` INT NOT NULL, + `leg_user_id` INT NOT NULL, /* The user in the downline whose leg reached the milestone */ + `milestone_amount` DECIMAL(15, 2) NOT NULL, + `bonus_amount` DECIMAL(15, 2) NOT NULL, + `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, + FOREIGN KEY (leg_user_id) REFERENCES users(id) ON DELETE CASCADE + )"; + run_sql($db, $sqlLegMilestones, "Table 'leg_milestones' created or already exists."); + + // 6. Passive Income Schedule table (now references transactions) + $sqlPassiveIncome = "CREATE TABLE IF NOT EXISTS `passive_income_schedule` ( + `id` INT AUTO_INCREMENT PRIMARY KEY, + `transaction_id` INT NOT NULL, /* The direct commission transaction */ + `user_id` INT NOT NULL, + `amount` DECIMAL(15, 2) NOT NULL, + `payment_date` DATE NOT NULL, + `status` ENUM('pending', 'paid', 'cancelled') NOT NULL DEFAULT 'pending', + `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (transaction_id) REFERENCES transactions(id) ON DELETE CASCADE, + FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE + )"; + run_sql($db, $sqlPassiveIncome, "Table 'passive_income_schedule' created or already exists."); + + + // 7. Insert/Update Super Admin User + $adminName = 'Super Admin'; + $adminEmail = 'admin@example.com'; + $adminPassword = 'admin'; + $hashedPassword = password_hash($adminPassword, PASSWORD_BCRYPT); + $adminReferralCode = 'ADMIN'; + + $stmt = $db->prepare("SELECT id FROM users WHERE email = :email"); + $stmt->execute([':email' => $adminEmail]); + if ($stmt->rowCount() == 0) { + $sql = "INSERT INTO users (name, email, password, referral_code, `role`) VALUES (:name, :email, :password, :referral_code, 'Super Admin')"; + $stmt = $db->prepare($sql); + $stmt->execute([ + ':name' => $adminName, + ':email' => $adminEmail, + ':password' => $hashedPassword, + ':referral_code' => $adminReferralCode + ]); + echo "Super Admin user created successfully."; + } else { + $sql = "UPDATE users SET password = :password, `role` = 'Super Admin' WHERE email = :email"; + $stmt = $db->prepare($sql); + $stmt->execute([ + ':password' => $hashedPassword, + ':email' => $adminEmail + ]); + echo "Super Admin user updated successfully."; + } + echo "
Database setup/update complete."; + } catch (PDOException $e) { die("DB ERROR: ". $e->getMessage()); -} +} \ No newline at end of file diff --git a/delete_user.php b/delete_user.php new file mode 100644 index 0000000..5341d27 --- /dev/null +++ b/delete_user.php @@ -0,0 +1,23 @@ +prepare('DELETE FROM users WHERE id = ?'); + $stmt->execute([$user_id]); + + header('Location: admin_dashboard.php'); + exit; +} else { + header('Location: admin_dashboard.php'); + exit; +} +?> \ No newline at end of file diff --git a/edit_content.php b/edit_content.php new file mode 100644 index 0000000..17afbee --- /dev/null +++ b/edit_content.php @@ -0,0 +1,83 @@ + $value) { + if (array_key_exists($key, $content)) { + $content[$key] = $value; + } + } + file_put_contents($content_file, json_encode($content, JSON_PRETTY_PRINT)); + header('Location: edit_content.php?success=true'); + exit; +} +?> + + + + + + Edit Landing Page Content + + + + + + + + + + +
+
+

Edit Landing Page Content

+
+ + +
Content updated successfully!
+ + +
+
+
+ $value): ?> +
+
+ + 100): ?> + + + + +
+
+ +
+
+ + Cancel +
+
+
+
+ + + + \ No newline at end of file diff --git a/edit_user.php b/edit_user.php new file mode 100644 index 0000000..2d7eb31 --- /dev/null +++ b/edit_user.php @@ -0,0 +1,134 @@ +prepare('SELECT id, name, email, role, agent_tier, cumulative_bookings, phone, company, notes FROM users WHERE id = ?'); + $stmt->execute([$user_id]); + $user = $stmt->fetch(PDO::FETCH_ASSOC); + + if (!$user) { + header('Location: admin_dashboard.php?error=user_not_found'); + exit; + } +} + +if ($_SERVER['REQUEST_METHOD'] === 'POST') { + $name = $_POST['name']; + $email = $_POST['email']; + $role = $_POST['role']; + $agent_tier = $_POST['agent_tier']; + $phone = $_POST['phone']; + $company = $_POST['company']; + $notes = $_POST['notes']; + $user_id = $_POST['user_id']; + + if (empty($name) || empty($email) || empty($role)) { + header('Location: edit_user.php?id=' . $user_id . '&error=empty_fields'); + exit; + } + + $db = db(); + $stmt = $db->prepare('UPDATE users SET name = ?, email = ?, role = ?, agent_tier = ?, phone = ?, company = ?, notes = ? WHERE id = ?'); + $stmt->execute([$name, $email, $role, $agent_tier, $phone, $company, $notes, $user_id]); + + header('Location: admin_dashboard.php'); + exit; +} + +?> + + + + + + Edit User + + + + + + + + + + +
+
+

Edit User

+
+ +
+ +
+ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + Cancel +
+ +
User not found.
+ +
+
+ + + + \ No newline at end of file diff --git a/genealogy.php b/genealogy.php new file mode 100644 index 0000000..b75b15a --- /dev/null +++ b/genealogy.php @@ -0,0 +1,168 @@ +prepare("SELECT id, name, email, agent_tier FROM users WHERE sponsor_id = :sponsor_id ORDER BY name"); + $stmt->execute([':sponsor_id' => $userId]); + $downline = $stmt->fetchAll(PDO::FETCH_ASSOC); + + foreach ($downline as $member) { + $member['downline'] = get_downline_tree($member['id'], $db); + $tree[] = $member; + } + + return $tree; +} + +// Function to recursively display the tree as a nested list +function display_tree_node($node) { + echo '
  • '; + echo '
    '; + echo '
    '; + echo '
    ' . htmlspecialchars($node['name']) . '
    '; + echo '

    ' . htmlspecialchars($node['email']) . '

    '; + echo ' ' . htmlspecialchars($node['agent_tier']) . ''; + echo '
    '; + echo '
    '; + + if (!empty($node['downline'])) { + echo '
      '; + foreach ($node['downline'] as $child) { + display_tree_node($child); + } + echo '
    '; + } + + echo '
  • '; +} + + +$stmt = $db->prepare("SELECT * FROM users WHERE id = :id"); +$stmt->execute([':id' => $_SESSION['user_id']]); +$user = $stmt->fetch(PDO::FETCH_ASSOC); + +$genealogy_tree = get_downline_tree($user['id'], $db); + +$site_name = 'Kutumbh Infra'; +?> + + + + + + Genealogy Tree - <?php echo htmlspecialchars($site_name); ?> + + + + + + + + +
    +
    +

    Genealogy Tree

    + +
    + +
    +
    +
    +
    Your Downline
    +
    +
    +
    +
      + +

      You have no users in your downline yet.

      + + + + + +
    +
    +
    +
    +
    +
    + + + + diff --git a/index.php b/index.php index 7e7f0c8..37a5f13 100644 --- a/index.php +++ b/index.php @@ -1,49 +1,202 @@ - + - Kutumbh Infra MLM + + + <?php echo htmlspecialchars($content['site_title']); ?> - + + + + + -