DigitalTransG2 commited on
Commit
75d3f2c
·
verified ·
1 Parent(s): e527dca

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +73 -64
app.py CHANGED
@@ -84,69 +84,78 @@ if role == "Quiz Creator":
84
  requests.put(url, json={"questions": questions})
85
  st.success(f"Đã lưu quiz '{quiz_name}' với 10 câu hỏi!")
86
 
87
- # ==========================
88
- # STUDENT EVALUATION
89
- # ==========================
90
- if role == "Student Evaluation":
91
- st.subheader("Bảng đánh giá học sinh")
 
 
 
 
 
 
 
 
 
 
 
92
 
93
- # Lấy all student quizzes
94
- res = requests.get(f"{FIREBASE_URL}/student_quizzes.json?auth={FIREBASE_AUTH}")
95
- students = res.json() if res.status_code == 200 else {}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
96
 
97
- if not students:
98
- st.info("Chưa có học sinh nào.")
99
- else:
100
- rows = []
101
-
102
- # ==========================
103
- # TẠO BẢNG DATAFRAME
104
- # ==========================
105
- for student_id, data in students.items():
106
- name = data.get("Name", "")
107
- class_ = data.get("Class", "")
108
-
109
- for key, quiz_data in data.items():
110
- if key.startswith("Quiz"):
111
- # Xử lý dữ liệu cũ dạng string
112
- if isinstance(quiz_data, str):
113
- quiz_data = {"Score": quiz_data, "Time": ""}
114
-
115
- score = quiz_data.get("Score", "")
116
- time = quiz_data.get("Time", "")
117
-
118
- rows.append({
119
- "ID": student_id,
120
- "Name": name,
121
- "Class": class_,
122
- "Quiz": key,
123
- "Score": score,
124
- "Time": time
125
- })
126
-
127
- df = pd.DataFrame(rows)
128
- st.subheader("Danh sách học sinh và quiz")
129
- st.dataframe(df)
130
-
131
- # ==========================
132
- # NHẬP FEEDBACK
133
- # ==========================
134
- st.subheader("Nhập Feedback cho từng quiz")
135
-
136
- for student_id, data in students.items():
137
- for key, quiz_data in data.items():
138
- if key.startswith("Quiz"):
139
-
140
- # Chuyển dữ liệu cũ
141
- if isinstance(quiz_data, str):
142
- quiz_data = {"Score": quiz_data, "Time": ""}
143
-
144
- st.markdown(f"**ID: {student_id} - {data.get('Name','')} - {key}**")
145
-
146
- existing_fb = quiz_data.get("feedback", "")
147
- feedback = st.text_area("Feedback", value=existing_fb, key=f"fb_{student_id}_{key}")
148
-
149
- if st.button(f"Gửi Feedback cho {student_id} - {key}", key=f"submit_fb_{student_id}_{key}"):
150
- url_fb = f"{FIREBASE_URL}/student_quizzes/{student_id}/{key}/feedback.json?auth={FIREBASE_AUTH}"
151
- requests.put(url_fb, json=feedback)
152
- st.success(f"Đã gửi feedback cho {student_id} - {key}")
 
84
  requests.put(url, json={"questions": questions})
85
  st.success(f"Đã lưu quiz '{quiz_name}' với 10 câu hỏi!")
86
 
87
+ # ================================
88
+ # STUDENT EVALUATION (UPDATED)
89
+ # ================================
90
+ elif choice == "Student Evaluation":
91
+ st.header("Student Evaluation & Feedback")
92
+
93
+ # Nút Refresh
94
+ if st.button("🔄 Refresh Data"):
95
+ st.cache_data.clear()
96
+ st.rerun()
97
+
98
+ # Lấy danh sách toàn bộ student
99
+ students = fetch_data(FIREBASE_URL + "/Students.json")
100
+ if not students:
101
+ st.warning("No student data found!")
102
+ st.stop()
103
 
104
+ student_ids = list(students.keys())
105
+ selected_id = st.selectbox("Select Student ID", student_ids)
106
+
107
+ student_info = students[selected_id]
108
+
109
+ st.subheader("Student Information")
110
+ st.write(f"**Name:** {student_info.get('Name','')}")
111
+ st.write(f"**Class:** {student_info.get('Class','')}")
112
+
113
+ # Lấy danh sách Quiz của student (Quiz1, Quiz2, ...)
114
+ quiz_keys = [k for k in student_info.keys() if k.startswith("Quiz")]
115
+
116
+ if not quiz_keys:
117
+ st.info("Student has no quiz data yet.")
118
+ st.stop()
119
+
120
+ # Chuẩn bị bảng hiển thị
121
+ table_rows = []
122
+ for q in quiz_keys:
123
+ qdata = student_info[q]
124
+
125
+ score = qdata.get("Score", "")
126
+ time = qdata.get("Time", "")
127
+ fb_text = qdata.get("Feedback", "")
128
+ fb_flag = "Yes" if fb_text else "No"
129
+
130
+ table_rows.append({
131
+ "Quiz": q,
132
+ "Score": score,
133
+ "Time": time,
134
+ "Feedbacked": fb_flag
135
+ })
136
+
137
+ st.subheader("Quiz Overview")
138
+ st.table(table_rows)
139
+
140
+ # -------- Feedback Section --------
141
+ st.subheader("Give Feedback")
142
+
143
+ selected_quiz = st.selectbox("Select quiz for feedback", quiz_keys)
144
+
145
+ # Nếu quiz đã có Feedback -> hiển thị
146
+ existing_fb = student_info[selected_quiz].get("Feedback", "")
147
+ if existing_fb:
148
+ st.info(f"Existing feedback for **{selected_quiz}**:\n\n{existing_fb}")
149
+
150
+ feedback_text = st.text_area("Enter new feedback")
151
+
152
+ if st.button("Submit Feedback"):
153
+ update_path = f"/Students/{selected_id}/{selected_quiz}/Feedback.json"
154
+ result = update_data(FIREBASE_URL + update_path, feedback_text)
155
+
156
+ if result is not None:
157
+ st.success(f"Feedback saved for {selected_quiz}!")
158
+ st.rerun()
159
+ else:
160
+ st.error("Failed to save feedback.")
161