diff --git a/src/agenda_culturel/locale/fr/LC_MESSAGES/django.po b/src/agenda_culturel/locale/fr/LC_MESSAGES/django.po
index a2fd020..35bdb59 100644
--- a/src/agenda_culturel/locale/fr/LC_MESSAGES/django.po
+++ b/src/agenda_culturel/locale/fr/LC_MESSAGES/django.po
@@ -516,7 +516,7 @@ msgstr ""
#: agenda_culturel/views.py:350
msgid "Your message has been sent successfully."
-msgstr "L'événement a été supprimé avec succès"
+msgstr "Votre message a été envoyé avec succès."
#: agenda_culturel/views.py:358
msgid "The contact message properties has been successfully modified."
diff --git a/src/agenda_culturel/migrations/0037_alter_batchimportation_options_and_more.py b/src/agenda_culturel/migrations/0037_alter_batchimportation_options_and_more.py
new file mode 100644
index 0000000..1880469
--- /dev/null
+++ b/src/agenda_culturel/migrations/0037_alter_batchimportation_options_and_more.py
@@ -0,0 +1,29 @@
+# Generated by Django 4.2.7 on 2024-03-31 16:15
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('agenda_culturel', '0036_auto_20240331_1421'),
+ ]
+
+ operations = [
+ migrations.AlterModelOptions(
+ name='batchimportation',
+ options={'permissions': [('run_batchimportation', 'Can run a batch importation')]},
+ ),
+ migrations.AlterModelOptions(
+ name='categorisationrule',
+ options={'permissions': [('apply_categorisationrules', 'Apply a categorisation rule')]},
+ ),
+ migrations.AlterModelOptions(
+ name='event',
+ options={'permissions': [('set_duplicated_event', 'Can set an event as duplicated')], 'verbose_name': 'Event', 'verbose_name_plural': 'Events'},
+ ),
+ migrations.AlterModelOptions(
+ name='recurrentimport',
+ options={'permissions': [('run_recurrentimport', 'Can run a recurrent import')]},
+ ),
+ ]
diff --git a/src/agenda_culturel/migrations/0038_auto_20240331_1815.py b/src/agenda_culturel/migrations/0038_auto_20240331_1815.py
new file mode 100644
index 0000000..bab4d22
--- /dev/null
+++ b/src/agenda_culturel/migrations/0038_auto_20240331_1815.py
@@ -0,0 +1,45 @@
+# Generated by Django 4.2.7 on 2024-03-31 16:15
+
+from django.db import migrations
+
+
+from django.contrib.auth.management import create_permissions
+from django.contrib.auth.models import Group, Permission
+
+
+def update_groups_permissions(apps, schema_editor):
+ # first add a missing role
+ user_roles = ["Moderator"]
+
+ for name in user_roles:
+ Group.objects.create(name=name)
+
+ all_perms = Permission.objects.all()
+
+ # set permissions for moderators
+ moderator_perms = [i for i in all_perms if i.content_type.app_label == 'agenda_culturel' and i.content_type.model in ['event', 'duplicatedevents']]
+ Group.objects.get(name="Moderator").permissions.add(*moderator_perms)
+
+ read_mod_perms = [i for i in moderator_perms if i.codename.startswith('view_')]
+
+ # set permissions for automation managers
+ automanager_perms = [i for i in all_perms if i.content_type.app_label == 'agenda_culturel' and i.content_type.model in ['batchimportation', 'recurrentimport', 'categorisationrule']]
+ Group.objects.get(name="Automation Manager").permissions.add(*automanager_perms)
+ Group.objects.get(name="Automation Manager").permissions.add(*read_mod_perms)
+
+ # set permissions for receptionists
+ receptionist_perms = [i for i in all_perms if i.content_type.app_label == 'agenda_culturel' and i.content_type.model in ['contactmessage']]
+ Group.objects.get(name="Receptionist").permissions.add(*receptionist_perms)
+ Group.objects.get(name="Receptionist").permissions.add(*read_mod_perms)
+
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('agenda_culturel', '0037_alter_batchimportation_options_and_more'),
+ ]
+
+ operations = [
+ migrations.RunPython(update_groups_permissions),
+ ]
diff --git a/src/agenda_culturel/models.py b/src/agenda_culturel/models.py
index d8245b9..33632ed 100644
--- a/src/agenda_culturel/models.py
+++ b/src/agenda_culturel/models.py
@@ -237,6 +237,7 @@ class Event(models.Model):
class Meta:
verbose_name = _('Event')
verbose_name_plural = _('Events')
+ permissions = [("set_duplicated_event", "Can set an event as duplicated")]
def get_all_tags():
try:
@@ -737,6 +738,10 @@ class ContactMessage(models.Model):
class RecurrentImport(models.Model):
+
+ class Meta:
+ permissions = [("run_recurrentimport", "Can run a recurrent import")]
+
class PROCESSOR(models.TextChoices):
ICAL = "ical", _("ical")
ICALNOBUSY = "icalnobusy", _("ical no busy")
@@ -781,6 +786,9 @@ class BatchImportation(models.Model):
SUCCESS = "success", _("Success")
FAILED = "failed", _("Failed")
+ class Meta:
+ permissions = [("run_batchimportation", "Can run a batch importation")]
+
created_date = models.DateTimeField(auto_now_add=True)
@@ -810,6 +818,10 @@ class CategorisationRule(models.Model):
title_contains = models.CharField(verbose_name=_('Contained in the title'), help_text=_('Text contained in the event title'), max_length=512, blank=True, null=True)
title_exact = models.BooleanField(verbose_name=_('Exact title extract'), help_text=_("If checked, the extract will be searched for in the title using the exact form (capitals, accents)."), default=False)
+ class Meta:
+ permissions = [("apply_categorisationrules", "Apply a categorisation rule")]
+
+
# on applique toutes les règles, de la première à la dernière
def apply_rules(event):
rules = CategorisationRule.objects.all().order_by("weight", "pk")
diff --git a/src/agenda_culturel/templates/agenda_culturel/duplicates.html b/src/agenda_culturel/templates/agenda_culturel/duplicates.html
index 7582450..0b2f16c 100644
--- a/src/agenda_culturel/templates/agenda_culturel/duplicates.html
+++ b/src/agenda_culturel/templates/agenda_culturel/duplicates.html
@@ -27,12 +27,14 @@
{{ e.start_day }}{% if e.start_time %} à {{ e.start_time }}{% endif %} : {{ e.title }} créé le {{ e.created_date }}
{% endfor %}
+ {% if perms.agenda_culturel.change_duplicatedevents %}
+ {% endif %}
{% endwith %}
{% endfor %}
diff --git a/src/agenda_culturel/templates/agenda_culturel/page.html b/src/agenda_culturel/templates/agenda_culturel/page.html
index 7b2b9f2..5e7dfce 100644
--- a/src/agenda_culturel/templates/agenda_culturel/page.html
+++ b/src/agenda_culturel/templates/agenda_culturel/page.html
@@ -46,10 +46,16 @@
- {% if user.is_authenticated %}
+ {% if perms.agenda_culturel.change_event %}
{% show_badges_events "bottom" %}
+ {% endif %}
+ {% if perms.agenda_culturel.change_duplicatedevents %}
{% show_badge_duplicated "bottom" %}
+ {% endif %}
+ {% if perms.agenda_culturel.view_contactmessage %}
{% show_badge_contactmessages "bottom" %}
+ {% endif %}
+ {% if user.is_authenticated %}
{{ user.username }} @
{% endif %}
Pommes de lune
diff --git a/src/agenda_culturel/templates/agenda_culturel/side-nav.html b/src/agenda_culturel/templates/agenda_culturel/side-nav.html
index feec84c..741b53c 100644
--- a/src/agenda_culturel/templates/agenda_culturel/side-nav.html
+++ b/src/agenda_culturel/templates/agenda_culturel/side-nav.html
@@ -9,31 +9,48 @@
Événements
+
+ {% if perms.agenda_culturel.view_batchimportation or perms.agenda_culturel.view_recurrentimport or perms.agenda_culturel.view_categorisationrule%}
Traitements automatiques
+ {% endif %}
+ {% if perms.agenda_culturel.view_contactmessage %}
Messages
+ {% endif %}
+ {% if user.is_staff %}
Configuration interne
+ {% endif %}
Vous êtes connecté(e) en tant que {{ user }}.
diff --git a/src/agenda_culturel/templates/agenda_culturel/single-event/event-in-flat-list-inc.html b/src/agenda_culturel/templates/agenda_culturel/single-event/event-in-flat-list-inc.html
index f389626..d653809 100644
--- a/src/agenda_culturel/templates/agenda_culturel/single-event/event-in-flat-list-inc.html
+++ b/src/agenda_culturel/templates/agenda_culturel/single-event/event-in-flat-list-inc.html
@@ -37,7 +37,7 @@
{% if event.description_hl %}{{ event.description_hl | safe }} [...]{% else %}{% if event.description %}{{ event.description |truncatewords:60 }}{% else %}pas de description{% endif %}{% endif %}
- {% if user.is_authenticated %}
+ {% if perms.agenda_culturel.change_event %}