diff --git a/korektury/api/views.py b/korektury/api/views.py index 8bb610f0..bb184a81 100644 --- a/korektury/api/views.py +++ b/korektury/api/views.py @@ -58,7 +58,39 @@ class OpravaSerializer(serializers.ModelSerializer): # komentar_set = serializers.ListField(child=KomentarSerializer()) def opravy_a_komentare_view(request, pdf_id: int, **kwargs): - q = request.POST + if request.method == 'POST': + q = request.POST + + x = int(q.get('x')) + y = int(q.get('y')) + img_id = int(q.get('img_id')) + oprava_id = int(q.get('oprava_id')) + komentar_id = int(q.get('komentar_id')) + text = q.get('text') + + # prirazeni autora podle prihlaseni + autor_user = request.user + # pokud existuje ucet (user), ale neni to organizator = 403 + autor = Organizator.objects.filter(osoba__user=autor_user).first() + + if komentar_id != -1: + komentar = get_object_or_404(Komentar, id=komentar_id) + komentar.text = text + komentar.autor = autor + komentar.save() + else: + if oprava_id != -1: + oprava = get_object_or_404(Oprava, id=oprava_id) + else: + pdf = get_object_or_404(KorekturovanePDF, id=pdf_id) + oprava = Oprava.objects.create( + pdf=pdf, + strana=img_id, + x=x, + y=y, + ) + Komentar.objects.create(oprava=oprava, autor=autor, text=text) + opravy = Oprava.objects.filter(pdf=pdf_id).all() # Serializovat list je prý security vulnerability, tedy je přidán slovník pro bezpečnost diff --git a/korektury/templates/korektury/korekturovatko/__edit_komentar.html b/korektury/templates/korektury/korekturovatko/__edit_komentar.html index 8d5b1771..12041709 100644 --- a/korektury/templates/korektury/korekturovatko/__edit_komentar.html +++ b/korektury/templates/korektury/korekturovatko/__edit_komentar.html @@ -1,64 +1,75 @@ diff --git a/korektury/templates/korektury/korekturovatko/__komentar.html b/korektury/templates/korektury/korekturovatko/__komentar.html index 4cf4b3a1..ed87ba40 100644 --- a/korektury/templates/korektury/korekturovatko/__komentar.html +++ b/korektury/templates/korektury/korekturovatko/__komentar.html @@ -74,7 +74,7 @@ // show comment form when 'update-comment' button pressed #update_comment() { - return show_form(this.oprava.img_id, this.oprava.x, this.oprava.y, this.id, this.#text.textContent, 'update-comment'); + return commform.show(this.oprava.img_id, this.oprava.x, this.oprava.y, this.#text.textContent, -1, this.id); } #delete_comment() { diff --git a/korektury/templates/korektury/korekturovatko/__oprava.html b/korektury/templates/korektury/korekturovatko/__oprava.html index 442aae06..bb330713 100644 --- a/korektury/templates/korektury/korekturovatko/__oprava.html +++ b/korektury/templates/korektury/korekturovatko/__oprava.html @@ -121,7 +121,7 @@ } // show comment form, when 'comment' button pressed - #comment() { return show_form(this.img_id, this.x, this.y, this.id, "", "comment"); } + #comment() { commform.show(this.img_id, this.x, this.y, "", this.id); } #zmenStavKorektury(event) { const data = new FormData(CSRF_FORM); diff --git a/korektury/templates/korektury/korekturovatko/__stranky.html b/korektury/templates/korektury/korekturovatko/__stranky.html index b6f9932b..89bcd60c 100644 --- a/korektury/templates/korektury/korekturovatko/__stranky.html +++ b/korektury/templates/korektury/korekturovatko/__stranky.html @@ -43,8 +43,8 @@ dx = ev.offsetX; dy = ev.offsetY; } - const img_id = image.id; - return show_form(img_id, dx, dy, '', '', ''); + const img_id = image.id.substring(4); + commform.show(img_id, dx, dy, ''); }); } diff --git a/korektury/templates/korektury/korekturovatko/_main.html b/korektury/templates/korektury/korekturovatko/_main.html index 25ed71fb..96d91b17 100644 --- a/korektury/templates/korektury/korekturovatko/_main.html +++ b/korektury/templates/korektury/korekturovatko/_main.html @@ -11,12 +11,14 @@ * * @param {RequestInit} data * @param {Boolean} catchError + * @param pri_uspechu Akce, která se má provést při úspěchu (speciálně zavřít formulář) */ - function update_all(data={}, catchError=true) { // FIXME není mi jasné, zda v {} nemá být `cache: "no-store"`, aby prohlížeč necachoval GET. + function update_all(data={}, catchError=true, pri_uspechu=null) { // FIXME není mi jasné, zda v {} nemá být `cache: "no-store"`, aby prohlížeč necachoval GET. fetch('{% url "korektury_api_opravy_a_komentare" pdf.id %}', data) .then(response => { if (!response.ok && catchError) {alert('Něco se nepovedlo:' + response.statusText);} else response.json().then(data => { + if (pri_uspechu) pri_uspechu(); for (const oprava_data of data["context"]) { const oprava = Oprava.update_or_create(oprava_data); for (const komentar_data of oprava_data["komentare"]) {