import MySQLdb
|
|
import member
|
|
import group
|
|
import event
|
|
from exceptions import MemberNotFoundException
|
|
from datetime import datetime
|
|
from dateutil.relativedelta import relativedelta
|
|
|
|
|
|
class Admidio:
|
|
"""Creates the Admidio Class"""
|
|
|
|
def __init__(self, mysql_host, mysql_user, mysql_pass, mysql_db):
|
|
self.db = MySQLdb.connect(
|
|
host=mysql_host, user=mysql_user, passwd=mysql_pass, db=mysql_db)
|
|
self.cursor = self.db.cursor()
|
|
self.members = dict()
|
|
self.groups = dict()
|
|
self.events = dict()
|
|
self.event_confirmation_id = None
|
|
sql = "SELECT usf_id,usf_name_intern FROM `adm_user_fields`"
|
|
self.cursor.execute(sql)
|
|
self.userfields = dict(self.cursor.fetchall())
|
|
|
|
# Get the id for event confirmation role.
|
|
# So it can exclude them from Groups
|
|
sql = """SELECT cat_id
|
|
FROM adm_categories
|
|
WHERE cat_name_intern = 'CONFIRMATION_OF_PARTICIPATION'"""
|
|
self.cursor.execute(sql)
|
|
self.event_confirmation_id = self.cursor.fetchone()[0]
|
|
|
|
self.initMembers()
|
|
self.initGroups()
|
|
self.initEvents()
|
|
|
|
def __del__(self):
|
|
self.db.close()
|
|
|
|
def initMembers(self):
|
|
"""Initialises all members in the Admidio installation"""
|
|
|
|
sql = """SELECT usr_id, usr_login_name, usr_password
|
|
FROM adm_users WHERE usr_valid = 1"""
|
|
self.cursor.execute(sql)
|
|
|
|
for row in self.cursor.fetchall():
|
|
self.members[row[0]] = member.Member(
|
|
self.db, row[0], row[1],
|
|
row[2], self.userfields, self)
|
|
|
|
def initGroups(self):
|
|
"""Initialises all groups in the Admidio installation"""
|
|
|
|
sql = f"""SELECT rol_id, rol_name, rol_description
|
|
FROM adm_roles
|
|
WHERE rol_valid = 1
|
|
AND rol_cat_id != {self.event_confirmation_id}"""
|
|
self.cursor.execute(sql)
|
|
|
|
for row in self.cursor.fetchall():
|
|
self.groups[row[0]] = group.Group(self.db, row[0], row[1], self)
|
|
|
|
def initEvents(self):
|
|
"""Initialises all comming events and passed events <3 months"""
|
|
|
|
datestring = datetime.now() + relativedelta(months=-6)
|
|
datestring = datestring.strftime("%Y-%m-%d %H:%M:%S")
|
|
|
|
sql = f"""SELECT dat_id, dat_cat_id, dat_begin, dat_end,
|
|
dat_headline, dat_description,
|
|
dat_location, dat_country, dat_rol_id
|
|
FROM adm_dates
|
|
WHERE dat_begin >'{datestring}'"""
|
|
self.cursor.execute(sql)
|
|
|
|
for row in self.cursor.fetchall():
|
|
self.events[row[0]] = event.Event(
|
|
self.db, row[0], row[8], row[4], row[2], row[3], row[5],
|
|
row[6], row[7], self)
|
|
|
|
def getMemberFromID(self, user_id):
|
|
"""
|
|
Returns Member object if user_id exists
|
|
otherwise throws MemberNotFoundException
|
|
"""
|
|
if user_id in self.members:
|
|
return self.members[user_id]
|
|
else:
|
|
raise MemberNotFoundException(
|
|
f"Member with id {user_id} not found")
|