From 4ed195bc95a5e5689903d9539a9d4ae7e0bdc36c Mon Sep 17 00:00:00 2001 From: "Bc. Petr Pecha" Date: Thu, 25 Aug 2016 08:35:45 +0200 Subject: [PATCH 1/8] korektury | pridani polozky autor_org Migrace autora z CharField na odkaz na Organizator Vytvoreni nove polozky, ktera odkazuje primo na Organizator --- .../0010_Pridani_odkazu_na_organizatora.py | 25 +++++++++++++++++++ korektury/models.py | 11 +++++--- 2 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 korektury/migrations/0010_Pridani_odkazu_na_organizatora.py diff --git a/korektury/migrations/0010_Pridani_odkazu_na_organizatora.py b/korektury/migrations/0010_Pridani_odkazu_na_organizatora.py new file mode 100644 index 00000000..e76d5058 --- /dev/null +++ b/korektury/migrations/0010_Pridani_odkazu_na_organizatora.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('seminar', '0041_konfery'), + ('korektury', '0009_trizeni_korektur_v_seznamu'), + ] + + operations = [ + migrations.AddField( + model_name='komentar', + name='autor_org', + field=models.ForeignKey(blank=True, to='seminar.Organizator', help_text='Autor koment\xe1\u0159e', null=True), + ), + migrations.AddField( + model_name='oprava', + name='autor_org', + field=models.ForeignKey(blank=True, to='seminar.Organizator', help_text=b'Autor opravy', null=True), + ), + ] diff --git a/korektury/models.py b/korektury/models.py index 311d5e20..933cd60e 100644 --- a/korektury/models.py +++ b/korektury/models.py @@ -7,6 +7,8 @@ from django.utils.encoding import python_2_unicode_compatible from django.utils.encoding import force_unicode from django.core.exceptions import ObjectDoesNotExist +from seminar.models import Organizator + import subprocess from reversion import revisions as reversion @@ -120,9 +122,10 @@ class Oprava(models.Model): status = models.CharField(u'stav opravy',max_length=16, choices=STATUS_CHOICES, blank=False, default = STATUS_K_OPRAVE) - - # TODO: Změnit na cizí klíč do orgů autor = models.CharField(u'autor opravy',blank = True,max_length=20, help_text='Autor opravy') + autor_org = models.ForeignKey(Organizator, blank = True, + help_text='Autor opravy', + null = True) # TODO odstranit prizvisko User, TODO null = False text = models.TextField(u'text opravy',blank = True, help_text='Text opravy') @@ -150,8 +153,10 @@ class Komentar(models.Model): cas = models.DateTimeField(u'čas komentáře',default=timezone.now,help_text = 'Čas zadání komentáře') oprava = models.ForeignKey(Oprava) - # TODO: Změnit na cizí klíč do orgů autor = models.CharField(u'autor komentáře',blank = True,max_length=20, help_text='Autor komentáře') + autor_org = models.ForeignKey(Organizator, blank = True, + help_text = u'Autor komentáře', + null = True) # TODO odstranit prizvisko User, TODO null = False text = models.TextField(u'text komentáře',blank = True, help_text='Text komentáře') From 66c294c920359cab25b6bfc8f964821da8bb4709 Mon Sep 17 00:00:00 2001 From: "Bc. Petr Pecha" Date: Thu, 25 Aug 2016 09:04:39 +0200 Subject: [PATCH 2/8] korektury | data migrace autor -> autor_org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Migrace autora z CharField na odkaz na Organizator Datova migrace: hledani objektu Organizatora, ktery patri ke korekture nebo diskuznimu prispevku. Pokud neni organizator nalezeny tak je SMAZÁN. --- ...revod_autora_z_charField_na_Organizator.py | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 korektury/migrations/0011_prevod_autora_z_charField_na_Organizator.py diff --git a/korektury/migrations/0011_prevod_autora_z_charField_na_Organizator.py b/korektury/migrations/0011_prevod_autora_z_charField_na_Organizator.py new file mode 100644 index 00000000..dc57088d --- /dev/null +++ b/korektury/migrations/0011_prevod_autora_z_charField_na_Organizator.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + +def transform_autor(apps, schema_editor): + print + Organizator = apps.get_model('seminar', 'Organizator') + + # preorgovani oprav + Oprava = apps.get_model('korektury', 'Oprava') + for oprava in Oprava.objects.all(): + jmeno = oprava.autor.split() + if len(jmeno) == 2: + try: + org = Organizator.objects.get(user__first_name=jmeno[0], + user__last_name=jmeno[1]) + oprava.autor_org = org + oprava.save() + print "{} uložen".format(oprava.autor) + except: + print "Org nenalezen -- mažu korekturu" +# oprava.delete() + else: + print "Org nenalezen -- mažu korekturu" + oprava.delete() + + # preorgovani komentaru + Komentar = apps.get_model('korektury', 'Komentar') + for komentar in Komentar.objects.all(): + jmeno = komentar.autor.split() + if len(jmeno) == 2: + try: + org = Organizator.objects.get(user__first_name=jmeno[0], + user__last_name=jmeno[1]) + komentar.autor_org = org + komentar.save() + print "{} uložen".format(oprava.autor) + except: + print "Org nenalezen -- mažu korekturu" +# oprava.delete() + else: + print "Org nenalezen -- mažu korekturu" + komentar.delete() + +def back(apps, schema_editor): + pass + + +class Migration(migrations.Migration): + + dependencies = [ + ('korektury', '0010_Pridani_odkazu_na_organizatora'), + ] + + operations = [ + migrations.RunPython(transform_autor, back), + ] From eef276f04b9cbee965e822be2635e9c291506c09 Mon Sep 17 00:00:00 2001 From: "Bc. Petr Pecha" Date: Thu, 25 Aug 2016 09:07:31 +0200 Subject: [PATCH 3/8] korektury | odstraneni autora CharField Migrace autora z CharField na odkaz na Organizator Odstraneni stareho CharFieldu --- korektury/migrations/0012_delete_autor.py | 22 ++++++++++++++++++++++ korektury/models.py | 2 -- 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 korektury/migrations/0012_delete_autor.py diff --git a/korektury/migrations/0012_delete_autor.py b/korektury/migrations/0012_delete_autor.py new file mode 100644 index 00000000..4f41a955 --- /dev/null +++ b/korektury/migrations/0012_delete_autor.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('korektury', '0011_prevod_autora_z_charField_na_Organizator'), + ] + + operations = [ + migrations.RemoveField( + model_name='komentar', + name='autor', + ), + migrations.RemoveField( + model_name='oprava', + name='autor', + ), + ] diff --git a/korektury/models.py b/korektury/models.py index 933cd60e..83881e6c 100644 --- a/korektury/models.py +++ b/korektury/models.py @@ -122,7 +122,6 @@ class Oprava(models.Model): status = models.CharField(u'stav opravy',max_length=16, choices=STATUS_CHOICES, blank=False, default = STATUS_K_OPRAVE) - autor = models.CharField(u'autor opravy',blank = True,max_length=20, help_text='Autor opravy') autor_org = models.ForeignKey(Organizator, blank = True, help_text='Autor opravy', null = True) # TODO odstranit prizvisko User, TODO null = False @@ -153,7 +152,6 @@ class Komentar(models.Model): cas = models.DateTimeField(u'čas komentáře',default=timezone.now,help_text = 'Čas zadání komentáře') oprava = models.ForeignKey(Oprava) - autor = models.CharField(u'autor komentáře',blank = True,max_length=20, help_text='Autor komentáře') autor_org = models.ForeignKey(Organizator, blank = True, help_text = u'Autor komentáře', null = True) # TODO odstranit prizvisko User, TODO null = False From 7aa5f72e7dfb738f2600ebcae2712d2725e722f7 Mon Sep 17 00:00:00 2001 From: "Bc. Petr Pecha" Date: Thu, 25 Aug 2016 09:18:00 +0200 Subject: [PATCH 4/8] korektury | prejmenovani autor_org zpet na autor Migrace autora z CharField na odkaz na Organizator Prejmenovani autor_org zpet na autor Oprava i Komentar maji zase jenom polozku autor, ktera ukazuje na Organizatora --- korektury/migrations/0013_rename_autor_org.py | 24 +++++++++++++++++++ korektury/models.py | 8 +++---- 2 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 korektury/migrations/0013_rename_autor_org.py diff --git a/korektury/migrations/0013_rename_autor_org.py b/korektury/migrations/0013_rename_autor_org.py new file mode 100644 index 00000000..db0d3151 --- /dev/null +++ b/korektury/migrations/0013_rename_autor_org.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('korektury', '0012_delete_autor'), + ] + + operations = [ + migrations.RenameField( + model_name='komentar', + old_name='autor_org', + new_name='autor', + ), + migrations.RenameField( + model_name='oprava', + old_name='autor_org', + new_name='autor', + ), + ] diff --git a/korektury/models.py b/korektury/models.py index 83881e6c..fb83b5ff 100644 --- a/korektury/models.py +++ b/korektury/models.py @@ -122,9 +122,9 @@ class Oprava(models.Model): status = models.CharField(u'stav opravy',max_length=16, choices=STATUS_CHOICES, blank=False, default = STATUS_K_OPRAVE) - autor_org = models.ForeignKey(Organizator, blank = True, + autor = models.ForeignKey(Organizator, blank = True, help_text='Autor opravy', - null = True) # TODO odstranit prizvisko User, TODO null = False + null = True) text = models.TextField(u'text opravy',blank = True, help_text='Text opravy') @@ -152,9 +152,9 @@ class Komentar(models.Model): cas = models.DateTimeField(u'čas komentáře',default=timezone.now,help_text = 'Čas zadání komentáře') oprava = models.ForeignKey(Oprava) - autor_org = models.ForeignKey(Organizator, blank = True, + autor = models.ForeignKey(Organizator, blank = True, help_text = u'Autor komentáře', - null = True) # TODO odstranit prizvisko User, TODO null = False + null = True) text = models.TextField(u'text komentáře',blank = True, help_text='Text komentáře') From ff9a207bfb9264f9c4e55ccc0546174e09b9c942 Mon Sep 17 00:00:00 2001 From: "Bc. Petr Pecha" Date: Thu, 25 Aug 2016 12:08:07 +0200 Subject: [PATCH 5/8] korektury | prirazeni autora podle prihlaseni kdyz prihlaseny neni organizator vrati 403 --- korektury/views.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/korektury/views.py b/korektury/views.py index d6d126e4..50636831 100644 --- a/korektury/views.py +++ b/korektury/views.py @@ -3,8 +3,9 @@ from django.shortcuts import get_object_or_404, render from django.views import generic from django.utils.translation import ugettext as _ from django.conf import settings +from django.http import HttpResponseForbidden -from .models import Oprava,Komentar,KorekturovanePDF +from .models import Oprava,Komentar,KorekturovanePDF, Organizator from .forms import OpravaForm import subprocess @@ -29,14 +30,17 @@ class KorekturyView(generic.TemplateView): form = self.form_class(request.POST) q = request.POST scroll = q.get('scroll') - autor = q.get('au') + # prirazeni autora podle prihlaseni + autor_user = request.user + # pokud existuje ucet (user), ale neni to organizator = 403 + autor = Organizator.objects.filter(user=autor_user).first() if not autor: - autor = 'anonym' + return HttpResponseForbidden() + if not scroll: scroll = 0 - action = q.get('action') if (action == u''): # Přidej x = int(q.get('x')) @@ -141,6 +145,7 @@ class KorekturyView(generic.TemplateView): context['opravy'] = opravy context['zasluhy'] = zasluhy return context + def form_valid(self,form): return super(KorekturyView,self).form_valid(form) From 46cd63f6212222547c5e199c51a50404f82421a1 Mon Sep 17 00:00:00 2001 From: "Bc. Petr Pecha" Date: Thu, 25 Aug 2016 12:08:52 +0200 Subject: [PATCH 6/8] =?UTF-8?q?korektury=20|=20=C4=8D=C3=A1rky=20mezi=20op?= =?UTF-8?q?ravuj=C3=ADc=C3=ADma?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- korektury/templates/korektury/opraf.html | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/korektury/templates/korektury/opraf.html b/korektury/templates/korektury/opraf.html index 83c997ab..04cfc2de 100644 --- a/korektury/templates/korektury/opraf.html +++ b/korektury/templates/korektury/opraf.html @@ -82,7 +82,10 @@

