diff --git a/src/pretix/base/settings.py b/src/pretix/base/settings.py
index ab1417abe..2786c2b93 100644
--- a/src/pretix/base/settings.py
+++ b/src/pretix/base/settings.py
@@ -683,6 +683,10 @@ Your {event} team"""))
'default': '',
'type': LazyI18nString
},
+ 'event_team_provisioning': {
+ 'default': 'True',
+ 'type': bool
+ },
'update_check_ack': {
'default': 'False',
'type': bool
diff --git a/src/pretix/control/forms/event.py b/src/pretix/control/forms/event.py
index 1d94979e3..b2c6a4e4f 100644
--- a/src/pretix/control/forms/event.py
+++ b/src/pretix/control/forms/event.py
@@ -22,7 +22,7 @@ from pytz import common_timezones, timezone
from pretix.base.channels import get_all_sales_channels
from pretix.base.email import get_available_placeholders
from pretix.base.forms import I18nModelForm, PlaceholderValidator, SettingsForm
-from pretix.base.models import Event, Organizer, TaxRule
+from pretix.base.models import Event, Organizer, TaxRule, Team
from pretix.base.models.event import EventMetaValue, SubEvent
from pretix.base.reldate import RelativeDateField, RelativeDateTimeField
from pretix.base.settings import PERSON_NAME_SCHEMES, PERSON_NAME_TITLE_GROUPS
@@ -101,6 +101,16 @@ class EventWizardBasicsForm(I18nModelForm):
required=False
)
+ team = forms.ModelChoiceField(
+ label=_("Grant access to team"),
+ help_text=_("You are allowed to create events under this organizer, however you do not have permission "
+ "to edit all events under this organizer. Please select one of your existing teams that will"
+ " be granted access to this event."),
+ queryset=Team.objects.none(),
+ required=False,
+ empty_label=_('Create a new team for this event with me as the only member')
+ )
+
class Meta:
model = Event
fields = [
@@ -133,7 +143,7 @@ class EventWizardBasicsForm(I18nModelForm):
self.organizer = kwargs.pop('organizer')
self.locales = kwargs.get('locales')
self.has_subevents = kwargs.pop('has_subevents')
- kwargs.pop('user')
+ self.user = kwargs.pop('user')
kwargs.pop('session')
super().__init__(*args, **kwargs)
self.initial['timezone'] = get_current_timezone_name()
@@ -147,6 +157,15 @@ class EventWizardBasicsForm(I18nModelForm):
del self.fields['presale_start']
del self.fields['presale_end']
+ if self.has_control_rights(self.user, self.organizer):
+ del self.fields['team']
+ else:
+ self.fields['team'].queryset = self.user.teams.filter(organizer=self.organizer)
+ if not self.organizer.settings.get("event_team_provisioning", True, as_type=bool):
+ self.fields['team'].required = True
+ self.fields['team'].empty_label = None
+ self.fields['team'].initial = 0
+
def clean(self):
data = super().clean()
if data.get('locale') not in self.locales:
@@ -179,6 +198,13 @@ class EventWizardBasicsForm(I18nModelForm):
)
return slug
+ @staticmethod
+ def has_control_rights(user, organizer):
+ return user.teams.filter(
+ organizer=organizer, all_events=True, can_change_event_settings=True, can_change_items=True,
+ can_change_orders=True, can_change_vouchers=True
+ ).exists()
+
class EventChoiceMixin:
def label_from_instance(self, obj):
diff --git a/src/pretix/control/forms/organizer.py b/src/pretix/control/forms/organizer.py
index 88015c61f..faff0080f 100644
--- a/src/pretix/control/forms/organizer.py
+++ b/src/pretix/control/forms/organizer.py
@@ -211,6 +211,15 @@ class OrganizerSettingsForm(SettingsForm):
widget=I18nTextarea,
help_text=_('Not displayed anywhere by default, but if you want to, you can use this e.g. in ticket templates.')
)
+
+ event_team_provisioning = forms.BooleanField(
+ label=_('Allow creating a new team during event creation'),
+ help_text=_('Users that do not have access to all events under this organizer, must select one of their teams '
+ 'to have access to the created event. This setting allows users to create an event-specified team'
+ ' on-the-fly, even when they do not have \"Can change teams and permissions\" permission.'),
+ required=False,
+ )
+
primary_color = forms.CharField(
label=_("Primary color"),
required=False,
diff --git a/src/pretix/control/templates/pretixcontrol/events/create_basics.html b/src/pretix/control/templates/pretixcontrol/events/create_basics.html
index 501c6664f..f2575d5f1 100644
--- a/src/pretix/control/templates/pretixcontrol/events/create_basics.html
+++ b/src/pretix/control/templates/pretixcontrol/events/create_basics.html
@@ -76,4 +76,11 @@
{% bootstrap_field form.presale_end layout="control" %}
{% endif %}
+
+ {% if form.team %}
+