예제 #1
0
 def _process(self):
     form = ContributionDurationForm(obj=FormDefaults(self.contrib), contrib=self.contrib)
     if form.validate_on_submit():
         with track_time_changes():
             update_contribution(self.contrib, {'duration': form.duration.data})
         return jsonify_data(new_value=format_human_timedelta(self.contrib.duration))
     return jsonify_form(form, back_button=False, disabled_until_change=True)
예제 #2
0
 def _process(self):
     contrib_form_class = make_contribution_form(self.event)
     custom_field_values = {
         'custom_{}'.format(x.contribution_field_id): x.data
         for x in self.contrib.field_values
     }
     parent_session_block = (
         self.contrib.timetable_entry.parent.session_block if
         (self.contrib.timetable_entry
          and self.contrib.timetable_entry.parent) else None)
     form = contrib_form_class(obj=FormDefaults(
         self.contrib,
         start_date=self.contrib.start_dt,
         **custom_field_values),
                               event=self.event,
                               contrib=self.contrib,
                               session_block=parent_session_block)
     if form.validate_on_submit():
         with track_time_changes(), flash_if_unregistered(
                 self.event, lambda: self.contrib.person_links):
             update_contribution(self.contrib, *get_field_values(form.data))
         flash(
             _("Contribution '{}' successfully updated").format(
                 self.contrib.title), 'success')
         tpl_components = self.list_generator.render_list(self.contrib)
         if tpl_components['hide_contrib']:
             self.list_generator.flash_info_message(self.contrib)
         return jsonify_data(flash=(request.args.get('flash') == '1'),
                             **tpl_components)
     elif not form.is_submitted():
         handle_legacy_description(form.description, self.contrib)
     self.commit = False
     return jsonify_template('events/contributions/forms/contribution.html',
                             form=form)
예제 #3
0
    def _process(self):
        item = self.entry.object
        entry_dt = self.entry.start_dt.astimezone(self.event.tzinfo)
        form = BaseEntryForm(obj=FormDefaults(item, time=entry_dt.time()), day=entry_dt.date(),
                             event=self.event, entry=self.entry,
                             session_block=self.entry.parent.object if self.entry.parent else None)
        data = form.data
        shift_later = data.pop('shift_later')

        if form.validate_on_submit():
            with track_time_changes(auto_extend=True, user=session.user) as changes:
                if shift_later:
                    new_end_dt = form.start_dt.data + form.duration.data
                    shift = new_end_dt - self.entry.end_dt
                    shift_following_entries(self.entry, shift, session_=self.session)
                if self.entry.contribution:
                    update_timetable_entry(self.entry, {'start_dt': form.start_dt.data})
                    update_contribution(item, {'duration': form.duration.data})
                elif self.entry.break_:
                    update_break_entry(item, data)
                elif self.entry.session_block:
                    update_session_block(item, data)
            notifications = get_time_changes_notifications(changes, tzinfo=self.event.tzinfo, entry=self.entry)
            return jsonify_data(update=serialize_entry_update(self.entry, session_=self.session),
                                notifications=notifications, flash=False)
        self.commit = False
        return jsonify_form(form, back_button=False, disabled_until_change=True)
예제 #4
0
 def _process(self):
     contrib_form_class = make_contribution_form(self.event_new)
     custom_field_values = {
         'custom_{}'.format(x.contribution_field_id): x.data
         for x in self.contrib.field_values
     }
     parent_session_block = (
         self.contrib.timetable_entry.parent.session_block if
         (self.contrib.timetable_entry
          and self.contrib.timetable_entry.parent) else None)
     form = contrib_form_class(obj=FormDefaults(
         self.contrib,
         start_date=self.contrib.start_dt,
         **custom_field_values),
                               event=self.event_new,
                               contrib=self.contrib,
                               session_block=parent_session_block)
     if form.validate_on_submit():
         with track_time_changes():
             update_contribution(self.contrib,
                                 *_get_field_values(form.data))
         flash(
             _("Contribution '{}' successfully updated").format(
                 self.contrib.title), 'success')
         tpl_components = self.reporter.render_contrib_report(self.contrib)
         if tpl_components['hide_contrib']:
             self.reporter.flash_info_message(self.contrib)
         return jsonify_data(**tpl_components)
     self.commit = False
     return jsonify_template('events/contributions/forms/contribution.html',
                             form=form)
예제 #5
0
    def _process(self):
        item = self.entry.object
        entry_dt = self.entry.start_dt.astimezone(self.event_new.tzinfo)
        form = BaseEntryForm(obj=FormDefaults(item, time=entry_dt.time()), day=entry_dt.date(),
                             event=self.event_new, entry=self.entry,
                             session_block=self.entry.parent.object if self.entry.parent else None)
        data = form.data
        shift_later = data.pop('shift_later')
        updated_entries = []

        if form.validate_on_submit():
            with track_time_changes(auto_extend=True, user=session.user) as changes:
                if shift_later:
                    new_end_dt = form.start_dt.data + form.duration.data
                    shift = new_end_dt - self.entry.end_dt
                    updated_entries += shift_following_entries(self.entry, shift, session_=self.session)
                if self.entry.contribution:
                    update_timetable_entry(self.entry, {'start_dt': form.start_dt.data})
                    update_contribution(item, {'duration': form.duration.data})
                elif self.entry.break_:
                    update_break_entry(item, data)
                elif self.entry.session_block:
                    update_session_block(item, data)
            notifications = get_time_changes_notifications(changes, tzinfo=self.event_new.tzinfo, entry=self.entry)
            updated_entries.append(item.timetable_entry)
            return jsonify_data(entries=[serialize_entry_update(entry) for entry in updated_entries], flash=False,
                                shift_later=shift_later, notifications=notifications)
        self.commit = False
        return jsonify_form(form, back_button=False, disabled_until_change=True)
예제 #6
0
 def _process(self):
     form = ContributionProtectionForm(obj=FormDefaults(**self._get_defaults()), contrib=self.contrib,
                                       prefix='contribution-protection-')
     if form.validate_on_submit():
         update_permissions(self.contrib, form)
         update_contribution(self.contrib, {'protection_mode': form.protection_mode.data})
         return jsonify_data(flash=False, **self.list_generator.render_list(self.contrib))
     return jsonify_template('events/management/protection_dialog.html', form=form)
예제 #7
0
 def _process(self):
     form = ContributionProtectionForm(obj=FormDefaults(**self._get_defaults()), contrib=self.contrib,
                                       prefix='contribution-protection-')
     if form.validate_on_submit():
         update_contribution(self.contrib, {'protection_mode': form.protection_mode.data})
         update_object_principals(self.contrib, form.managers.data, full_access=True)
         if self.contrib.is_protected:
             update_object_principals(self.contrib, form.acl.data, read_access=True)
         update_object_principals(self.contrib, form.submitters.data, role='submit')
         return jsonify_data(flash=False, **self.list_generator.render_list(self.contrib))
     return jsonify_form(form)
예제 #8
0
 def _process(self):
     form = ContributionProtectionForm(obj=FormDefaults(**self._get_defaults()), contrib=self.contrib,
                                       prefix='contribution-protection-')
     if form.validate_on_submit():
         update_contribution(self.contrib, {'protection_mode': form.protection_mode.data})
         update_object_principals(self.contrib, form.managers.data, full_access=True)
         if self.contrib.is_protected:
             update_object_principals(self.contrib, form.acl.data, read_access=True)
         update_object_principals(self.contrib, form.submitters.data, role='submit')
         return jsonify_data(flash=False, **self.list_generator.render_list(self.contrib))
     return jsonify_form(form)
예제 #9
0
파일: operations.py 프로젝트: OmeGak/indico
def update_timetable_entry_object(entry, data):
    """Update the `object` of a timetable entry according to its type"""
    from indico.modules.events.contributions.operations import update_contribution
    obj = entry.object
    if entry.type == TimetableEntryType.CONTRIBUTION:
        update_contribution(obj, data)
    elif entry.type == TimetableEntryType.SESSION_BLOCK:
        update_session_block(obj, data)
    elif entry.type == TimetableEntryType.BREAK:
        obj.populate_from_dict(data)
    db.session.flush()
