|
|
|
|
@ -1,21 +1,22 @@ |
|
|
|
|
# -*- coding: utf-8 -*- |
|
|
|
|
import hashlib |
|
|
|
|
from datetime import datetime |
|
|
|
|
from datetime import datetime, date |
|
|
|
|
|
|
|
|
|
from django.db import models |
|
|
|
|
from django.utils.translation import ugettext_lazy as _ |
|
|
|
|
from django.conf import settings |
|
|
|
|
from django.contrib.sites.models import Site |
|
|
|
|
|
|
|
|
|
from .managers import BiasedManager |
|
|
|
|
from .managers import BiasedManager, BannerGroupCached |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class URL(models.Model): |
|
|
|
|
title = models.CharField(verbose_name=_('Title'), max_length=256) |
|
|
|
|
url = models.CharField(verbose_name=_('URL or URL RegEx'), max_length=2048) |
|
|
|
|
regex = models.BooleanField(verbose_name=_('RegEx'), default=False) |
|
|
|
|
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) |
|
|
|
|
sites = models.ManyToManyField(Site, related_name='site_urls', verbose_name=_('Sites'), null=True, blank=True) |
|
|
|
|
|
|
|
|
|
public = models.BooleanField(verbose_name=_('Public'), default=True) |
|
|
|
|
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) |
|
|
|
|
|
|
|
|
|
@ -27,17 +28,21 @@ class URL(models.Model): |
|
|
|
|
verbose_name = _('URL') |
|
|
|
|
verbose_name_plural = _('URLs') |
|
|
|
|
|
|
|
|
|
def get_admin_url(self): |
|
|
|
|
return '/admin/expobanners/banners/url/%d/edit/'%self.id |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class BannerGroup (models.Model): |
|
|
|
|
name = models.CharField(verbose_name=_('Name'), max_length=255) |
|
|
|
|
slug = models.SlugField(verbose_name=_('Slug'), unique=True) |
|
|
|
|
width = models.PositiveSmallIntegerField(verbose_name=_('Width'), default=0) |
|
|
|
|
height = models.PositiveSmallIntegerField(verbose_name=_('Height'), default=0) |
|
|
|
|
speed = models.PositiveSmallIntegerField(verbose_name=_('Speed'), default=2000) |
|
|
|
|
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) |
|
|
|
|
height = models.PositiveSmallIntegerField(verbose_name=u'Высота', default=0) |
|
|
|
|
speed = models.PositiveSmallIntegerField(verbose_name=u'Скорость отображения', default=2000) |
|
|
|
|
|
|
|
|
|
public = models.BooleanField(verbose_name=_('Public'), default=True) |
|
|
|
|
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) |
|
|
|
|
cached = BannerGroupCached() |
|
|
|
|
|
|
|
|
|
def size(self): |
|
|
|
|
return '%sx%s' % (self.width, self.height) |
|
|
|
|
@ -50,20 +55,23 @@ class BannerGroup (models.Model): |
|
|
|
|
verbose_name = _('Banner Group') |
|
|
|
|
verbose_name_plural = _('Banner Groups') |
|
|
|
|
|
|
|
|
|
def get_admin_url(self): |
|
|
|
|
return '/admin/expobanners/banners/group/%d/edit/'%self.id |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Banner(models.Model): |
|
|
|
|
objects = BiasedManager() |
|
|
|
|
|
|
|
|
|
title = models.CharField(verbose_name=_('Title'), max_length=255, blank=True) |
|
|
|
|
title = models.CharField(verbose_name=u'Заголовок', max_length=255, blank=True) |
|
|
|
|
alt = models.CharField(verbose_name=_('Alt'), max_length=255) |
|
|
|
|
|
|
|
|
|
text = models.TextField(verbose_name=_('Text'), blank=True, null=True) |
|
|
|
|
img = models.FileField(verbose_name=_('Image'), upload_to='expo_upload', blank=True, null=True) |
|
|
|
|
url = models.CharField(verbose_name=_('URL'), max_length=1024) |
|
|
|
|
text = models.TextField(verbose_name=u'Текст', blank=True, null=True) |
|
|
|
|
img = models.FileField(verbose_name=u'Картинка', upload_to='expo_upload', blank=True, null=True) |
|
|
|
|
url = models.CharField(verbose_name=u'URL', max_length=1024) |
|
|
|
|
|
|
|
|
|
sort = models.PositiveSmallIntegerField(verbose_name=_('Sort'), default=500) |
|
|
|
|
sort = models.PositiveSmallIntegerField(verbose_name=u'Сорт', default=500) |
|
|
|
|
|
|
|
|
|
group = models.ForeignKey(BannerGroup, related_name='banners', verbose_name=_('Group')) |
|
|
|
|
group = models.ForeignKey(BannerGroup, related_name='banners', verbose_name=u'Место', null=True, blank=True) |
|
|
|
|
often = models.PositiveSmallIntegerField( |
|
|
|
|
verbose_name=_('Often'), |
|
|
|
|
help_text=_('A ten will display 10 times more often that a one.'), |
|
|
|
|
@ -71,14 +79,25 @@ class Banner(models.Model): |
|
|
|
|
) |
|
|
|
|
urls = models.ManyToManyField(URL, related_name='url_banners', verbose_name=_('URLs'), null=True, blank=True) |
|
|
|
|
|
|
|
|
|
html = models.BooleanField(verbose_name=_('Is HTML?'), default=False) |
|
|
|
|
flash = models.BooleanField(verbose_name=_('Is Flash?'), default=False) |
|
|
|
|
html = models.BooleanField(verbose_name=_('HTML?'), default=False) |
|
|
|
|
flash = models.BooleanField(verbose_name=_('Flash?'), default=False) |
|
|
|
|
paid = models.BooleanField(verbose_name=_('Is Paid event link?'), default=False) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public = models.BooleanField(verbose_name=_('Public'), default=True) |
|
|
|
|
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) |
|
|
|
|
|
|
|
|
|
theme = models.ForeignKey('theme.Theme', blank=True, null=True, verbose_name=u'Тематика') |
|
|
|
|
tag = models.ForeignKey('theme.Tag', blank=True, null=True, verbose_name=u'Тег') |
|
|
|
|
country = models.ForeignKey('country.Country', blank=True, null=True, verbose_name=u'Страна') |
|
|
|
|
city = models.ForeignKey('city.City', blank=True, null=True, verbose_name=u'Город') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_admin_url(self): |
|
|
|
|
return '/admin/expobanners/banners/banner/%d/edit/'%self.id |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def key(slef): |
|
|
|
|
if hasattr(settings, 'SECRET_KEY'): |
|
|
|
|
key = str(datetime.now()) + settings.SECRET_KEY |
|
|
|
|
@ -168,3 +187,50 @@ class LogStat(models.Model): |
|
|
|
|
|
|
|
|
|
def __unicode__(self): |
|
|
|
|
return '%s - (%s)' % (self.banner, self.date) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# ------------------ |
|
|
|
|
class Paid(models.Model): |
|
|
|
|
tickets = models.ForeignKey(Banner, related_name='paid_tickets') |
|
|
|
|
participation = models.ForeignKey(Banner, related_name='paid_participation') |
|
|
|
|
official = models.ForeignKey(Banner, related_name='paid_official') |
|
|
|
|
logo = models.ImageField(upload_to='/')# !!!!! |
|
|
|
|
organiser = models.CharField(max_length=100) |
|
|
|
|
active = models.BooleanField(default=True) |
|
|
|
|
stat_pswd = models.CharField(max_length=16) |
|
|
|
|
created = models.DateTimeField(auto_now_add=True) |
|
|
|
|
modified = models.DateTimeField(auto_now=True) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class PaidStat(models.Model): |
|
|
|
|
paid = models.ForeignKey(Paid) |
|
|
|
|
date = models.DateField(verbose_name=_('Date')) |
|
|
|
|
page_views = models.PositiveIntegerField(default=0) |
|
|
|
|
price_views = models.PositiveIntegerField(default=0) |
|
|
|
|
catalog_views = models.PositiveIntegerField(default=0) |
|
|
|
|
catalog_clicks = models.PositiveIntegerField(default=0) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Top(models.Model): |
|
|
|
|
catalog = models.CharField(max_length=16) |
|
|
|
|
position = models.PositiveIntegerField(blank=True, null=True) |
|
|
|
|
theme = models.ManyToManyField('theme.Theme', blank=True, null=True) |
|
|
|
|
excluded_tags = models.ManyToManyField('theme.Tag', blank=True, null=True) |
|
|
|
|
country = models.ManyToManyField('country.Country', blank=True, null=True) |
|
|
|
|
excluded_cities = models.ManyToManyField('city.City', blank=True, null=True) |
|
|
|
|
fr = models.DateField(default=date.today()) |
|
|
|
|
to = models.DateField(blank=True, null=True) |
|
|
|
|
stat_pswd = models.CharField(max_length=16) |
|
|
|
|
|
|
|
|
|
class Meta: |
|
|
|
|
ordering = ['position'] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TopStat(models.Model): |
|
|
|
|
date = models.DateField() |
|
|
|
|
theme = models.ForeignKey('theme.Theme', blank=True, null=True) |
|
|
|
|
tag = models.ForeignKey('theme.Tag', blank=True, null=True) |
|
|
|
|
country = models.ForeignKey('country.Country', blank=True, null=True) |
|
|
|
|
city = models.ForeignKey('city.City', blank=True, null=True) |
|
|
|
|
views = models.PositiveIntegerField(default=0) |
|
|
|
|
clicks = models.PositiveIntegerField(default=0) |