Edoruin commited on
Commit
00d7617
·
1 Parent(s): 2c775a2

Split course by teachers

Browse files
Files changed (1) hide show
  1. app/main.py +21 -9
app/main.py CHANGED
@@ -323,16 +323,19 @@ class ClassroomManager(HFDatasetManager):
323
  else:
324
  print("[ClassroomManager] Failed to save to HF, data saved locally only")
325
 
326
- def get_courses(self):
 
 
327
  return self.classrooms
328
 
329
  def get_course(self, course_id):
330
  return next((c for c in self.classrooms if c['id'] == course_id), None)
331
 
332
- def create_course(self, name):
333
  course = {
334
  "id": str(uuid.uuid4()),
335
  "name": name,
 
336
  "students": []
337
  }
338
  self.classrooms.append(course)
@@ -1015,7 +1018,7 @@ def guia_gestion():
1015
  @app.route('/classroom/dashboard')
1016
  @login_required
1017
  def classroom_dashboard():
1018
- courses = classroom_manager.get_courses()
1019
  return render_template('classroom_dashboard.html', title="Gestión de Aulas", courses=courses)
1020
 
1021
  @app.route('/classroom/create', methods=['POST'])
@@ -1023,7 +1026,7 @@ def classroom_dashboard():
1023
  def create_course():
1024
  name = request.form.get('name')
1025
  if name:
1026
- classroom_manager.create_course(name)
1027
  flash('Curso creado exitosamente', 'green')
1028
  else:
1029
  flash('El nombre del curso es requerido', 'red')
@@ -1033,8 +1036,8 @@ def create_course():
1033
  @login_required
1034
  def course_details(course_id):
1035
  course = classroom_manager.get_course(course_id)
1036
- if not course:
1037
- flash('Curso no encontrado', 'red')
1038
  return redirect(url_for('classroom_dashboard'))
1039
  return render_template('course_details.html', title=course['name'], course=course)
1040
 
@@ -1077,7 +1080,12 @@ def delete_student(course_id, student_id):
1077
  @app.route('/api/courses')
1078
  def api_courses():
1079
  """Devuelve la lista de cursos y sus estudiantes para el frontend."""
1080
- courses = classroom_manager.get_courses()
 
 
 
 
 
1081
  return jsonify(courses)
1082
 
1083
  @app.route('/api/faces', methods=['GET', 'POST'])
@@ -1130,15 +1138,19 @@ class AttendancePDF(FPDF):
1130
  @app.route('/export/attendance/<student_id>')
1131
  @login_required
1132
  def export_attendance(student_id):
 
 
 
1133
  # Buscar registros del estudiante
1134
  all_logs = []
1135
  if isinstance(face_mgr.faces, dict):
1136
  all_logs = face_mgr.faces.get("attendance_log", [])
1137
 
1138
- student_logs = [log for log in all_logs if log.get('student_id') == student_id]
 
1139
 
1140
  if not student_logs:
1141
- flash("No hay registros de asistencia para este estudiante.", "orange")
1142
  return redirect(request.referrer or url_for('classroom_dashboard'))
1143
 
1144
  student_name = student_logs[0].get('student_name', 'Estudiante')
 
323
  else:
324
  print("[ClassroomManager] Failed to save to HF, data saved locally only")
325
 
326
+ def get_courses(self, creator_id=None):
327
+ if creator_id:
328
+ return [c for c in self.classrooms if c.get('creator_id') == creator_id]
329
  return self.classrooms
330
 
331
  def get_course(self, course_id):
332
  return next((c for c in self.classrooms if c['id'] == course_id), None)
333
 
334
+ def create_course(self, name, creator_id=None):
335
  course = {
336
  "id": str(uuid.uuid4()),
337
  "name": name,
338
+ "creator_id": creator_id,
339
  "students": []
340
  }
341
  self.classrooms.append(course)
 
1018
  @app.route('/classroom/dashboard')
1019
  @login_required
1020
  def classroom_dashboard():
1021
+ courses = classroom_manager.get_courses(creator_id=current_user.id)
1022
  return render_template('classroom_dashboard.html', title="Gestión de Aulas", courses=courses)
1023
 
1024
  @app.route('/classroom/create', methods=['POST'])
 
1026
  def create_course():
1027
  name = request.form.get('name')
1028
  if name:
1029
+ classroom_manager.create_course(name, creator_id=current_user.id)
1030
  flash('Curso creado exitosamente', 'green')
1031
  else:
1032
  flash('El nombre del curso es requerido', 'red')
 
1036
  @login_required
1037
  def course_details(course_id):
1038
  course = classroom_manager.get_course(course_id)
1039
+ if not course or course.get('creator_id') != current_user.id:
1040
+ flash('Curso no encontrado o no tienes permiso para verlo', 'red')
1041
  return redirect(url_for('classroom_dashboard'))
1042
  return render_template('course_details.html', title=course['name'], course=course)
1043
 
 
1080
  @app.route('/api/courses')
1081
  def api_courses():
1082
  """Devuelve la lista de cursos y sus estudiantes para el frontend."""
1083
+ # Si el usuario está autenticado, solo mostramos sus cursos.
1084
+ # Si no, por ahora no mostramos ninguno para mantener la privacidad.
1085
+ if current_user.is_authenticated:
1086
+ courses = classroom_manager.get_courses(creator_id=current_user.id)
1087
+ else:
1088
+ courses = []
1089
  return jsonify(courses)
1090
 
1091
  @app.route('/api/faces', methods=['GET', 'POST'])
 
1138
  @app.route('/export/attendance/<student_id>')
1139
  @login_required
1140
  def export_attendance(student_id):
1141
+ # Buscar cursos del usuario actual para filtrar
1142
+ my_courses = {c['id'] for c in classroom_manager.get_courses(creator_id=current_user.id)}
1143
+
1144
  # Buscar registros del estudiante
1145
  all_logs = []
1146
  if isinstance(face_mgr.faces, dict):
1147
  all_logs = face_mgr.faces.get("attendance_log", [])
1148
 
1149
+ # Filtrar logs: deben ser del estudiante Y de un curso que pertenezca al usuario actual
1150
+ student_logs = [log for log in all_logs if log.get('student_id') == student_id and log.get('course_id') in my_courses]
1151
 
1152
  if not student_logs:
1153
+ flash("No hay registros de asistencia para este estudiante en tus cursos.", "orange")
1154
  return redirect(request.referrer or url_for('classroom_dashboard'))
1155
 
1156
  student_name = student_logs[0].get('student_name', 'Estudiante')