From 38dfdc3d090d038527258933e90f6f6cdf09f865 Mon Sep 17 00:00:00 2001 From: roshni sukhnani Date: Sat, 23 May 2026 18:26:28 +0530 Subject: [PATCH] feat: add feedback feature for students and teachers --- ams.db | Bin 73728 -> 77824 bytes app.py | 61 +++++++++++++++++++- templates/admin_feedback.html | 50 +++++++++++++++++ templates/base.html | 1 + templates/feedback.html | 102 ++++++++++++++++++++++++++++++++++ 5 files changed, 213 insertions(+), 1 deletion(-) create mode 100644 templates/admin_feedback.html create mode 100644 templates/feedback.html diff --git a/ams.db b/ams.db index 9a75ec0123e10c478847509d689b07f4998642fa..e636f2ca41b9ad4a79c5f7821d58f3a97bb7acbb 100644 GIT binary patch delta 345 zcmZoTz|!!5WrDPzC<6n7Fc8B4??fGA9#ICpE)ia!kPySMiP(&cnwGQxRWMSpb%0&rK~ZPD}^0*@_ZNGV{_W3-E|d{>);rS)1u*FAod6f?6W<77q_vCVhqD>ra~T+hfqgMoj>W<`ZQ{){w6 zP6la7XI*_pdTwH7j$U$pu48gyN@{Lq yvVwDdUUF(tUZz4$epzaYLP!v&qN(#9$^N(E)ia!kRX%x#B7z#N&<5jH)}K9?B!zS iKg7WQp8p>Iq0NE;TliU}n3*jZCo{5$ZN58Sxd8y>858sX diff --git a/app.py b/app.py index 42f6b803..ae74afaa 100644 --- a/app.py +++ b/app.py @@ -203,7 +203,19 @@ def init_db(): FOREIGN KEY (teacher_id) REFERENCES teacher(teacher_id) ) """) - +# Feedback table + cursor.execute(""" + CREATE TABLE IF NOT EXISTS feedback ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + role TEXT NOT NULL, + name TEXT, + email TEXT, + feedback_type TEXT NOT NULL, + message TEXT NOT NULL, + rating INTEGER, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ) + """) # Insert default super admin if not exists cursor.execute("SELECT COUNT(*) FROM admin WHERE admin_id = 'superadmin'") if cursor.fetchone()[0] == 0: @@ -1605,7 +1617,54 @@ def export_achievement(achievement_id): flash("Failed to generate export card. Please try again.", "danger") return redirect(url_for("student-achievements")) +# ─── Feedback Routes ─────────────────────────────────────────────────────────── + +@app.route("/feedback", methods=["GET", "POST"]) +def feedback(): + if request.method == "POST": + role = request.form.get("role", "").strip() + name = request.form.get("name", "").strip() + email = request.form.get("email", "").strip() + feedback_type = request.form.get("feedback_type", "").strip() + message = request.form.get("message", "").strip() + rating = request.form.get("rating", None) + + if not role or not feedback_type or not message: + flash("Please fill in all required fields.", "danger") + return redirect(url_for("feedback")) + + try: + rating = int(rating) if rating else None + except ValueError: + rating = None + + conn = sqlite3.connect(DB_PATH) + cursor = conn.cursor() + cursor.execute(""" + INSERT INTO feedback (role, name, email, feedback_type, message, rating) + VALUES (?, ?, ?, ?, ?, ?) + """, (role, name or None, email or None, feedback_type, message, rating)) + conn.commit() + conn.close() + + flash("Thank you for your feedback!", "success") + return redirect(url_for("feedback")) + + return render_template("feedback.html") + + +@app.route("/admin/feedback") +def admin_feedback(): + if session.get("admin_logged_in") != True: + return redirect(url_for("admin_login")) + + conn = sqlite3.connect(DB_PATH) + cursor = conn.cursor() + cursor.execute("SELECT * FROM feedback ORDER BY created_at DESC") + feedbacks = cursor.fetchall() + conn.close() + return render_template("admin_feedback.html", feedbacks=feedbacks) if __name__ == "__main__": init_db() add_profile_picture_column() diff --git a/templates/admin_feedback.html b/templates/admin_feedback.html new file mode 100644 index 00000000..19cdaf6f --- /dev/null +++ b/templates/admin_feedback.html @@ -0,0 +1,50 @@ +{% extends "base.html" %} +{% block content %} + +
+

Feedback Submissions

+

All feedback submitted by students and teachers.

+ + {% if feedbacks %} +
+ + + + + + + + + + + + + + + {% for fb in feedbacks %} + + + + + + + + + + + {% endfor %} + +
#RoleNameEmailTypeMessageRatingSubmitted
{{ fb[0] }} + {{ fb[1] }} + {{ fb[2] or '—' }}{{ fb[3] or '—' }}{{ fb[4] }}{{ fb[5] }} + {% if fb[6] %}{% for i in range(fb[6]) %}⭐{% endfor %}{% else %}—{% endif %} + {{ fb[7][:16] }}
+
+ {% else %} +
+

No feedback submitted yet.

+
+ {% endif %} +
+ +{% endblock %} \ No newline at end of file diff --git a/templates/base.html b/templates/base.html index fcb3a56a..56a0defc 100644 --- a/templates/base.html +++ b/templates/base.html @@ -40,6 +40,7 @@

Achievement Management System

  • Teacher Login
  • {% endif %}
  • FAQ
  • +
  • Feedback