From 05f64a44046a66da19299523542a1f89b3cb68c9 Mon Sep 17 00:00:00 2001 From: Ergys Dona Date: Tue, 17 Jul 2018 10:23:03 +0200 Subject: [PATCH] Allow setting event-wide contribution duration - This resolves #3446. --- .../modules/events/contributions/blueprint.py | 4 +++ .../contributions/controllers/management.py | 25 ++++++++++++++++--- indico/modules/events/contributions/forms.py | 5 ++++ .../templates/management/contributions.html | 9 +++++++ indico/modules/events/models/events.py | 1 + indico/modules/events/settings.py | 6 +++-- 6 files changed, 44 insertions(+), 6 deletions(-) diff --git a/indico/modules/events/contributions/blueprint.py b/indico/modules/events/contributions/blueprint.py index 30d774cc725..11ddfcc3d19 100644 --- a/indico/modules/events/contributions/blueprint.py +++ b/indico/modules/events/contributions/blueprint.py @@ -103,6 +103,10 @@ _bp.add_url_rule('/manage/contributions/types//delete', 'delete_type', management.RHDeleteContributionType, methods=('POST',)) +# Default contribution duration +_bp.add_url_rule('/manage/contributions/duration/', 'manage_default_duration', + management.RHManageDefaultContributionDuration, methods=('GET', 'POST',)) + # Custom contribution fields _bp.add_url_rule('/manage/contributions/fields/', 'manage_fields', management.RHManageContributionFields) _bp.add_url_rule('/manage/contributions/fields/create/', 'create_field', diff --git a/indico/modules/events/contributions/controllers/management.py b/indico/modules/events/contributions/controllers/management.py index 50c9381cfec..6633791eb20 100644 --- a/indico/modules/events/contributions/controllers/management.py +++ b/indico/modules/events/contributions/controllers/management.py @@ -16,6 +16,7 @@ from __future__ import unicode_literals +from datetime import timedelta from operator import attrgetter from flask import flash, jsonify, redirect, request, session @@ -25,6 +26,7 @@ from indico.core.db import db from indico.core.db.sqlalchemy.protection import ProtectionMode, render_acl from indico.core.permissions import get_principal_permissions +from indico.core.settings.converters import TimedeltaConverter from indico.legacy.pdfinterface.conference import ContribsToPDF, ContributionBook from indico.modules.attachments.controllers.event_package import AttachmentPackageGeneratorMixin from indico.modules.events.abstracts.forms import AbstractContentSettingsForm @@ -32,9 +34,9 @@ from indico.modules.events.contributions import get_contrib_field_types from indico.modules.events.contributions.clone import ContributionCloner from indico.modules.events.contributions.controllers.common import ContributionListMixin -from indico.modules.events.contributions.forms import (ContributionDurationForm, ContributionProtectionForm, - ContributionStartDateForm, ContributionTypeForm, - SubContributionForm) +from indico.modules.events.contributions.forms import (ContributionDefaultDurationForm, ContributionDurationForm, + ContributionProtectionForm, ContributionStartDateForm, + ContributionTypeForm, SubContributionForm) from indico.modules.events.contributions.lists import ContributionListGenerator from indico.modules.events.contributions.models.contributions import Contribution from indico.modules.events.contributions.models.fields import ContributionField @@ -54,6 +56,7 @@ from indico.modules.events.models.references import ReferenceType from indico.modules.events.operations import update_permissions from indico.modules.events.sessions import Session +from indico.modules.events.settings import event_core_settings from indico.modules.events.timetable.forms import ImportContributionsForm from indico.modules.events.timetable.operations import update_timetable_entry from indico.modules.events.tracks.models.tracks import Track @@ -175,8 +178,10 @@ class RHCreateContribution(RHManageContributionsBase): def _process(self): inherited_location = self.event.location_data inherited_location['inheriting'] = True + default_duration = TimedeltaConverter.to_python(event_core_settings.get(self.event, 'contrib_duration')) contrib_form_class = make_contribution_form(self.event) - form = contrib_form_class(obj=FormDefaults(location_data=inherited_location), event=self.event) + form = contrib_form_class(obj=FormDefaults(location_data=inherited_location), event=self.event, + duration=default_duration) if form.validate_on_submit(): # Create empty contribution so it can be compared to the new one in flash_if_unregistered contrib = Contribution() @@ -496,6 +501,18 @@ def _process(self): contrib_types=contrib_types) +class RHManageDefaultContributionDuration(RHManageContributionsBase): + """Dialog to manage the event-wide contribution duration""" + + def _process(self): + default_duration = TimedeltaConverter.to_python(event_core_settings.get(self.event, 'contrib_duration')) + form = ContributionDefaultDurationForm(duration=default_duration) + if form.validate_on_submit(): + event_core_settings.set(self.event, 'contrib_duration', form.duration.data.seconds) + return jsonify_data(flash=False) + return jsonify_form(form) + + class RHManageContributionTypeBase(RHManageContributionsBase): """Manage a contribution type of an event""" diff --git a/indico/modules/events/contributions/forms.py b/indico/modules/events/contributions/forms.py index c6fc0c6b048..7b5b4e2507f 100644 --- a/indico/modules/events/contributions/forms.py +++ b/indico/modules/events/contributions/forms.py @@ -183,6 +183,11 @@ def validate_duration(self, field): raise ValidationError(error_msg) +class ContributionDefaultDurationForm(IndicoForm): + duration = TimeDeltaField(_('Duration'), [DataRequired(), MaxDuration(timedelta(days=1))], + default=timedelta(minutes=20), units=('minutes', 'hours')) + + class ContributionTypeForm(IndicoForm): """Form to create or edit a ContributionType""" diff --git a/indico/modules/events/contributions/templates/management/contributions.html b/indico/modules/events/contributions/templates/management/contributions.html index dc7f5bd9562..98b7da8cb9c 100644 --- a/indico/modules/events/contributions/templates/management/contributions.html +++ b/indico/modules/events/contributions/templates/management/contributions.html @@ -22,6 +22,15 @@ data-ajax-dialog> {% trans %}Contribution types{% endtrans %} +
  • + + {% trans %}Contribution duration{% endtrans %} +