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

Remove feedback for now

parent b43d7a9d
No related branches found
No related tags found
1 merge request!1Reformat and cleanup
Pipeline #56088 failed
Showing
with 32 additions and 481 deletions
......@@ -5,7 +5,7 @@ from material import Layout, Row
from aleksis.core.filters import MultipleCharFilter
from .models import Event, EventRegistration, FeedbackAspect, Voucher, Terms
from .models import Event, EventRegistration, Voucher, Terms
class EventRegistrationFilter(FilterSet):
......@@ -48,11 +48,6 @@ class VoucherFilter(FilterSet):
self.form.layout = Layout(Row("event", "name"))
class FeedbackAspectsFilter(FilterSet):
class Meta:
model = FeedbackAspect
fields = ["aspect"]
class TermsFilter(FilterSet):
class Meta:
model = Terms
......
......@@ -11,7 +11,7 @@ from phonenumber_field.formfields import PhoneNumberField
from aleksis.core.mixins import ExtensibleForm
from aleksis.core.models import Group, Person
from .models import Event, EventRegistration, FeedbackAspect, Voucher, Terms
from .models import Event, EventRegistration, Voucher, Terms
COMMENT_CHOICES = [
("first", _("Only first name")),
......@@ -37,83 +37,6 @@ LICENCE_CHOICES = [
]
class EventFeedbackForm(ExtensibleForm):
class Meta:
model = FeedbackAspect
fields = []
layout = Layout(
Fieldset(
_("Comments"),
Row("comment_private", "comment_public", "comment_public_info"),
),
Fieldset(
_("Photos"),
Row("photos", "photos_licence"),
),
Fieldset(
_("Feedback aspects"),
),
)
comment_private = forms.CharField(
required=False,
label=_("Comment for the team"),
help_text=_(
"This comment is for the team only. You can write down everything you "
"would like to give us as feedback here."
),
widget=forms.Textarea,
)
comment_public = forms.CharField(
required=False,
label=_("Comment for the website"),
help_text=_(
"This comment is for the report on our website. Tell in detail about what "
"you experienced, what you liked, what you learned and everything else "
"you can think of."
),
widget=forms.Textarea,
)
comment_public_info = forms.ChoiceField(
label=_("Information in the comment"),
choices=COMMENT_CHOICES,
help_text=_("What information would you like to use to publish your comment?"),
)
photos = forms.ImageField(
label=_("Photos"),
widget=forms.ClearableFileInput(attrs={"multiple": True}),
required=False,
help_text=_(
"If you want to contribute photos to the report, you can upload them here. You can "
"select multiple files in most file selection dialogs with CTRL + click."
),
)
photos_licence = forms.ChoiceField(
label=_("Photo licence"),
choices=LICENCE_CHOICES,
required=False,
help_text=_("If you upload photos, choose a license here."),
)
def __init__(self, event, request, *args, **kwargs):
super(EventFeedbackForm, self).__init__(*args, **kwargs)
self._event = event
for aspect in event.feedback_aspects.all():
field = forms.IntegerField(
widget=Stars,
required=False,
)
self.fields[aspect.aspect] = field
node = Fieldset(f"{aspect.aspect}", f"{aspect.aspect}")
self.add_node_to_layout(node)
class EditEventForm(ExtensibleForm):
"""Form to create or edit an event."""
......@@ -125,7 +48,6 @@ class EditEventForm(ExtensibleForm):
Row("place", "published"),
Fieldset(_("Date data"), Row("date_event", "date_registration", "date_retraction")),
Fieldset(_("Event details"), Row("cost", "max_participants"), "information"),
Fieldset(_("Feedback aspects"), "feedback_aspects"),
Fieldset(_("Terms"), "terms"),
),
)
......@@ -143,7 +65,6 @@ class EditEventForm(ExtensibleForm):
"date_retraction",
"cost",
"max_participants",
"feedback_aspects",
"terms",
"information",
]
......@@ -152,10 +73,6 @@ class EditEventForm(ExtensibleForm):
search_fields=["name__icontains"],
attrs={"data-minimum-input-length": 0, "class": "browser-default"},
),
"feedback_aspects": ModelSelect2MultipleWidget(
search_fields=["aspect__icontains"],
attrs={"data-minimum-input-length": 0, "class": "browser-default"},
),
"terms": ModelSelect2MultipleWidget(
search_fields=["aspect__icontains"],
attrs={"data-minimum-input-length": 0, "class": "browser-default"},
......@@ -515,11 +432,6 @@ class EditEventRegistrationForm(forms.ModelForm):
exclude = []
class EditFeedbackAspectForm(forms.ModelForm):
class Meta:
model = FeedbackAspect
exclude = []
class EditTermForm(forms.ModelForm):
class Meta:
model = Terms
......
......@@ -25,17 +25,6 @@ MENUS = {
)
],
},
{
"name": _("Feedback aspects"),
"url": "feedback_aspects",
"icon": "rate_review",
"validators": [
(
"aleksis.core.util.predicates.permission_validator",
"paweljong.view_feedback_aspects_rule",
)
],
},
{
"name": _("Terms"),
"url": "terms",
......
# Generated by Django 3.2.12 on 2022-02-20 17:36
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('paweljong', '0008_remove_terms_from_event'),
]
operations = [
migrations.RemoveField(
model_name='feedbackaspect',
name='site',
),
migrations.RemoveField(
model_name='event',
name='feedback_aspects',
),
migrations.DeleteModel(
name='EventFeedback',
),
migrations.DeleteModel(
name='FeedbackAspect',
),
]
......@@ -11,13 +11,6 @@ from aleksis.core.models import Group, Person
from aleksis.core.util.core_helpers import generate_random_code
class FeedbackAspect(ExtensibleModel):
aspect = models.CharField(max_length=100)
def __str__(self) -> str:
return self.aspect
class Terms(ExtensibleModel):
title = models.CharField(max_length=255, verbose_name=_("Title"))
term = RichTextField(verbose_name=_("Term"))
......@@ -47,14 +40,6 @@ class Event(ExtensibleModel):
information = RichTextField(verbose_name=_("Information about the event"))
terms = models.ManyToManyField(Terms, verbose_name=_("Terms"), related_name="event", blank=True)
# Feedback
feedback_aspects = models.ManyToManyField(
FeedbackAspect,
verbose_name=_("Feedback aspects"),
related_name="event",
blank=True,
)
def __str__(self) -> str:
return self.display_name
......@@ -91,53 +76,6 @@ class Event(ExtensibleModel):
return self.linked_group.owners.all()
class EventFeedback(ExtensibleModel):
COMMENT_CHOICES = [
("first", _("Only first name")),
("first_age", _("First name and age")),
("first_last_age", _("First name, last name and age")),
]
LICENCE_CHOICES = [
("CC-BY-4.0+", _("Creative Commons with attribution, 4.0 or later")),
(
"CC-BY-SA-4.0+",
_(
"Creative Commons with attribution and distribution only"
"under the same conditions, 4.0 or later"
),
),
]
event = models.ForeignKey(
Event, on_delete=models.CASCADE, verbose_name=_("Event"), related_name="feedback"
)
person = models.ForeignKey(
Person, on_delete=models.CASCADE, verbose_name=_("Person"), related_name="feedback"
)
comment_private = models.TextField(verbose_name=_("Private comment"), blank=True)
comment_public = models.TextField(verbose_name=_("Public comment"), blank=True)
comment_public_info = models.CharField(
choices=COMMENT_CHOICES, verbose_name=_("Information in the comment"), max_length=255
)
photos = models.ImageField(verbose_name=_("Photos"), upload_to="feedback/", blank=True)
photos_licence = models.CharField(
choices=LICENCE_CHOICES, verbose_name=_("Photo licence"), max_length=255
)
class Meta:
verbose_name = _("Event feedback")
verbose_name_plural = _("Event feedbacks")
constraints = [
models.UniqueConstraint(
fields=["person", "event"], name="unique_person_feedback_per_event"
)
]
class Voucher(ExtensibleModel):
class Meta:
verbose_name = _("Vouchers")
......
......@@ -9,7 +9,7 @@ from aleksis.core.util.predicates import (
is_group_member,
)
from .models import Event, EventRegistration, FeedbackAspect, Voucher, Terms
from .models import Event, EventRegistration, Voucher, Terms
from .predicates import (
is_own_registration,
is_own_voucher,
......@@ -104,13 +104,6 @@ is_own_voucher_predicate = has_person & (is_own_voucher)
rules.add_perm("paweljong.is_own_voucher_rule", is_own_voucher_predicate)
# View feedback aspects
view_feedback_aspects_predicate = has_person & (
has_global_perm("paweljong.view_feedback_aspect")
| has_any_object("paweljong.view_feedback_aspect", FeedbackAspect)
)
rules.add_perm("paweljong.view_feedback_aspects_rule", view_feedback_aspects_predicate)
# View terms
view_terms_predicate = has_person & (
has_global_perm("paweljong.view_term")
......
......@@ -55,20 +55,6 @@ class EventRegistrationsTable(tables.Table):
)
class FeedbackAspectsTable(tables.Table):
class Meta:
attrs = {"class": "responsive-table highlight"}
aspect = tables.Column()
edit = tables.LinkColumn(
"edit_feedback_aspect_by_pk",
args=[A("id")],
verbose_name=_("Edit"),
text=_("Edit"),
)
class TermsTable(tables.Table):
class Meta:
attrs = {"class": "responsive-table highlight"}
......
{% extends "core/base.html" %}
{% load material_form i18n %}
{% block page_title %}{% blocktrans %}Feedback on an event{% endblocktrans %}{% endblock %}
{% block browser_title %}{% blocktrans %}Feedback on an event{% endblocktrans %}{% endblock %}
{% block extra_head %}
{{ form.media.css }}
{% endblock %}
{% block content %}
<h5>
{% blocktrans %}Feedback on{% endblocktrans %} {{ event.display_name }}
</h5>
<div class="row">
<div class="col s12 m12">
<div class="card info">
<div class="card-content">
<span class="card-title">{% blocktrans %}How does the feedback work?{% endblocktrans %}</span>
<p>
{% blocktrans %}
The feedback consists of three parts.
{% endblocktrans %}
</p>
<ul>
<li>
{% blocktrans %}Evaluation of the program points from 1 (not good) to 5 (very good){% endblocktrans %}
</li>
<li>
{% blocktrans %}Private commentary where you can tell us what you liked, what didn't, what we should do differently, etc.{% endblocktrans %}
</li>
<li>
{% blocktrans %}Comment for the report, which helps us and other children to learn as much as possible about the event. What you have experienced yourself is very interesting for the next participants!{% endblocktrans %}
</li>
</ul>
<p>
{% blocktrans %}Your feedback will be emailed to us. We may contact you again.{% endblocktrans %}
</p>
</div>
</div>
</div>
</div>
<form method="post" enctype="multiform/formdata">
{% csrf_token %}
{% form form=feedback_form %}{% endform %}
{% include "core/partials/save_button.html" %}
</form>
{{ form.media.js }}
{% endblock %}
{% extends "core/base.html" %}
{% load material_form i18n %}
{% block page_title %}{% blocktrans %}Create feedback aspect{% endblocktrans %}{% endblock %}
{% block browser_title %}{% blocktrans %}Create feedback aspect{% endblocktrans %}{% endblock %}
{% block content %}
<form method="post">
{% csrf_token %}
{% form form=form %}{% endform %}
{% include "core/partials/save_button.html" %}
</form>
{% endblock %}
{% extends "core/base.html" %}
{% load material_form i18n %}
{% block page_title %}{% blocktrans %}Edit feedback aspect{% endblocktrans %}{% endblock %}
{% block browser_title %}{% blocktrans %}Edit feedback aspect{% endblocktrans %}{% endblock %}
{% block content %}
<form method="post">
{% csrf_token %}
{% form form=form %}{% endform %}
{% include "core/partials/save_button.html" %}
</form>
{% endblock %}
{% extends "core/base.html" %}
{% load material_form i18n %}
{% load render_table from django_tables2 %}
{% block page_title %}{% blocktrans %}Feedback aspects{% endblocktrans %}{% endblock %}
{% block browser_title %}{% blocktrans %}Feedback aspects{% endblocktrans %}{% endblock %}
{% block content %}
<a class="btn colour-primary waves-effect waves-light" href="{% url 'create_feedback_aspect' %}">{% trans "Create feedback aspect" %}</a>
{% render_table table %}
{% endblock %}
......@@ -18,10 +18,6 @@
{% for owner in new_event.group.owners.all %}
* {{ owner }}
{% endfor %}
* {% trans "Feedback aspects" %}:
{% for aspect in new_event.feedback_aspects.all %}
* {{ aspect }}
{% endfor %}
{% blocktrans with sender=person %}
The event was created by {{ sender }}
......@@ -52,12 +48,6 @@
<li> {{ owner }}</li>
{% endfor %}
</ul>
<li> {% trans "Feedback aspects" %}</li>
<ul>
{% for aspect in new_event.feedback_aspects.all %}
<li> {{ aspect }}</li>
{% endfor %}
</ul>
</ul>
</blockquote>
......
{% load i18n %}
{% block subject %} {% trans "New feedback on" %} {{ feedback.event }} {% endblock %}
{% block plain %}
{% blocktrans with feedback.event=feedback.event %}New feedback on: {{ feedback.event }}{% endblocktrans %}
*** {% trans "Event" %} *****
* {% trans "Event" %}: {{ feedback.event }}
**** {% trans "Person " %} ****
* {% trans "Name" %}: {{ feedback.person }}
* {% trans "Date of birth" %}: {{ feedback.person.date_of_birth }}
* {% trans "Email address" %}: {{ feedback.person.email }}
**** {% trans "Comments" %} ****
* {% trans "Private comment" %}: {{ feedback.comment_private }}
* {% trans "Public comment" %}: {{ feedback.comment_public }}
* {% trans "Public comment info" %}: {{ feedback.comment_public_info }}
**** {% trans 'Photos' %} ****
{% for photo in feedback.photos %}
* {{ photo }}
{% endfor %}
* {% trans "Photo licence" %}: {{ feedback.photos_licence }}
{% trans "Your AlekSIS team" %}
{% endblock %}
{% block html %}
<main>
<p>{% blocktrans with new_feedback.event=new_feedback.event %}New feedback.event: {{ feedback.event}}{% endblocktrans %}</p>
<blockquote>
<h5>{% trans "Event" %}</h5>
<ul>
<li>{% trans "Event" %}: {{ feedback.event.feedback.event }}</li>
</ul>
<h5>{% trans "Person" %</h5>
<ul>
<li>{% trans "Name" %}: {{ feedback.event.person }}</li>
<li>{% trans "Date of birth" %}: {{ feedback.event.date_of_birth }}</li>
<li>{% trans "Email address" %}: {{ feedback.event.person.email }}</li>
</ul>
<h5>{% trans "Comments" %}</h5>
<ul>
<li>{% trans "Private comment" %}: {{ feedback.comment_private }}</li>
<li>{% trans "Public comment" %}: {{ feedback.comment_public }}</li>
<li>{% trans "Public comment info" %}: {{ feedback.comment_public_info }}</li>
</ul>
<h5>{% trans "Photos" %}</h5>
{% for photo in feedback.photos %}
<img src="{{ photo }}" alt="Feedback photo"></img>
{% endfor %}
<ul>
<li>{% trans "Photo licence" %}: {{ feedback.photos_licence }}</li>
</ul>
</blockquote>
<p>
<i>{% trans "Your AlekSIS team" %}</i>
</p>
</main>
{% endblock %}
......@@ -28,7 +28,6 @@ condition_dict = {
urlpatterns = [
path("event/<slug:slug>/edit", views.EditEventView.as_view(), name="edit_event_by_slug"),
path("event/<slug:slug>/feedback", views.feedback_event, name="feedback_event_by_slug"),
path(
"event/<slug:slug>/register",
views.RegisterEventWizardView.as_view(register_forms, condition_dict=condition_dict),
......@@ -63,21 +62,6 @@ urlpatterns = [
views.EventRegistrationDeleteView.as_view(),
name="delete_registration_by_pk",
),
path(
"event/feedback_aspects/list",
views.FeedbackAspectListView.as_view(),
name="feedback_aspects",
),
path(
"event/feedback_aspects/create",
views.FeedbackAspectCreateView.as_view(),
name="create_feedback_aspect",
),
path(
"event/feedback_aspects/<int:pk>/edit",
views.FeedbackAspectEditView.as_view(),
name="edit_feedback_aspect_by_pk",
),
path(
"event/terms/list",
views.TermListView.as_view(),
......
......@@ -29,75 +29,16 @@ from .filters import EventFilter, EventRegistrationFilter, VoucherFilter, TermsF
from .forms import (
EditEventForm,
EditEventRegistrationForm,
EditFeedbackAspectForm,
EditVoucherForm,
EventFeedbackForm,
GenerateListForm,
EditTermForm,
)
from .models import Event, EventRegistration, FeedbackAspect, Voucher, Terms
from .tables import EventRegistrationsTable, FeedbackAspectsTable, ManageEventsTable, VouchersTable, TermsTable
from .models import Event, EventRegistration, Voucher, Terms
from .tables import EventRegistrationsTable, ManageEventsTable, VouchersTable, TermsTable
User = get_user_model()
@login_required
def feedback_event(request, slug):
context = {}
# Get current person and event
current_person = request.user.person
event = Event.objects.get(linked_group__short_name=slug)
context["event"] = event
# Prepare the form
initial = {
"event": event,
"person": current_person,
}
feedback_form = EventFeedbackForm(event, initial=initial)
# Check whether person is a member of the event
if current_person not in event.linked_group.members.all():
return redirect("index")
messages.error(request, _("You did not take part in this event."))
if request.method == "POST":
if feedback_form.is_valid():
feedback = feedback_form.save(commit=True)
context["feedback"] = feedback
# Handle photo uploads, if any
send_templated_mail(
template_name="event_feedback",
from_email=lazy_preference("mail", "address"),
recipient_list=["verein@teckids.org"],
headers={
"reply_to": [
request.person.email,
],
},
context=context,
)
# Set success
messages.success(request, _("Feedback successfully submitted."))
return redirect("index")
act = Activity(
title=_("You submitted feedback"),
description=_("You submitted feedback for %s" % event.display_name),
app="Paweljong",
user=request.user.person,
)
act.save()
context["feedback_form"] = feedback_form
return render(request, "paweljong/event/feedback.html", context)
@method_decorator(never_cache, name="dispatch")
class CreateEventView(PermissionRequiredMixin, AdvancedCreateView):
form_class = EditEventForm
......@@ -261,39 +202,6 @@ def print_voucher(request: HttpRequest, pk) -> HttpResponse:
return render(request, "paweljong/print/voucher.html", context)
class FeedbackAspectListView(PermissionRequiredMixin, SingleTableView):
"""Table of all feedback aspects."""
model = FeedbackAspect
table_class = FeedbackAspectsTable
permission_required = "paweljong.view_feedback_aspects"
template_name = "paweljong/feedback_aspect/list.html"
@method_decorator(never_cache, name="dispatch")
class FeedbackAspectCreateView(PermissionRequiredMixin, AdvancedCreateView):
"""Create view for feedback aspects."""
model = FeedbackAspect
form_class = EditFeedbackAspectForm
permission_required = "paweljong.add_feedback_aspects"
template_name = "paweljong/feedback_aspect/create.html"
success_url = reverse_lazy("feedback_aspects")
success_message = _("The feedback aspect has been created.")
@method_decorator(never_cache, name="dispatch")
class FeedbackAspectEditView(PermissionRequiredMixin, AdvancedEditView):
"""Edit view for feedback aspects."""
model = FeedbackAspect
form_class = EditFeedbackAspectForm
permission_required = "paweljong.edit_feedback_aspects"
template_name = "paweljong/feedback_aspect/edit.html"
success_url = reverse_lazy("feedback_aspects")
success_message = _("The feedback aspect has been saved.")
class EventRegistrationDetailView(PermissionRequiredMixin, DetailView):
"""Detail view for an application instance."""
......@@ -305,16 +213,6 @@ class EventRegistrationDetailView(PermissionRequiredMixin, DetailView):
return EventRegistration.objects.all()
class FeedbackAspectDeleteView(PermissionRequiredMixin, AdvancedDeleteView):
"""Delete view for dashboard widgets."""
model = FeedbackAspect
permission_required = "paweljong.delete_feedbackaspect"
template_name = "core/pages/delete.html"
success_url = reverse_lazy("feedback_aspects")
success_message = _("The feedback aspect has been deleted.")
class EventRegistrationDeleteView(PermissionRequiredMixin, AdvancedDeleteView):
"""Delete view for registrations."""
......
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