Update Saqel Platform: 2026-08-29 02:03:07
This commit is contained in:
@@ -0,0 +1 @@
|
|||||||
|
Failed
|
||||||
@@ -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";
|
||||||
@@ -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
|
||||||
@@ -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('حدث خطأ في الاتصال بالخادم.');
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user