diff --git a/AKSubmission/api.py b/AKSubmission/api.py index d11de2d06c6ce641c9b4877cb23aad5175cb80d9..29a6f42a9f371b53aef98ead6a4d7b2b4d6e20f3 100644 --- a/AKSubmission/api.py +++ b/AKSubmission/api.py @@ -33,6 +33,6 @@ def increment_interest_counter(request, event_slug, pk, **kwargs): if ak_interest_indication_active(ak.event, current_timestamp): ak.interest_counter += 1 ak.save() - return Response(status=status.HTTP_200_OK) + return Response({'interest_counter': ak.interest_counter}, status=status.HTTP_200_OK) return Response(status=status.HTTP_403_FORBIDDEN) return Response(status=status.HTTP_404_NOT_FOUND) diff --git a/AKSubmission/locale/de_DE/LC_MESSAGES/django.po b/AKSubmission/locale/de_DE/LC_MESSAGES/django.po index 7441d5879633e244d0eb96f7976873853e1e68a2..c45713c4ec0e00153ccb3b5eda67493f8b90a79e 100644 --- a/AKSubmission/locale/de_DE/LC_MESSAGES/django.po +++ b/AKSubmission/locale/de_DE/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-10-29 09:57+0000\n" +"POT-Creation-Date: 2021-10-29 11:22+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -56,51 +56,59 @@ msgstr "" msgid "AK Submission" msgstr "AK-Eintragung" -#: AKSubmission/templates/AKSubmission/ak_detail.html:37 +#: AKSubmission/templates/AKSubmission/ak_detail.html:78 +msgid "Interest indication currently not allowed. Sorry." +msgstr "Interessenangabe aktuell nicht erlaubt. Sorry." + +#: AKSubmission/templates/AKSubmission/ak_detail.html:80 +msgid "Could not save your interest. Sorry." +msgstr "Interesse konnte nicht gespeichert werden. Sorry." + +#: AKSubmission/templates/AKSubmission/ak_detail.html:101 msgid "Interest" msgstr "Interesse" -#: AKSubmission/templates/AKSubmission/ak_detail.html:40 -#: AKSubmission/templates/AKSubmission/ak_table.html:56 +#: AKSubmission/templates/AKSubmission/ak_detail.html:103 +#: AKSubmission/templates/AKSubmission/ak_table.html:57 msgid "Show Interest" msgstr "Interesse bekunden" -#: AKSubmission/templates/AKSubmission/ak_detail.html:46 +#: AKSubmission/templates/AKSubmission/ak_detail.html:109 #: AKSubmission/templates/AKSubmission/ak_table.html:48 msgid "Open external link" msgstr "Externen Link öffnen" -#: AKSubmission/templates/AKSubmission/ak_detail.html:51 +#: AKSubmission/templates/AKSubmission/ak_detail.html:114 msgid "Open protocol link" msgstr "Protokolllink öffnen" -#: AKSubmission/templates/AKSubmission/ak_detail.html:56 +#: AKSubmission/templates/AKSubmission/ak_detail.html:119 #: AKSubmission/templates/AKSubmission/ak_history.html:19 #: AKSubmission/templates/AKSubmission/ak_history.html:31 msgid "History" msgstr "Versionsgeschichte" -#: AKSubmission/templates/AKSubmission/ak_detail.html:59 +#: AKSubmission/templates/AKSubmission/ak_detail.html:122 #: AKSubmission/templates/AKSubmission/akmessage_add.html:8 #: AKSubmission/templates/AKSubmission/akmessage_add.html:16 #: AKSubmission/templates/AKSubmission/akmessage_add.html:22 msgid "Add confidential message to organizers" msgstr "Sende eine private Nachricht an das Organisationsteam" -#: AKSubmission/templates/AKSubmission/ak_detail.html:62 -#: AKSubmission/templates/AKSubmission/ak_detail.html:213 +#: AKSubmission/templates/AKSubmission/ak_detail.html:125 +#: AKSubmission/templates/AKSubmission/ak_detail.html:276 #: AKSubmission/templates/AKSubmission/ak_edit.html:16 #: AKSubmission/templates/AKSubmission/ak_table.html:53 msgid "Edit" msgstr "Bearbeiten" -#: AKSubmission/templates/AKSubmission/ak_detail.html:67 +#: AKSubmission/templates/AKSubmission/ak_detail.html:130 #: AKSubmission/templates/AKSubmission/ak_history.html:31 #: AKSubmission/templates/AKSubmission/ak_table.html:35 msgid "AK Wish" msgstr "AK-Wunsch" -#: AKSubmission/templates/AKSubmission/ak_detail.html:74 +#: AKSubmission/templates/AKSubmission/ak_detail.html:137 #, python-format msgid "" "\n" @@ -114,7 +122,7 @@ msgstr "" "Minute(n) in %(room)s statt. \n" " " -#: AKSubmission/templates/AKSubmission/ak_detail.html:80 +#: AKSubmission/templates/AKSubmission/ak_detail.html:143 #, python-format msgid "" "\n" @@ -127,96 +135,96 @@ msgstr "" "Minute(n) in %(room)s. \n" " " -#: AKSubmission/templates/AKSubmission/ak_detail.html:87 -#: AKSubmission/templates/AKSubmission/ak_detail.html:221 +#: AKSubmission/templates/AKSubmission/ak_detail.html:150 +#: AKSubmission/templates/AKSubmission/ak_detail.html:284 msgid "Go to virtual room" msgstr "Zum virtuellen Raum" -#: AKSubmission/templates/AKSubmission/ak_detail.html:96 +#: AKSubmission/templates/AKSubmission/ak_detail.html:159 #: AKSubmission/templates/AKSubmission/ak_table.html:10 msgid "Who?" msgstr "Wer?" -#: AKSubmission/templates/AKSubmission/ak_detail.html:102 +#: AKSubmission/templates/AKSubmission/ak_detail.html:165 #: AKSubmission/templates/AKSubmission/ak_history.html:36 #: AKSubmission/templates/AKSubmission/ak_table.html:11 msgid "Category" msgstr "Kategorie" -#: AKSubmission/templates/AKSubmission/ak_detail.html:109 +#: AKSubmission/templates/AKSubmission/ak_detail.html:172 #: AKSubmission/templates/AKSubmission/ak_history.html:37 msgid "Track" msgstr "Track" -#: AKSubmission/templates/AKSubmission/ak_detail.html:115 +#: AKSubmission/templates/AKSubmission/ak_detail.html:178 #, fuzzy #| msgid "Present results of this AK" msgid "Present this AK" msgstr "Die Ergebnisse dieses AKs vorstellen" -#: AKSubmission/templates/AKSubmission/ak_detail.html:120 +#: AKSubmission/templates/AKSubmission/ak_detail.html:183 msgid "(Category Default)" msgstr "(Kategorievoreinstellung)" -#: AKSubmission/templates/AKSubmission/ak_detail.html:126 +#: AKSubmission/templates/AKSubmission/ak_detail.html:189 #: AKSubmission/templates/AKSubmission/ak_table.html:12 msgid "Tags" msgstr "Tags" -#: AKSubmission/templates/AKSubmission/ak_detail.html:132 +#: AKSubmission/templates/AKSubmission/ak_detail.html:195 msgid "Reso intention?" msgstr "Resoabsicht?" -#: AKSubmission/templates/AKSubmission/ak_detail.html:139 +#: AKSubmission/templates/AKSubmission/ak_detail.html:202 msgid "Requirements" msgstr "Anforderungen" -#: AKSubmission/templates/AKSubmission/ak_detail.html:152 +#: AKSubmission/templates/AKSubmission/ak_detail.html:215 msgid "Conflicting AKs" msgstr "AK-Konflikte" -#: AKSubmission/templates/AKSubmission/ak_detail.html:160 +#: AKSubmission/templates/AKSubmission/ak_detail.html:223 msgid "Prerequisite AKs" msgstr "Vorausgesetzte AKs" -#: AKSubmission/templates/AKSubmission/ak_detail.html:168 +#: AKSubmission/templates/AKSubmission/ak_detail.html:231 msgid "Notes" msgstr "Notizen" -#: AKSubmission/templates/AKSubmission/ak_detail.html:181 +#: AKSubmission/templates/AKSubmission/ak_detail.html:244 msgid "When?" msgstr "Wann?" -#: AKSubmission/templates/AKSubmission/ak_detail.html:183 +#: AKSubmission/templates/AKSubmission/ak_detail.html:246 #: AKSubmission/templates/AKSubmission/akslot_delete.html:35 msgid "Duration" msgstr "Dauer" -#: AKSubmission/templates/AKSubmission/ak_detail.html:185 +#: AKSubmission/templates/AKSubmission/ak_detail.html:248 msgid "Room" msgstr "Raum" -#: AKSubmission/templates/AKSubmission/ak_detail.html:216 +#: AKSubmission/templates/AKSubmission/ak_detail.html:279 msgid "Delete" msgstr "Löschen" -#: AKSubmission/templates/AKSubmission/ak_detail.html:227 +#: AKSubmission/templates/AKSubmission/ak_detail.html:290 msgid "Schedule" msgstr "Schedule" -#: AKSubmission/templates/AKSubmission/ak_detail.html:239 +#: AKSubmission/templates/AKSubmission/ak_detail.html:302 msgid "Add another slot" msgstr "Einen neuen AK-Slot hinzufügen" -#: AKSubmission/templates/AKSubmission/ak_detail.html:249 +#: AKSubmission/templates/AKSubmission/ak_detail.html:312 msgid "Possible Times" msgstr "Mögliche Zeiten" -#: AKSubmission/templates/AKSubmission/ak_detail.html:253 +#: AKSubmission/templates/AKSubmission/ak_detail.html:316 msgid "Start" msgstr "Start" -#: AKSubmission/templates/AKSubmission/ak_detail.html:254 +#: AKSubmission/templates/AKSubmission/ak_detail.html:317 msgid "End" msgstr "Ende" @@ -270,7 +278,7 @@ msgstr "Die Ergebnisse dieses AKs vorstellen" msgid "Intends to submit a resolution" msgstr "Beabsichtigt eine Resolution einzureichen" -#: AKSubmission/templates/AKSubmission/ak_list.html:6 AKSubmission/views.py:39 +#: AKSubmission/templates/AKSubmission/ak_list.html:6 AKSubmission/views.py:40 msgid "All AKs" msgstr "Alle AKs" @@ -290,7 +298,7 @@ msgstr "AK hinzufügen" msgid "Details" msgstr "Details" -#: AKSubmission/templates/AKSubmission/ak_table.html:66 +#: AKSubmission/templates/AKSubmission/ak_table.html:67 msgid "There are no AKs in this category yet" msgstr "Es gibt noch keine AKs in dieser Kategorie" @@ -396,65 +404,65 @@ msgstr "" msgid "Submit" msgstr "Eintragen" -#: AKSubmission/views.py:70 +#: AKSubmission/views.py:71 msgid "Wishes" msgstr "Wünsche" -#: AKSubmission/views.py:70 +#: AKSubmission/views.py:71 msgid "AKs one would like to have" msgstr "" "AKs die sich gewünscht wurden, aber bei denen noch nicht klar ist, wer sie " "macht. Falls du dir das vorstellen kannst, trag dich einfach ein" -#: AKSubmission/views.py:86 +#: AKSubmission/views.py:87 msgid "Currently planned AKs" msgstr "Aktuell geplante AKs" -#: AKSubmission/views.py:184 +#: AKSubmission/views.py:188 msgid "Event inactive. Cannot create or update." msgstr "Event inaktiv. Hinzufügen/Bearbeiten nicht möglich." -#: AKSubmission/views.py:200 +#: AKSubmission/views.py:204 msgid "AK successfully created" msgstr "AK erfolgreich angelegt" -#: AKSubmission/views.py:258 +#: AKSubmission/views.py:262 msgid "AK successfully updated" msgstr "AK erfolgreich aktualisiert" -#: AKSubmission/views.py:289 +#: AKSubmission/views.py:293 msgid "Interest saved" msgstr "Interesse gespeichert" -#: AKSubmission/views.py:348 +#: AKSubmission/views.py:352 msgid "Person Info successfully updated" msgstr "Personen-Info erfolgreich aktualisiert" -#: AKSubmission/views.py:368 +#: AKSubmission/views.py:372 msgid "No user selected" msgstr "Keine Person ausgewählt" -#: AKSubmission/views.py:394 +#: AKSubmission/views.py:398 msgid "AK Slot successfully added" msgstr "AK-Slot erfolgreich angelegt" -#: AKSubmission/views.py:408 +#: AKSubmission/views.py:412 msgid "You cannot edit a slot that has already been scheduled" msgstr "Bereits geplante AK-Slots können nicht mehr bearbeitet werden" -#: AKSubmission/views.py:418 +#: AKSubmission/views.py:422 msgid "AK Slot successfully updated" msgstr "AK-Slot erfolgreich aktualisiert" -#: AKSubmission/views.py:431 +#: AKSubmission/views.py:435 msgid "You cannot delete a slot that has already been scheduled" msgstr "Bereits geplante AK-Slots können nicht mehr gelöscht werden" -#: AKSubmission/views.py:441 +#: AKSubmission/views.py:445 msgid "AK Slot successfully deleted" msgstr "AK-Slot erfolgreich angelegt" -#: AKSubmission/views.py:462 +#: AKSubmission/views.py:466 msgid "Message to organizers successfully saved" msgstr "Nachricht an die Organisator*innen erfolgreich gespeichert" diff --git a/AKSubmission/templates/AKSubmission/ak_detail.html b/AKSubmission/templates/AKSubmission/ak_detail.html index 4eadfd34de24b3d79dd0fcc517048404302444eb..9cee1015613ec658d0799156d95c10f9f6dd7b35 100644 --- a/AKSubmission/templates/AKSubmission/ak_detail.html +++ b/AKSubmission/templates/AKSubmission/ak_detail.html @@ -26,6 +26,69 @@ {% if 'AKPlan'|check_app_installed %} {% block imports %} {% include "AKPlan/plan_akslot.html" %} + + <script> + document.addEventListener('DOMContentLoaded', function () { + // CSRF Protection/Authentication + function getCookie(name) { + let cookieValue = null; + if (document.cookie && document.cookie !== '') { + const cookies = document.cookie.split(';'); + for (let i = 0; i < cookies.length; i++) { + const cookie = cookies[i].trim(); + // Does this cookie string begin with the name we want? + if (cookie.substring(0, name.length + 1) === (name + '=')) { + cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); + break; + } + } + } + return cookieValue; + } + + const csrftoken = getCookie('csrftoken'); + + function csrfSafeMethod(method) { + // these HTTP methods do not require CSRF protection + return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); + } + + $.ajaxSetup({ + beforeSend: function (xhr, settings) { + if (!csrfSafeMethod(settings.type) && !this.crossDomain) { + xhr.setRequestHeader("X-CSRFToken", csrftoken); + } + } + }); + + function indicate_interest(ak_id, btn) { + $.ajax({ + url: "{% url "model:AK-list" event_slug=event.slug %}" + ak_id + "/indicate-interest/", + type: 'POST', + data: { + }, + success: function (response) { + console.log(response); + btn.html('{% fa5_icon 'check' 'fas' %}'); + btn.off('click'); + $('#interest-counter').html(response.interest_counter); + }, + error: function (response) { + if(response.status === 403) + alert("{% trans 'Interest indication currently not allowed. Sorry.' %}"); + else + alert("{% trans 'Could not save your interest. Sorry.' %}"); + } + }); + } + + // Update counter + $('#btn-indicate-interest').click(function () { + indicate_interest({{ ak.pk }}, $(this)); + }); + }); + </script> + {% endblock %} {% endif %} @@ -34,11 +97,11 @@ <div class="text-right"> {% if ak.interest_counter >= 0 %} - {% trans 'Interest' %}: <b class='mx-1 text-muted'>{{ ak.interest_counter }}</b> - {% if ak.event.active %} - <a href="{% url 'submit:inc_interest' event_slug=ak.event.slug pk=ak.pk %}" data-toggle="tooltip" + {% if ak.event.active and interest_indication_active %} + {% trans 'Interest' %}: <b class='mx-1 text-muted' id="interest-counter">{{ ak.interest_counter }}</b> + <a href="#" data-toggle="tooltip" title="{% trans 'Show Interest' %}" - class="btn btn-primary">{% fa5_icon 'thumbs-up' 'fas' %}</a> + class="btn btn-primary" id="btn-indicate-interest">{% fa5_icon 'thumbs-up' 'fas' %}</a> {% endif %} {% endif %} {% if ak.link != "" %} diff --git a/AKSubmission/views.py b/AKSubmission/views.py index b0e79389bd34047ec8981bfe57e25c350034792c..a47fe72829eca0230f77c6382a9fe89e535d392f 100644 --- a/AKSubmission/views.py +++ b/AKSubmission/views.py @@ -16,6 +16,7 @@ from AKModel.availability.models import Availability from AKModel.models import AK, AKCategory, AKTag, AKOwner, AKSlot, AKTrack, AKOrgaMessage from AKModel.views import EventSlugMixin from AKModel.views import FilterByEventSlugMixin +from AKSubmission.api import ak_interest_indication_active from AKSubmission.forms import AKWishForm, AKOwnerForm, AKEditForm, AKSubmissionForm, AKDurationForm, AKOrgaMessageForm @@ -157,6 +158,9 @@ class AKDetailView(EventSlugMixin, DetailView): context["featured_slot_remaining"] = floor(remaining.days * 24 * 60 + remaining.seconds / 60) break + # Display interest indication button? + context['interest_indication_active'] = ak_interest_indication_active(self.event, current_timestamp) + return context diff --git a/templates/base.html b/templates/base.html index 33e00beee25b2f77d704532f9a0b78490a32109d..93cb5be8091a0cc6f20490a7910baef5998c6ba8 100644 --- a/templates/base.html +++ b/templates/base.html @@ -14,7 +14,7 @@ <!-- Load bootstrap, jquery and fontawesome--> {% bootstrap_css %} - {% bootstrap_javascript jquery='slim' %} + {% bootstrap_javascript jquery='full' %} {% fontawesome_5_static %} <link rel="stylesheet" href="{% static 'common/css/custom.css' %}">