diff --git a/korektury/utils.py b/korektury/utils.py new file mode 100644 index 00000000..e7a3bc62 --- /dev/null +++ b/korektury/utils.py @@ -0,0 +1,57 @@ +from django.core.mail import EmailMessage +from django.http import HttpRequest +from django.urls import reverse + +from korektury.models import Komentar, Oprava +from personalni.models import Organizator + + +def send_email_notification_komentar(oprava: Oprava, autor: Organizator, request: HttpRequest): + ''' Rozesle e-mail pri pridani komentare / opravy, + ktery obsahuje text vlakna opravy. + ''' + + # parametry e-mailu + #odkaz = "https://mam.mff.cuni.cz/korektury/{}/".format(oprava.pdf.pk) + odkaz = request.build_absolute_uri(reverse('korektury', kwargs={'pdf': oprava.pdf.pk})) + odkaz = f"{odkaz}#op{oprava.id}-pointer" + from_email = 'korekturovatko@mam.mff.cuni.cz' + subject = 'Nová korektura od {} v {}'.format(autor, oprava.pdf.nazev) + texty = [(oprava.autor.osoba.plne_jmeno(),oprava.text)] + for kom in Komentar.objects.filter(oprava=oprava): + texty.append((kom.autor.osoba.plne_jmeno(),kom.text)) + optext = "\n\n\n".join([": ".join(t) for t in texty]) + text = u"Text komentáře:\n\n{}\n\n=== Konec textu komentáře ===\n\ + \nodkaz do korekturovátka: {}\n\ + \nVaše korekturovátko\n".format(optext, odkaz) + + # Prijemci e-mailu + emails = set() + # e-mail autora korektury + email = oprava.autor.osoba.email + if email: + emails.add(email) + + # nalezeni e-mailu na autory komentaru + for komentar in oprava.komentar_set.all(): + email_komentujiciho = komentar.autor.osoba.email + if email_komentujiciho: + emails.add(email_komentujiciho) + + # zodpovedni orgove + for org in oprava.pdf.orgove.all(): + email_zobpovedny = org.osoba.email + if email_zobpovedny: + emails.add(email_zobpovedny) + + # odstran e-mail autora opravy + email = autor.osoba.email + if email: + emails.discard(email) + + EmailMessage( + subject=subject, + body=text, + from_email=from_email, + to=list(emails), + ).send() diff --git a/korektury/views.py b/korektury/views.py index a89f9a79..9c52b20e 100644 --- a/korektury/views.py +++ b/korektury/views.py @@ -2,9 +2,9 @@ from django.shortcuts import get_object_or_404, render from django.views import generic from django.conf import settings from django.http import HttpResponseForbidden -from django.core.mail import EmailMessage from django.db.models import Count,Q +from .utils import send_email_notification_komentar from .models import Oprava,Komentar,KorekturovanePDF, Organizator class KorekturyListView(generic.ListView): @@ -82,7 +82,7 @@ class KorekturyView(generic.TemplateView): op = Oprava(x=x,y=y, autor=autor, text=text, strana=strana, pdf=self.pdf) op.save() - self.send_email_notification_komentar(op,autor) + send_email_notification_komentar(op, autor, request) elif (action == 'del'): id = int(q.get('id')) op = Oprava.objects.get(id=id) @@ -105,7 +105,7 @@ class KorekturyView(generic.TemplateView): text = q.get('txt') kom = Komentar(oprava=op,autor=autor,text=text) kom.save() - self.send_email_notification_komentar(op,autor) + send_email_notification_komentar(op, autor, request) elif (action == 'update-comment'): id = int(q.get('id')) kom = Komentar.objects.get(id=id) @@ -127,57 +127,6 @@ class KorekturyView(generic.TemplateView): context['autor'] = autor return render(request, 'korektury/opraf.html',context) - def send_email_notification_komentar(self, oprava, autor): - ''' Rozesle e-mail pri pridani komentare / opravy, - ktery obsahuje text vlakna opravy. - ''' - - # parametry e-mailu - #odkaz = "https://mam.mff.cuni.cz/korektury/{}/".format(oprava.pdf.pk) - from django.urls import reverse - odkaz = self.request.build_absolute_uri(reverse('korektury', kwargs={'pdf': oprava.pdf.pk})) - odkaz = f"{odkaz}#op{oprava.id}-pointer" - from_email = 'korekturovatko@mam.mff.cuni.cz' - subject = 'Nová korektura od {} v {}'.format(autor, oprava.pdf.nazev) - texty = [(oprava.autor.osoba.plne_jmeno(),oprava.text)] - for kom in Komentar.objects.filter(oprava=oprava): - texty.append((kom.autor.osoba.plne_jmeno(),kom.text)) - optext = "\n\n\n".join([": ".join(t) for t in texty]) - text = u"Text komentáře:\n\n{}\n\n=== Konec textu komentáře ===\n\ - \nodkaz do korekturovátka: {}\n\ - \nVaše korekturovátko\n".format(optext, odkaz) - - # Prijemci e-mailu - emails = set() - # e-mail autora korektury - email = oprava.autor.osoba.email - if email: - emails.add(email) - - # nalezeni e-mailu na autory komentaru - for komentar in oprava.komentar_set.all(): - email_komentujiciho = komentar.autor.osoba.email - if email_komentujiciho: - emails.add(email_komentujiciho) - - # zodpovedni orgove - for org in oprava.pdf.orgove.all(): - email_zobpovedny = org.osoba.email - if email_zobpovedny: - emails.add(email_zobpovedny) - - # odstran e-mail autora opravy - email = autor.osoba.email - if email: - emails.discard(email) - - EmailMessage( - subject=subject, - body=text, - from_email=from_email, - to=list(emails), - ).send() - def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['pdf'] = self.pdf