Skip to content
Snippets Groups Projects
Commit 83f6d2c6 authored by yazSpaz's avatar yazSpaz
Browse files
parents 398fc27c c833ac3d
No related branches found
No related tags found
No related merge requests found
......@@ -28,7 +28,7 @@ def student():
@routes_bp.route('/login', methods=['GET', 'POST'])
def login():
if session.get("user_id"): # 已登入就導回正確頁面
if session.get("user_id"): # If you are logged in, you will be redirected to the correct page
if session.get("role") == "teacher":
varr = session.get("user_id")
varrr = current_user
......@@ -732,7 +732,7 @@ def editFIB(id):
flash("Question updated successfully!", "success")
return redirect(url_for('routes.fill_the_blanks'))
# 取得 module 下拉選單資料
# Get module drop-down menu information
base_sql = """
SELECT *
FROM teachers JOIN teacher_module ON teachers.id = teacher_module.teacher_id
......@@ -837,40 +837,88 @@ def attemptTest():
return render_template('attemptTest.html', tests=tests)
# This is studetn attempt formative test
@routes_bp.route('/attemptFormative/<int:id>', methods=['POST', 'GET'])
@routes_bp.route('/attemptFormative/<int:id>', methods=['GET', 'POST'])
def attemptFormative(id):
student_id = session["user_id"]
sql_test = """
SELECT *
FROM tests
WHERE id = :id
"""
sql_test = text(sql_test)
if request.method == 'POST':
# answer snet from front end
answers = request.form.to_dict(flat=True)
result = {
"mcq": [],
"fib": []
}
for key, user_answer in answers.items():
if '_' in key:
qtype, qid = key.split('_')
qid = int(qid)
if qtype == 'mcq':
row = MCQ.query.get(qid)
if row:
# Corresponding A/B/C/D to the actual option content
options_map = {
'A': row.option_a,
'B': row.option_b,
'C': row.option_c,
'D': row.option_d
}
# Get the content actually selected by the user
user_option_value = options_map.get(user_answer.strip().upper(), '')
result["mcq"].append({
"question_id": qid,
"your_answer": user_option_value,
"answer": options_map.get(row.answer.strip().upper(), ''),
"is_correct": user_answer.strip().upper() == row.answer.strip().upper(),
"feedback": row.feedback if row.feedback != '' else ''
})
elif qtype == 'fib':
# sql = text("SELECT * FROM FIB WHERE id = :id")
# row = db.engine.execute(sql, {"id": qid}).fetchone()
row = FIB.query.get(qid)
if row:
result["fib"].append({
"question_id": qid,
"your_answer": user_answer,
"answer": row.answer,
"is_correct": user_answer.strip().lower() == row.answer.strip().lower(),
"feedback": row.feedback if row.feedback != '' else ''
})
# Save to session, redirect to feedback page
session["formative_result"] = result
return redirect(url_for("routes.formative_answer"))
# GET method: Render the test page
sql_test = text("SELECT * FROM tests WHERE id = :id")
test = db.engine.connect().execute(sql_test, {"id": id}).fetchone()
sql_mcq = """
SELECT *
FROM test_questions tq JOIN MCQ on tq.question_id = MCQ.id
sql_mcq = text("""
SELECT * FROM test_questions tq JOIN MCQ on tq.question_id = MCQ.id
WHERE test_id = :test_id AND tq.question_type = "MCQ"
"""
sql_mcq = text(sql_mcq)
""")
mcq_questions = db.engine.connect().execute(sql_mcq, {"test_id": id}).fetchall()
sql_fib = """
SELECT *
FROM test_questions tq JOIN FIB on tq.question_id = FIB.id
sql_fib = text("""
SELECT * FROM test_questions tq JOIN FIB on tq.question_id = FIB.id
WHERE test_id = :test_id AND tq.question_type = "FIB"
"""
sql_fib = text(sql_fib)
""")
fib_questions = db.engine.connect().execute(sql_fib, {"test_id": id}).fetchall()
return render_template('attemptFormative.html', test=test, mcq_questions=mcq_questions, fib_questions=fib_questions)
# formativeAnswer page by Kris
@routes_bp.route('/formativeAnswer')
def formative_answer():
result = session.get("formative_result", {"mcq": [], "fib": []})
return render_template("formativeAnswer.html", result=result)
@routes_bp.route('/reviewTests')
......
......@@ -7,7 +7,7 @@
</div>
<div class="form-container">
<form action="{{ url_for('routes.attempt_formative') }}" method="POST">
<form action="{{ url_for('routes.attemptFormative', id=test.id) }}" method="POST">
<!-- Section A: Multiple Choice Questions -->
<div class="form-group mb-3">
<h5>Section A: Multiple Choice Questions</h5>
......
{% extends "layout.html" %}
{% block content %}
<div class="container mt-5">
<h2 class="mb-4">Formative Test Feedback</h2>
<h4>Section A: Multiple Choice Questions</h4>
<ul class="list-group mb-4">
{% for q in result.mcq %}
<li class="list-group-item">
<p><strong>Q{{ loop.index }}:</strong></p>
<p>Your Answer: <span class="{{ 'text-success fw-bold' if q.is_correct else 'text-danger fw-bold' }}">{{ q.your_answer }}</span></p>
<p>Correct Answer: <strong>{{ q.answer }}</strong></p>
{% if q.feedback %}
<p class="text-muted"><em>Feedback: {{ q.feedback }}</em></p>
{% endif %}
</li>
{% endfor %}
</ul>
<h4>Section B: Fill in the Blanks</h4>
<ul class="list-group mb-4">
{% for q in result.fib %}
<li class="list-group-item">
<p><strong>Q{{ loop.index }}:</strong></p>
<p>Your Answer: <span class="{{ 'text-success fw-bold' if q.is_correct else 'text-danger fw-bold' }}">{{ q.your_answer }}</span></p>
<p>Correct Answer: <strong>{{ q.answer }}</strong></p>
{% if q.feedback %}
<p class="text-muted"><em>Feedback: {{ q.feedback }}</em></p>
{% endif %}
</li>
{% endfor %}
</ul>
<div class="text-center">
<a href="{{ url_for('routes.student') }}" class="btn btn-primary">Back to Dashboard</a>
</div>
</div>
{% endblock %}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment