예제 #1
0
파일: fixtures.py 프로젝트: wtakase/indico
 def _create_contribution(title, duration):
     entry = Contribution(event_new=dummy_event_new,
                          title=title,
                          duration=duration)
     db.session.add(entry)
     db.session.flush()
     return entry
예제 #2
0
 def _process(self):
     inherited_location = self.event.location_data
     inherited_location['inheriting'] = True
     default_duration = contribution_settings.get(self.event,
                                                  'default_duration')
     contrib_form_class = make_contribution_form(self.event)
     form = contrib_form_class(obj=FormDefaults(
         location_data=inherited_location, duration=default_duration),
                               event=self.event)
     if form.validate_on_submit():
         # Create empty contribution so it can be compared to the new one in flash_if_unregistered
         contrib = Contribution()
         with flash_if_unregistered(self.event,
                                    lambda: contrib.person_links):
             contrib = create_contribution(self.event,
                                           *get_field_values(form.data))
         flash(
             _("Contribution '{}' created successfully").format(
                 contrib.title), 'success')
         tpl_components = self.list_generator.render_list(contrib)
         if tpl_components['hide_contrib']:
             self.list_generator.flash_info_message(contrib)
         return jsonify_data(**tpl_components)
     return jsonify_template('events/contributions/forms/contribution.html',
                             form=form)
예제 #3
0
def create_contribution(event,
                        contrib_data,
                        custom_fields_data=None,
                        session_block=None,
                        extend_parent=False):
    user = session.user if session else None
    start_dt = contrib_data.pop('start_dt', None)
    contrib = Contribution(event=event)
    contrib.populate_from_dict(contrib_data)
    if custom_fields_data:
        set_custom_fields(contrib, custom_fields_data)
    db.session.flush()
    if start_dt is not None:
        schedule_contribution(contrib,
                              start_dt=start_dt,
                              session_block=session_block,
                              extend_parent=extend_parent)
    signals.event.contribution_created.send(contrib)
    logger.info('Contribution %s created by %s', contrib, user)
    contrib.log(EventLogRealm.management, EventLogKind.positive,
                'Contributions',
                f'Contribution {contrib.verbose_title} has been created', user)
    # Note: If you ever add more stuff here that should run for any new contribution, make sure
    # to also add it to ContributionCloner.clone_single_contribution
    return contrib
예제 #4
0
    def _migrate_contribution(self, old_contrib, friendly_id):
        ac = old_contrib._Contribution__ac
        try:
            description = old_contrib._fields.get('content', '')
        except AttributeError:
            if not self.is_legacy_event:
                self.print_warning('Contribution {} has no fields'.format(old_contrib))
            description = ''
        description = convert_to_unicode(getattr(description, 'value', description))  # str or AbstractFieldContent
        status = getattr(old_contrib, '_status', None)
        status_class = status.__class__.__name__ if status else None

        contrib = Contribution(event_new=self.event, friendly_id=friendly_id,
                               title=convert_to_unicode(old_contrib.title),
                               render_mode=RenderMode.html,
                               description=description, duration=old_contrib.duration,
                               protection_mode=PROTECTION_MODE_MAP[ac._accessProtection],
                               board_number=convert_to_unicode(getattr(old_contrib, '_boardNumber', '')),
                               keywords=self._process_keywords(getattr(old_contrib, '_keywords', '')),
                               is_deleted=(status_class == 'ContribStatusWithdrawn'))
        if old_contrib._track is not None:
            track = self.event_ns.track_map.get(old_contrib._track)
            if not track:
                self.print_warning('Track not found: {}. Setting to None.'.format(old_contrib._track))
            else:
                contrib.track = track
        if not self.quiet:
            self.print_info('%[cyan]Contribution%[reset] {}'.format(contrib.title))
        self.event_ns.legacy_contribution_map[old_contrib] = contrib
        contrib.legacy_mapping = LegacyContributionMapping(event_new=self.event, legacy_contribution_id=old_contrib.id)
        # contribution type
        if old_contrib._type is not None:
            try:
                contrib.type = self.event_ns.legacy_contribution_type_map[old_contrib._type]
            except AttributeError:
                self.print_warning('%[yellow!]Invalid contrib type {}'
                                   .format(convert_to_unicode(old_contrib._type._name)))
        # abstract
        if old_contrib in self.event_ns.legacy_contribution_abstracts:
            contrib.abstract = self.event_ns.legacy_contribution_abstracts[old_contrib]
        # ACLs (managers, read access, submitters)
        principals = {}
        self._process_ac(ContributionPrincipal, principals, ac)
        for submitter in old_contrib._submitters:
            self._process_principal(ContributionPrincipal, principals, submitter, 'Submitter', roles={'submit'})
        self._process_principal_emails(ContributionPrincipal, principals, getattr(old_contrib, '_submittersEmail', []),
                                       'Submitter', roles={'submit'})
        contrib.acl_entries = set(principals.itervalues())
        # speakers, authors and co-authors
        contrib.person_links = list(self._migrate_contribution_person_links(old_contrib))
        # references ("report numbers")
        contrib.references = list(self._process_references(ContributionReference, old_contrib))
        # contribution/abstract fields
        if hasattr(old_contrib, '_fields'):
            contrib.field_values = list(self._migrate_contribution_field_values(old_contrib))
        contrib.subcontributions = [self._migrate_subcontribution(old_contrib, old_subcontrib, pos)
                                    for pos, old_subcontrib in enumerate(old_contrib._subConts, 1)]
        contrib._last_friendly_subcontribution_id = len(contrib.subcontributions)
        return contrib
예제 #5
0
 def _create_contribution(event,
                          title,
                          duration=timedelta(minutes=20),
                          **kwargs):
     entry = Contribution(event=event,
                          title=title,
                          duration=duration,
                          **kwargs)
     db.session.add(entry)
     db.session.flush()
     return entry
예제 #6
0
def create_contribution(event, contrib_data, custom_fields_data=None, session_block=None, extend_parent=False):
    start_dt = contrib_data.pop('start_dt', None)
    contrib = Contribution(event_new=event)
    contrib.populate_from_dict(contrib_data)
    if start_dt is not None:
        schedule_contribution(contrib, start_dt=start_dt, session_block=session_block, extend_parent=extend_parent)
    if custom_fields_data:
        set_custom_fields(contrib, custom_fields_data)
    db.session.flush()
    signals.event.contribution_created.send(contrib)
    logger.info('Contribution %s created by %s', contrib, session.user)
    contrib.event_new.log(EventLogRealm.management, EventLogKind.positive, 'Contributions',
                          'Contribution "{}" has been created'.format(contrib.title), session.user)
    return contrib