def get_event_regforms(event, user, with_registrations=False, only_in_acl=False): """Get registration forms with information about user registrations. :param event: the `Event` to get registration forms for :param user: A `User` :param with_registrations: Whether to return the user's registration instead of just whether they have one :param only_in_acl: Whether to include only registration forms that are in the event's ACL """ if not user: registered_user = db.literal(None if with_registrations else False) elif with_registrations: registered_user = Registration else: registered_user = RegistrationForm.registrations.any((Registration.user == user) & ~Registration.is_deleted) query = (RegistrationForm.query.with_parent(event) .with_entities(RegistrationForm, registered_user) .options(undefer('active_registration_count')) .order_by(db.func.lower(RegistrationForm.title))) if only_in_acl: query = query.filter(RegistrationForm.in_event_acls.any(event=event)) if with_registrations: query = query.outerjoin(Registration, db.and_(Registration.registration_form_id == RegistrationForm.id, Registration.user == user, ~Registration.is_deleted)) return query.all()
def get_upcoming_events(): """Get the global list of upcoming events""" from indico.modules.events import Event data = upcoming_events_settings.get_all() if not data['max_entries'] or not data['entries']: return tz = timezone(config.DEFAULT_TIMEZONE) now = now_utc(False).astimezone(tz) base_query = (Event.query .filter(Event.effective_protection_mode == ProtectionMode.public, ~Event.is_deleted, Event.end_dt.astimezone(tz) > now) .options(load_only('id', 'title', 'start_dt', 'end_dt'))) queries = [] predicates = {'category': lambda id_: Event.category_id == id_, 'category_tree': lambda id_: Event.category_chain_overlaps(id_) & Event.is_visible_in(id_), 'event': lambda id_: Event.id == id_} for entry in data['entries']: delta = timedelta(days=entry['days']) query = (base_query .filter(predicates[entry['type']](entry['id'])) .filter(db.cast(Event.start_dt.astimezone(tz), db.Date) > (now - delta).date()) .with_entities(Event, db.literal(entry['weight']).label('weight'))) queries.append(query) query = (queries[0].union(*queries[1:]) .order_by(db.desc('weight'), Event.start_dt, Event.title) .limit(data['max_entries'])) for row in query: event = row[0] # we cache the result of the function and is_deleted is used in the repr # and having a broken repr on the cached objects would be ugly set_committed_value(event, 'is_deleted', False) yield event
def get_upcoming_events(): """Get the global list of upcoming events""" from indico.modules.events import Event data = upcoming_events_settings.get_all() if not data['max_entries'] or not data['entries']: return tz = timezone(config.DEFAULT_TIMEZONE) now = now_utc(False).astimezone(tz) base_query = (Event.query .filter(Event.effective_protection_mode == ProtectionMode.public, ~Event.is_deleted, Event.end_dt.astimezone(tz) > now) .options(load_only('id', 'title', 'start_dt', 'end_dt'))) queries = [] cols = {'category': Event.category_id, 'event': Event.id} for entry in data['entries']: delta = timedelta(days=entry['days']) query = (base_query .filter(cols[entry['type']] == entry['id']) .filter(db.cast(Event.start_dt.astimezone(tz), db.Date) > (now - delta).date()) .with_entities(Event, db.literal(entry['weight']).label('weight'))) queries.append(query) query = (queries[0].union(*queries[1:]) .order_by(db.desc('weight'), Event.start_dt, Event.title) .limit(data['max_entries'])) for row in query: event = row[0] # we cache the result of the function and is_deleted is used in the repr # and having a broken repr on the cached objects would be ugly set_committed_value(event, 'is_deleted', False) yield event
def get_event_regforms(event, user): """Get registration forms with information about user registrations. :param event: the `Event` to get registration forms for :param user: A `User` """ registered_user = RegistrationForm.registrations.any( (Registration.user == user) & Registration.is_active) return (RegistrationForm.query.with_parent(event).with_entities( RegistrationForm, registered_user if user else db.literal(False)).options( undefer('active_registration_count')).order_by( db.func.lower(RegistrationForm.title)).all())
def get_event_regforms(event, user, with_registrations=False): """Get registration forms with information about user registrations. :param event: the `Event` to get registration forms for :param user: A `User` :param with_registrations: Whether to return the user's registration instead of just whether they have one """ if not user: registered_user = db.literal(None if with_registrations else False) elif with_registrations: registered_user = Registration else: registered_user = RegistrationForm.registrations.any((Registration.user == user) & Registration.is_active) query = (RegistrationForm.query.with_parent(event) .with_entities(RegistrationForm, registered_user) .options(undefer('active_registration_count')) .order_by(db.func.lower(RegistrationForm.title))) if with_registrations: query = query.outerjoin(Registration, db.and_(Registration.registration_form_id == RegistrationForm.id, Registration.user == user, Registration.is_active)) return query.all()