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()