X-Git-Url: https://git.mdrn.pl/django-migdal.git/blobdiff_plain/734cd58d3f12c5397b42c1ae122c947500386014..402a579c119c6494404699aa6e21b16579ca278b:/migdal/models.py diff --git a/migdal/models.py b/migdal/models.py index 54091e4..3ab375d 100644 --- a/migdal/models.py +++ b/migdal/models.py @@ -2,18 +2,20 @@ # This file is part of PrawoKultury, licensed under GNU Affero GPLv3 or later. # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # +import re from datetime import datetime from django.conf import settings +from django.contrib.comments.signals import comment_will_be_posted from django.contrib.sites.models import Site from django.core.exceptions import ValidationError -from django.core.mail import send_mail +from django.core.mail import mail_managers, 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 import app_settings from fnpdjango.utils.models.translation import add_translatable +from migdal import app_settings from migdal.fields import SlugNullField class Category(models.Model): @@ -49,7 +51,9 @@ class Entry(models.Model): help_text=_('Used only to display gravatar and send notifications.')) image = models.ImageField(_('image'), upload_to='entry/image/', null=True, blank=True) promo = models.BooleanField(_('promoted'), default=False) + in_stream = models.BooleanField(_('in stream'), default=True) categories = models.ManyToManyField(Category, null=True, blank=True, verbose_name=_('categories')) + first_published_at = models.DateTimeField(_('published at'), null=True, blank=True) class Meta: verbose_name = _('entry') @@ -60,17 +64,18 @@ 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 (getattr(self, "published_%s" % lc) - and getattr(self, "published_at_%s" % lc) is None): - setattr(self, "published_at_%s" % lc, datetime.now()) + published_now = False + for lc, ln in settings.LANGUAGES: + if (getattr(self, "published_%s" % lc) + and getattr(self, "published_at_%s" % lc) is None): + now = datetime.now() + setattr(self, "published_at_%s" % lc, now) + if self.first_published_at is None: + self.first_published_at = now published_now = True - if published_now: - self.notify_author_published() super(Entry, self).save(*args, **kwargs) + if published_now and self.pk is not None: + self.notify_author_published() def clean(self): for lc, ln in settings.LANGUAGES: @@ -100,6 +105,12 @@ class Entry(models.Model): mail_text, settings.SERVER_EMAIL, [self.author_email] ) + def inline_html(self): + for att in self.attachment_set.all(): + if att.file.name.endswith(".html"): + with open(att.file.path) as f: + yield f.read() + add_translatable(Entry, languages=app_settings.OPTIONAL_LANGUAGES, fields={ 'needed': models.CharField(_('needed'), max_length=1, db_index=True, choices=( @@ -142,4 +153,19 @@ def notify_new_comment(sender, instance, created, **kwargs): 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 +models.signals.post_save.connect(notify_new_comment, sender=XtdComment) + + +def spamfilter(sender, comment, **kwargs): + """Very simple spam filter. Just don't let any HTML links go through.""" + if re.search(r"