diff --git a/ai_output.md b/ai_output.md new file mode 100644 index 0000000..e4d7046 --- /dev/null +++ b/ai_output.md @@ -0,0 +1 @@ +Failed \ No newline at end of file diff --git a/backend/scripts/ai_output.md b/backend/scripts/ai_output.md new file mode 100644 index 0000000..e69de29 diff --git a/backend/scripts/test_notebooklm_prompt.php b/backend/scripts/test_notebooklm_prompt.php new file mode 100644 index 0000000..98f6e71 --- /dev/null +++ b/backend/scripts/test_notebooklm_prompt.php @@ -0,0 +1,23 @@ + 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"; diff --git a/backend/scripts/user_text.txt b/backend/scripts/user_text.txt new file mode 100644 index 0000000..3efe065 --- /dev/null +++ b/backend/scripts/user_text.txt @@ -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 diff --git a/patch.js b/patch.js new file mode 100644 index 0000000..f3be848 --- /dev/null +++ b/patch.js @@ -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('حدث خطأ في الاتصال بالخادم.'); + } + }