You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

97 lines
3.3 KiB

# -*- coding: utf-8 -*-
import json
import re
from django.http import HttpResponse
from django.shortcuts import redirect, get_object_or_404
from django.shortcuts import render_to_response
from django.template import RequestContext
from .models import Banner, BannerGroup, URL, Top
from expobanner.utils import get_banner_by_params, get_client_ip, get_top_events, get_referer_view, set_cookie
def click(request, banner_id):
banner = get_object_or_404(Banner, pk=banner_id)
banner.log(request, 2)
return redirect(banner.url)
def view(request, banner_id):
banner = get_object_or_404(Banner, pk=banner_id)
banner.log(request, 1)
return redirect(banner.img.url)
def get_banners(request):
url = get_referer_view(request, default='/')
# get urls by current url
urls = URL.cached.all()
good_urls = []
for u in urls:
if u.regex:
url_re = re.compile(u.url)
if url_re.findall(url):
good_urls.append(u)
elif url == u.url:
good_urls.append(u)
# fill parameters dict
params = {'theme': request.GET.getlist('theme', []),
'tag': request.GET.get('tag'),
'country': request.GET.get('country'),
'city': request.GET.get('city'),
'ip': get_client_ip(request)}
group_banners = BannerGroup.cached.group_banners()
result = []
cookie = None
# get banners for all groups
places = request.GET.getlist('places', [])
for group, banners in group_banners.iteritems():
if group not in places:
# on this page there is no such group
continue
banner = get_banner_by_params(banners, good_urls, params, request)
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.append({'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)
response = HttpResponse(json.dumps(result, indent=4), content_type='application/json')
if cookie:
response = set_cookie(response, cookie, '1')
return response
def get_top(request):
params = {'theme': request.GET.getlist('theme', []),
'tag': request.GET.get('tag'),
'country': request.GET.get('country'),
'city': request.GET.get('city'),
'catalog': request.GET.get('catalog')}
tops = Top.cached.all()
events = get_top_events(tops, params, request)
context = {'objects': events}
return render_to_response('client/includes/exposition/expo_top.html', context, context_instance=RequestContext(request))