Пример #1
0
 def iter_people(cls, event):
     req = Request.find_latest_for_event(event, AVRequest.name)
     if not req or req.state != RequestState.accepted or 'recording' not in req.data[
             'services']:
         return
     if event.type == 'lecture':
         for link in event.person_links:
             yield SpeakerPersonInfo(link.full_name,
                                     link.email or None,
                                     data={
                                         'type': 'lecture_speaker',
                                         'id': link.id,
                                         'person_id': link.person_id
                                     })
     else:
         contribs = [x[0] for x in get_selected_contributions(req)]
         for contrib in contribs:
             for link in contrib.person_links:
                 if not link.is_speaker:
                     continue
                 yield SpeakerPersonInfo(link.full_name,
                                         link.email or None,
                                         data={
                                             'type':
                                             'contribution',
                                             'contribution':
                                             contribution_id(contrib),
                                             'id':
                                             link.id,
                                             'person_id':
                                             link.person_id
                                         })
Пример #2
0
 def process_form(self):
     form = self.form
     if not form.validate_on_submit():
         return
     if not self.request or not self.request.can_be_modified:
         req = Request(event=self.event,
                       definition=self.definition,
                       created_by_user=session.user)
         new = True
     else:
         req = self.request
         new = False
     try:
         self.definition.send(req, form.data)
     except RequestModuleError:
         self.commit = False
         flash_msg = _(
             'There was a problem sending your request ({0}). Please contact support.'
         )
         flash(flash_msg.format(self.definition.title), 'error')
     else:
         if new:
             flash_msg = _("Your request ({0}) has been sent.")
         else:
             flash_msg = _("Your request ({0}) has been modified.")
         flash(flash_msg.format(self.definition.title), 'success')
     if self.is_manager:
         return redirect(
             url_for('.event_requests_details',
                     self.event,
                     type=self.definition.name))
     else:
         return redirect(url_for('.event_requests', self.event))
Пример #3
0
 def process_form(self):
     form = self.form
     if not form.validate_on_submit():
         return
     if not self.request or not self.request.can_be_modified:
         req = Request(event_new=self.event_new,
                       definition=self.definition,
                       created_by_user=session.user)
         new = True
     else:
         req = self.request
         new = False
     self.definition.send(req, form.data)
     if new:
         flash_msg = _(
             "Your request ({0}) has been sent. "
             "You will be notified by e-mail once it has been accepted or rejected."
         )
     else:
         flash_msg = _("Your request ({0}) has been modified.")
     flash(flash_msg.format(self.definition.title), 'success')
     if self.is_manager:
         return redirect(
             url_for('.event_requests_details',
                     self.event_new,
                     type=self.definition.name))
     else:
         return redirect(url_for('.event_requests', self.event_new))
Пример #4
0
def _event_deleted(event, **kwargs):
    event_id = int(event.id)
    query = Request.find(
        Request.event_id == event_id,
        Request.state.in_((RequestState.accepted, RequestState.pending)))
    for req in query:
        req.definition.withdraw(req, notify_event_managers=False)
Пример #5
0
def _event_deleted(event, **kwargs):
    if not event.id.isdigit():
        return
    event_id = int(event.id)
    requests = Request.find(event_id=event_id)
    for req in requests.filter(Request.state.in_((RequestState.accepted, RequestState.pending))):
        req.definition.withdraw(req, notify_event_managers=False)
    requests.delete()
Пример #6
0
 def _process_args(self):
     RHManageEventBase._process_args(self)
     try:
         self.definition = get_request_definitions()[request.view_args['type']]
     except KeyError:
         raise NotFound
     self.request = Request.find_latest_for_event(self.event, self.definition.name)
     if self._require_request and not self.request:
         raise NotFound
Пример #7
0
 def _checkParams(self, params):
     RHConferenceModifBase._checkParams(self, params)
     try:
         self.definition = get_request_definitions()[request.view_args['type']]
     except KeyError:
         raise NotFound
     self.request = Request.find_latest_for_event(self.event_new, self.definition.name)
     if self._require_request and not self.request:
         raise NotFound
Пример #8
0
 def _process_args(self):
     RHManageEventBase._process_args(self)
     try:
         self.definition = get_request_definitions()[request.view_args['type']]
     except KeyError:
         raise NotFound
     self.request = Request.find_latest_for_event(self.event, self.definition.name)
     if self._require_request and not self.request:
         raise NotFound