예제 #10
0
파일: operations.py 프로젝트: wdbm/indico
def update_timetable_entry_object(entry, data):
    """Update the `object` of a timetable entry according to its type"""
    from indico.modules.events.contributions.operations import update_contribution
    obj = entry.object
    if entry.type == TimetableEntryType.CONTRIBUTION:
        update_contribution(obj, data)
    elif entry.type == TimetableEntryType.SESSION_BLOCK:
        update_session_block(obj, data)
    elif entry.type == TimetableEntryType.BREAK:
        obj.populate_from_dict(data)
    db.session.flush()
예제 #11
0
파일: legacy.py 프로젝트: OmeGak/indico
 def _process(self):
     form = None
     parent_session_block = self.entry.parent.object if self.entry.parent else None
     if self.entry.contribution:
         contrib = self.entry.contribution
         tt_entry_dt = self.entry.start_dt.astimezone(self.event_new.tzinfo)
         form = ContributionEntryForm(obj=FormDefaults(contrib, time=tt_entry_dt.time()),
                                      event=self.event_new, contrib=contrib, to_schedule=False,
                                      day=tt_entry_dt.date(), session_block=parent_session_block)
         if form.validate_on_submit():
             with track_time_changes(auto_extend=True, user=session.user) as changes:
                 with flash_if_unregistered(self.event_new, lambda: contrib.person_links):
                     update_contribution(contrib, *get_field_values(form.data))
             notifications = get_time_changes_notifications(changes, tzinfo=self.event_new.tzinfo, entry=self.entry)
             return jsonify_data(update=serialize_entry_update(self.entry, session_=self.session),
                                 notifications=notifications)
         elif not form.is_submitted():
             handle_legacy_description(form.description, contrib)
         return jsonify_template('events/contributions/forms/contribution.html', form=form,
                                 fields=form._display_fields)
     elif self.entry.break_:
         break_ = self.entry.break_
         tt_entry_dt = self.entry.start_dt.astimezone(self.event_new.tzinfo)
         form = BreakEntryForm(obj=FormDefaults(break_, time=tt_entry_dt.time()), event=self.event_new,
                               day=tt_entry_dt.date(), session_block=parent_session_block)
         if form.validate_on_submit():
             with track_time_changes(auto_extend=True, user=session.user) as changes:
                 update_break_entry(break_, form.data)
             notifications = get_time_changes_notifications(changes, tzinfo=self.event_new.tzinfo, entry=self.entry)
             return jsonify_data(update=serialize_entry_update(self.entry, session_=self.session),
                                 notifications=notifications, flash=False)
     elif self.entry.session_block:
         if self.edit_session:
             session_ = self.entry.session_block.session
             form = SessionForm(obj=FormDefaults(session_), event=self.event_new)
             if form.validate_on_submit():
                 update_session(session_, form.data)
                 return jsonify_data(update=serialize_entry_update(self.entry, session_=self.session), flash=False)
         else:
             block = self.entry.session_block
             tt_entry_dt = self.entry.start_dt.astimezone(self.event_new.tzinfo)
             form = SessionBlockEntryForm(obj=FormDefaults(block, time=tt_entry_dt.time()),
                                          event=self.event_new, session_block=block, to_schedule=False,
                                          day=tt_entry_dt.date())
             if form.validate_on_submit():
                 with track_time_changes(auto_extend=True, user=session.user) as changes:
                     update_session_block(block, form.data)
                 notifications = get_time_changes_notifications(changes, tzinfo=self.event_new.tzinfo,
                                                                entry=self.entry)
                 return jsonify_data(update=serialize_entry_update(self.entry, session_=self.session),
                                     notifications=notifications, flash=False)
     self.commit = False
     return jsonify_form(form, fields=getattr(form, '_display_fields', None))
