Example #1
0
 def _process(self):
     if not request.is_xhr:
         return WPCategoryCalendar.render_template(
             'display/calendar.html',
             self.category,
             start_dt=request.args.get('start_dt'))
     tz = self.category.display_tzinfo
     start = tz.localize(dateutil.parser.parse(
         request.args['start'])).astimezone(utc)
     end = tz.localize(dateutil.parser.parse(
         request.args['end'])).astimezone(utc)
     query = (Event.query.filter(Event.starts_between(start, end),
                                 Event.is_visible_in(self.category.id),
                                 ~Event.is_deleted).options(
                                     load_only('id', 'title', 'start_dt',
                                               'end_dt', 'category_id')))
     events = self._get_event_data(query)
     ongoing_events = (Event.query.filter(
         Event.is_visible_in(self.category.id), Event.start_dt < start,
         Event.end_dt > end).options(
             load_only('id', 'title', 'start_dt', 'end_dt',
                       'timezone')).order_by(Event.title).all())
     return jsonify_data(
         flash=False,
         events=events,
         ongoing_event_count=len(ongoing_events),
         ongoing_events_html=self._render_ongoing_events(ongoing_events))
Example #2
0
 def add_contrib_data():
     has_contrib = (EventPerson.contribution_links.any(
         ContributionPersonLink.contribution.has(~Contribution.is_deleted)))
     has_subcontrib = EventPerson.subcontribution_links.any(
         SubContributionPersonLink.subcontribution.has(db.and_(
             ~SubContribution.is_deleted,
             SubContribution.contribution.has(~Contribution.is_deleted))))
     query = (Event.query
              .options(load_only('id'))
              .options(noload('*'))
              .filter(~Event.is_deleted,
                      Event.starts_between(from_dt, to_dt),
                      Event.persons.any((EventPerson.user_id == user.id) & (has_contrib | has_subcontrib))))
     for event in query:
         data[event.id].add('contributor')
Example #3
0
def get_events_registered(user, from_dt=None, to_dt=None):
    """Gets the IDs of events where the user is registered.

    :param user: A `User`
    :param from_dt: The earliest event start time to look for
    :param to_dt: The latest event start time to look for
    :return: A set of event ids
    """
    query = (user.registrations.options(load_only('event_id')).options(
        joinedload(Registration.registration_form).load_only('event_id')).join(
            Registration.registration_form).join(
                RegistrationForm.event_new).filter(
                    Registration.is_active, ~RegistrationForm.is_deleted,
                    ~Event.is_deleted, Event.starts_between(from_dt, to_dt)))
    return {registration.event_id for registration in query}
Example #4
0
 def add_contrib_data():
     has_contrib = (EventPerson.contribution_links.any(
         ContributionPersonLink.contribution.has(~Contribution.is_deleted)))
     has_subcontrib = EventPerson.subcontribution_links.any(
         SubContributionPersonLink.subcontribution.has(db.and_(
             ~SubContribution.is_deleted,
             SubContribution.contribution.has(~Contribution.is_deleted))))
     query = (Event.query
              .options(load_only('id'))
              .options(noload('*'))
              .filter(~Event.is_deleted,
                      Event.starts_between(from_dt, to_dt),
                      Event.persons.any((EventPerson.user_id == user.id) & (has_contrib | has_subcontrib))))
     for event in query:
         data[event.id].add('contributor')
Example #5
0
 def add_acl_data():
     query = (user.in_contribution_acls
              .options(load_only('contribution_id', 'roles', 'full_access', 'read_access'))
              .options(noload('*'))
              .options(contains_eager(ContributionPrincipal.contribution).load_only('event_id'))
              .join(Contribution)
              .join(Event, Event.id == Contribution.event_id)
              .filter(~Contribution.is_deleted, ~Event.is_deleted, Event.starts_between(from_dt, to_dt)))
     for principal in query:
         roles = data[principal.contribution.event_id]
         if 'submit' in principal.roles:
             roles.add('contribution_submission')
         if principal.full_access:
             roles.add('contribution_manager')
         if principal.read_access:
             roles.add('contribution_access')
Example #6
0
def get_events_registered(user, from_dt=None, to_dt=None):
    """Gets the IDs of events where the user is registered.

    :param user: A `User`
    :param from_dt: The earliest event start time to look for
    :param to_dt: The latest event start time to look for
    :return: A set of event ids
    """
    query = (user.registrations
             .options(load_only('event_id'))
             .options(joinedload(Registration.registration_form).load_only('event_id'))
             .join(Registration.registration_form)
             .join(RegistrationForm.event_new)
             .filter(Registration.is_active, ~RegistrationForm.is_deleted, ~Event.is_deleted,
                     Event.starts_between(from_dt, to_dt)))
    return {registration.event_id for registration in query}
Example #7
0
 def add_acl_data():
     query = (user.in_contribution_acls
              .options(load_only('contribution_id', 'roles', 'full_access', 'read_access'))
              .options(noload('*'))
              .options(contains_eager(ContributionPrincipal.contribution).load_only('event_id'))
              .join(Contribution)
              .join(Event, Event.id == Contribution.event_id)
              .filter(~Contribution.is_deleted, ~Event.is_deleted, Event.starts_between(from_dt, to_dt)))
     for principal in query:
         roles = data[principal.contribution.event_id]
         if 'submit' in principal.roles:
             roles.add('contribution_submission')
         if principal.full_access:
             roles.add('contribution_manager')
         if principal.read_access:
             roles.add('contribution_access')
Example #8
0
 def _process(self):
     query = (Event.query
              .filter(Event.starts_between(self.start_dt, self.end_dt),
                      Event.is_visible_in(self.category.id),
                      ~Event.is_deleted)
              .options(load_only('id', 'title', 'start_dt', 'end_dt', 'category_id')))
     events = self._get_event_data(query)
     ongoing_events = (Event.query
                       .filter(Event.is_visible_in(self.category.id),
                               ~Event.is_deleted,
                               Event.start_dt < self.start_dt,
                               Event.end_dt > self.end_dt)
                       .options(load_only('id', 'title', 'start_dt', 'end_dt', 'timezone'))
                       .order_by(Event.title)
                       .all())
     return jsonify_data(flash=False, events=events, ongoing_event_count=len(ongoing_events),
                         ongoing_events_html=self._render_ongoing_events(ongoing_events))
Example #9
0
 def _process(self):
     if not request.is_xhr:
         return WPCategory.render_template('display/calendar.html', self.category,
                                           start_dt=request.args.get('start_dt'))
     tz = self.category.display_tzinfo
     start = tz.localize(dateutil.parser.parse(request.args['start'])).astimezone(utc)
     end = tz.localize(dateutil.parser.parse(request.args['end'])).astimezone(utc)
     query = (Event.query
              .filter(Event.starts_between(start, end),
                      Event.is_visible_in(self.category),
                      ~Event.is_deleted)
              .options(load_only('id', 'title', 'start_dt', 'end_dt', 'category_id')))
     events = self._get_event_data(query)
     ongoing_events = (Event.query
                       .filter(Event.is_visible_in(self.category),
                               Event.start_dt < start,
                               Event.end_dt > end)
                       .options(load_only('id', 'title', 'start_dt', 'end_dt', 'timezone'))
                       .order_by(Event.title)
                       .all())
     return jsonify_data(flash=False, events=events, ongoing_event_count=len(ongoing_events),
                         ongoing_events_html=self._render_ongoing_events(ongoing_events))