diff --git a/src/agenda_culturel/forms.py b/src/agenda_culturel/forms.py
index 93bed5c..1613ec9 100644
--- a/src/agenda_culturel/forms.py
+++ b/src/agenda_culturel/forms.py
@@ -250,3 +250,23 @@ class ModerationAnswerForm(ModelForm):
'adds_tags': DynamicArrayWidgetTags(),
'removes_tags': DynamicArrayWidgetTags()
}
+
+
+class ModerateForm(ModelForm):
+
+ class Meta:
+ model = Event
+ fields = []
+
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+
+ mqs = ModerationQuestion.objects.all()
+ mas = ModerationAnswer.objects.all()
+
+ for q in mqs:
+ self.fields[q.complete_id()] = ChoiceField(widget=RadioSelect, label=q.question, choices=[(a.pk, a.html_description()) for a in mas if a.question == q], required=True)
+ for a in mas:
+ if a.question == q and a.valid_event(self.instance):
+ self.fields[q.complete_id()].initial = a.pk
+ break
diff --git a/src/agenda_culturel/migrations/0046_event_moderated_date.py b/src/agenda_culturel/migrations/0046_event_moderated_date.py
new file mode 100644
index 0000000..7843fb5
--- /dev/null
+++ b/src/agenda_culturel/migrations/0046_event_moderated_date.py
@@ -0,0 +1,18 @@
+# Generated by Django 4.2.7 on 2024-04-13 09:25
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('agenda_culturel', '0045_auto_20240405_1941'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='event',
+ name='moderated_date',
+ field=models.DateTimeField(blank=True, null=True),
+ ),
+ ]
diff --git a/src/agenda_culturel/models.py b/src/agenda_culturel/models.py
index 82d9f43..02cbb1d 100644
--- a/src/agenda_culturel/models.py
+++ b/src/agenda_culturel/models.py
@@ -1,6 +1,7 @@
from django.db import models
from django_better_admin_arrayfield.models.fields import ArrayField
from django.utils.translation import gettext_lazy as _
+from django.utils.safestring import mark_safe
from django.template.defaultfilters import slugify
from django.urls import reverse
from colorfield.fields import ColorField
@@ -161,6 +162,7 @@ class Event(models.Model):
created_date = models.DateTimeField(editable=False)
imported_date = models.DateTimeField(blank=True, null=True)
modified_date = models.DateTimeField(blank=True, null=True)
+ moderated_date = models.DateTimeField(blank=True, null=True)
recurrence_dtstart = models.DateTimeField(editable=False, blank=True, null=True)
recurrence_dtend = models.DateTimeField(editable=False, blank=True, null=True)
@@ -880,6 +882,9 @@ class ModerationQuestion(models.Model):
def get_absolute_url(self):
return reverse("view_mquestion", kwargs={"pk": self.pk})
+ def complete_id(self):
+ return "question_" + str(self.pk)
+
class ModerationAnswer(models.Model):
@@ -890,3 +895,41 @@ class ModerationAnswer(models.Model):
adds_tags = ArrayField(models.CharField(max_length=64), verbose_name=_('Adds tags'), help_text=_("A list of tags that will be added if you choose this answer."), blank=True, null=True)
removes_tags = ArrayField(models.CharField(max_length=64), verbose_name=_('Removes tags'), help_text=_("A list of tags that will be removed if you choose this answer."), blank=True, null=True)
+
+ def complete_id(self):
+ return "answer_" + str(self.question.pk) + '_' + str(self.pk)
+
+ def html_description(self):
+ result = self.answer + '
'
+ if self.adds_tags:
+ result += ' '.join(['' + a + '' for a in self.adds_tags])
+ if self.removes_tags:
+ result += ' '.join(['' + a + '' for a in self.removes_tags])
+ result += ""
+ return mark_safe(result)
+
+ def valid_event(self, event):
+ if event.tags:
+ for t in self.adds_tags:
+ if t not in event.tags:
+ return False
+
+ for t in self.removes_tags:
+ if t in event.tags:
+ return False
+
+ return True
+ else:
+ return not self.adds_tags or len(self.adds_tags) == 0
+
+ def apply_answer(self, event):
+ if not self.adds_tags:
+ self.adds_tags = []
+ if not self.removes_tags:
+ self.removes_tags = []
+
+ logger.info('on applique la réponse ' + self.answer)
+ if event.tags:
+ event.tags = list((set(event.tags) | set(self.adds_tags)) - set(self.removes_tags))
+ else:
+ event.tags = self.adds_tags
diff --git a/src/agenda_culturel/templates/agenda_culturel/edit-buttons-inc.html b/src/agenda_culturel/templates/agenda_culturel/edit-buttons-inc.html
index 49a151a..78152ec 100644
--- a/src/agenda_culturel/templates/agenda_culturel/edit-buttons-inc.html
+++ b/src/agenda_culturel/templates/agenda_culturel/edit-buttons-inc.html
@@ -1,6 +1,7 @@
{% load utils_extra %}
-modifier {% picto_from_name "edit" %}
+modérer {% picto_from_name "edit" %}
+modifier {% picto_from_name "edit-3" %}
{% if event.status != "published" %}
publier {% picto_from_name "eye" %}
diff --git a/src/agenda_culturel/templates/agenda_culturel/event-info-inc.html b/src/agenda_culturel/templates/agenda_culturel/event-info-inc.html
new file mode 100644
index 0000000..36ecd6d
--- /dev/null
+++ b/src/agenda_culturel/templates/agenda_culturel/event-info-inc.html
@@ -0,0 +1,30 @@
+
\ No newline at end of file
diff --git a/src/agenda_culturel/templates/agenda_culturel/event_form.html b/src/agenda_culturel/templates/agenda_culturel/event_form.html
index 2ca5b2c..fbbb4be 100644
--- a/src/agenda_culturel/templates/agenda_culturel/event_form.html
+++ b/src/agenda_culturel/templates/agenda_culturel/event_form.html
@@ -46,35 +46,7 @@
{% if object %}
-
+{% include "agenda_culturel/event-info-inc.html" %}
{% endif %}
diff --git a/src/agenda_culturel/templates/agenda_culturel/event_moderation_form.html b/src/agenda_culturel/templates/agenda_culturel/event_moderation_form.html
new file mode 100644
index 0000000..c44f54d
--- /dev/null
+++ b/src/agenda_culturel/templates/agenda_culturel/event_moderation_form.html
@@ -0,0 +1,34 @@
+{% extends "agenda_culturel/event_form.html" %}
+{% load static %}
+
+
+{% block title %}Modérer {{ object.title }}{% endblock %}
+
+
+
+{% block content %}
+
+{% load static_content_extra %}
+
+Modération de l'événement {{ object.title }} ({{ object.start_day }})
+