예제 #12
0
 def _process(self):
     form = None
     parent_session_block = self.entry.parent.object if self.entry.parent else None
     if self.entry.contribution:
         contrib = self.entry.contribution
         tt_entry_dt = self.entry.start_dt.astimezone(self.event.tzinfo)
         form = ContributionEntryForm(obj=FormDefaults(contrib, time=tt_entry_dt.time()),
                                      event=self.event, contrib=contrib, to_schedule=False,
                                      day=tt_entry_dt.date(), session_block=parent_session_block)
         if form.validate_on_submit():
             with track_time_changes(auto_extend=True, user=session.user) as changes:
                 with flash_if_unregistered(self.event, lambda: contrib.person_links):
                     update_contribution(contrib, *get_field_values(form.data))
             notifications = get_time_changes_notifications(changes, tzinfo=self.event.tzinfo, entry=self.entry)
             return jsonify_data(update=serialize_entry_update(self.entry, session_=self.session),
                                 notifications=notifications)
         elif not form.is_submitted():
             handle_legacy_description(form.description, contrib)
         return jsonify_template('events/contributions/forms/contribution.html', form=form,
                                 fields=form._display_fields)
     elif self.entry.break_:
         break_ = self.entry.break_
         tt_entry_dt = self.entry.start_dt.astimezone(self.event.tzinfo)
         form = BreakEntryForm(obj=FormDefaults(break_, time=tt_entry_dt.time()), event=self.event,
                               day=tt_entry_dt.date(), session_block=parent_session_block)
         if form.validate_on_submit():
             with track_time_changes(auto_extend=True, user=session.user) as changes:
                 update_break_entry(break_, form.data)
             notifications = get_time_changes_notifications(changes, tzinfo=self.event.tzinfo, entry=self.entry)
             return jsonify_data(update=serialize_entry_update(self.entry, session_=self.session),
                                 notifications=notifications, flash=False)
     elif self.entry.session_block:
         if self.edit_session:
             session_ = self.entry.session_block.session
             form = SessionForm(obj=FormDefaults(session_), event=self.event)
             if form.validate_on_submit():
                 update_session(session_, form.data)
                 return jsonify_data(update=serialize_entry_update(self.entry, session_=self.session), flash=False)
         else:
             block = self.entry.session_block
             tt_entry_dt = self.entry.start_dt.astimezone(self.event.tzinfo)
             form = SessionBlockEntryForm(obj=FormDefaults(block, time=tt_entry_dt.time()),
                                          event=self.event, session_block=block, to_schedule=False,
                                          day=tt_entry_dt.date())
             if form.validate_on_submit():
                 with track_time_changes(auto_extend=True, user=session.user) as changes:
                     update_session_block(block, form.data)
                 notifications = get_time_changes_notifications(changes, tzinfo=self.event.tzinfo,
                                                                entry=self.entry)
                 return jsonify_data(update=serialize_entry_update(self.entry, session_=self.session),
                                     notifications=notifications, flash=False)
     self.commit = False
     return jsonify_form(form, fields=getattr(form, '_display_fields', None))
예제 #13
0
파일: management.py 프로젝트: fph/indico
 def _process(self):
     contrib_form_class = make_contribution_form(self.event_new)
     custom_field_values = {'custom_{}'.format(x.contribution_field_id): x.data for x in self.contrib.field_values}
     parent_session_block = (self.contrib.timetable_entry.parent.session_block
                             if (self.contrib.timetable_entry and self.contrib.timetable_entry.parent) else None)
     form = contrib_form_class(obj=FormDefaults(self.contrib, start_date=self.contrib.start_dt,
                                                **custom_field_values),
                               event=self.event_new, contrib=self.contrib, session_block=parent_session_block)
     if form.validate_on_submit():
         with track_time_changes():
             update_contribution(self.contrib, *_get_field_values(form.data))
         flash(_("Contribution '{}' successfully updated").format(self.contrib.title), 'success')
         tpl_components = self.reporter.render_contrib_report(self.contrib)
         if tpl_components['hide_contrib']:
             self.reporter.flash_info_message(self.contrib)
         return jsonify_data(**tpl_components)
     self.commit = False
     return jsonify_template('events/contributions/forms/contribution.html', form=form)