- Děkujeme opravovatelům: {% for autor,pocet in zasluhy.items %} {{autor}}({{pocet}}) {% endfor %}

+ Děkujeme opravovatelům: + {% for autor,pocet in zasluhy.items %} + {{autor}} ({{pocet}}){% if not forloop.last %},{% endif %} + {% endfor %}


{% for o in opravy %} From f0e7fac79f34b96ca43fa62a51c117bb6fe84850 Mon Sep 17 00:00:00 2001 From: "Bc. Petr Pecha" Date: Thu, 8 Sep 2016 14:34:00 +0200 Subject: [PATCH 7/8] =?UTF-8?q?korektury=20|=20posilani=20email=C5=AF=20na?= =?UTF-8?q?=20komentare?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- korektury/views.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/korektury/views.py b/korektury/views.py index 50636831..0d58d2c2 100644 --- a/korektury/views.py +++ b/korektury/views.py @@ -4,6 +4,7 @@ from django.views import generic from django.utils.translation import ugettext as _ from django.conf import settings from django.http import HttpResponseForbidden +from django.core.mail import send_mail from .models import Oprava,Komentar,KorekturovanePDF, Organizator from .forms import OpravaForm @@ -83,6 +84,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, text) elif (action == u'update-comment'): id = int(q.get('id')) kom = Komentar.objects.get(id=id) @@ -116,6 +118,29 @@ class KorekturyView(generic.TemplateView): context['autor'] = autor return render(request, 'korektury/opraf.html',context) + def send_email_notification_komentar(self, oprava, autor, text): + ''' Rozesle e-mail pri pridani komentare, + ktery obsahuje text komentare. + ''' + + # parametry e-mailu + from_email = 'korekturovatko@mam.mff.cuni.cz' + subject = u'Nová korektura od {}'.format(autor) + text = u"Text komentáře:\n\n{}\n\n=== Konec textu komentáře ===\n\ + \nVaše korekturovátko\n".format(text) + + # Prijemci e-mailu + emails = set() + email = oprava.autor.user.email + if email: + emails.add(email) + for komentar in oprava.komentar_set.all(): + email = komentar.autor.user.email + if email: + emails.add(email) + + send_mail(subject, text, from_email, list(emails)) + def get_context_data(self, **kwargs): context = super(KorekturyView,self).get_context_data(**kwargs) pdf = get_object_or_404(KorekturovanePDF, id=self.kwargs['pdf']) From 13d2a57ebc84651629ee5f5cad61aa61d992f6d9 Mon Sep 17 00:00:00 2001 From: "Bc. Petr Pecha" Date: Thu, 8 Sep 2016 14:35:24 +0200 Subject: [PATCH 8/8] korektury | oprava vypisu --- .../migrations/0011_prevod_autora_z_charField_na_Organizator.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/korektury/migrations/0011_prevod_autora_z_charField_na_Organizator.py b/korektury/migrations/0011_prevod_autora_z_charField_na_Organizator.py index dc57088d..dddb07be 100644 --- a/korektury/migrations/0011_prevod_autora_z_charField_na_Organizator.py +++ b/korektury/migrations/0011_prevod_autora_z_charField_na_Organizator.py @@ -17,7 +17,6 @@ def transform_autor(apps, schema_editor): user__last_name=jmeno[1]) oprava.autor_org = org oprava.save() - print "{} uložen".format(oprava.autor) except: print "Org nenalezen -- mažu korekturu" # oprava.delete() @@ -35,7 +34,6 @@ def transform_autor(apps, schema_editor): user__last_name=jmeno[1]) komentar.autor_org = org komentar.save() - print "{} uložen".format(oprava.autor) except: print "Org nenalezen -- mažu korekturu" # oprava.delete()