@ -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 )