Coverage for app/controllers/admin/userManagement.py: 32%
85 statements
« prev ^ index » next coverage.py v7.2.7, created at 2025-05-02 15:35 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2025-05-02 15:35 +0000
1from flask import render_template,request, flash, g, abort, redirect, url_for
2from peewee import fn, JOIN
3import re
4from app.controllers.admin import admin_bp
5from app.models.user import User
6from app.models.program import Program
7from app.logic.fileHandler import FileHandler
8from app.logic.userManagement import addCeltsAdmin,addCeltsStudentStaff,removeCeltsAdmin,removeCeltsStudentStaff
9from app.logic.userManagement import changeProgramInfo
10from app.logic.utils import selectSurroundingTerms
11from app.logic.term import addNextTerm, changeCurrentTerm
12from app.logic.volunteers import setProgramManager
13from app.models.attachmentUpload import AttachmentUpload
14from app.models.programManager import ProgramManager
15from app.models.user import User
17@admin_bp.route('/admin/manageUsers', methods = ['POST'])
18def manageUsers():
19 eventData = request.form
20 user = eventData['user']
21 method = eventData['method']
22 username = re.sub("[()]","", (user.split())[-1])
24 try:
25 user = User.get_by_id(username)
26 except Exception as e:
27 print(e)
28 flash(username + " is an invalid user.", "danger")
29 return ("danger", 500)
31 if method == "addCeltsAdmin":
32 if user.isStudent and not user.isCeltsStudentStaff:
33 flash(user.firstName + " " + user.lastName + " cannot be added as a CELTS-Link admin", 'danger')
34 else:
35 if user.isCeltsAdmin:
36 flash(user.firstName + " " + user.lastName + " is already a CELTS-Link Admin", 'danger')
37 else:
38 addCeltsAdmin(user)
39 flash(user.firstName + " " + user.lastName + " has been added as a CELTS-Link Admin", 'success')
40 elif method == "addCeltsStudentStaff":
41 if not user.isStudent:
42 flash(username + " cannot be added as CELTS Student Staff", 'danger')
43 else:
44 if user.isCeltsStudentStaff:
45 flash(user.firstName + " " + user.lastName + " is already a CELTS Student Staff", 'danger')
46 else:
47 addCeltsStudentStaff(user)
48 flash(user.firstName + " " + user.lastName + " has been added as a CELTS Student Staff", 'success')
49 elif method == "removeCeltsAdmin":
50 removeCeltsAdmin(user)
51 flash(user.firstName + " " + user.lastName + " is no longer a CELTS Admin ", 'success')
52 elif method == "removeCeltsStudentStaff":
53 removeCeltsStudentStaff(user)
54 flash(user.firstName + " " + user.lastName + " is no longer a CELTS Student Staff", 'success')
55 return ("success")
58@admin_bp.route('/deleteProgramFile', methods=['POST'])
59def deleteProgramFile():
60 programFile=FileHandler(programId=request.form["programID"])
61 programFile.deleteFile(request.form["fileId"])
62 return ""
64@admin_bp.route('/admin/updateProgramInfo/<programID>', methods=['POST'])
65def updateProgramInfo(programID):
66 if g.current_user.isCeltsAdmin:
67 try:
68 programInfo = request.form # grabs user inputs
69 uploadedFile = request.files.get('modalProgramImage')
70 changeProgramInfo(programID, uploadedFile, **programInfo)
72 flash("Program updated", "success")
73 return redirect(url_for("admin.userManagement", accordion="program"))
74 except Exception as e:
75 flash('Error while updating program info.','warning')
76 abort(500,'Error while updating program.')
77 abort(403)
79@admin_bp.route('/admin', methods = ['GET'])
80def userManagement():
81 terms = selectSurroundingTerms(g.current_term)
82 currentPrograms = (
83 Program
84 .select(
85 Program,
86 fn.GROUP_CONCAT(fn.COALESCE(fn.CONCAT(User.firstName, ' ', User.lastName, '#', User.username), '')).alias('managers')
87 )
88 .join(ProgramManager, JOIN.LEFT_OUTER, on=(Program.id == ProgramManager.program))
89 .join(User, JOIN.LEFT_OUTER, on=(ProgramManager.user == User.username))
90 .group_by(Program.id)
91 )
93 currentAdmins = list(User.select().where(User.isCeltsAdmin))
94 currentStudentStaff = list(User.select().where(User.isCeltsStudentStaff))
95 if g.current_user.isCeltsAdmin:
96 return render_template('admin/userManagement.html',
97 terms = terms,
98 programs = list(currentPrograms),
99 currentAdmins = currentAdmins,
100 currentStudentStaff = currentStudentStaff,
101 )
102 abort(403)
104@admin_bp.route('/admin/changeTerm', methods=['POST'])
105def changeTerm():
106 termData = request.form
107 term = int(termData["id"])
108 changeCurrentTerm(term)
109 return ""
111@admin_bp.route('/admin/addNewTerm', methods = ['POST'])
112def addNewTerm():
113 addNextTerm()
114 return ""