forked from CGM_Public/pretix_original
Multi-event exports: Pass organizer, fix in staff mode
This commit is contained in:
@@ -132,7 +132,7 @@ class EventExportersViewSet(ExportersMixin, viewsets.ViewSet):
|
|||||||
def exporters(self):
|
def exporters(self):
|
||||||
exporters = []
|
exporters = []
|
||||||
responses = register_data_exporters.send(self.request.event)
|
responses = register_data_exporters.send(self.request.event)
|
||||||
for ex in sorted([response(self.request.event) for r, response in responses], key=lambda ex: str(ex.verbose_name)):
|
for ex in sorted([response(self.request.event, self.request.organizer) for r, response in responses], key=lambda ex: str(ex.verbose_name)):
|
||||||
ex._serializer = JobRunSerializer(exporter=ex)
|
ex._serializer = JobRunSerializer(exporter=ex)
|
||||||
exporters.append(ex)
|
exporters.append(ex)
|
||||||
return exporters
|
return exporters
|
||||||
@@ -151,7 +151,7 @@ class OrganizerExportersViewSet(ExportersMixin, viewsets.ViewSet):
|
|||||||
organizer=self.request.organizer
|
organizer=self.request.organizer
|
||||||
)
|
)
|
||||||
responses = register_multievent_data_exporters.send(self.request.organizer)
|
responses = register_multievent_data_exporters.send(self.request.organizer)
|
||||||
for ex in sorted([response(events) for r, response in responses if response], key=lambda ex: str(ex.verbose_name)):
|
for ex in sorted([response(events, self.request.organizer) for r, response in responses if response], key=lambda ex: str(ex.verbose_name)):
|
||||||
ex._serializer = JobRunSerializer(exporter=ex, events=events)
|
ex._serializer = JobRunSerializer(exporter=ex, events=events)
|
||||||
exporters.append(ex)
|
exporters.append(ex)
|
||||||
return exporters
|
return exporters
|
||||||
|
|||||||
@@ -70,8 +70,9 @@ class BaseExporter:
|
|||||||
This is the base class for all data exporters
|
This is the base class for all data exporters
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, event, progress_callback=lambda v: None):
|
def __init__(self, event, organizer, progress_callback=lambda v: None):
|
||||||
self.event = event
|
self.event = event
|
||||||
|
self.organizer = organizer
|
||||||
self.progress_callback = progress_callback
|
self.progress_callback = progress_callback
|
||||||
self.is_multievent = isinstance(event, QuerySet)
|
self.is_multievent = isinstance(event, QuerySet)
|
||||||
if isinstance(event, QuerySet):
|
if isinstance(event, QuerySet):
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ class Command(BaseCommand):
|
|||||||
|
|
||||||
with language(locale), override(timezone):
|
with language(locale), override(timezone):
|
||||||
for receiver, response in signal_result:
|
for receiver, response in signal_result:
|
||||||
ex = response(e, report_status)
|
ex = response(e, o, report_status)
|
||||||
if ex.identifier == options['export_provider']:
|
if ex.identifier == options['export_provider']:
|
||||||
params = json.loads(options.get('parameters') or '{}')
|
params = json.loads(options.get('parameters') or '{}')
|
||||||
with open(options['output_file'], 'wb') as f:
|
with open(options['output_file'], 'wb') as f:
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ def export(self, event: Event, fileid: str, provider: str, form_data: Dict[str,
|
|||||||
with language(event.settings.locale, event.settings.region), override(event.settings.timezone):
|
with language(event.settings.locale, event.settings.region), override(event.settings.timezone):
|
||||||
responses = register_data_exporters.send(event)
|
responses = register_data_exporters.send(event)
|
||||||
for receiver, response in responses:
|
for receiver, response in responses:
|
||||||
ex = response(event, set_progress)
|
ex = response(event, event.organizer, set_progress)
|
||||||
if ex.identifier == provider:
|
if ex.identifier == provider:
|
||||||
d = ex.render(form_data)
|
d = ex.render(form_data)
|
||||||
if d is None:
|
if d is None:
|
||||||
@@ -70,12 +70,15 @@ def export(self, event: Event, fileid: str, provider: str, form_data: Dict[str,
|
|||||||
|
|
||||||
|
|
||||||
@app.task(base=ProfiledOrganizerUserTask, throws=(ExportError,), bind=True)
|
@app.task(base=ProfiledOrganizerUserTask, throws=(ExportError,), bind=True)
|
||||||
def multiexport(self, organizer: Organizer, user: User, device: int, token: int, fileid: str, provider: str, form_data: Dict[str, Any]) -> None:
|
def multiexport(self, organizer: Organizer, user: User, device: int, token: int, fileid: str, provider: str,
|
||||||
|
form_data: Dict[str, Any], staff_session=False) -> None:
|
||||||
if device:
|
if device:
|
||||||
device = Device.objects.get(pk=device)
|
device = Device.objects.get(pk=device)
|
||||||
if token:
|
if token:
|
||||||
device = TeamAPIToken.objects.get(pk=token)
|
device = TeamAPIToken.objects.get(pk=token)
|
||||||
allowed_events = (device or token or user).get_events_with_permission('can_view_orders')
|
allowed_events = (device or token or user).get_events_with_permission('can_view_orders')
|
||||||
|
if user and staff_session:
|
||||||
|
allowed_events = organizer.events.all()
|
||||||
|
|
||||||
def set_progress(val):
|
def set_progress(val):
|
||||||
if not self.request.called_directly:
|
if not self.request.called_directly:
|
||||||
@@ -100,16 +103,19 @@ def multiexport(self, organizer: Organizer, user: User, device: int, token: int,
|
|||||||
timezone = settings.TIME_ZONE
|
timezone = settings.TIME_ZONE
|
||||||
region = None
|
region = None
|
||||||
with language(locale, region), override(timezone):
|
with language(locale, region), override(timezone):
|
||||||
if isinstance(form_data['events'][0], str):
|
if form_data.get('events') is not None:
|
||||||
events = allowed_events.filter(slug__in=form_data.get('events'), organizer=organizer)
|
if isinstance(form_data['events'][0], str):
|
||||||
|
events = allowed_events.filter(slug__in=form_data.get('events'), organizer=organizer)
|
||||||
|
else:
|
||||||
|
events = allowed_events.filter(pk__in=form_data.get('events'))
|
||||||
else:
|
else:
|
||||||
events = allowed_events.filter(pk__in=form_data.get('events'))
|
events = allowed_events
|
||||||
responses = register_multievent_data_exporters.send(organizer)
|
responses = register_multievent_data_exporters.send(organizer)
|
||||||
|
|
||||||
for receiver, response in responses:
|
for receiver, response in responses:
|
||||||
if not response:
|
if not response:
|
||||||
continue
|
continue
|
||||||
ex = response(events, set_progress)
|
ex = response(events, organizer, set_progress)
|
||||||
if ex.identifier == provider:
|
if ex.identifier == provider:
|
||||||
d = ex.render(form_data)
|
d = ex.render(form_data)
|
||||||
if d is None:
|
if d is None:
|
||||||
|
|||||||
@@ -2175,7 +2175,7 @@ class ExportMixin:
|
|||||||
def exporters(self):
|
def exporters(self):
|
||||||
exporters = []
|
exporters = []
|
||||||
responses = register_data_exporters.send(self.request.event)
|
responses = register_data_exporters.send(self.request.event)
|
||||||
for ex in sorted([response(self.request.event) for r, response in responses], key=lambda ex: str(ex.verbose_name)):
|
for ex in sorted([response(self.request.event, self.request.organizer) for r, response in responses], key=lambda ex: str(ex.verbose_name)):
|
||||||
if self.request.GET.get("identifier") and ex.identifier != self.request.GET.get("identifier"):
|
if self.request.GET.get("identifier") and ex.identifier != self.request.GET.get("identifier"):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|||||||
@@ -1318,7 +1318,7 @@ class ExportMixin:
|
|||||||
)
|
)
|
||||||
responses = register_multievent_data_exporters.send(self.request.organizer)
|
responses = register_multievent_data_exporters.send(self.request.organizer)
|
||||||
id = self.request.GET.get("identifier") or self.request.POST.get("exporter")
|
id = self.request.GET.get("identifier") or self.request.POST.get("exporter")
|
||||||
for ex in sorted([response(events) for r, response in responses if response], key=lambda ex: str(ex.verbose_name)):
|
for ex in sorted([response(events, self.request.organizer) for r, response in responses if response], key=lambda ex: str(ex.verbose_name)):
|
||||||
if id and ex.identifier != id:
|
if id and ex.identifier != id:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@@ -1406,7 +1406,8 @@ class ExportDoView(OrganizerPermissionRequiredMixin, ExportMixin, AsyncAction, T
|
|||||||
provider=self.exporter.identifier,
|
provider=self.exporter.identifier,
|
||||||
device=None,
|
device=None,
|
||||||
token=None,
|
token=None,
|
||||||
form_data=self.exporter.form.cleaned_data
|
form_data=self.exporter.form.cleaned_data,
|
||||||
|
staff_session=self.request.user.has_active_staff_session(self.request.session.session_key)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user