diff --git a/src/Controllers/PartnerProgramsController.php b/src/Controllers/PartnerProgramsController.php index 67b5045..412cad5 100644 --- a/src/Controllers/PartnerProgramsController.php +++ b/src/Controllers/PartnerProgramsController.php @@ -73,25 +73,36 @@ public function join(): void { exit; } - // Generate unique tracking code - $trackingCode = bin2hex(random_bytes(8)); - - // Prepare insert data - $insertData = [ - 'partner_id' => $partnerId, - 'program_id' => $programId, - 'tracking_code' => $trackingCode, - 'status' => 'active' - ]; + $ipAddress = $_SERVER['REMOTE_ADDR']; + if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { + $ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); + $ipAddress = trim($ips[0]); + } - // Store terms acceptance details if program has terms if (!empty($program['terms'])) { - $insertData['terms_accepted'] = date('Y-m-d H:i:s'); - $insertData['terms_accepted_ip'] = $_SERVER['REMOTE_ADDR']; + Database::update( + 'partner_programs', + [ + 'terms_accepted' => date('Y-m-d H:i:s'), + 'terms_accepted_ip' => $ipAddress + ], + 'partner_id = ? AND program_id = ?', + [$partnerId, $programId] + ); } + // Generate unique tracking code + $trackingCode = bin2hex(random_bytes(8)); + try { - Database::insert('partner_programs', $insertData); + Database::insert('partner_programs', [ + 'partner_id' => $partnerId, + 'program_id' => $programId, + 'tracking_code' => $trackingCode, + 'status' => 'active', + 'terms_accepted' => date('Y-m-d H:i:s'), + 'terms_accepted_ip' => $ipAddress + ]); $_SESSION['success'] = 'Successfully joined the program!'; } catch (\Exception $e) { @@ -101,4 +112,4 @@ public function join(): void { header('Location: /programs'); exit; } -} \ No newline at end of file +}