PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ] ); return $pdo; } catch (PDOException $e) { error_log("Partner DB Connection failed: " . $e->getMessage()); die("Database connection failed. Please try again later."); } } // Database connection for Panel database (for support tickets) function getPartnerPanelDBConnection() { try { $pdo = new PDO( "mysql:host=localhost;dbname=u752449863_rrpanel;charset=utf8mb4", 'u752449863_rrpaneladmin', 'S@n@h2016', [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ] ); return $pdo; } catch (PDOException $e) { error_log("Partner Panel DB Connection failed: " . $e->getMessage()); die("Database connection failed. Please try again later."); } } // Partner-specific utility functions function generatePartnerToken($length = 64) { return bin2hex(random_bytes($length / 2)); } function sendPartnerEmail($to, $subject, $message) { $headers = "From: " . FROM_NAME . " Partners \r\n"; $headers .= "Reply-To: partners@relevantreflex.com\r\n"; $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: text/html; charset=UTF-8\r\n"; return mail($to, $subject, $message, $headers); } function logPartnerActivity($message, $data = []) { $logMessage = date('Y-m-d H:i:s') . ' - PARTNER: ' . $message; if (!empty($data)) { $logMessage .= ' - ' . json_encode($data); } error_log($logMessage . "\n", 3, __DIR__ . '/../errors.log'); } // Partner-specific JSON response function partnerJsonResponse($success, $message, $data = []) { header('Content-Type: application/json'); echo json_encode([ 'success' => $success, 'message' => $message, 'data' => $data ]); exit; } ?>