feat: استيراد كود سيرو إلى تريبز (سيرو @ecfe7568) — بلا تعديل
قرار المالك 2026-07-27: باك إند سيرو PHP هو المعتمد، وتطبيقاته المجرّبة ميدانياً تحل محل إعادة البناء المؤرشفة. سيرو نفسه لم يُمسّ. الخريطة: backend · payment_server · loction_server · ride_server · passenger_server · docker · dashboard · stress_test → الجذر siro_rider → apps/rider siro_driver → apps/driver siro_admin → dashboards/admin siro_service → dashboards/service android_bot → apps/android_bot socialBot → apps/socialBot نُسخ المتعقَّب في git سيرو فقط عبر `git archive` (3,198 ملفاً / ~169 م.ب) لا `cp -r` — فاستُثنيت مخلفات البناء تلقائياً. بلا أي تعديل محتوى عمداً: كل ما يلي يصير فرقاً مقروءاً مقابل المصدر. لم يُستورد وسببه: siromove.com (الموقع التسويقي يبقى marketing/ في تريبز، سيرو فيه 8 ملفات) · docs و planning (تريبز له docs/ الخاص) · deploy.sh (ليس نشراً على سيرفر بل `git add . && git push origin --all` — فخّ في مستودع آخر) · transit_dashboard (بانتظار قرار مصير backend-transit و dashboards/transit-web). ⚠️ لا يبني بعد — ثلاثة نواقص متوقعة ومقصودة: 1. `.env` و `lib/env/env.g.dart` غير متعقَّبين في سيرو (أسرار لكل مستأجر): كل تطبيق فلاتر يحتاج .env خاصاً ثم توليد env.g.dart بـ build_runner. 2. إعدادات Firebase (9 ملفات google-services.json و GoogleService-Info.plist) يستبعدها .gitignore تريبز — ولكل مستأجر مشروع Firebase خاص أصلاً. 3. apps/driver في سيرو يشير إلى `../../Intaleq/packages/get` خارج المستودع → يجب ضمّ الحزم داخله أسوة بـ apps/rider. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
9909d9b4c1
commit
4d8414c96b
@@ -0,0 +1,122 @@
|
||||
<?php
|
||||
// --- backend/ride/invitor/claim.php ---
|
||||
include "../../connect.php";
|
||||
include "../../functions.php"; // Assuming a functions file exists for helper methods
|
||||
|
||||
header('Content-Type: application/json');
|
||||
|
||||
try {
|
||||
$inviteId = filterRequest("invite_id");
|
||||
// Force user ID from JWT based on role
|
||||
if ($role === 'driver') {
|
||||
$driverId = $user_id;
|
||||
$passengerId = null;
|
||||
} elseif ($role === 'passenger') {
|
||||
$passengerId = $user_id;
|
||||
$driverId = null;
|
||||
} else {
|
||||
echo json_encode(["status" => "failure", "message" => "Invalid user role."]);
|
||||
exit;
|
||||
}
|
||||
$countryCode = filterRequest("country_code"); // Expected: Jordan, Syria, Egypt
|
||||
|
||||
if (empty($inviteId)) {
|
||||
echo json_encode(["status" => "failure", "message" => "Invite ID required."]);
|
||||
exit;
|
||||
}
|
||||
|
||||
$walletServer = "https://walletintaleq.intaleq.xyz"; // Default
|
||||
if (strtolower($countryCode) == 'jordan') {
|
||||
$rewardAmount = 5;
|
||||
$currency = "JOD";
|
||||
$walletServer = $_ENV['WALLET_SERVER_JORDAN'] ?? "https://walletintaleq.intaleq.xyz";
|
||||
} elseif (strtolower($countryCode) == 'egypt') {
|
||||
$rewardAmount = 500;
|
||||
$currency = "EGP";
|
||||
$walletServer = $_ENV['WALLET_SERVER_EGYPT'] ?? "https://walletintaleq.intaleq.xyz";
|
||||
} else {
|
||||
$rewardAmount = 500; // Default Syria
|
||||
$currency = "SYP";
|
||||
$walletServer = $_ENV['WALLET_SERVER_SYRIA'] ?? "https://walletintaleq.intaleq.xyz";
|
||||
}
|
||||
|
||||
$walletUrl = "$walletServer/v2/main/ride/payment/add.php";
|
||||
|
||||
$con->beginTransaction();
|
||||
|
||||
if (!empty($driverId)) {
|
||||
// Driver Invitation Reward Logic
|
||||
$stmt = $con->prepare("SELECT * FROM invites WHERE id = :invite_id AND driverId = :driver_id AND isGiftToken = 0 FOR UPDATE");
|
||||
$stmt->execute([':invite_id' => $inviteId, ':driver_id' => $driverId]);
|
||||
$invitation = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
if ($invitation) {
|
||||
$upd = $con->prepare("UPDATE invites SET isGiftToken = 1 WHERE id = :invite_id");
|
||||
$upd->execute([':invite_id' => $inviteId]);
|
||||
|
||||
// Reward for current driver
|
||||
addWalletBalance($walletUrl, $driverId, "driver", $rewardAmount);
|
||||
// Reward for inviter
|
||||
addWalletBalance($walletUrl, $invitation['driverId'], "driver", $rewardAmount);
|
||||
|
||||
$con->commit();
|
||||
echo json_encode(["status" => "success", "message" => "Reward of $rewardAmount $currency claimed successfully."]);
|
||||
} else {
|
||||
$con->rollBack();
|
||||
echo json_encode(["status" => "failure", "message" => "Invitation not valid or already claimed."]);
|
||||
}
|
||||
|
||||
} elseif (!empty($passengerId)) {
|
||||
// Passenger Invitation Reward Logic
|
||||
$stmt = $con->prepare("SELECT * FROM invitesToPassengers WHERE id = :invite_id AND passengerID = :passenger_id AND isGiftToken = 0 FOR UPDATE");
|
||||
$stmt->execute([':invite_id' => $inviteId, ':passenger_id' => $passengerId]);
|
||||
$invitation = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
if ($invitation) {
|
||||
$upd = $con->prepare("UPDATE invitesToPassengers SET isGiftToken = 1 WHERE id = :invite_id");
|
||||
$upd->execute([':invite_id' => $inviteId]);
|
||||
|
||||
// Call Wallet Server
|
||||
addWalletBalance($walletUrl, $passengerId, "passenger", $rewardAmount);
|
||||
|
||||
$con->commit();
|
||||
echo json_encode(["status" => "success", "message" => "Reward of $rewardAmount $currency claimed successfully."]);
|
||||
} else {
|
||||
$con->rollBack();
|
||||
echo json_encode(["status" => "failure", "message" => "Invitation not valid or already claimed."]);
|
||||
}
|
||||
|
||||
} else {
|
||||
echo json_encode(["status" => "failure", "message" => "User ID required."]);
|
||||
}
|
||||
|
||||
} catch (Exception $e) {
|
||||
if ($con && $con->inTransaction()) { $con->rollBack(); }
|
||||
error_log("Error in claim.php: " . $e->getMessage());
|
||||
echo json_encode(["status" => "error", "message" => "Server error."]);
|
||||
}
|
||||
|
||||
function addWalletBalance($url, $userId, $userType, $amount) {
|
||||
$s2sKey = getenv('S2S_SHARED_KEY');
|
||||
$data = [
|
||||
"user_id" => $userId,
|
||||
"user_type" => $userType,
|
||||
"amount" => $amount,
|
||||
"action" => "add",
|
||||
"reason" => "Invitation Reward"
|
||||
];
|
||||
|
||||
$ch = curl_init($url);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_POST, true);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
|
||||
if ($s2sKey) {
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, ["X-Auth-Token: $s2sKey"]);
|
||||
}
|
||||
$response = curl_exec($ch);
|
||||
curl_close($ch);
|
||||
return $response;
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user