96 lines
4.5 KiB
Python
96 lines
4.5 KiB
Python
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)
|