The objective of this interface is the ability to get data from an Admidio installation and use them in python. Currently Users, groups and events are integrated
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

104 lines
3.6 KiB

  1. from .exceptions import MemberNotFoundException
  2. import hashlib
  3. class Event():
  4. def __init__(self, event_id, rol_id, name, start_time, end_time,
  5. description, location, country, cat_id, admidio):
  6. self.__c = admidio.db.cursor()
  7. self.id = event_id
  8. self.rol_id = rol_id
  9. self.name = name
  10. self.start_time = start_time
  11. self.end_time = end_time
  12. self.description = description
  13. self.location = location
  14. self.country = country
  15. self.cat_id = cat_id
  16. self.admidio = admidio
  17. self.participants = list()
  18. self.leaders = list()
  19. self.number_of_guests = 0
  20. self.event_with_registration = False
  21. if self.rol_id:
  22. # Admidio only assigns a rol id when you can register for it
  23. self.event_with_registration = True
  24. sql = f"""SELECT mem_usr_id, mem_leader, mem_count_guests, mem_approved
  25. FROM {self.admidio.prefix}_members
  26. WHERE mem_rol_id = {self.rol_id}
  27. AND mem_end = '9999-12-31'"""
  28. self.__c.execute(sql)
  29. for row in self.__c.fetchall():
  30. try:
  31. self.number_of_guests += row[2]
  32. # Distinguish between members that will attend, not
  33. # attend, or will maybe attend.
  34. if row[1] == 1:
  35. self.leaders.append(
  36. [row[3], self.admidio.getMemberFromID(row[0])])
  37. else:
  38. self.participants.append(
  39. [row[3], self.admidio.getMemberFromID(row[0])])
  40. except MemberNotFoundException:
  41. print(
  42. "Member with id {row[0]} not found, group id:" +
  43. f"{self.id}")
  44. def __eq__(self, other):
  45. if isinstance(other, Event):
  46. return self.hash() == other.hash()
  47. def hash(self):
  48. return hashlib.md5((str(self.rol_id)
  49. + self.start_time.strftime("%Y-%m-%d %H:%M:%S")
  50. + self.end_time.strftime("%Y-%m-%d %H:%M:%S")
  51. + str(self.id)
  52. + (''.join(str(y)
  53. for x, y in self.participants) or '')
  54. + (''.join(str(y) for x, y in self.leaders) or '')
  55. + self.name + (self.description or '') +
  56. (self.location or '')
  57. + str(self.cat_id)).encode('utf-8')).hexdigest()
  58. def getAllMembers(self):
  59. """Return leaders and members in group, combined"""
  60. return self.leaders + self.participants
  61. def getAllAttend(self):
  62. """Return leaders and members which actually attend"""
  63. members = list()
  64. for i in (self.leaders + self.participants):
  65. if (i[0] == 2):
  66. members.append(i)
  67. return members
  68. def getAllMaybe(self):
  69. """Return leaders and members which will maybe attend"""
  70. members = list()
  71. for i in (self.leaders + self.participants):
  72. if (i[0] == 1):
  73. members.append(i)
  74. return members
  75. def getAllNotAttend(self):
  76. """Return leaders and members which will not attend"""
  77. members = list()
  78. for i in (self.leaders + self.participants):
  79. if (i[0] == 3):
  80. members.append(i)
  81. return members
  82. def getNumberMembers(self):
  83. """Return the total number of members"""
  84. return len(self.leaders) + len(self.participants)