Coverage for app/logic/userManagement.py: 95%

61 statements  

« prev     ^ index     » next       coverage.py v7.2.7, created at 2025-07-22 20:03 +0000

1from flask import g, session 

2from playhouse.shortcuts import model_to_dict 

3 

4from app.models.user import User 

5from app.models.term import Term 

6from app.models.programManager import ProgramManager 

7from app.models.program import Program 

8from app.models.eventTemplate import EventTemplate 

9from app.models.attachmentUpload import AttachmentUpload 

10from app.logic.createLogs import createActivityLog 

11from app.logic.fileHandler import FileHandler 

12 

13def addCeltsAdmin(user): 

14 user = User.get_by_id(user) 

15 user.isCeltsAdmin = True 

16 user.save() 

17 createActivityLog(f'Made {user.firstName} {user.lastName} a CELTS admin member.') 

18 

19 

20def addCeltsStudentStaff(user): 

21 user = User.get_by_id(user) 

22 user.isCeltsStudentStaff = True 

23 user.save() 

24 createActivityLog(f'Made {user.firstName} {user.lastName} a CELTS student staff member.') 

25 

26 

27def removeCeltsAdmin(user): 

28 user = User.get_by_id(user) 

29 user.isCeltsAdmin = False 

30 user.save() 

31 createActivityLog(f'Removed {user.firstName} {user.lastName} from CELTS admins.') 

32 

33 

34def removeCeltsStudentStaff(user): 

35 user = User.get_by_id(user) 

36 programManagerRoles = list([obj.program.programName for obj in ProgramManager.select(Program).join(Program).where(ProgramManager.user == user)]) 

37 programManagerRoles = ", ".join(programManagerRoles) 

38 ProgramManager.delete().where(ProgramManager.user_id == user).execute() 

39 user.isCeltsStudentStaff = False 

40 user.save() 

41 createActivityLog(f'Removed {user.firstName} {user.lastName} from a CELTS student staff member'+ 

42 (f', and as a manager of {programManagerRoles}.' if programManagerRoles else ".")) 

43 

44def changeProgramInfo(programId, 

45 attachment, 

46 programName= None, 

47 programDescription = None, 

48 partner = None, 

49 contactEmail=None, 

50 contactName= None, 

51 location = None, 

52 instagramUrl = None, 

53 facebookUrl = None, 

54 bereaUrl = None): 

55 

56 

57 """Updates the program info and logs that change""" 

58 program = Program.get_by_id(programId) 

59 if attachment: 

60 addFile: FileHandler = FileHandler(attachment, programId=programId) 

61 addFile.saveFiles() 

62 updatedProgram = Program.update( 

63 { Program.programName:programName, 

64 Program.programDescription: programDescription, 

65 Program.partner: partner, 

66 Program.contactEmail: contactEmail, 

67 Program.contactName: contactName, 

68 Program.defaultLocation: location, 

69 Program.instagramUrl:instagramUrl, 

70 Program.facebookUrl: facebookUrl, 

71 Program.bereaUrl: bereaUrl 

72 } 

73 ).where(Program.id==programId) 

74 updatedProgram.execute() 

75 

76 

77 if programName != program.programName: 

78 createActivityLog(f"{program.programName} Program Name was changed to: {programName}") 

79 if programDescription != program.programDescription: 

80 createActivityLog(f"{program.programName} Description was changed to: {programDescription}") 

81 if partner != program.partner: 

82 createActivityLog(f"{program.programName} Program Partner was changed to: {partner}") 

83 if contactEmail != program.contactEmail: 

84 createActivityLog(f"{program.programName} Contact Email was changed to: {contactEmail}") 

85 if contactName != program.contactName: 

86 createActivityLog(f"{program.programName} Contact Name was changed to: {contactName}") 

87 if location != program.defaultLocation: 

88 createActivityLog(f"{program.programName} Location was changed to: {location}") 

89 

90 

91 return (f'Program email info updated') 

92 

93def getAllowedPrograms(currentUser): 

94 """Returns a list of all visible programs depending on who the current user is.""" 

95 if currentUser.isCeltsAdmin: 

96 return Program.select().order_by(Program.programName) 

97 else: 

98 return Program.select().join(ProgramManager).where(ProgramManager.user==currentUser).order_by(Program.programName) 

99 

100 

101 

102def getAllowedTemplates(currentUser): 

103 """Returns a list of all visible templates depending on who the current user is. If they are not an admin it should always be none.""" 

104 if currentUser.isCeltsAdmin: 

105 return EventTemplate.select().where(EventTemplate.isVisible==True).order_by(EventTemplate.name) 

106 else: 

107 return []