|
|
- import MySQLdb
-
- from .member import Member as member
- from .group import Group as group
- from .event import Event as 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,
- db_prefix):
- self.db = MySQLdb.connect(
- host=mysql_host, user=mysql_user, passwd=mysql_pass, db=mysql_db)
- self.cursor = self.db.cursor()
- self.prefix = db_prefix
- self.members = dict()
- self.groups = dict()
- self.events = dict()
- self.event_confirmation_id = None
- sql = f"SELECT usf_id,usf_name_intern FROM {self.prefix}_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 = f"""SELECT cat_id
- FROM {self.prefix}_categories
- WHERE cat_name_intern = 'EVENTS'"""
- self.cursor.execute(sql)
- self.event_confirmation_id = self.cursor.fetchone()[0]
-
- self.initMembers()
- self.initGroups()
- self.initEvents()
- self.ready = True
-
- def __del__(self):
- self.db.close()
-
- def refresh(self):
- """Refresh all users, groups and events that are stored"""
- self.ready = False
- self.members = dict()
- self.groups = dict()
- self.events = dict()
- self.initMembers()
- self.initGroups()
- self.initEvents()
- self.ready = True
-
- def initMembers(self):
- """Initialises all members in the Admidio installation"""
-
- sql = f"""SELECT usr_id, usr_login_name, usr_password
- FROM {self.prefix}_users WHERE usr_valid = 1"""
- self.cursor.execute(sql)
-
- for row in self.cursor.fetchall():
- self.members[row[0]] = 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 {self.prefix}_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(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 {self.prefix}_dates
- WHERE dat_begin >'{datestring}'
- ORDER BY dat_begin"""
- self.cursor.execute(sql)
-
- for row in self.cursor.fetchall():
- self.events[row[0]] = event(
- row[0], row[8], row[4], row[2], row[3], row[5],
- row[6], row[7], row[1], 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")
|