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
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)
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
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
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
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