Пример #9
0
 def _checkParams(self, params):
     RHConferenceModifBase._checkParams(self, params)
     try:
         self.definition = get_request_definitions()[request.view_args['type']]
     except KeyError:
         raise NotFound
     self.request = Request.find_latest_for_event(self.event_new, self.definition.name)
     if self._require_request and not self.request:
         raise NotFound
Пример #10
0
    def _on_event_update(self, event, **kwargs):
        changes = kwargs['changes']
        if not changes.viewkeys() & {'location_data', 'start_dt', 'end_dt'}:
            return

        request = Request.find_latest_for_event(event,
                                                RoomAssistanceRequest.name)
        if not request or request.state != RequestState.accepted:
            return

        if 'location_data' in changes and not event_has_room_with_support_attached(
                event):
            request.definition.reject(
                request, {
                    'comment':
                    render_plugin_template('auto_reject_no_supported_room.txt')
                }, User.get_system_user())
            request.data = dict(request.data, occurrences=[])
            flash(
                _("The new event location is not in the list of the rooms supported by the room assistance team. "
                  "Room assistance request has been rejected and support will not be provided."
                  ), 'warning')
        if changes.viewkeys() & {'start_dt', 'end_dt'}:
            tz = pytz.timezone(config.DEFAULT_TIMEZONE)
            occurrences = {
                dateutil.parser.parse(occ).astimezone(tz)
                for occ in request.data['occurrences']
            }
            req_dates = {occ.date() for occ in occurrences}
            event_dates = set(event.iter_days())
            old_dates = req_dates - event_dates
            has_overlapping_dates = req_dates & event_dates

            if not has_overlapping_dates:
                request.definition.reject(
                    request, {
                        'comment':
                        render_plugin_template(
                            'auto_reject_no_overlapping_dates.txt')
                    }, User.get_system_user())
                request.data = dict(request.data, occurrences=[])
                flash(
                    _("The new event dates don't overlap with the existing room assistance request for this event. "
                      "Room assistance request has been rejected and support will not be provided."
                      ), 'warning')
            elif old_dates and has_overlapping_dates:
                new_data = dict(request.data)
                new_data['occurrences'] = [
                    occ.astimezone(pytz.utc).isoformat() for occ in occurrences
                    if occ.date() in req_dates & event_dates
                ]
                request.data = new_data
                flash(
                    _("Room assistance had been requested for days that are not between the updated start/end "
                      "dates. Support will not be provided on these days anymore."
                      ), 'warning')
Пример #11
0
 def _get_event_webcast_url(self, event):
     req = Request.find_latest_for_event(event, AVRequest.name)
     if not req or req.state != RequestState.accepted or 'webcast' not in req.data['services']:
         return None
     url = req.data.get('custom_webcast_url') or self.settings.get('webcast_url')
     try:
         return url.format(event_id=event.id)
     except Exception:
         self.logger.exception('Could not build webcast URL')
         return None
Пример #12
0
 def _process(self):
     definitions = get_request_definitions()
     if not definitions:
         raise NotFound
     requests = Request.find_latest_for_event(self.event)
     if self.protection_overridden:
         definitions = {name: def_ for name, def_ in definitions.iteritems() if def_.can_be_managed(session.user)}
         requests = {name: req for name, req in requests.iteritems()
                     if req.definition and req.definition.can_be_managed(session.user)}
     return WPRequestsEventManagement.render_template('events/requests/event_requests.html', self.event,
                                                      definitions=definitions, requests=requests)
Пример #13
0
 def _process(self):
     definitions = get_request_definitions()
     if not definitions:
         raise NotFound
     requests = Request.find_latest_for_event(self.event)
     if self.protection_overridden:
         definitions = {name: def_ for name, def_ in definitions.iteritems() if def_.can_be_managed(session.user)}
         requests = {name: req for name, req in requests.iteritems()
                     if req.definition and req.definition.can_be_managed(session.user)}
     return WPRequestsEventManagement.render_template('events/requests/event_requests.html', self.event,
                                                      definitions=definitions, requests=requests)
