Merge branch 'stage6' of bitbucket.org:Bonus_05/expomap into stage6

remotes/origin/stage6
ya_dim4ik 9 years ago
commit 046ea121c0
  1. 9
      emencia/django/newsletter/templates/newsletter/AutomaticEmail_v2.html
  2. 5
      emencia/django/newsletter/templates/newsletter/AutomaticEmail_web.html
  3. 2
      expobanner/forms.py
  4. 14
      expobanner/managers.py
  5. 11
      expobanner/models.py
  6. 32
      expobanner/utils.py
  7. 84
      settings/templatetags/tempalte_tags.py
  8. 4
      settings/templatetags/template_filters.py
  9. 1
      templates/c_admin/expobanner/default_form.html

@ -1,4 +1,5 @@
{% load i18n %}{% spaceless %}
{% load i18n %}
{% load template_filters %}{% spaceless %}
<style type="text/css" media="screen">
body{height:100%!important;margin:0;padding:0;width:100%!important;}
@ -410,11 +411,11 @@
<tr>
<td style="font-family: Arial, sans-serif; font-size: 13px; text-transform: uppercase; padding-bottom: 12px; {% if forloop.first %}color: #33ccff; {% elif forloop.counter == 2 %}color: #cc3399; {% elif forloop.counter == 3 %}color: #99cc66;{% elif forloop.counter == 4 %}color: #ff6600;{% endif %}">
{% if obj.get_event_place_name %}
{% if obj.city %}
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td style="padding-right: 5px;"><img src="cid:m{{ forloop.counter }}" alt=""></td>
<td>{{ obj.get_event_place_name }}</td>
<td>{{ obj.city }}</td>
</tr>
</table>
{% endif %}
@ -422,7 +423,7 @@
</tr>
<tr>
<td style="font-size: 13px; color: #999999;">
{% for tag in obj.tags %}<a href="http://{{ domain }}{{ obj.catalog }}tag/{{ tag.url }}" class="tag" style="font-size: 13px; color: #999999; text-decoration: none;">{{ tag.name }}</a>{% if not forloop.last %}, {% endif %}{% endfor %}
{% for tag in obj.tags %}<a href="http://{{ domain }}{{ obj.catalog }}tag/{{ tag.url }}" class="tag" style="font-size: 13px; color: #999999; text-decoration: none;">{{ tag.name|strip }}</a>{% if not forloop.last %}, {% endif %}{% endfor %}
</td>
</tr>
</table>

