Harshal Vhatkar
commited on
Commit
Β·
8d3a72f
1
Parent(s):
cf5bc29
fix analytics
Browse files- session_page.py +75 -21
session_page.py
CHANGED
@@ -3730,12 +3730,18 @@ def display_quiz_tab(student_id, course_id, session_id):
|
|
3730 |
"""Display quizzes for students"""
|
3731 |
st.header("Course Quizzes")
|
3732 |
# Get available quizzes for this session, excluding pre-class quizzes
|
3733 |
-
quizzes = quizzes_collection.find({
|
|
|
|
|
|
|
|
|
|
|
|
|
3734 |
"course_id": course_id,
|
3735 |
"session_id": session_id,
|
3736 |
"status": "active",
|
3737 |
"quiz_type": {"$ne": "pre_class"}
|
3738 |
-
})
|
3739 |
# Get available quizzes for this session
|
3740 |
# quizzes = quizzes_collection.find({
|
3741 |
# "course_id": course_id,
|
@@ -3743,13 +3749,57 @@ def display_quiz_tab(student_id, course_id, session_id):
|
|
3743 |
# "status": "active"
|
3744 |
# })
|
3745 |
|
3746 |
-
quizzes = list(quizzes)
|
3747 |
if not quizzes:
|
3748 |
st.info("No quizzes available for this session.")
|
3749 |
return
|
3750 |
|
3751 |
-
for quiz in quizzes:
|
3752 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3753 |
# Check if student has already taken this quiz
|
3754 |
existing_score = get_student_quiz_score(quiz['_id'], student_id)
|
3755 |
|
@@ -3761,37 +3811,42 @@ def display_quiz_tab(student_id, course_id, session_id):
|
|
3761 |
for i, question in enumerate(quiz['questions']):
|
3762 |
st.markdown(f"**Question {i+1}:** {question['question']}")
|
3763 |
for opt in question['options']:
|
3764 |
-
if opt
|
3765 |
st.markdown(f"β
{opt}")
|
3766 |
else:
|
3767 |
st.markdown(f"- {opt}")
|
3768 |
-
|
3769 |
else:
|
3770 |
# Display quiz questions
|
3771 |
st.write("Please select your answers:")
|
3772 |
|
3773 |
-
# Create a form
|
3774 |
-
|
|
|
3775 |
student_answers = {}
|
3776 |
|
3777 |
for i, question in enumerate(quiz['questions']):
|
3778 |
st.markdown(f"**Question {i+1}:** {question['question']}")
|
3779 |
-
options =
|
3780 |
-
|
3781 |
-
f"Select answer
|
3782 |
options=options,
|
3783 |
-
key=f"q_{quiz['_id']}_{i}"
|
|
|
3784 |
)
|
|
|
|
|
3785 |
|
3786 |
# Submit button
|
3787 |
if st.form_submit_button("Submit Quiz"):
|
3788 |
-
|
3789 |
-
|
3790 |
-
if score is not None:
|
3791 |
-
st.success(f"Quiz submitted successfully! Your score: {score:.1f}%")
|
3792 |
-
st.rerun() # Refresh to show results
|
3793 |
else:
|
3794 |
-
|
|
|
|
|
|
|
|
|
|
|
3795 |
|
3796 |
def display_session_content(student_id, course_id, session, username, user_type):
|
3797 |
st.title(f"{session['title']}")
|
@@ -3865,8 +3920,7 @@ def display_session_content(student_id, course_id, session, username, user_type)
|
|
3865 |
with tabs[2]:
|
3866 |
display_post_class_content(session, student_id, course_id)
|
3867 |
with tabs[3]:
|
3868 |
-
|
3869 |
-
display_preclass_analytics2(session, course_id)
|
3870 |
with tabs[4]:
|
3871 |
display_inclass_analytics(session, course_id)
|
3872 |
with tabs[5]:
|
|
|
3730 |
"""Display quizzes for students"""
|
3731 |
st.header("Course Quizzes")
|
3732 |
# Get available quizzes for this session, excluding pre-class quizzes
|
3733 |
+
# quizzes = quizzes_collection.find({
|
3734 |
+
# "course_id": course_id,
|
3735 |
+
# "session_id": session_id,
|
3736 |
+
# "status": "active",
|
3737 |
+
# "quiz_type": {"$ne": "pre_class"}
|
3738 |
+
# })
|
3739 |
+
quizzes = list(quizzes_collection.find({
|
3740 |
"course_id": course_id,
|
3741 |
"session_id": session_id,
|
3742 |
"status": "active",
|
3743 |
"quiz_type": {"$ne": "pre_class"}
|
3744 |
+
}))
|
3745 |
# Get available quizzes for this session
|
3746 |
# quizzes = quizzes_collection.find({
|
3747 |
# "course_id": course_id,
|
|
|
3749 |
# "status": "active"
|
3750 |
# })
|
3751 |
|
3752 |
+
# quizzes = list(quizzes)
|
3753 |
if not quizzes:
|
3754 |
st.info("No quizzes available for this session.")
|
3755 |
return
|
3756 |
|
3757 |
+
# for quiz in quizzes:
|
3758 |
+
# with st.expander(f"π {quiz['title']}", expanded=True):
|
3759 |
+
# # Check if student has already taken this quiz
|
3760 |
+
# existing_score = get_student_quiz_score(quiz['_id'], student_id)
|
3761 |
+
|
3762 |
+
# if existing_score is not None:
|
3763 |
+
# st.success(f"Quiz completed! Your score: {existing_score:.1f}%")
|
3764 |
+
|
3765 |
+
# # Display correct answers after submission
|
3766 |
+
# st.subheader("Quiz Review")
|
3767 |
+
# for i, question in enumerate(quiz['questions']):
|
3768 |
+
# st.markdown(f"**Question {i+1}:** {question['question']}")
|
3769 |
+
# for opt in question['options']:
|
3770 |
+
# if opt.startswith(question['correct_option']):
|
3771 |
+
# st.markdown(f"β
{opt}")
|
3772 |
+
# else:
|
3773 |
+
# st.markdown(f"- {opt}")
|
3774 |
+
|
3775 |
+
# else:
|
3776 |
+
# # Display quiz questions
|
3777 |
+
# st.write("Please select your answers:")
|
3778 |
+
|
3779 |
+
# # Create a form for quiz submission
|
3780 |
+
# with st.form(f"quiz_form_{quiz['_id']}"):
|
3781 |
+
# student_answers = {}
|
3782 |
+
|
3783 |
+
# for i, question in enumerate(quiz['questions']):
|
3784 |
+
# st.markdown(f"**Question {i+1}:** {question['question']}")
|
3785 |
+
# options = [opt for opt in question['options']]
|
3786 |
+
# student_answers[str(i)] = st.radio(
|
3787 |
+
# f"Select answer for question {i+1}:",
|
3788 |
+
# options=options,
|
3789 |
+
# key=f"q_{quiz['_id']}_{i}"
|
3790 |
+
# )
|
3791 |
+
|
3792 |
+
# # Submit button
|
3793 |
+
# if st.form_submit_button("Submit Quiz"):
|
3794 |
+
# print(student_answers)
|
3795 |
+
# score = submit_quiz_answers(quiz['_id'], student_id, student_answers)
|
3796 |
+
# if score is not None:
|
3797 |
+
# st.success(f"Quiz submitted successfully! Your score: {score:.1f}%")
|
3798 |
+
# st.rerun() # Refresh to show results
|
3799 |
+
# else:
|
3800 |
+
# st.error("Error submitting quiz. Please try again.")
|
3801 |
+
for idx, quiz in enumerate(quizzes):
|
3802 |
+
with st.expander(f"π {quiz.get('title', 'Quiz')}", expanded=True):
|
3803 |
# Check if student has already taken this quiz
|
3804 |
existing_score = get_student_quiz_score(quiz['_id'], student_id)
|
3805 |
|
|
|
3811 |
for i, question in enumerate(quiz['questions']):
|
3812 |
st.markdown(f"**Question {i+1}:** {question['question']}")
|
3813 |
for opt in question['options']:
|
3814 |
+
if opt == question['correct_option']:
|
3815 |
st.markdown(f"β
{opt}")
|
3816 |
else:
|
3817 |
st.markdown(f"- {opt}")
|
|
|
3818 |
else:
|
3819 |
# Display quiz questions
|
3820 |
st.write("Please select your answers:")
|
3821 |
|
3822 |
+
# Create a form with unique key using both quiz ID and index
|
3823 |
+
form_key = f"quiz_form_{quiz['_id']}_{idx}"
|
3824 |
+
with st.form(key=form_key):
|
3825 |
student_answers = {}
|
3826 |
|
3827 |
for i, question in enumerate(quiz['questions']):
|
3828 |
st.markdown(f"**Question {i+1}:** {question['question']}")
|
3829 |
+
options = question['options']
|
3830 |
+
answer = st.radio(
|
3831 |
+
f"Select answer:",
|
3832 |
options=options,
|
3833 |
+
key=f"q_{quiz['_id']}_{idx}_{i}", # Make radio button key unique too
|
3834 |
+
index=None
|
3835 |
)
|
3836 |
+
if answer:
|
3837 |
+
student_answers[str(i)] = answer
|
3838 |
|
3839 |
# Submit button
|
3840 |
if st.form_submit_button("Submit Quiz"):
|
3841 |
+
if len(student_answers) != len(quiz['questions']):
|
3842 |
+
st.error("Please answer all questions before submitting.")
|
|
|
|
|
|
|
3843 |
else:
|
3844 |
+
score = submit_quiz_answers(quiz['_id'], student_id, student_answers)
|
3845 |
+
if score is not None:
|
3846 |
+
st.success(f"Quiz submitted successfully! Your score: {score:.1f}%")
|
3847 |
+
st.rerun()
|
3848 |
+
else:
|
3849 |
+
st.error("Error submitting quiz. Please try again.")
|
3850 |
|
3851 |
def display_session_content(student_id, course_id, session, username, user_type):
|
3852 |
st.title(f"{session['title']}")
|
|
|
3920 |
with tabs[2]:
|
3921 |
display_post_class_content(session, student_id, course_id)
|
3922 |
with tabs[3]:
|
3923 |
+
display_preclass_analytics2(session, course_id)
|
|
|
3924 |
with tabs[4]:
|
3925 |
display_inclass_analytics(session, course_id)
|
3926 |
with tabs[5]:
|