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.
 
 
 
 
 
 

149 lines
4.7 KiB

# -*- coding: utf-8 -*-
import json
from article.models import Article
from city.models import City
from django.conf import settings
from django.contrib.contenttypes.models import ContentType
from django.db.models.loading import get_model
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render_to_response
from django.views.generic import TemplateView
from exposition.forms import StatisticForm, TimeTableForm
from exposition.models import Exposition, Statistic, TimeTable, TmpTimeTable
from file.forms import PhotoForm
from file.models import Photo, TmpFile
from theme.models import Tag
class AdminIndex(TemplateView):
template_name = 'c_admin/base.html'
def ajax_city(request):
"""
returns html <option> tags filled with cities filtered by country value from request
"""
objects = City.objects.language().filter(country=request.GET['id']).order_by('name')
return render_to_response('c_admin/select.html', {'objects': objects})
def ajax_tag(request):
"""
return array of tags (id, name) filtered by theme values from request
"""
if request.GET:
ids = request.GET.get('id')
if ids:
#get id values in list
data = ids.replace('theme=', '').split('&')
#generate list of tags
tags = ['[%d, "%s"]'%(int(item.id), item.name) for item in Tag.objects.language().filter(theme__in=data).order_by('name')]
return HttpResponse('[%s]'%', '.join(tags), content_type='application/json')
else:
#request empty - send empty array
return HttpResponse('[]', content_type='application/json')
def get_news(request):
"""
return array of tags (id, name) filtered by theme values from request
"""
term = request.GET['term'].capitalize()
if not term:
qs = Article.objects.news()[:50]
else:
qs = Article.objects.news().filter(translations__main_title__contains=term)
result = [{'id': item.id, 'label': item.main_title} for item in qs]
return HttpResponse(json.dumps(result), content_type='application/json')
def ajax_post_photo(request, obj_id=None):
if request.POST:
photo_form = PhotoForm(request.POST, request.FILES)
if photo_form.is_valid():
if obj_id != None:
Model = get_model(request.POST['model'].split('.')[0], request.POST['model'].split('.')[1])
obj = Model.objects.get(id=obj_id)
photo = photo_form.save(request.FILES, obj)
photos = Photo.objects.filter(content_type=ContentType.objects.get_for_model(obj),object_id=getattr(obj, 'id'))
else:
photo_form.save(request.FILES)
photos = TmpFile.objects.filter(key=request.POST['key'], purpose='photo')
#return HttpResponse('123')
return render_to_response('photo_list.html', {'photos': photos})
args = {}
args['languages'] = settings.LANGUAGES
args['file_form'] = photo_form
return render_to_response('ajax_error_form.html', args)
def ajax_post_timetable(request, obj_id=None):
if request.GET:
form = TimeTableForm(request.GET)
if form.is_valid():
if obj_id:
exp = Exposition.objects.safe_get(id=obj_id)
form.save(exp)
objects = TimeTable.objects.filter(exposition=exp)
else:
form.save()
objects = TmpTimeTable.objects.filter(key=request.GET.get('key'))
return render_to_response('timetable_list.html', {'objects': objects})
else:
return HttpResponse(json.dumps(form.errors), content_type='application/json')
else:
return HttpResponse('error')
def ajax_post_stat(request, obj_id=None):
response = {'success': False}
if request.GET:
form = StatisticForm(request.GET)
if form.is_valid():
exp = Exposition.objects.safe_get(id=obj_id)
if exp:
form.save(exp)
response['success'] = True
else:
response.update({'errors': form.errors})
return HttpResponse(json.dumps(response), content_type='application/json')
def ajax_delete_stat(request, id):
redirect_to = request.META.get('HTTP_REFERER')
if id:
try:
Statistic.objects.get(id=id).delete()
except Statistic.DoesNotExist:
pass
return HttpResponseRedirect(redirect_to)
def ajax_delete_timetable(request):
if request.GET:
id = request.GET.get('id')
if id:
TimeTable.objects.get(id=id).delete()
data = {'id': id}
return HttpResponse(json.dumps(data), content_type='application/json')
else:
return HttpResponse('error')