Skip to content
Open
Show file tree
Hide file tree
Changes from 16 commits
Commits
Show all changes
103 commits
Select commit Hold shift + click to select a range
a2a1c49
Translated using Weblate (Chinese (Traditional Han script))
Sep 14, 2025
6b51662
Translated using Weblate (Chinese (Traditional Han script))
Supaplextw Sep 15, 2025
131c921
Translated using Weblate (Polish (pl_INFORMAL))
PINGWINIxPLa Sep 30, 2025
3a297a4
Added translation using Weblate (Persian)
abbasdp Oct 4, 2025
fef8ae3
Added translation using Weblate (Indonesian)
mariobehling Oct 8, 2025
74c3335
Added translation using Weblate (Japanese)
mariobehling Oct 8, 2025
5071335
Added translation using Weblate (Korean)
mariobehling Oct 8, 2025
1351deb
Added translation using Weblate (Malay)
mariobehling Oct 8, 2025
69f73ce
Added translation using Weblate (Thai)
mariobehling Oct 8, 2025
3531e00
Added translation using Weblate (Vietnamese)
mariobehling Oct 8, 2025
c380b53
i18n(translations): update localized strings from Weblate
Oct 9, 2025
b5baaf1
i18n(translations): update localized strings from Weblate
Supaplextw Oct 9, 2025
a0de4b8
fix: email-notifications-team-invites
hemantmm Nov 6, 2025
d6c4ec0
fix: suggestion by sourcery
hemantmm Nov 6, 2025
98749dc
Merge branch 'enext' into email-notifications-team-invites
mariobehling Nov 6, 2025
7079351
fix: copilot suggestion
hemantmm Nov 6, 2025
73a989c
Merge branch 'email-notifications-team-invites' of https://github.com…
hemantmm Nov 6, 2025
e9fad2e
fix: prevents conflicting success and warning messages during team in…
hemantmm Nov 6, 2025
de6d22f
Merge branch 'enext' into email-notifications-team-invites
hemantmm Nov 6, 2025
a6c6da4
fix: remove duplicate add members
hemantmm Nov 6, 2025
0aa36bc
Fix logging of email send failure exception
hemantmm Nov 6, 2025
94fc21f
fix: moved logging at top
hemantmm Nov 6, 2025
47ca471
fix: moved logging at top
hemantmm Nov 6, 2025
e923e0c
fix: naming consistence
hemantmm Nov 6, 2025
0e6a13b
fix: user reference in email invitation logic
hemantmm Nov 6, 2025
91fb93d
fix: user reference in invitation email context
hemantmm Nov 6, 2025
f81c321
fix: revert back change
hemantmm Nov 6, 2025
1ba6fd4
fix: duplication block
hemantmm Nov 6, 2025
5c78417
HTTP 500 error when accessing Orders Export page
ArnavBallinCode Nov 13, 2025
f89f964
Fix similar export bug in organizer.py
ArnavBallinCode Nov 13, 2025
009f9e1
refactor: sourcery suggested so
ArnavBallinCode Nov 13, 2025
417c745
fix: add JSON_FIELD_AVAILABLE setting and fix Event.items reference
ArnavBallinCode Nov 14, 2025
b261f08
Merge branch 'enext' into fix/order-export-500-clean
ArnavBallinCode Nov 14, 2025
fe447da
Merge branch 'enext' into fix/order-export-500-clean
ArnavBallinCode Nov 14, 2025
3da5c3d
Merge branch 'enext' into fix/order-export-500-clean
mariobehling Nov 14, 2025
882e917
fix: preserve partial form data and rename items to products
ArnavBallinCode Nov 14, 2025
e7d3afa
Merge branch 'enext' into fix/order-export-500-clean
ArnavBallinCode Nov 14, 2025
7b10f28
Merge branch 'enext' into fix/order-export-500-clean
ArnavBallinCode Nov 15, 2025
6fd06dd
..
ArnavBallinCode Nov 15, 2025
e38a7f6
Merge branch 'enext' into fix/order-export-500-clean
mariobehling Nov 15, 2025
12840b4
Merge branch 'enext' into fix/order-export-500-clean
ArnavBallinCode Nov 16, 2025
f416461
fix(ui) unify navigation button styling across Tickets and Talk views…
ArnavBallinCode Nov 16, 2025
38f84d7
fix(ui): prevent sidebar auto-collapse on navigation (#1306)
ArnavBallinCode Nov 16, 2025
a6636c2
Chore: remove ticket/video URL fields (#1309)
Saksham-Sirohi Nov 16, 2025
30c28a8
remove logout button on video component (#1313)
Saksham-Sirohi Nov 16, 2025
b7856b5
PostgreSQL syntax error in Room permission query (#1314)
suhailnadaf509 Nov 16, 2025
27d425e
Merge branch 'enext' into fix/order-export-500-clean
ArnavBallinCode Nov 17, 2025
7ca8ef7
fix unable to save config (#1295)
Saksham-Sirohi Nov 17, 2025
6266c3f
Refactored the entire system to replace all legacy 'pretix/pretalx' r…
ArnavBallinCode Nov 17, 2025
d6f5a67
Merge branch 'enext' into fix/order-export-500-clean
ArnavBallinCode Nov 17, 2025
f1ba6a7
bug: enable browser timezone for orders and mails optimizing filters …
Saksham-Sirohi Nov 18, 2025
021c73b
chore(deps): update reportlab requirement from ==4.2.* to ==4.4.* (#1…
dependabot[bot] Nov 18, 2025
7e65d34
chore: remove duplicate orga settings (#1320)
Saksham-Sirohi Nov 18, 2025
a81a1e0
chore(deps): update stripe requirement from ==13.2.* to ==14.0.* (#1327)
dependabot[bot] Nov 19, 2025
018f1ac
chore(deps): update sentry-sdk requirement from ==2.44.* to ==2.45.* …
dependabot[bot] Nov 19, 2025
3963cc7
Resolve Sidebar Icon Layout Shift (#1319)
ArnavBallinCode Nov 20, 2025
4c92d7e
Fix: socialauth URLs were not resolved (#1324)
hongquan Nov 20, 2025
a18c3f0
Merge branch 'enext' into fix/order-export-500-clean
mariobehling Nov 20, 2025
bb9d143
Merge branch 'enext' into email-notifications-team-invites
mariobehling Nov 20, 2025
cdaeb4b
removed copilot sugguestions
ArnavBallinCode Nov 20, 2025
8cda595
chore: add translations korean and indonesian (#1330)
Saksham-Sirohi Nov 20, 2025
87e560f
Merge branch 'enext' into fix/order-export-500-clean
ArnavBallinCode Nov 21, 2025
84dbee0
feature: added hidden rooms and ensure sync (#1184)
Saksham-Sirohi Nov 21, 2025
978e73a
chore(deps): update geoip2 requirement from ==4.* to ==5.* (#1333)
dependabot[bot] Nov 22, 2025
8d4d440
chore(deps): update redis requirement from ==7.0.* to ==7.1.* (#1329)
dependabot[bot] Nov 22, 2025
3efab3b
Fix: HTTP 500 error handling during room deletion (#1280)
ArnavBallinCode Nov 22, 2025
54f1945
Fix: gift card 500 error (#1260)
ArnavBallinCode Nov 22, 2025
ab3731d
Fix CSV Export Returns 500 Error (#1267)
prayag78 Nov 22, 2025
67d2ac5
Export orders with Wikimedia username (#1332)
hongquan Nov 22, 2025
0011de0
bug: image rescaling fix (#1292)
Saksham-Sirohi Nov 23, 2025
c32bcf6
Merge branch 'enext' into fix/order-export-500-clean
mariobehling Nov 23, 2025
70a8496
fix(ui): match top menu bar between eventyay talk and eventyay ticket…
prayag78 Nov 23, 2025
165591d
Merge branch 'enext' into fix/order-export-500-clean
ArnavBallinCode Nov 23, 2025
29de468
Merge branch 'enext' into email-notifications-team-invites
hemantmm Nov 23, 2025
0d47b00
add polls to default_feature_flags (#1337)
suhailnadaf509 Nov 23, 2025
b59ae4c
chore(deps): update sentry-sdk requirement from ==2.45.* to ==2.46.* …
dependabot[bot] Nov 24, 2025
de46975
Delete URL redirection for legacy eventyay-xx websites (#1338)
hongquan Nov 24, 2025
c2a07de
fix: resolve PDF download issues (#1256)
ArnavBallinCode Nov 24, 2025
f1029e2
Merge branch 'enext' into fix/order-export-500-clean
ArnavBallinCode Nov 24, 2025
4a8e658
chore(deps): update django-phonenumber-field requirement (#1347)
dependabot[bot] Nov 25, 2025
2a386ae
chore(deps): update django-countries requirement from ==8.1.* to ==8.…
dependabot[bot] Nov 25, 2025
31b3b13
Merge branch 'enext' into fix/order-export-500-clean
Sak1012 Nov 25, 2025
563ce6b
fix(badge): add missing item to product rename in badge view (#1349)
Sak1012 Nov 25, 2025
b0d2953
fix rooms not working on video (#1339)
Saksham-Sirohi Nov 25, 2025
ed8b429
fix(500): item to product renames (#1350)
Sak1012 Nov 25, 2025
7e66527
Show Wikimedia username in ticket checkout page (#1351)
hongquan Nov 27, 2025
7962edb
Fix translation weblate integration (#1353)
Sak1012 Nov 27, 2025
246cb3f
chore(deps): bump pydantic from 2.12.4 to 2.12.5 (#1354)
dependabot[bot] Nov 27, 2025
6730f31
refactor: remove JSON_FIELD_AVAILABLE checks from exporters
ArnavBallinCode Nov 27, 2025
1492848
Merge branch 'enext' into fix/order-export-500-clean
mariobehling Nov 28, 2025
c1fecb6
Merge remote-tracking branch 'main/enext' into translated
Sak1012 Nov 28, 2025
94791cc
Merge pull request #1258 from ArnavBallinCode/fix/order-export-500-clean
hpdang Nov 28, 2025
57385bd
fix: Update Bank Transfer text and fix broken payment docs link (Fixe…
MohammedAnasNathani Nov 28, 2025
2c3b4be
Merge branch 'enext' into translated
Sak1012 Nov 28, 2025
2bc0cfb
Merge pull request #1355 from fossasia/translated
mariobehling Nov 28, 2025
11ab1d9
fix: Resolve multiple exporter failures after database migration (#1321)
ArnavBallinCode Nov 28, 2025
1b95c01
chore: fixed featured sessions and 500 errors on sessions and reviews…
Saksham-Sirohi Nov 28, 2025
b6deb48
Fix: Replace 'CfP' with 'Call for Papers' to fix translations #997 (#…
krishmishra846-alt Nov 28, 2025
0e787fe
move api app (#1335)
Gagan-Ram Nov 28, 2025
3ba8c33
Fixes 404 and url rename (#1235)
Saksham-Sirohi Nov 28, 2025
8b8b29f
Update app/eventyay/control/views/organizer_views/team_view.py
mariobehling Nov 28, 2025
a4cce5d
Update app/eventyay/control/views/organizer_views/team_view.py
mariobehling Nov 28, 2025
740a6b5
Merge branch 'enext' into email-notifications-team-invites
mariobehling Nov 28, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 29 additions & 7 deletions app/eventyay/api/serializers/organizer.py
Original file line number Diff line number Diff line change
Expand Up @@ -173,10 +173,13 @@ def _send_invite(self, instance):
try:
mail(
instance.email,
_('eventyay account invitation'),
_('You have been invited to join the team "{team}" for "{organizer}"').format(
team=instance.team.name,
organizer=self.context['organizer'].name,
),
'pretixcontrol/email/invitation.txt',
{
'user': self,
'user': instance,
'organizer': self.context['organizer'].name,
'team': instance.team.name,
'url': build_absolute_uri('control:auth.invite', kwargs={'token': instance.token}),
Expand Down Expand Up @@ -208,14 +211,33 @@ def create(self, validated_data):
else:
if self.context['team'].members.filter(pk=user.pk).exists():
raise ValidationError(_('This user already has permissions for this team.'))

try:
mail(
user.email,
_('You have been invited to join the team "{team}" for "{organizer}"').format(
team=self.context['team'].name,
organizer=self.context['organizer'].name,
),
'pretixcontrol/email/invitation.txt',
{
'user': user,
'organizer': self.context['organizer'].name,
'team': self.context['team'].name,
'url': build_absolute_uri('control:teams.detail', kwargs={'organizer': self.context['organizer'].slug, 'team': self.context['team'].pk}),
},
event=None,
locale=get_language_without_region(),
)
except SendMailException:
logger.warning(
"Failed to send invitation email to existing user: %s",
user.email,
exc_info=True
)
self.context['team'].members.add(user)
self.context['team'].log_action(
'eventyay.team.member.added',
data={
'email': user.email,
'user': user.pk,
},
data={'email': user.email, 'user': user.pk},
**self.context['log_kwargs'],
)
return TeamInvite(email=user.email)
Expand Down
18 changes: 13 additions & 5 deletions app/eventyay/base/models/organizer.py
Original file line number Diff line number Diff line change
Expand Up @@ -485,19 +485,27 @@ def send(self):

invitation_link = self.invitation_url
invitation_text = _(
"""Hi!
You have been invited to the {name} event organizer team - Please click here to accept:
"""Hello,

You have been invited to join the team "{name}" for the organizer "{organizer}".

Please click the following link to accept the invitation:

{invitation_link}

See you there,
The {organizer} team"""
If you do not want to join, you can safely ignore or delete this email.

Best regards,
Your event team"""
).format(
name=str(self.team.name),
invitation_link=invitation_link,
organizer=str(self.team.organizer.name),
)
invitation_subject = _('You have been invited to an organizer team')
invitation_subject = _('You have been invited to join the team "{team}" for "{organizer}"').format(
team=str(self.team.name),
organizer=str(self.team.organizer.name),
)

mail = QueuedMail.objects.create(
to=self.email,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
{% load i18n %}{% blocktrans with url=url|safe %}Hello,
{% load i18n %}{% blocktrans with url=url|safe team=team organizer=organizer %}Hello,

you have been invited to the following event team
You have been invited to join the team "{{ team }}" for the organizer "{{ organizer }}".

Organizer: {{ organizer }}
Team: {{ team }}

If you want to join that team, just click on the following link:
Please click the following link to accept the invitation:
{{ url }}

If you are already logged in, you will be automatically added to the team. Otherwise, please log in or create an account to join.

If you do not want to join, you can safely ignore or delete this email.

Best regards,

Your event team
{% endblocktrans %}
{% endblocktrans %}
44 changes: 36 additions & 8 deletions app/eventyay/control/views/organizer_views/team_view.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
import logging

logger = logging.getLogger(__name__)

from django.contrib import messages
from django.db import transaction
from django.db.models import Count, ManyToManyField
Expand Down Expand Up @@ -173,10 +177,13 @@ def _send_invite(self, instance):
try:
mail(
instance.email,
_('eventyay account invitation'),
_('You have been invited to join the team "{team}" for "{organizer}"').format(
team=instance.team.name,
organizer=self.request.organizer.name,
),
'pretixcontrol/email/invitation.txt',
{
'user': self,
'user': instance,
'organizer': self.request.organizer.name,
'team': instance.team.name,
'url': build_global_uri('eventyay_common:auth.invite', kwargs={'token': instance.token}),
Expand Down Expand Up @@ -304,16 +311,37 @@ def post(self, request, *args, **kwargs):
)
return self.get(request, *args, **kwargs)

# Send email to registered user and then add them
try:
mail(
user.email,
_('You have been invited to join the team "{team}" for "{organizer}"').format(
team=self.object.name,
organizer=self.request.organizer.name,
),
'pretixcontrol/email/invitation.txt',
{
'user': user,
'organizer': self.request.organizer.name,
'team': self.object.name,
'url': build_global_uri('eventyay_common:organizer.team', kwargs={'organizer': self.request.organizer.slug, 'team': self.object.pk}),
},
event=None,
locale=self.request.LANGUAGE_CODE,
)
except SendMailException:
logger.warning("Failed to send invitation to existing member %s", user.email, exc_info=True)
messages.warning(self.request, _('The new member was added to the team, but the invitation email could not be sent.'))

else:
messages.success(self.request, _('The new member has been invited and added to the team.'))

self.object.members.add(user)
self.object.log_action(
'pretix.team.member.added',
'eventyay.team.member.added',
user=self.request.user,
data={
'email': user.email,
'user': user.pk,
},
data={'email': user.email, 'user': user.pk},
)
messages.success(self.request, _('The new member has been added to the team.'))
return redirect(self.get_success_url())

elif 'name' in self.request.POST and self.add_token_form.is_valid() and self.add_token_form.has_changed():
Expand Down
43 changes: 36 additions & 7 deletions app/eventyay/eventyay_common/views/team.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import logging
from urllib.parse import urljoin

logger = logging.getLogger(__name__)

from django.conf import settings
from django.contrib import messages
from django.db import transaction
Expand Down Expand Up @@ -67,10 +70,13 @@ def _send_invite(self, instance):
try:
mail(
instance.email,
_('eventyay account invitation'),
_('You have been invited to join the team "{team}" for "{organizer}"').format(
team=instance.team.name,
organizer=self.request.organizer.name,
),
'pretixcontrol/email/invitation.txt',
{
'user': self,
'user': instance,
'organizer': self.request.organizer.name,
'team': instance.team.name,
'url': build_global_uri('eventyay_common:auth.invite', kwargs={'token': instance.token}),
Expand Down Expand Up @@ -198,16 +204,39 @@ def post(self, request, *args, **kwargs):
)
return self.get(request, *args, **kwargs)

# Send email to registered user even if they exist
try:
mail(
user.email,
_('You have been invited to join the team "{team}" for "{organizer}"').format(
team=self.object.name,
organizer=self.request.organizer.name,
),
'pretixcontrol/email/invitation.txt',
{
'user': user,
'organizer': self.request.organizer.name,
'team': self.object.name,
'url': build_global_uri('eventyay_common:organizer.team', kwargs={'organizer': self.request.organizer.slug, 'team': self.object.pk}),
},
event=None,
locale=self.request.LANGUAGE_CODE,
)
except SendMailException:
logger.warning("Failed to send invitation email to existing user %s", user.email, exc_info=True)
messages.warning(
self.request,
_('The new member will be added to the team, but the invitation email could not be delivered.')
)
else:
messages.success(self.request, _('The new member has been invited and added to the team.'))

self.object.members.add(user)
self.object.log_action(
'eventyay.team.member.added',
user=self.request.user,
data={
'email': user.email,
'user': user.pk,
},
data={'email': user.email, 'user': user.pk},
)
messages.success(self.request, _('The new member has been added to the team.'))
return redirect(self.get_success_url())

elif 'name' in self.request.POST and self.add_token_form.is_valid() and self.add_token_form.has_changed():
Expand Down