Пример #14
0
 def _get_vc_assistance_request_link(self, event, **kwargs):
     from definition import VCAssistanceRequest
     req = Request.find_latest_for_event(event, VCAssistanceRequest.name)
     support_email = VCAssistanceRequestPlugin.settings.get('support_email')
     return render_plugin_template(
         'vc_assistance_request_link.html',
         event=event,
         name=VCAssistanceRequest.name,
         request_accepted=req is not None
         and req.state == RequestState.accepted,
         has_capable_vc_room_attached=has_vc_rooms_attached_to_capable(
             event),
         support_email=support_email)
Пример #15
0
 def _event_updated(self, event, changes, **kwargs):
     req = Request.find_latest_for_event(event, VCAssistanceRequest.name)
     if not req or req.state != RequestState.accepted:
         return
     if 'start_dt' in changes and not start_time_within_working_hours(
             event):
         flash(
             _("The new event start time is out of working hours so videoconference assistance cannot be "
               "provided."), 'warning')
     if 'location_data' in changes and not has_vc_rooms_attached_to_capable(
             event):
         flash(
             _("The new event location doesn't have videoconference capabilities so videoconference "
               "assistance cannot be provided."), 'warning')
Пример #16
0
def mock_access_request(dummy_event, dummy_regform, dummy_user, app, request):
    data = {
        'email': dummy_user.email,
        'first_name': dummy_user.first_name,
        'last_name': dummy_user.last_name,
        'affiliation': dummy_user.affiliation,
        'phone': dummy_user.phone,
        'position': 'Business Relationship Manager',
        'user': dummy_user
    }

    data.update(request.param.get('personal_data', {}))

    with app.test_request_context(method='POST', data=data):
        session.user = dummy_user
        session.lang = 'en_GB'

        CERNAccessPlugin.settings.acls.add_principal('authorized_users',
                                                     dummy_user)

        g.rh = RHRegistrationForm()
        g.rh.regform = dummy_regform

        req = Request(event=dummy_event,
                      definition=CERNAccessRequestDefinition(),
                      created_by_user=dummy_user,
                      data={
                          'comment':
                          'no comments',
                          'regforms': [dummy_regform.id],
                          'during_registration':
                          request.param['during_registration'],
                          'during_registration_required':
                          request.param['during_registration_required'],
                          'start_dt_override':
                          None,
                          'end_dt_override':
                          None
                      })

        CERNAccessRequestDefinition.send(req, {
            'start_dt_override': None,
            'end_dt_override': None
        })

        yield
Пример #17
0
def _merge_users(target, source, **kwargs):
    Request.find(created_by_id=source.id).update({Request.created_by_id: target.id})
    Request.find(processed_by_id=source.id).update({Request.processed_by_id: target.id})
Пример #18
0
def _merge_users(user, merged, **kwargs):
    new_id = int(user.id)
    old_id = int(merged.id)
    Request.find(created_by_id=old_id).update({'created_by_id': new_id})
    Request.find(processed_by_id=old_id).update({'processed_by_id': new_id})
Пример #19
0
def _event_deleted(event, **kwargs):
    event_id = int(event.id)
    query = Request.find(Request.event_id == event_id,
                         Request.state.in_((RequestState.accepted, RequestState.pending)))
    for req in query:
        req.definition.withdraw(req, notify_event_managers=False)
Пример #20
0
 def _register_event_change(self, event):
     req = Request.find_latest_for_event(event, AVRequest.name)
     if not req:
         return
     g.setdefault('av_request_changes', set()).add(req)
Пример #21
0
def _merge_users(target, source, **kwargs):
    Request.find(created_by_id=source.id).update(
        {Request.created_by_id: target.id})
    Request.find(processed_by_id=source.id).update(
        {Request.processed_by_id: target.id})
Пример #22
0
def get_last_request(event):
    """Return the last CERN Acess request for the event."""
    from indico_cern_access.definition import CERNAccessRequestDefinition
    return Request.find_latest_for_event(event,
                                         CERNAccessRequestDefinition.name)
Пример #23
0
def _merge_users(target, source, **kwargs):
    from indico.modules.events.requests.models.requests import Request
    Request.find(created_by_id=source.id).update(
        {Request.created_by_id: target.id})
    Request.find(processed_by_id=source.id).update(
        {Request.processed_by_id: target.id})
Пример #24
0
def _merge_users(target, source, **kwargs):
    from indico.modules.events.requests.models.requests import Request
    Request.find(created_by_id=source.id).update({Request.created_by_id: target.id})
    Request.find(processed_by_id=source.id).update({Request.processed_by_id: target.id})