From f4934e9c134a8fccbc505b2769c1917d638e033e Mon Sep 17 00:00:00 2001 From: twotalesanimation <80506065+twotalesanimation@users.noreply.github.com> Date: Mon, 15 Dec 2025 01:24:56 +0200 Subject: [PATCH] iKhokha integration completerer... --- src/config/functions.php | 44 +++++++++++++++++++- src/pages/memberships/membership_details.php | 20 ++++++--- src/pages/memberships/renew_membership.php | 21 ++++++---- 3 files changed, 71 insertions(+), 14 deletions(-) diff --git a/src/config/functions.php b/src/config/functions.php index 12cf2380..e51f42bb 100644 --- a/src/config/functions.php +++ b/src/config/functions.php @@ -517,7 +517,7 @@ function getUserMemberStatus($user_id) } // Step 3: Check membership fees table for valid payment status and membership_end_date - $queryFees = "SELECT payment_status, membership_end_date FROM membership_fees WHERE user_id = ?"; + $queryFees = "SELECT payment_status, membership_end_date, renewal_period_end FROM membership_fees WHERE user_id = ?"; $stmtFees = $conn->prepare($queryFees); if (!$stmtFees) { error_log("Failed to prepare fees query: " . $conn->error); @@ -540,6 +540,7 @@ function getUserMemberStatus($user_id) $fees = $resultFees->fetch_assoc(); $payment_status = $fees['payment_status']; $membership_end_date = $fees['membership_end_date']; + $renewal_period_end = $fees['renewal_period_end']; // Validate payment status and membership_end_date $current_date = new DateTime(); @@ -548,6 +549,12 @@ function getUserMemberStatus($user_id) if ($payment_status === "PAID" && $current_date <= $membership_end_date_obj) { $conn->close(); return true; // Direct membership is active + }elseif ($payment_status === "PENDING RENEWAL") { + $renewal_period_end_obj = DateTime::createFromFormat('Y-m-d', $renewal_period_end); + if ($current_date <= $renewal_period_end_obj) { + $conn->close(); + return true; // Direct membership is in renewal period + } } else { // Direct membership is not active, check if user is linked to another active membership error_log("Direct membership not active for user_id: $user_id - checking linked memberships"); @@ -3409,3 +3416,38 @@ function getPaymentLinkByPaymentId($payment_id) return null; } + +/** + * Get the membership_end_date for a given user_id from membership_fees. + * Returns the date string (Y-m-d) or null if not found. + * + * @param int $user_id + * @return string|null + */ +function getMembershipEndDate($user_id) +{ + $conn = openDatabaseConnection(); + if ($conn === null) { + return null; + } + + $stmt = $conn->prepare("SELECT membership_end_date FROM membership_fees WHERE user_id = ? LIMIT 1"); + if (!$stmt) { + $conn->close(); + return null; + } + + $stmt->bind_param('i', $user_id); + $stmt->execute(); + $stmt->bind_result($membership_end_date); + $found = $stmt->fetch(); + $stmt->close(); + $conn->close(); + + if ($found) { + return $membership_end_date; + } + + return null; +} + diff --git a/src/pages/memberships/membership_details.php b/src/pages/memberships/membership_details.php index a42ef44c..8a5c39d2 100644 --- a/src/pages/memberships/membership_details.php +++ b/src/pages/memberships/membership_details.php @@ -188,8 +188,8 @@ if (empty($application['id_number'])) { - - PAY NOW + + PENDING RENEWAL @@ -206,16 +206,26 @@ if (empty($application['id_number'])) { strtotime($membership_end_date)) { - echo ' + if ($membership_end_date) { + try { + $end = new DateTime($membership_end_date); + $threeMonthsBefore = (clone $end)->modify('-3 months')->format('Y-m-d'); + } catch (Exception $e) { + // Fallback using strtotime if DateTime parsing fails + $threeMonthsBefore = date('Y-m-d', strtotime($membership_end_date . ' -3 months')); + } + + if (strtotime($today) >= strtotime($threeMonthsBefore)) { + echo ' Renew Membership '; + } } ?> diff --git a/src/pages/memberships/renew_membership.php b/src/pages/memberships/renew_membership.php index 8b7ecab2..80dd9a68 100644 --- a/src/pages/memberships/renew_membership.php +++ b/src/pages/memberships/renew_membership.php @@ -3,22 +3,27 @@ $headerStyle = 'light'; $rootPath = dirname(dirname(dirname(__DIR__))); include_once($rootPath . '/header.php'); -$user_id = isset($_SESSION['user_id']) ? $_SESSION['user_id'] : null; +$is_logged_in = isset($_SESSION['user_id']); +if (isset($_SESSION['user_id'])) { + $user_id = isset($_SESSION['user_id']) ? $_SESSION['user_id'] : null; +} else { + header('Location: login.php'); + exit(); // Stop further script execution +} + $payment_id = uniqid(); $payment_amount = getPriceByDescription('membership_fees'); $payment_date = date('Y-m-d'); - +$renewal_period_end = getMembershipEndDate($user_id); // Hardcode membership start date to 2026-03-01 per request -$membership_start_date = '2026-03-01'; +$renewed_membership_start_date = '2026-03-01'; // Set membership_end_date to the last day of February in the following year -$nextYear = intval(date('Y')) + 1; -$dt = new DateTime($nextYear . '-02-28'); -$membership_end_date = $dt->format('Y-m-t'); +$renewed_membership_end_date = '2027-02-28'; -$stmt = $conn->prepare("UPDATE membership_fees SET payment_amount = ?, payment_date = ?, membership_start_date = ?, membership_end_date = ?, payment_status = 'AWAITING PAYMENT', payment_id = ? WHERE user_id = ?"); -$stmt->bind_param("dssssi", $payment_amount, $payment_date, $membership_start_date, $membership_end_date, $payment_id, $user_id); +$stmt = $conn->prepare("UPDATE membership_fees SET payment_amount = ?, payment_date = ?, membership_start_date = ?, membership_end_date = ?, renewal_period_end = ?, payment_status = 'PENDING RENEWAL', payment_id = ? WHERE user_id = ?"); +$stmt->bind_param("dsssssi", $payment_amount, $payment_date, $renewed_membership_start_date, $renewed_membership_end_date, $renewal_period_end, $payment_id, $user_id); if ($stmt->execute()) { // Commit the transaction