Update Saqel Platform: 2026-08-29 02:03:07

This commit is contained in:
Hamza-Ayed
2026-08-29 02:03:07 +03:00
parent 135a379b32
commit 598467b58f
5 changed files with 155 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
Failed
View File
@@ -0,0 +1,23 @@
<?php
$envFile = __DIR__ . '/../.env';
if (file_exists($envFile)) {
$lines = file($envFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($lines as $line) {
if (strpos(trim($line), '#') === 0) continue;
list($name, $value) = explode('=', $line, 2);
putenv(trim($name) . '=' . trim($value));
}
}
$apiKey = getenv('GEMINI_API_KEY');
$keys = explode(',', $apiKey);
$apiKey = trim($keys[0]);
$url = "https://generativelanguage.googleapis.com/v1beta/models/gemini-flash-lite-latest:generateContent?key={$apiKey}";
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode(['contents' => [['parts' => [['text' => 'hello']]]]]),
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_RETURNTRANSFER => true,
]);
$res = curl_exec($ch);
echo "Response: $res\n";
+59
View File
@@ -0,0 +1,59 @@
أنظمُة المعادالُِت في حياتِنا
7
مشروُع الوحدِة
خطواُت تنفيِذ المشروِع: 1 أبحُث مَع أفراِد مجموعتي في شََبكٍِة اإلنترنْت عِْن َّصوٍر لنماذَج َحياتيٍٍة تظهُر فيها منحنياٌٍت ومستقيماٌٍت متقاطعٌٍة )مثُِل:
الجسوِر، ونوافيِر المياِه، وخرائِط الِّطرِق(، أْو ألتقُط َّصوًرا لذلَك، ثَم أَحفُظها في ملفٍّ على جهاِز الحاسوِب.
2 أستعمُِل برمجيٍَة جيوجبرا إلْيجاِد معادلٍِة كِلٍّ مَِن المنحنياٍِت المتقاطعٍِة التي تظهُر في الصوِر باتباِع الخِّطواٍِت اآلتيٍِة:
أنقُر على أْيقونٍِة مِْن شرْيِط األدواٍِت، ثَم أختاُر الصورَة التي َحفظُتها.
ُأعِدُِل موقَع الصورِة، وأختاُر مقاًسا مناسًبا لها بتحرْيِك النقِّطتْيِِن A َو B اللتْيِِن تظهراِِن علْيها.
َأِجُد معادلٍَََة أَحِد المنحنيََاٍِت التي تظهُر في الصََورِة، وذلَك بتحدْيِد بعِض النقاِط علْيِه باسََتعماِِل أْيقونٍِة مِْن شََرْيِط
األدواٍِت.
FitPoly ({C, D, E, F, G, H, I, J, K, L},n) أكتٌُب الصيغٍَة في شََرْيِط اإلدخاِِل، ثَم أنقُر ليظهَر منحنًى فوَق الصورِة،
ومعادلٌٍة في شرْيِط اإلدخاِِل.
أسََتعمُِل الُمؤِشَََر فوَق المعادلٍِة لضبِط المنحنى الظاهِر، بحيُث ْينِّطبُق تماًما على المنحنى الذي في الصورِة.
ُأكِرُر الخِّطواٍِت السابقٍَة لتحدْيِد معادالٍِت المنحنياٍِت األُخرى التي تظهُر في الصورِة.
3 أكتٌََُب مع أفراِد مجموعتي نظاَِّم معادالٍٍت ُْيمِثُِل منحنيْيِِن متقاطعْيِِن فََي كِِل َّصورٍة، ثَم نختاُر إَحدى هذِه األنظمٍِة لنُحَلها
ا، ثَم نتحَقُق مِْن َِّصَحٍِة الَحِِل بإظهاِر نقاِط تقاطِع المنحنيْيِِن في برمجيٍِة جيوجبرا. جبرْيًّ
عرُض النتائِج: ُأِعُد مَع أفراِد مجموعتي عرًضا تقدْيميًّا ُنبِيُِن فيِه ما ْيأتي:
خِّطواٍُت تنفيِذ المشروِع ُموَضحًٍة بالصوِر )نستعمُِل خاَّصيٍَة طباعٍِة الشاشٍِة(. بعُض الصعوباٍِت التي واجْهناها في أثناِء العمِِل بالمشروِع، ومعلومٌٍة جدْيدٌة تعَرْفناها في أثناِء العمِِل بالمشروِع.
فكرُة المشروِع البحُث عِْن أنظمٍِة معادالٍٍت في نماذَج َحياتيٍٍة.
الموادُّ واألدواُت شبكٍُة اإلنترنْت، برمجيٍُة جيوجبرا.
الدرُس
2
َحُُّل نظاٍٍم ُمَكَوٍٍن مِْن معادلٍة خطِيٍة ومعادلٍة تربيعيٍة
Solving a System of Linear and Quadratic Equations
فكرُة الدرِِس ََحُِل نظاٍِّم ُمكَوٍِن مِْن معادلٍٍة خِِّطيٍٍة ومعادلٍٍة تربيعيٍٍة.
مسألُة اليوِِم ُتمِثُِل المعادلٍُة y = x - 3 طرْيًقا مستقيًما داخَِل إَحدى المدِِن، في َحيِِن ُتمِثُِل المعادلٍُة y = x2 - 3x -10 طرْيًقا آخَر منحنًيا
داخَِل المدْينٍِة نفِسها. هِْل ْيتقاطُع هذاِِن الِّطرْيقاِِن أِّْم ال؟
َأُحُُّل نظاَم المعادالِت اآلتٍَّي، ثَُم َأَتحَقَُق ِمَْن ِصَحِِة الَحُِّل:
x – y = 1
x2 + y2 = 5
ُْيمِكنُني اسََتعماُِل برمجيٍِة جيوجبرا (GeoGebra)، أْو َحاسبٍٍة بيانيٍٍة، لتمثيِِل المعادلتْيِِن بيانيًّا على المستوى اإلَحداثِي نفِسِه كما في التمثيِِل البيانِي المجاوِر. ُأالَِحُظ أَِن منحنَيِي المعادلتْيِِن ا باسََتعماِِل ْيتقاطعََاِِن في نقِّطتْيِِن؛ ما ْيعنََي أَِن للنظاِِّم ََحَلْيِِن مختلفْيِِن. أَتحَقُق مِْن ذلَك جبرْيًّ
باستعماِِل طرْيقٍِة التعوْيِض:
1اْلُخْطــَوُِة أكتٌُب المعادلٍَة الخِِّطَيٍَة بالصورِة القياسَيٍِة.
x – y = 1 المعادلٍُة الخِِّطيٍةُ
y = x – 1 x بداللٍِة y بكتابٍِة
2اْلُخْطــَوُِة ُأعِوُُض قيمٍَة y مِن المعادلٍِة الخِِّطَيٍِة في المعادلٍِة التربيعَيٍِة:
x2 + (x – 1) 2 = 5 بتعوْيِض قيمٍِة y في المعادلٍِة التربيعيٍةِ
x2 + x2 – 2x + 1 = 5 بفِك القوسْيِنِ
2x2 – 2x – 4 = 0 بالتبسيطِ
x2 – x – 2 = 0 بالقسمٍِة على 2
3اْلُخْطــَوُِة أَحُِل المعادلٍَة الناتجٍَة باستعماِِل التحليِِل:
(x + 1) (x – 2) = 0 بالتحليِلِ
x + 1 = 0 or x – 2 = 0 خاَّصَيٍُة الضرِب الصفرِي
x = -1 or x = 2 بحِِل المعادلَتيِنِ
مثال 4: من الحياة .5 m 7، وطـوُُل ُقْطِرُهـا m ـا، ِمجمـوُع ُبْعَدْيهـا َسـّجادٌِة ِمسـتطيلُِة الشـكُِّل ِمصنوعـٌِة يدويا
َأِِجُد ُُكاًّلا ِمَْن طولِها، وعرُِضها.
إلْيجاِد ُبْعَدِي الَسّجادِة، َأكتٌُب نظاَِّم معادالٍٍت ُْيمِثُِل المسألٍَة، ثَم َأَُحُلُه.
َأفترُُض أَِن طوَِل الَسََّجادِة هَو x ، وأَِن عرَضهََا هَو y ، وبما أَِن مجموَع ُبْعَدِي الَسََّجادِة هَو m 7، فإَِن: x + y = 7 ، وبما أَِن ُقِّْطَر الَسََّجادِة هَو m 5، فإَِن )باستعماِِل نظرْيٍِة فيثاغورُّس(:
x2 + y2 = 25 ، إذِْن، أَّصبٌَح لدْْينا نظاٌِّم ْيتكَوُِن مِْن معادلٍٍة خِِّطيٍٍة وُأخرى تربيعيٍٍة.
y + x = 7
x2 + y2 = 25
واآلَِن، سَأَُحُِل النظاَِّم باستعماِِل طرْيقٍِة التعوْيِض: x + y = 7 المعادلٍُة الخِِّطيٍةُ
y = 7 − x x بداللٍِة y بكتابٍِة
x2 + (7 − x) 2 = 25 بتعوْيِض قيمٍِة y في المعادلٍِة التربيعيٍةِ
2x2 − 14x + 24 = 0 بالتبسيطِ
x2 − 7x + 12 = 0 بالقسمٍِة على 2
+72
View File
@@ -0,0 +1,72 @@
async function verifyStudentOtp() {
const phone = document.getElementById('student_phone').value.trim();
const otp = document.getElementById('student_otp').value.trim();
if (!otp || otp.length < 4) {
showError('يرجى إدخال رمز تحقق صالح.');
return;
}
try {
const res = await fetch('/api/auth/otp/verify', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ phone_number: phone, phone: phone, otp: otp, otp_code: otp, role: 'student' })
});
const data = await res.json();
if (res.ok && data.status === 'success') {
if (data.data.requires_national_id) {
localStorage.setItem('saqel_student_identity_token', data.data.identity_token);
document.getElementById('step_otp_container').style.display = 'none';
document.getElementById('step_national_id_container').style.display = 'block';
document.getElementById('student_national_id_login').focus();
} else {
const token = data.data.token;
localStorage.setItem('saqel_student_jwt', token);
renderDashboard(data.data.user);
}
} else {
showError(data.message || 'رمز التحقق غير صحيح أو منتهي الصلاحية');
}
} catch (err) {
showError('حدث خطأ في الاتصال بالسيرفر.');
}
}
async function submitNationalId() {
const nationalId = document.getElementById('student_national_id_login').value.trim();
const identityToken = localStorage.getItem('saqel_student_identity_token');
if (!nationalId) {
showError('يرجى إدخال الرقم الوطني الخاص بك');
return;
}
try {
const res = await fetch('/api/auth/student/login-national-id', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ national_id: nationalId, identity_token: identityToken })
});
const data = await res.json();
if (res.ok && data.status === 'success') {
if (data.data && data.data.requires_onboarding) {
document.getElementById('step_national_id_container').style.display = 'none';
document.getElementById('step_onboarding_container').style.display = 'block';
document.getElementById('onboard_student_national_id').value = nationalId;
document.getElementById('onboard_student_national_id').disabled = true;
} else {
const token = data.data.token;
localStorage.setItem('saqel_student_jwt', token);
localStorage.setItem('saqel_student_user', JSON.stringify(data.data.user));
localStorage.removeItem('saqel_student_identity_token');
renderDashboard(data.data.user);
initWebSocket(token);
showLuxuryToast('أهلاً بك يا بطل! 🚀', 'تم تسجيل الدخول لملفك الخاص بنجاح.');
}
} else {
showError(data.message || 'خطأ في التحقق من الرقم الوطني');
}
} catch (err) {
showError('حدث خطأ في الاتصال بالخادم.');
}
}