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