X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/db3bea808bc78fa2d1c6d0be6e0300003f31059c..f5129e7c47fa5fcf0a20f04249b90afcbc54cb9c:/src/annoy/models.py?ds=sidebyside diff --git a/src/annoy/models.py b/src/annoy/models.py new file mode 100644 index 000000000..26b0136c7 --- /dev/null +++ b/src/annoy/models.py @@ -0,0 +1,82 @@ +from django.apps import apps +from django.conf import settings +from django.db import models +from django.utils.translation import ugettext_lazy as _ +from django.utils.timezone import now +from .places import PLACES, PLACE_CHOICES + + +class Banner(models.Model): + place = models.SlugField(choices=PLACE_CHOICES) + action_label = models.CharField( + max_length=255, blank=True, + help_text=_('') + ) + open_label = models.CharField(max_length=255, blank=True) + close_label = models.CharField(max_length=255, blank=True) + text = models.TextField() + url = models.CharField(max_length=1024) + priority = models.PositiveSmallIntegerField(default=0) + since = models.DateTimeField(null=True, blank=True) + until = models.DateTimeField(null=True, blank=True) + show_members = models.BooleanField(default=False) + staff_preview = models.BooleanField(default=False) + + class Meta: + verbose_name = _('banner') + verbose_name_plural = _('banners') + ordering = ('place', '-priority',) + + def __str__(self): + return self.text + + @classmethod + def choice(cls, place, request): + Membership = apps.get_model('club', 'Membership') + + if hasattr(request, 'annoy_banner_exempt'): + return cls.objects.none() + + if settings.DEBUG: + assert place in PLACES, "Banner place `{}` must be defined in annoy.places.".format(place) + + n = now() + banners = cls.objects.filter( + place=place + ).exclude( + since__gt=n + ).exclude( + until__lt=n + ).order_by('-priority', '?') + + if not request.user.is_staff: + banners = banners.filter(staff_preview=False) + + if request: + if Membership.is_active_for(request.user): + banners = banners.filter(show_members=True) + return banners + + +class DynamicTextInsert(models.Model): + paragraphs = models.IntegerField(_('pararaphs')) + url = models.CharField(max_length=1024) + + class Meta: + verbose_name = _('dynamic insert') + verbose_name_plural = _('dynamic inserts') + ordering = ('paragraphs', ) + + def __str__(self): + return str(self.paragraphs) + + def choose(self): + return self.dynamictextinserttext_set.order_by('?').first() + + +class DynamicTextInsertText(models.Model): + insert = models.ForeignKey(DynamicTextInsert, models.CASCADE) + background_color = models.CharField(max_length=10, blank=True) + text_color = models.CharField(max_length=10, blank=True) + text = models.TextField(_('text')) + image = models.FileField(blank=True)