예제 #14
0
def move_timetable_entry(entry, parent=None, day=None):
    """Move the `entry` to another session or top-level timetable

    :param entry: `TimetableEntry` to be moved
    :param parent: If specified then the entry will be set as a child
                         of parent
    :param day: If specified then the entry will be moved to the
                        top-level timetable on this day
    """
    if bool(parent) + bool(day) != 1:
        raise TypeError("Wrong number of arguments")

    from indico.modules.events.contributions.operations import update_contribution

    updates = {}
    contrib_update_data = {}
    if day:
        new_start_dt = entry.start_dt.replace(day=day.day, month=day.month)
        updates['start_dt'] = new_start_dt
        updates['parent'] = None
        contrib_update_data = {'session_id': None, 'session_block_id': None}
    elif parent:
        new_start_dt = find_latest_entry_end_dt(
            parent.object) or parent.start_dt
        tz = entry.event.tzinfo
        if (new_start_dt + entry.duration
            ).astimezone(tz).date() != parent.start_dt.astimezone(tz).date():
            raise UserValueError(
                _('Session block cannot span more than one day'))
        updates['parent'] = parent
        updates['start_dt'] = new_start_dt
        contrib_update_data = {
            'session': parent.session_block.session,
            'session_block': parent.session_block
        }

    update_timetable_entry(entry, updates)
    if entry.type == TimetableEntryType.CONTRIBUTION:
        update_contribution(entry.object, contrib_update_data)
    if parent and entry.end_dt > parent.end_dt:
        duration = parent.object.duration + (entry.end_dt - parent.end_dt)
        update_session_block(parent.object, {'duration': duration})
예제 #15
0
파일: management.py 프로젝트: indico/indico
 def _process(self):
     contrib_form_class = make_contribution_form(self.event)
     custom_field_values = {'custom_{}'.format(x.contribution_field_id): x.data for x in self.contrib.field_values}
     parent_session_block = (self.contrib.timetable_entry.parent.session_block
                             if (self.contrib.timetable_entry and self.contrib.timetable_entry.parent) else None)
     form = contrib_form_class(obj=FormDefaults(self.contrib, start_date=self.contrib.start_dt,
                                                **custom_field_values),
                               event=self.event, contrib=self.contrib, session_block=parent_session_block)
     if form.validate_on_submit():
         with track_time_changes(), flash_if_unregistered(self.event, lambda: self.contrib.person_links):
             update_contribution(self.contrib, *get_field_values(form.data))
         flash(_("Contribution '{}' successfully updated").format(self.contrib.title), 'success')
         tpl_components = self.list_generator.render_list(self.contrib)
         if tpl_components['hide_contrib']:
             self.list_generator.flash_info_message(self.contrib)
         return jsonify_data(flash=(request.args.get('flash') == '1'), **tpl_components)
     elif not form.is_submitted():
         handle_legacy_description(form.description, self.contrib)
     self.commit = False
     return jsonify_template('events/contributions/forms/contribution.html', form=form)
예제 #16
0
 def _process_PATCH(self):
     data = request.json
     updates = {}
     if set(data.viewkeys()) > {'session_id', 'track_id'}:
         raise BadRequest
     if 'session_id' in data:
         updates.update(self._get_contribution_session_updates(data['session_id']))
     if 'track_id' in data:
         updates.update(self._get_contribution_track_updates(data['track_id']))
     rv = {}
     if updates:
         rv = update_contribution(self.contrib, updates)
     return jsonify(unscheduled=rv.get('unscheduled', False), undo_unschedule=rv.get('undo_unschedule'))
