Spaces:
Paused
Paused
File size: 10,198 Bytes
e4fe207 597ff7e e4fe207 597ff7e e4fe207 597ff7e e4fe207 597ff7e e4fe207 597ff7e e4fe207 597ff7e e4fe207 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 |
import streamlit as st
import time
from app5_selectbox import academic_list, class_tbl, instructor, program, student, subject, subj_inst, evaluation, evaluation_fac
from app5_selectbox.database_con import cursor, db_connection
def student_login(username, password):
cursor.execute(f"SELECT s.stud_id, s.stud_name, s.class_id, s.user_type FROM student s WHERE s.stud_username='{username}' AND s.stud_password='{password}'")
return cursor.fetchone()
def instructor_login(username, password):
cursor.execute(f"SELECT i.inst_id, i.inst_name, i.prog_id FROM instructor i WHERE i.inst_username='{username}' AND i.inst_password='{password}'")
return cursor.fetchone()
def app5():
st.title("Student-Faculty Evaluation")
if not hasattr(st.session_state, "logged_in") or not st.session_state.logged_in:
st.subheader("User Login")
username = st.text_input("Username")
password = st.text_input("Password", type="password")
if st.button("Login", type="primary"):
student_info = student_login(username, password)
if student_info:
st.success(f"Hello, {student_info[1]}! Login Successful")
st.session_state.logged_in = True
st.session_state.student_id = student_info[0]
st.session_state.class_id = student_info[2]
st.session_state.user_type = student_info[3]
time.sleep(1)
st.rerun()
elif not student_info:
instructor_info = instructor_login(username, password)
if instructor_info:
st.success(f"Hello, {instructor_info[1]}! Login Successful")
st.session_state.logged_in = True
st.session_state.inst_id = instructor_info[0]
st.session_state.inst_name = instructor_info[1]
st.session_state.prog_id = instructor_info[2]
st.session_state.user_type = 'faculty'
time.sleep(1)
st.rerun()
else:
st.error("Invalid Credentials")
else:
st.error("Invalid Credentials")
else:
if st.session_state.user_type == 'student':
cursor.execute(f"SELECT s.stud_name, c.class_year, c.class_section FROM student s JOIN class c ON s.class_id = c.class_id WHERE s.stud_id='{st.session_state.student_id}'")
student_info = cursor.fetchone()
student_name, class_year, class_section = student_info
st.subheader(f"Hello, {student_name} (Class Year: {class_year}, Section: {class_section}) - Student Evaluation")
cursor.execute(f"""
SELECT si.subj_inst_id, si.sub_id_code, sub.sub_name, i.inst_name
FROM subj_inst si
LEFT JOIN evaluation e ON e.subj_inst_id = si.subj_inst_id AND e.stud_id = {st.session_state.student_id}
INNER JOIN subject sub ON sub.sub_id_code = si.sub_id_code
INNER JOIN instructor i ON i.inst_id = si.inst_id
WHERE e.stud_id IS NULL AND si.class_id = '{st.session_state.class_id}'
""")
subjects = cursor.fetchall()
subject_names = [f"{subject[2]} with Instructor: {subject[3]}" for subject in subjects]
if not subjects:
st.warning("You have evaluated all available subjects. Thank you!")
st.balloons()
progress_text = "logging-out . ..."
my_bar = st.progress(0, text=progress_text)
for percent_complete in range(100):
time.sleep(0.01)
my_bar.progress(percent_complete + 1, text=progress_text)
cursor.execute(f"UPDATE student SET is_eval='TRUE' WHERE stud_id = '{st.session_state.student_id}'")
db_connection.commit()
st.session_state.pop("logged_in", None)
st.session_state.pop("student_id", None)
st.session_state.pop("class_id", None)
st.rerun()
else:
selected_subject = st.selectbox("Select a Subject to Evaluate", subject_names)
selected_subject_id = None
for sel_subject in subjects:
if f"{sel_subject[2]} with Instructor: {sel_subject[3]}" == selected_subject:
selected_subject_id = sel_subject[0]
keys = {}
if selected_subject_id:
st.write(f"You are evaluating the {selected_subject}.")
criteria_list = [
"Teaching Effectiveness",
"Course Organization",
"Accessibility and Communication",
"Assessment and Grading",
"Respect and Inclusivity",
"Engagement and Interactivity",
"Feedback and Improvement",
"Accessibility of Learning Resources",
"Passion and Enthusiasm",
"Professionalism and Ethical Conduct",
]
criteria = {}
for i in range(10):
criteria_key = f"criteria_{i}_{selected_subject_id}"
criteria_text = f"{criteria_list[i]} (1-5)"
criteria[i] = st.slider(criteria_text, 1.00, 5.00, 1.00, step=0.05, key=criteria_key)
keys[f"criteria_{i}"] = criteria_key
feedback_comment_key = f"feedback_comment_{selected_subject_id}"
feedback_comment = st.text_area("Feedback/Comments", key=feedback_comment_key)
if st.button("Submit Evaluation"):
if not feedback_comment:
st.warning("Please provide feedback comments.")
else:
cursor.execute(f"SELECT si.inst_id FROM subj_inst si WHERE si.subj_inst_id = '{selected_subject_id}'")
instructor_id = cursor.fetchone()
if instructor_id:
instructor_id = instructor_id[0]
cursor.execute(f"""INSERT INTO evaluation (
stud_id,
subj_inst_id,
inst_id,
Teaching_Effectiveness,
Course_Organization,
Accessibility_and_Communication,
Assessment_and_Grading,
Respect_and_Inclusivity,
Engagement_and_Interactivity,
Feedback_and_Improvement,
Accessibility_of_Learning_Resources,
Passion_and_Enthusiasm,
Professionalism_and_Ethical_Conduct,
comments,
eval_timestamp)
VALUES ('{st.session_state.student_id}', '{selected_subject_id}', '{instructor_id}', '{criteria[0]}', '{criteria[1]}', '{criteria[2]}', '{criteria[3]}', '{criteria[4]}', '{criteria[5]}', '{criteria[6]}', '{criteria[7]}', '{criteria[8]}', '{criteria[9]}','{feedback_comment}', strftime('%Y-%m-%d %H:%M:%S','now'))""")
db_connection.commit()
with st.empty():
st.write("Submitting evaluation...")
time.sleep(0.3)
st.success("Evaluation submitted successfully")
time.sleep(0.4)
feedback_comment = ""
st.rerun()
else:
for i in keys.keys():
keys[i] = None
feedback_comment = None
if st.button("Log Out"):
st.session_state.pop("logged_in", None)
st.session_state.pop("student_id", None)
st.session_state.pop("class_id", None)
st.rerun()
elif st.session_state.user_type == 'faculty':
evaluation_fac.evaluation()
elif st.session_state.user_type == 'admin':
table_name = st.sidebar.selectbox("Select Table", ("academic_list", "class", "instructor", "program", "student", "subject", "subj_inst", "evaluation"))
if table_name == "academic_list":
academic_list.academic_list(table_name)
elif table_name == "class":
class_tbl.class_tbl(table_name)
elif table_name == "instructor":
instructor.instructor(table_name)
elif table_name == "program":
program.program(table_name)
elif table_name == "student":
student.student(table_name)
elif table_name == "subject":
subject.subject(table_name)
elif table_name == "subj_inst":
subj_inst.subj_inst(table_name)
elif table_name == "evaluation":
evaluation.evaluation()
else:
st.error("Select a valid table from the sidebar.")
if st.button("Log Out"):
st.session_state.pop("logged_in", None)
st.session_state.pop("student_id", None)
st.session_state.pop("class_id", None)
st.rerun()
# Call the main function
if __name__ == "__main__":
app5()
|