Skip to content
Snippets Groups Projects
Commit 9ff6a370 authored by Tom Teichler's avatar Tom Teichler :beers:
Browse files

Merge branch '7-slug-for-event-must-not-be-the-short-name-of-the-group' into 'master'

Resolve "Slug for event must not be the short_name of the group"

Closes #7

See merge request !6
parents c96de14d 47636d17
No related branches found
No related tags found
1 merge request!6Resolve "Slug for event must not be the short_name of the group"
Pipeline #56309 canceled
......@@ -14,6 +14,7 @@ Added
* Add link to public page to events list
* Add RSS feed of upcoming events
* Add slug field to Event model
Changed
~~~~~~~
......
......@@ -43,7 +43,7 @@ class EditEventForm(ExtensibleForm):
Fieldset(
_("Base data"),
"linked_group",
Row("display_name", "description"),
Row("display_name", "slug", "description"),
Row("place", "published"),
Fieldset(_("Date data"), Row("date_event", "date_registration", "date_retraction")),
Fieldset(_("Event details"), Row("cost", "max_participants"), "information"),
......@@ -57,6 +57,7 @@ class EditEventForm(ExtensibleForm):
"linked_group",
"display_name",
"description",
"slug",
"place",
"published",
"date_event",
......@@ -378,7 +379,8 @@ class RegisterEventConsent(ExtensibleForm):
field_instance = forms.BooleanField(
required=True,
label=_(
"I confirm that the retraction of the registration is not possible anymore after {}"
"I confirm that the retraction of the registration is not possible anymore "
"after {}"
).format(event.date_retraction),
)
self.fields["retraction_deadline"] = field_instance
......
# Generated by Django 3.2.12 on 2022-02-21 19:09
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('paweljong', '0011_registration_accepted_terms'),
]
operations = [
migrations.AddField(
model_name='event',
name='slug',
field=models.SlugField(max_length=255, verbose_name='Slug', blank=True),
preserve_default=False,
),
]
......@@ -2,6 +2,7 @@ from datetime import datetime
from django.db import models
from django.urls import reverse
from django.utils.text import slugify
from django.utils.timezone import now
from django.utils.translation import gettext_lazy as _
......@@ -31,6 +32,7 @@ class Event(ExtensibleModel):
description = models.CharField(max_length=500, verbose_name=_("Description"))
published = models.BooleanField(default=False, verbose_name=_("Publish"))
place = models.CharField(max_length=50, verbose_name="Place")
slug = models.SlugField(max_length=255, verbose_name=_("Slug"), blank=True)
# Date details
date_event = models.DateField(verbose_name=_("Date of event"))
......@@ -43,6 +45,15 @@ class Event(ExtensibleModel):
information = RichTextField(verbose_name=_("Information about the event"))
terms = models.ManyToManyField(Terms, verbose_name=_("Terms"), related_name="event", blank=True)
def save(self, *args, **kwargs):
if not self.slug:
if self.linked_group.short_name:
self.slug = slugify(self.linked_group.short_name)
else:
self.slug = slugify(self.display_name)
return super().save(*args, **kwargs)
def __str__(self) -> str:
return self.display_name
......@@ -70,7 +81,7 @@ class Event(ExtensibleModel):
return self.date_event > now
def get_absolute_url(self):
return reverse("event_by_name", kwargs={"slug": self.linked_group.short_name})
return reverse("event_by_name", kwargs={"slug": self.slug})
@property
def booked_percentage(self):
......
......@@ -15,13 +15,13 @@ class ManageEventsTable(tables.Table):
edit = tables.LinkColumn(
"edit_event_by_slug",
args=[A("linked_group__short_name")],
args=[A("slug")],
verbose_name=_("Edit"),
text=_("Edit"),
)
view = tables.LinkColumn(
"event_by_name",
args=[A("linked_group__short_name")],
args=[A("slug")],
verbose_name=_("View"),
text=_("View"),
)
......
......@@ -61,9 +61,9 @@
</div>
<div class="card-action">
{% if can_register and not is_authenticated %}
<a href="{% url "register_event_by_slug_start" event.linked_group.short_name %}">{% trans "Register now" %}</a>
<a href="{% url "register_event_by_slug_start" event.slug %}">{% trans "Register now" %}</a>
{% elif can_register and is_authenticated %}
<a href="{% url "register_event_by_slug" event.linked_group.short_name %}">{% trans "Register now" %}</a>
<a href="{% url "register_event_by_slug" event.slug %}">{% trans "Register now" %}</a>
{% else %}
<a href="#">{% trans "Not available" %}</a>
{% endif %}
......
......@@ -87,7 +87,7 @@
or have problems logging in, please send us an e-mail.
{% endblocktrans %}
</p>
<a href="{% url "login" %}?next=/app/paweljong/event/{{ event.linked_group.short_name }}/register">{% trans "Login" %}</a>
<a href="{% url "login" %}?next=/app/paweljong/event/{{ event.slug }}/register">{% trans "Login" %}</a>
</div>
<div id="with_email">
<p>
......@@ -98,7 +98,7 @@
https://leopard.institute/pages/services.html</a>
{% endblocktrans %}
</p>
<a href="{% url "set_email_needed" event.linked_group.short_name %}">{% trans "Register now" %}</a>
<a href="{% url "set_email_needed" event.slug %}">{% trans "Register now" %}</a>
</div>
<div id="without_email">
<p>
......@@ -108,7 +108,7 @@
a personal e-mail address, please choose the respective option instead!
{% endblocktrans %}
</p>
<a href="{% url "register_event_by_slug" event.linked_group.short_name %}">{% trans "Register now" %}</a>
<a href="{% url "register_event_by_slug" event.slug %}">{% trans "Register now" %}</a>
</div>
{% else %}
<div id="not_possible">
......
......@@ -116,7 +116,7 @@
<td>
<i class="material-icons small">local_activity</a>
</td>
<td colspan="3"><a href="{% url 'edit_event_by_slug' registration.event.linked_group.short_name %}">{{ registration.event }}</a></td>
<td colspan="3"><a href="{% url 'edit_event_by_slug' registration.event.slug %}">{{ registration.event }}</a></td>
</tr>
<tr>
<td>
......
......@@ -53,7 +53,7 @@ class CreateEventView(PermissionRequiredMixin, AdvancedCreateView):
class EditEventView(PermissionRequiredMixin, RevisionMixin, AdvancedEditView):
form_class = EditEventForm
model = Event
slug_field = "linked_group__short_name"
slug_field = "slug"
permission_required = "paweljong.change_event"
context_object_name = "manage_events"
template_name = "paweljong/event/edit.html"
......@@ -293,7 +293,7 @@ class RegisterEventWizardView(SessionWizardView):
def get_context_data(self, form, **kwargs):
context = super().get_context_data(form, **kwargs)
context["event"] = Event.objects.get(linked_group__short_name=self.kwargs["slug"])
context["event"] = Event.objects.get(slug=self.kwargs["slug"])
if self.steps.current == "email":
context["page_title"] = ""
......@@ -369,10 +369,10 @@ class RegisterEventWizardView(SessionWizardView):
if step == "email":
kwargs["request"] = self.request
if step == "additional":
event = Event.objects.get(linked_group__short_name=self.kwargs["slug"])
event = Event.objects.get(slug=self.kwargs["slug"])
kwargs["event"] = event
if step == "consent":
event = Event.objects.get(linked_group__short_name=self.kwargs["slug"])
event = Event.objects.get(slug=self.kwargs["slug"])
kwargs["event"] = event
return kwargs
......@@ -439,7 +439,7 @@ class RegisterEventWizardView(SessionWizardView):
def done(self, form_list, **kwargs):
event = Event.objects.get(linked_group__short_name=self.kwargs["slug"])
event = Event.objects.get(slug=self.kwargs["slug"])
cleaned_data_email = self.get_cleaned_data_for_step("email")
cleaned_data_contact_details = self.get_cleaned_data_for_step("contact_details")
cleaned_data_guardians = self.get_cleaned_data_for_step("guardians")
......@@ -610,7 +610,7 @@ class RegisterEventWizardView(SessionWizardView):
class EventFullView(DetailView):
model = Event
slug_field = "linked_group__short_name"
slug_field = "slug"
template_name = "paweljong/event/full.html"
object_context_name = "event"
......@@ -625,7 +625,7 @@ class EventFullView(DetailView):
class RegisterEventStart(DetailView):
model = Event
slug_field = "linked_group__short_name"
slug_field = "slug"
template_name = "paweljong/event/register_start.html"
object_context_name = "event"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment