123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- #! /usr/bin/env python
- # emacs-mode: -*- python-*-
- # -*- coding: utf-8 -*-
- from datetime import datetime
- from django.db.models import Q
- import django.utils.simplejson as json
- import operator
- from django.shortcuts import render_to_response
- from django.shortcuts import get_object_or_404
- from django.http import HttpResponseRedirect, Http404, HttpResponse
- from django.template import RequestContext
- from django.contrib.auth.decorators import permission_required
- from django.core import serializers
- from adzone.models import AdBase, AdClick, BannerAd, TextAd, AdImpression
- def ad_view(request, id):
- """
- Record the click in the database, then redirect to ad url
- """
- ad = get_object_or_404(AdBase, id=id)
- try:
- if not request.excluded_ip:
- click = AdClick(ad=ad, click_date=datetime.now(), source_ip=request.META.get('REMOTE_ADDR'))
- click.save()
- except:
- raise Http404
- return HttpResponseRedirect(ad.url)
- def ad_display(request):
- """
- Simply pull an ad from the db and display it as a raw img.
- This was added to interface with legacy apps in iframes.
- Currently it's hardwired to calendar zone, but could be made scriptabled via GET params.
- """
- context = RequestContext(request)
- ad = AdBase.objects.get_random_ad('', 'towers')
- from_ip = request.META['REMOTE_ADDR']
- if not request.excluded_ip:
- impression = AdImpression(ad=ad, impression_date=datetime.now(), source_ip=from_ip)
- impression.save()
- return render_to_response('adzone/ad_display.html', locals(), context_instance=RequestContext(request))
- def _convert_string(date):
- if date == "Today":
- return datetime.now().strftime('%Y-%m-%d')
- elif date == "Yesterday":
- return (datetime.now()-datetime.timedelta(days=1)).strftime('%Y-%m-%d')
- else:
- return date
- @permission_required('adzone.change_adbase')
- def ad_index(request):
- ad_list=[]
- if request.method == 'GET':
- filter=[]
- if 'start' in request.GET:
- start = _convert_string(request.GET.get('start'))
- filter.append(start)
- if 'end' in request.GET:
- end = _convert_string(request.GET.get('end'))
- filter.append(end)
- ads = AdBase.objects.enabled()
- for ad in ads:
- ad_list.append([ad, ad.impressions(*filter), ad.clicks(*filter)])
- else:
- ads = AdBase.objects.enabled()
- for ad in ads:
- ad_list.append([ad, ad.impressions(), ad.clicks()])
- return render_to_response('adzone/ad_index.html', locals(), context_instance=RequestContext(request))
- @permission_required('adzone.change_adbase')
- def ad_detail(request, id, type):
- if request.method == 'GET':
- filter=[]
- if 'start' in request.GET:
- start = _convert_string(request.GET.get('start'))
- filter.append(start)
- if 'end' in request.GET:
- end = _convert_string(request.GET.get('end'))
- filter.append(end)
- if type == "banner":
- ad=BannerAd.objects.get(pk=id)
- else:
- ad=AdBase.objects.get(pk=id)
- return render_to_response('adzone/ad_detail.html', locals(), context_instance=RequestContext(request))
- @permission_required('adzone.change_adbase')
- def xhr_ad_detail(request, format=None):
- ad_list = []
- kwargs = {}
- if request.is_ajax():
- if request.method == 'POST':
- if 'start' in request.POST:
- try:
- start = request.POST.get('start')
- start_date = datetime.strptime(start, '%Y-%m-%d')
- kwargs.update({'start': start_date})
- except ValueError:
- pass
- if 'end' in request.POST:
- try:
- end = request.POST.get('end')
- end_date = datetime.strptime(end, '%Y-%m-%d')
- kwargs.update({'end': end_date})
- except ValueError:
- pass
- ads = AdBase.objects.enabled()
- for ad in ads:
- ad_list.append([ad.title, ad.impressions(**kwargs),
- ad.clicks(**kwargs)])
- if format == 'json':
- mimetype='application/json'
- data = json.dumps(ad_list)
- else:
- return HttpResponse(status=400)
- return HttpResponse(data, mimetype)
- @permission_required('adzone.change_adbase')
- def xhr_ad_table(request, format=None):
- if request.is_ajax():
- ad_list=[]
- if request.method == 'POST':
- ads = AdBase.objects.enabled()
- if format == 'json':
- mimetype='application/json'
- if format == 'xml':
- mimetype='application/xml'
- if format == 'html':
- mimetype='text/html'
- data = serializers.serialize(format, ads)
- return HttpResponse(data, mimetype)
|