|
|
|
|
@ -14,6 +14,9 @@ from country.models import Country |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class URL(models.Model): |
|
|
|
|
""" |
|
|
|
|
Model for urls or regex urls that can be used in banners representation |
|
|
|
|
""" |
|
|
|
|
title = models.CharField(verbose_name=u'Заголовок', max_length=256) |
|
|
|
|
url = models.CharField(verbose_name=u'URL or URL RegEx', max_length=2048) |
|
|
|
|
regex = models.BooleanField(verbose_name=u'RegEx', default=False) |
|
|
|
|
@ -39,6 +42,9 @@ class URL(models.Model): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class BannerGroup (models.Model): |
|
|
|
|
""" |
|
|
|
|
place where banner can be show |
|
|
|
|
""" |
|
|
|
|
name = models.CharField(verbose_name=u'Имя', max_length=255) |
|
|
|
|
slug = models.SlugField(verbose_name=u'URL', unique=True) |
|
|
|
|
width = models.PositiveSmallIntegerField(verbose_name=u'Ширина', default=0) |
|
|
|
|
@ -68,6 +74,9 @@ class BannerGroup (models.Model): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Banner(models.Model, StatMixin): |
|
|
|
|
""" |
|
|
|
|
Uses for store information about banners. Also can be used as tracked link |
|
|
|
|
""" |
|
|
|
|
objects = BiasedManager() |
|
|
|
|
|
|
|
|
|
title = models.CharField(verbose_name=u'Заголовок', max_length=255, blank=True) |
|
|
|
|
@ -78,12 +87,10 @@ class Banner(models.Model, StatMixin): |
|
|
|
|
url = models.CharField(verbose_name=u'URL', max_length=1024) |
|
|
|
|
fr = models.DateField(default=date.today()) |
|
|
|
|
to = models.DateField(blank=True, null=True) |
|
|
|
|
|
|
|
|
|
theme = models.ManyToManyField(Theme, blank=True, null=True, verbose_name=u'Тематика') |
|
|
|
|
country = models.ManyToManyField(Country, blank=True, null=True, verbose_name=u'Страна') |
|
|
|
|
|
|
|
|
|
sort = models.PositiveSmallIntegerField(verbose_name=u'Сорт', default=500) |
|
|
|
|
|
|
|
|
|
group = models.ForeignKey(BannerGroup, related_name='banners', verbose_name=u'Место', null=True, blank=True) |
|
|
|
|
often = models.PositiveSmallIntegerField( |
|
|
|
|
verbose_name=_('Often'), |
|
|
|
|
@ -104,25 +111,29 @@ class Banner(models.Model, StatMixin): |
|
|
|
|
public = models.BooleanField(verbose_name=u'Активный', default=True) |
|
|
|
|
created_at = models.DateTimeField(verbose_name=_('Created At'), auto_now_add=True) |
|
|
|
|
updated_at = models.DateTimeField(verbose_name=_('Updated At'), auto_now=True) |
|
|
|
|
|
|
|
|
|
# password for clients |
|
|
|
|
stat_pswd = models.CharField(max_length=16) |
|
|
|
|
|
|
|
|
|
class Meta: |
|
|
|
|
ordering = ['-public'] |
|
|
|
|
|
|
|
|
|
def get_admin_url(self): |
|
|
|
|
return '/admin/expobanners/banners/banner/%d/edit/'%self.id |
|
|
|
|
return '/admin/expobanners/banners/banner/%d/edit/' % self.id |
|
|
|
|
|
|
|
|
|
def key(slef): |
|
|
|
|
@property |
|
|
|
|
def key(self): |
|
|
|
|
if hasattr(settings, 'SECRET_KEY'): |
|
|
|
|
key = str(datetime.now()) + settings.SECRET_KEY |
|
|
|
|
else: |
|
|
|
|
key = str(datetime.now()) |
|
|
|
|
return hashlib.md5(key).hexdigest() |
|
|
|
|
|
|
|
|
|
def log(self, request, type): |
|
|
|
|
def log(self, request, t): |
|
|
|
|
""" |
|
|
|
|
creating log by request |
|
|
|
|
""" |
|
|
|
|
log = { |
|
|
|
|
'type': type, |
|
|
|
|
'type': t, |
|
|
|
|
'banner': self, |
|
|
|
|
'group': self.group, |
|
|
|
|
'ip': request.META.get('REMOTE_ADDR'), |
|
|
|
|
@ -169,6 +180,9 @@ class Banner(models.Model, StatMixin): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Log(models.Model): |
|
|
|
|
""" |
|
|
|
|
store information about showing and clicking of banners |
|
|
|
|
""" |
|
|
|
|
banner = models.ForeignKey(Banner, related_name='banner_logs') |
|
|
|
|
group = models.ForeignKey(BannerGroup, related_name='group_logs', verbose_name=_('Group'), blank=True, null=True) |
|
|
|
|
urls = models.ManyToManyField(URL, related_name='url_logs', verbose_name=_('URLs'), blank=True) |
|
|
|
|
@ -192,6 +206,9 @@ class Log(models.Model): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class LogStat(models.Model): |
|
|
|
|
""" |
|
|
|
|
store aggregated data of logs |
|
|
|
|
""" |
|
|
|
|
banner = models.ForeignKey(Banner, related_name='banner_stat', verbose_name=_('Banner'), blank=True) |
|
|
|
|
group = models.ForeignKey(BannerGroup, related_name='group_stat', verbose_name=_('Group'), blank=True, null=True) |
|
|
|
|
urls = models.ManyToManyField(URL, related_name='url_bloks', verbose_name=_('URLs'), null=True, blank=True) |
|
|
|
|
@ -211,6 +228,9 @@ class LogStat(models.Model): |
|
|
|
|
|
|
|
|
|
# ------------------ |
|
|
|
|
class Paid(models.Model, StatMixin): |
|
|
|
|
""" |
|
|
|
|
store information about paid events |
|
|
|
|
""" |
|
|
|
|
tickets = models.ForeignKey(Banner, related_name='paid_tickets') |
|
|
|
|
participation = models.ForeignKey(Banner, related_name='paid_participation') |
|
|
|
|
official = models.ForeignKey(Banner, related_name='paid_official') |
|
|
|
|
@ -233,6 +253,9 @@ class Paid(models.Model, StatMixin): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PaidStat(models.Model): |
|
|
|
|
""" |
|
|
|
|
aggregated data of paid logs |
|
|
|
|
""" |
|
|
|
|
paid = models.ForeignKey(Paid) |
|
|
|
|
date = models.DateField(verbose_name=_('Date')) |
|
|
|
|
page_views = models.PositiveIntegerField(default=0) |
|
|
|
|
@ -248,6 +271,9 @@ class PaidStat(models.Model): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Top(models.Model, StatMixin): |
|
|
|
|
""" |
|
|
|
|
store information about events in top |
|
|
|
|
""" |
|
|
|
|
link = models.ForeignKey(Banner) |
|
|
|
|
catalog = models.CharField(max_length=16, verbose_name=u'Каталог для топа') |
|
|
|
|
position = models.PositiveIntegerField(blank=True, default=2, null=True, verbose_name=u'Позиция') |
|
|
|
|
@ -273,6 +299,9 @@ class Top(models.Model, StatMixin): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TopStat(models.Model): |
|
|
|
|
""" |
|
|
|
|
aggregated data of logs events in top |
|
|
|
|
""" |
|
|
|
|
date = models.DateField() |
|
|
|
|
theme = models.ForeignKey('theme.Theme', blank=True, null=True) |
|
|
|
|
tag = models.ForeignKey('theme.Tag', blank=True, null=True) |
|
|
|
|
@ -283,6 +312,9 @@ class TopStat(models.Model): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class MainPage(models.Model, StatMixin): |
|
|
|
|
""" |
|
|
|
|
events on main page info |
|
|
|
|
""" |
|
|
|
|
link = models.ForeignKey(Banner) |
|
|
|
|
position = models.PositiveIntegerField(blank=True, default=2, null=True, verbose_name=u'Позиция') |
|
|
|
|
public = models.BooleanField(default=True, verbose_name=u'Активная') |
|
|
|
|
@ -331,4 +363,4 @@ def generate_stat_pass(sender, **kwargs): |
|
|
|
|
|
|
|
|
|
post_save.connect(generate_stat_pass, sender=Banner) |
|
|
|
|
post_save.connect(generate_stat_pass, sender=Paid) |
|
|
|
|
post_save.connect(generate_stat_pass, sender=Top) |
|
|
|
|
post_save.connect(generate_stat_pass, sender=Top) |