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