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

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 

16 

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]) 

23 

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) 

30 

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") 

56 

57 

58@admin_bp.route('/deleteProgramFile', methods=['POST']) 

59def deleteProgramFile(): 

60 programFile=FileHandler(programId=request.form["programID"]) 

61 programFile.deleteFile(request.form["fileId"]) 

62 return "" 

63 

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) 

71 

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) 

78 

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 ) 

92 

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) 

103 

104@admin_bp.route('/admin/changeTerm', methods=['POST']) 

105def changeTerm(): 

106 termData = request.form 

107 term = int(termData["id"]) 

108 changeCurrentTerm(term) 

109 return "" 

110 

111@admin_bp.route('/admin/addNewTerm', methods = ['POST']) 

112def addNewTerm(): 

113 addNextTerm() 

114 return ""