Update Saqel Platform: 2026-08-28 16:06:52
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
import re
|
||||
|
||||
with open("backend/app/Views/CurriculumStudio.php", "r") as f:
|
||||
content = f.read()
|
||||
|
||||
new_script = """ async function handleRealPdfUpload(input) {
|
||||
if (!input.files || !input.files[0]) return;
|
||||
const file = input.files[0];
|
||||
|
||||
const btn = document.getElementById('btn_upload_pdf');
|
||||
const desc = document.getElementById('upload_status_desc');
|
||||
btn.disabled = true;
|
||||
btn.innerHTML = '<span>⏳ جاري الرفع...</span>';
|
||||
desc.textContent = `جاري رفع ملف [${file.name}] وبدء عملية استخراج المناهج...`;
|
||||
|
||||
const formData = new FormData();
|
||||
formData.append('pdf_file', file);
|
||||
|
||||
try {
|
||||
const res = await fetch('/api/curriculum/upload-pdf', {
|
||||
method: 'POST',
|
||||
body: formData
|
||||
});
|
||||
const data = await res.json();
|
||||
|
||||
if (res.ok && data.status === 'processing') {
|
||||
// Start Polling
|
||||
pollTaskStatus(data.task_id, file.name);
|
||||
} else if (res.ok && data.status === 'success') {
|
||||
// Fallback if it returned sync
|
||||
processSuccessData(data, file.name);
|
||||
} else {
|
||||
alert('⚠️ ' + (data.message || 'فشلت معالجة الملف'));
|
||||
resetUploadBtn();
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('PDF Upload error:', err);
|
||||
alert('حدث خطأ في الاتصال بالخادم أثناء رفع الملف.');
|
||||
resetUploadBtn();
|
||||
}
|
||||
}
|
||||
|
||||
async function pollTaskStatus(taskId, fileName) {
|
||||
const btn = document.getElementById('btn_upload_pdf');
|
||||
const desc = document.getElementById('upload_status_desc');
|
||||
|
||||
try {
|
||||
const res = await fetch(`/api/curriculum/upload-status?task_id=${taskId}`);
|
||||
if (!res.ok) throw new Error("Network response was not ok");
|
||||
const state = await res.json();
|
||||
|
||||
if (state.status === 'completed') {
|
||||
desc.textContent = `تم الانتهاء بنجاح! تم استخراج المنهج بالكامل لـ [${fileName}]`;
|
||||
btn.innerHTML = '<span>✅ اكتمل التفريغ</span>';
|
||||
setTimeout(() => { resetUploadBtn(); }, 3000);
|
||||
|
||||
if (state.tree) {
|
||||
window.CURRICULUM_TREE = state.tree;
|
||||
currentFilePath = state.active_file || '';
|
||||
renderCurriculumTree(state.tree);
|
||||
if (state.active_file) {
|
||||
selectLesson(state.active_file, 'الدرس المستخرج', 'المسار التعليمي', []);
|
||||
fetchLessonContent(state.active_file);
|
||||
}
|
||||
} else {
|
||||
// Reload tree completely
|
||||
loadCurriculumTree();
|
||||
}
|
||||
} else if (state.status === 'error') {
|
||||
alert('⚠️ فشل في معالجة الملف: ' + state.message);
|
||||
resetUploadBtn();
|
||||
} else {
|
||||
// Still processing
|
||||
btn.innerHTML = `<span>⏳ ${state.progress}% | ${state.status}</span>`;
|
||||
desc.textContent = state.message || "جاري المعالجة بالذكاء الاصطناعي... قد يستغرق دقيقة أو أكثر";
|
||||
setTimeout(() => pollTaskStatus(taskId, fileName), 2500); // poll every 2.5 seconds
|
||||
}
|
||||
} catch(e) {
|
||||
setTimeout(() => pollTaskStatus(taskId, fileName), 3000);
|
||||
}
|
||||
}
|
||||
|
||||
function resetUploadBtn() {
|
||||
const btn = document.getElementById('btn_upload_pdf');
|
||||
const desc = document.getElementById('upload_status_desc');
|
||||
btn.disabled = false;
|
||||
btn.innerHTML = '<span>📄 رفع واستخراج المنهاج (PDF)</span>';
|
||||
document.getElementById('curriculum_pdf_input').value = '';
|
||||
}
|
||||
"""
|
||||
|
||||
content = re.sub(r'async function handleRealPdfUpload\(input\) \{.*?(?=async function selectLesson|function renderCurriculumTree)', new_script + '\n ', content, flags=re.DOTALL)
|
||||
|
||||
with open("backend/app/Views/CurriculumStudio.php", "w") as f:
|
||||
f.write(content)
|
||||
Reference in New Issue
Block a user