From fe9a2cc82acbe73117398310b96e5740adee502c Mon Sep 17 00:00:00 2001 From: Radek Czajka Date: Wed, 29 Aug 2012 12:21:59 +0200 Subject: [PATCH 1/1] notifications for authors --- migdal/locale/pl/LC_MESSAGES/django.mo | Bin 4009 -> 4208 bytes migdal/locale/pl/LC_MESSAGES/django.po | 58 +++++++++++-------- migdal/models.py | 56 ++++++++++++++++-- migdal/templates/migdal/mail/new_comment.txt | 15 +++++ migdal/templates/migdal/mail/published.txt | 11 ++++ 5 files changed, 112 insertions(+), 28 deletions(-) create mode 100755 migdal/templates/migdal/mail/new_comment.txt create mode 100755 migdal/templates/migdal/mail/published.txt diff --git a/migdal/locale/pl/LC_MESSAGES/django.mo b/migdal/locale/pl/LC_MESSAGES/django.mo index ab578083ddb892a9dc3150758c3a3b0563168527..5c1a08413b8fc073d01586a355c8fb5793b52763 100644 GIT binary patch delta 1495 zcmY+^T}YEr9LMpqGy^&9;4D0YdD!E;fVt#Xkz37mA@}7i}UaWF2WIH&gK(pg5y|^ zKX4o4n>uPssYs$ax`G<0A2pHNs1@ErKISQ3+-qKR>ifXXZJJP!lOZK4!DC2G!wS=K<7xhg{x_npn`~$6X%9363{`L;T*( zEK@qu-HcL&uW>Hs=Vt~ic9x@dpbE9}T`sS8HX?nRW(;5}>WKQ>@7GZG4WK4^4;SF$ zeD+@*54nmrc#!-H>V`e^qBGrxn%F5^hCQeqxPjWC0c^krSdV@h2e1LP6Q_|b%{f%R z=TQ^BJeU2~MZaq}fI5n_a}agIBh;BbclEDOD;akAJ5)a(Py>#+{3~jKzg+I;$yB}o zHSv`xE||30h+0vtvkuj8zsnCho1H<_#M+P}HLHjn#9E?|s3f$-8;K3XQeqvUMQA4$ z6ME}XHGJt+FD6u$XZY`%G0YOe5@m$8c0HjLPZzyvB`(p#b`nLzCPM!$D%x4S$|_oH zh2Hn&pB7$P9%o85Xj?bCTo1L%3_`o9qUT3P#Gem; zcYyP~b3nCXz-HVw!_mv!PrUL>9yLX zq!*6ZWM?=Yir8q7L1SJt9GV*Q`<#cqil*eVbo*2Td(w+1g3r%dZ)(gAFByz>|9?;4 H-GYffKIW?J delta 1299 zcmYk+OGs346vy#1spHI;Gi6QLV{)|8URE~h$Sk99W3~~bO}J=L1VP!RK!yT0(nf}& zL>EOMwlNrqq$q-jXcZ>W!-5c`MT;ge0!jM*W=`Ord**Y`z5n}v-a9{&6Ls0IHRU&r z(m`w|<^pCXakPvd%7=2Z=lBuF@J>akUOH%2Mc#uE?86YAcQ0cl`2g~$4I+mPxx={L zENizp33KBCs^S#t!D-xxFK{is$0*KY5B@?9>!flDyKx;}$2jJYvDyS`V3T+ZA7dN- z#UTA#io5C{gBn05YDQhiVZHoN*ZNQmo<-HW;CVl4C9e4OLDay8JRkP_mgi&cJq*#m zjq3y-@}q%FqgLdV`xe#UC-)n2*muthsDb_Qe8uw$8d+jHt8j+<0Y<4UoW&NrL}%F; zC-*r~hg0q|)C#;t&HSC`pWOvi{Q_!Bmi>C9x>P@ojKLDP0UJ^6WjsHQC&*7#v;OK} zoD15+Nz{PmaVsvOW*(&%`mi{5V*_e0FQR7t2&rmMQSH4!4RFStL)BYAZQT#I5M}-K zz;7;S4_Ev~gi&Y)G1LRKs0I_LhMGKYM$Ihk`BBfiPy_BonzS>hiS)ZyQO{k|`s>CG zH|LI^26h+OLQ4>OYj+WRHg=GxA@&k`h|NSJp-HId3((h)CiEri(^k={t}c52ic7u; zcMv;?14I*{8UHW(6qBB4U@Eo5K0^N;Dq1P+w~8jUpQt0+32o2n(m-;=>~!&(-p1WT zYcVS=y`L7BPw$4xVM5E=tb}r?gsnj>r^*&WTU1YM%P*C`4CKEAM*{iLP)ne)BiYiH dX-(y3!}USV+cT~Cof` diff --git a/migdal/locale/pl/LC_MESSAGES/django.po b/migdal/locale/pl/LC_MESSAGES/django.po index c3ab6c9..e274e8b 100644 --- a/migdal/locale/pl/LC_MESSAGES/django.po +++ b/migdal/locale/pl/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: django-migdal 0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-08-28 15:43+0200\n" -"PO-Revision-Date: 2012-08-28 16:41+0100\n" +"POT-Creation-Date: 2012-08-29 12:20+0200\n" +"PO-Revision-Date: 2012-08-29 12:21+0100\n" "Last-Translator: Radek Czajka \n" "Language-Team: FNP \n" "Language: Polish\n" @@ -47,7 +47,7 @@ msgid "latest" msgstr "ostatnie" #: feeds.py:32 -#: models.py:49 +#: models.py:52 msgid "entries" msgstr "wpisy" @@ -63,86 +63,96 @@ msgstr "Tytuł" msgid "Content" msgstr "Treść" -#: models.py:14 +#: models.py:17 msgid "taxonomy" msgstr "taksonomia" -#: models.py:18 +#: models.py:21 msgid "category" msgstr "kategoria" -#: models.py:19 -#: models.py:45 +#: models.py:22 +#: models.py:48 #: urls.py:41 #: urls.py:43 msgid "categories" msgstr "kategorie" -#: models.py:40 +#: models.py:43 msgid "author" msgstr "autor" -#: models.py:41 +#: models.py:44 msgid "author email" msgstr "e-mail autora" -#: models.py:42 +#: models.py:45 msgid "Used only to display gravatar and send notifications." msgstr "Używany tylko do wyświetlenia gravatara i wysyłania powiadomień." -#: models.py:43 +#: models.py:46 msgid "image" msgstr "obrazek" -#: models.py:44 +#: models.py:47 msgid "promoted" msgstr "promowane" -#: models.py:48 +#: models.py:51 msgid "entry" msgstr "wpis" -#: models.py:71 +#: models.py:93 +#, python-format +msgid "Your story has been published at %s." +msgstr "Twój wpis został opublikowany na stronie %s." + +#: models.py:101 msgid "needed" msgstr "potrzebne" -#: models.py:72 +#: models.py:102 msgid "Unneeded" msgstr "Niepotrzebne" -#: models.py:72 +#: models.py:102 msgid "Needed" msgstr "Potrzebne" -#: models.py:72 +#: models.py:102 msgid "Done" msgstr "Ukończone" -#: models.py:78 +#: models.py:108 msgid "title" msgstr "tytuł" -#: models.py:79 +#: models.py:109 msgid "lead" msgstr "lead" -#: models.py:80 -#: models.py:82 +#: models.py:110 +#: models.py:112 msgid "Use Textile syntax." msgstr "Włączona składnia Textile." -#: models.py:81 +#: models.py:111 msgid "body" msgstr "treść" -#: models.py:83 +#: models.py:113 msgid "published" msgstr "opublikowane" -#: models.py:88 +#: models.py:118 msgid "file" msgstr "plik" +#: models.py:136 +#, python-format +msgid "New comment under your story at %s." +msgstr "Nowy komentarz pod Twoim wpisem na stronie %s." + #: urls.py:38 #: urls.py:39 msgid "submit" diff --git a/migdal/models.py b/migdal/models.py index bce76e4..6ba28ee 100644 --- a/migdal/models.py +++ b/migdal/models.py @@ -2,13 +2,16 @@ # This file is part of PrawoKultury, licensed under GNU Affero GPLv3 or later. # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # +from django.conf import settings +from django.contrib.sites.models import Site +from django.core.mail import send_mail from django.db import models +from django.template import loader, Context from django.utils.translation import get_language, ugettext_lazy as _, ugettext +from django_comments_xtd.models import XtdComment from markupfield.fields import MarkupField -from migdal.helpers import add_translatable from migdal import app_settings - - +from migdal.helpers import add_translatable class Category(models.Model): taxonomy = models.CharField(_('taxonomy'), max_length=32, @@ -36,7 +39,7 @@ class Entry(models.Model): type = models.CharField(max_length=16, choices=((t.db, t.slug) for t in app_settings.TYPES), db_index=True) - date = models.DateTimeField(auto_now_add=True, db_index=True) + date = models.DateTimeField(auto_now_add=True, db_index=True, editable=True) author = models.CharField(_('author'), max_length=128) author_email = models.EmailField(_('author email'), max_length=128, null=True, blank=True, help_text=_('Used only to display gravatar and send notifications.')) @@ -53,6 +56,16 @@ class Entry(models.Model): return self.title def save(self, *args, **kwargs): + if self.pk is not None: + orig = type(self).objects.get(pk=self.pk) + published_now = False + for lc, ln in settings.LANGUAGES: + if (not getattr(orig, "published_%s" % lc) and + getattr(self, "published_%s" % lc)): + published_now = True + if published_now: + self.notify_author_published() + # convert blank to null for slug uniqueness check to work for lc, ln in app_settings.OPTIONAL_LANGUAGES: slug_name = "slug_%s" % lc @@ -67,6 +80,23 @@ class Entry(models.Model): def get_type(self): return dict(app_settings.TYPES_DICT)[self.type] + def notify_author_published(self): + if not self.author_email: + return + site = Site.objects.get_current() + mail_text = loader.get_template('migdal/mail/published.txt').render( + Context({ + 'entry': self, + 'site': site, + })) + send_mail( + ugettext(u'Your story has been published at %s.') % site.domain, + mail_text, settings.SERVER_EMAIL, [self.author_email] + ) + + + + add_translatable(Entry, languages=app_settings.OPTIONAL_LANGUAGES, fields={ 'needed': models.CharField(_('needed'), max_length=1, db_index=True, choices=( ('n', _('Unneeded')), ('w', _('Needed')), ('y', _('Done'))), @@ -90,3 +120,21 @@ class Attachment(models.Model): def url(self): return self.file.url if self.file else '' + + + +def notify_new_comment(sender, instance, created, **kwargs): + if (created and isinstance(instance.content_object, Entry) and + instance.content_object.author_email): + site = Site.objects.get_current() + mail_text = loader.get_template('migdal/mail/new_comment.txt').render( + Context({ + 'comment': instance, + 'site': site, + })) + send_mail( + ugettext(u'New comment under your story at %s.') % site.domain, + mail_text, settings.SERVER_EMAIL, + [instance.content_object.author_email] + ) +models.signals.post_save.connect(notify_new_comment, sender=XtdComment) \ No newline at end of file diff --git a/migdal/templates/migdal/mail/new_comment.txt b/migdal/templates/migdal/mail/new_comment.txt new file mode 100755 index 0000000..d7074c2 --- /dev/null +++ b/migdal/templates/migdal/mail/new_comment.txt @@ -0,0 +1,15 @@ +{% load i18n %}{{ comment.content_object.author }}, + +Pod Twoim wpisem pojawił się nowy komentarz. + +{% language 'pl' %}{{ comment.content_object.title }} +http://{{ site.domain }}{{ comment.get_absolute_url }}{% endlanguage %} + + +Autor: {{ comment.name }} + +{{ comment.comment }} + + +-- +{{ site }} diff --git a/migdal/templates/migdal/mail/published.txt b/migdal/templates/migdal/mail/published.txt new file mode 100755 index 0000000..b99e1f3 --- /dev/null +++ b/migdal/templates/migdal/mail/published.txt @@ -0,0 +1,11 @@ +{% load i18n %}{{ entry.author }}, + +Twój wpis został opublikowany: + +{% language 'pl' %}{{ entry.title }} +http://{{ site.domain }}{{ entry.get_absolute_url }}{% endlanguage %} + +Dziękujemy! + +-- +{{ site }} -- 2.20.1