@ -1,6 +1,7 @@
{% load i18n %}
{% load static %}
{% load thumbnail %}
{% load template_filters %}
{# <a href="http://{{ domain }}{% url 'events:main' %}?{{ moscow_filter_url }}">{% trans "ПОСМОТРЕТЬ ВСЕ" %} ></a> #}
{# <a href="http://{{ domain }}{% url 'events:main' %}?{{ russia_filter_url }}">{% trans "ПОСМОТРЕТЬ ВСЕ" %} ></a> #}
@ -403,9 +404,9 @@
</tr>
<tr>
<td class="color{{ forloop.counter }}" style="font-family: Arial, sans-serif; font-size: 13px; text-transform: uppercase; padding-bottom: 12px;">
{% if obj.get_event_place_name %}
{% if obj.city %}
<img src="{{ STATIC_URL }}newsletter/images/m{{ forloop.counter }}.png" alt="" style="display: inline-block; margin-top: -2px; vertical-align: middle; margin-right: 4px;">
{{ obj.get_event_place_name }}
{{ obj.city }}
{% endif %}
</td>
</tr>

@ -57,7 +57,7 @@ class BannerCreateForm(forms.ModelForm):
text = forms.CharField(label=u'Текст', required=False, widget=CKEditorWidget)
class Meta:
model = Banner
exclude = ['created_at', 'updated_at', 'often', 'paid', 'stat_pswd', 'cookie', 'link']
exclude = ['created_at', 'updated_at', 'paid', 'stat_pswd', 'cookie', 'link']
class CustomerCreateForm(forms.ModelForm):

@ -53,7 +53,21 @@ class BannerGroupCached(models.Manager):
.filter(public=True, fr__lte=today)\
.filter(Q(to__gte=today) | Q(to__isnull=True)))
cache.set(key, result, 70)
return result
def top_page_banners(self):
key = 'top_page_banners'
result = cache.get(key)
if not result:
try:
group = self.get(slug='top_page_banner', public=True)
today = date.today()
result = list(group.banners.prefetch_related('urls', 'theme', 'country')
.filter(public=True, fr__lte=today)
.filter(Q(to__gte=today) | Q(to__isnull=True)))
except self.DoesNotExist:
result = []
cache.set(key, result, 70)
return result

@ -104,7 +104,9 @@ class Banner(models.Model, StatMixin):
"""
objects = BiasedManager()
customer = models.ForeignKey(Customer, verbose_name=_(u'Заказчик'), null=True, blank=True)
customer = models.ForeignKey(Customer, verbose_name=_(u'Заказчик'), null=True, blank=True,
help_text=_(u'Работает для всех баннеров кроме верхнего.'),
)
title = models.CharField(verbose_name=_(u'Заголовок'), max_length=255, blank=True)
alt = models.CharField(verbose_name=_('Alt'), max_length=255)
@ -119,10 +121,9 @@ class Banner(models.Model, StatMixin):
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'),
help_text=_('A ten will display 10 times more often that a one.'),
choices=[[i, i] for i in range(11)],
default=1
verbose_name=_(u'Частота показа'), default=1, null=True, blank=True,
help_text=_(u'Задается в %. 20 будет соответствовать 20% показа банера из всех просмотров. Работает только для верхнего банера.'),
# choices=[[i, i] for i in xrange(11)],
)
urls = models.ManyToManyField(URL, related_name='url_banners', verbose_name=_('URLs'), null=True, blank=True)

@ -57,7 +57,19 @@ def set_cookie(response, key, value, days_expire = 7):
return response
def get_banner_by_params(banners_list, urls, params, request):
def random_choice_banners(banners):
'''
Include weight of customers model.
'''
choice_from = {}
for i, banner in enumerate(banners):
key = 'customer{pk}'.format(pk=banner.customer_id) if banner.customer_id else i
choice_from.setdefault(key, []).append(banner)
pre_choiced = random.choice(choice_from.values())
return random.choice(pre_choiced)
def get_banner_by_params(banners_list, urls, params, request, choicer=random_choice_banners):
thematic_banners = []
url_banners = []
@ -94,13 +106,13 @@ def get_banner_by_params(banners_list, urls, params, request):
# check by url
if urls:
banner_urls = banner.urls.all()
print('number of queries = %d'%len(connection.queries))
# print('number of queries = %d'%len(connection.queries))
if banner_urls:
banner_urls = set(banner_urls)
common_urls = set(urls).intersection(banner_urls)
print(banner, common_urls, banner_urls, urls)
# print(banner, common_urls, banner_urls, urls)
if common_urls:
url_banners.append(banner)
continue
@ -114,23 +126,11 @@ def get_banner_by_params(banners_list, urls, params, request):
if result:
sort_result = get_by_sort(result)
# return random.choice(sort_result)
return random_choice_banners(sort_result)
return choicer(sort_result)
else:
return None
def random_choice_banners(banners):
'''
Include weight of customers model.
'''
choice_from = {}
for i, banner in enumerate(banners):
key = 'customer{pk}'.format(pk=banner.customer_id) if banner.customer_id else i
choice_from.setdefault(key, []).append(banner)
pre_choiced = random.choice(choice_from.values())
return random.choice(pre_choiced)
def get_top_events(tops, params, request):
catalog = params.get('catalog')
country = params.get('country', '')

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
import datetime
import re
from numpy.random import choice
from django import template
from django.utils.translation import ugettext as _
@ -121,47 +122,58 @@ def get_top_banner(context):
elif url == u.url:
good_urls.append(u)
group_banners = BannerGroup.cached.group_banners()
result = {}
banners = BannerGroup.cached.top_page_banners()
cookie = None
places = ['top_page_banner']
for group, banners in group_banners.iteritems():
if group not in places:
continue
banner = get_banner_by_params(banners, good_urls, params, request)
# import pdb; pdb.set_trace() # on this page there is no such group
if banner:
if banner.html:
text = banner.text
img = ''
alt = ''
is_img = False
else:
text = ''
try:
img = banner.img.url
except ValueError:
continue
alt = banner.alt
is_img = True
result = {'id': group,
'url': banner.get_click_link(),
'is_html': banner.html,
'is_flash': banner.flash,
'is_img': is_img,
'is_popup': banner.popup,
'img': img,
'alt': alt,
'text': text
}
if banner.popup:
cookie = banner.cookie
# add view log
banner.log(request, 1)
result = {}
banner = get_banner_by_params(banners, good_urls, params, request, choicer=random_choice_top_banners)
if banner:
if banner.html:
text = banner.text
img = ''
alt = ''
is_img = False
else:
text = ''
try:
img = banner.img.url
except ValueError:
return {}
alt = banner.alt
is_img = True
result = {'url': banner.get_click_link(),
'is_html': banner.html,
'is_flash': banner.flash,
'is_img': is_img,
'is_popup': banner.popup,
'img': img,
'alt': alt,
'text': text,
}
if banner.popup:
cookie = banner.cookie
# add view log
banner.log(request, 1)
return result
def random_choice_top_banners(banners):
'''
Include weight of often.
'''
p = [float(x.often or 1)/100 for x in banners]
if sum(p) < 1:
p.append(1-sum(p))
banners.append('nobanner')
elif sum(p) > 1:
_p , _p_sum = p, sum(p)
p = [1/_p_sum*x for x in _p]
banner = choice(banners, 1, p=p).item()
if banner == 'nobanner':
banner = None
return banner
register.tag('set', set_var)
register.tag('get_date', get_date)
register.tag('get_date_reverse', get_date_reverse)

@ -349,3 +349,7 @@ def join_lookup(value):
if isinstance(value, (str, unicode, int, long)):
return value
return getattr(value, 'pk', '')
@register.filter
def strip(value):
return value.strip()

@ -59,6 +59,7 @@
<label class="control-label">{% if field.field.required %}<b>{{ field.label }}:</b>{% else %}{{ field.label }}{% endif %}</label>
<div class="controls">{{ field }}
<span class="help-inline">{{ field.errors }}</span>
<p class="help-block">{{ field.help_text }}</p>
</div>
</div>
{% endfor %}

Loading…
Cancel
Save