# -*- 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): """ return list of banners filtered by sending data """ url = get_referer_view(request, default='/') # get urls by current url urls = URL.cached.all() good_urls = [] for u in urls: if u.regex: try: url_re = re.compile(u.url) except: continue 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): catalog = request.GET.get('catalog') params = {'theme': request.GET.getlist('theme', []), 'tag': request.GET.get('tag'), 'country': request.GET.get('country'), 'city': request.GET.get('city'), 'catalog': catalog, 'month': request.GET.get('month')} tops = Top.cached.all() events = get_top_events(tops, params, request) context = {'objects': events} if catalog == 'places': return render_to_response('client/includes/exposition/expo_top_place.html', context, context_instance=RequestContext(request)) return render_to_response('client/includes/exposition/expo_top.html', context, context_instance=RequestContext(request))