예제 #17
0
파일: operations.py 프로젝트: indico/indico
def move_timetable_entry(entry, parent=None, day=None):
    """Move the `entry` to another session or top-level timetable

    :param entry: `TimetableEntry` to be moved
    :param parent: If specified then the entry will be set as a child
                         of parent
    :param day: If specified then the entry will be moved to the
                        top-level timetable on this day
    """
    if bool(parent) + bool(day) != 1:
        raise TypeError("Wrong number of arguments")

    from indico.modules.events.contributions.operations import update_contribution

    updates = {}
    contrib_update_data = {}
    if day:
        new_start_dt = entry.start_dt.replace(day=day.day, month=day.month)
        updates["start_dt"] = new_start_dt
        updates["parent"] = None
        contrib_update_data = {"session_id": None, "session_block_id": None}
    elif parent:
        new_start_dt = find_latest_entry_end_dt(parent.object) or parent.start_dt
        tz = entry.event_new.tzinfo
        if (new_start_dt + entry.duration).astimezone(tz).date() != parent.start_dt.astimezone(tz).date():
            raise UserValueError(_("Session block cannot span more than one day"))
        updates["parent"] = parent
        updates["start_dt"] = new_start_dt
        contrib_update_data = {"session": parent.session_block.session, "session_block": parent.session_block}

    update_timetable_entry(entry, updates)
    if entry.type == TimetableEntryType.CONTRIBUTION:
        update_contribution(entry.object, contrib_update_data)
    if parent and entry.end_dt > parent.end_dt:
        duration = parent.object.duration + (entry.end_dt - parent.end_dt)
        update_session_block(parent.object, {"duration": duration})
예제 #18
0
 def _process(self):
     form = None
     parent_session_block = self.entry.parent.object if self.entry.parent else None
     if self.entry.contribution:
         contrib = self.entry.contribution
         tt_entry_dt = self.entry.start_dt.astimezone(self.event_new.tzinfo)
         form = ContributionEntryForm(obj=FormDefaults(
             contrib, time=tt_entry_dt.time()),
                                      event=self.event_new,
                                      contrib=contrib,
                                      to_schedule=False,
                                      day=tt_entry_dt.date(),
                                      session_block=parent_session_block)
         if form.validate_on_submit():
             with track_time_changes(auto_extend=True,
                                     user=session.user) as changes:
                 update_contribution(contrib, *_get_field_values(form.data))
             notifications = get_time_changes_notifications(
                 changes, tzinfo=self.event_new.tzinfo, entry=self.entry)
             return jsonify_data(
                 entries=[serialize_entry_update(contrib.timetable_entry)],
                 notifications=notifications,
                 flash=False)
         return jsonify_template(
             'events/contributions/forms/contribution.html',
             form=form,
             fields=form._display_fields)
     elif self.entry.break_:
         break_ = self.entry.break_
         tt_entry_dt = self.entry.start_dt.astimezone(self.event_new.tzinfo)
         form = BreakEntryForm(obj=FormDefaults(break_,
                                                time=tt_entry_dt.time()),
                               event=self.event_new,
                               day=tt_entry_dt.date(),
                               session_block=parent_session_block)
         if form.validate_on_submit():
             with track_time_changes(auto_extend=True,
                                     user=session.user) as changes:
                 update_break_entry(break_, form.data)
             notifications = get_time_changes_notifications(
                 changes, tzinfo=self.event_new.tzinfo, entry=self.entry)
             return jsonify_data(
                 entries=[serialize_entry_update(break_.timetable_entry)],
                 notifications=notifications,
                 flash=False)
     elif self.entry.session_block:
         if self.edit_session:
             session_ = self.entry.session_block.session
             form = SessionForm(obj=FormDefaults(session_),
                                event=self.event_new)
             if form.validate_on_submit():
                 update_session(session_, form.data)
                 return jsonify_data(entries=[
                     serialize_entry_update(x.timetable_entry)
                     for x in session_.blocks
                 ],
                                     flash=False)
         else:
             block = self.entry.session_block
             tt_entry_dt = self.entry.start_dt.astimezone(
                 self.event_new.tzinfo)
             form = SessionBlockEntryForm(obj=FormDefaults(
                 block, time=tt_entry_dt.time()),
                                          event=self.event_new,
                                          session_block=block,
                                          to_schedule=False,
                                          day=tt_entry_dt.date())
             if form.validate_on_submit():
                 with track_time_changes(auto_extend=True,
                                         user=session.user) as changes:
                     update_session_block(block, form.data)
                 notifications = get_time_changes_notifications(
                     changes,
                     tzinfo=self.event_new.tzinfo,
                     entry=self.entry)
                 return jsonify_data(entries=[
                     serialize_entry_update(block.timetable_entry)
                 ],
                                     notifications=notifications,
                                     flash=False)
     self.commit = False
     return jsonify_form(form,
                         fields=getattr(form, '_display_fields', None))