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.
188 lines
5.4 KiB
188 lines
5.4 KiB
# -*- coding: utf-8 -*-
|
|
import json
|
|
|
|
from django.conf import settings
|
|
from django.contrib.auth.decorators import login_required
|
|
from django.core.context_processors import csrf
|
|
from django.core.urlresolvers import reverse_lazy
|
|
from django.http import HttpResponse, HttpResponseRedirect
|
|
from django.shortcuts import render_to_response
|
|
from django.views.generic import CreateView, DeleteView, UpdateView
|
|
from functions.admin_views import AdminListView
|
|
from functions.custom_views import (
|
|
ListView,
|
|
add_object,
|
|
delete_object,
|
|
objects_list
|
|
)
|
|
from functions.views_help import get_referer
|
|
|
|
from .forms import (
|
|
TagDeleteForm,
|
|
TagFilterForm,
|
|
TagForm,
|
|
ThemeDeleteForm,
|
|
ThemeFilterForm,
|
|
ThemeForm
|
|
)
|
|
from .models import Tag, Theme
|
|
|
|
|
|
def theme_all(request):
|
|
return objects_list(request, Theme, 'theme_all.html')
|
|
|
|
|
|
def tag_all(request):
|
|
return objects_list(request, Tag, 'tag_all.html')
|
|
|
|
|
|
def theme_add(request):
|
|
return add_object(request, ThemeForm, 'theme_add.html', '/admin/theme/theme/all')
|
|
|
|
|
|
def tag_add(request):
|
|
return add_object(request, TagForm, 'tag_add.html', '/admin/theme/tag/all')
|
|
|
|
|
|
def theme_delete(request, theme_id):
|
|
return delete_object(request, Theme, ThemeDeleteForm, theme_id, '/admin/theme/theme/all')
|
|
|
|
|
|
def tag_delete(request, tag_id):
|
|
return delete_object(request, Tag, TagDeleteForm, tag_id, '/admin/theme/tag/all')
|
|
|
|
|
|
@login_required
|
|
def theme_copy(request, theme_id):
|
|
|
|
theme = Theme.objects.safe_get(id=theme_id)
|
|
if not theme:
|
|
return HttpResponseRedirect(get_referer(request))
|
|
else:
|
|
theme.clone()
|
|
return HttpResponseRedirect(get_referer(request))
|
|
|
|
@login_required
|
|
def tag_copy(request, tag_id):
|
|
|
|
tag = Tag.objects.safe_get(id=tag_id)
|
|
if not tag:
|
|
return HttpResponseRedirect(get_referer(request))
|
|
else:
|
|
tag.clone()
|
|
return HttpResponseRedirect(get_referer(request))
|
|
|
|
|
|
@login_required
|
|
def theme_change(request, theme_id=None):
|
|
try:
|
|
theme = Theme.objects.get(id=theme_id)
|
|
except:
|
|
return HttpResponseRedirect('/admin/theme/theme/all')
|
|
if request.POST:
|
|
form = ThemeForm(request.POST)
|
|
if form.is_valid():
|
|
form.save(theme_id)
|
|
return HttpResponseRedirect('/admin/theme/theme/all')
|
|
else:
|
|
data = {}
|
|
#bitfeild
|
|
data['types'] = [item for item, bool in theme.types if bool==True]
|
|
|
|
#data from translated fields
|
|
for code, name in settings.LANGUAGES:
|
|
obj = Theme._meta.translations_model.objects.get(language_code = code,master__id=theme_id) #access to translated fields
|
|
data['name_%s'%code] = obj.name
|
|
data['description_%s'%code] = obj.description
|
|
data['main_title_%s'%code] = obj.main_title
|
|
data['title_%s'%code] = obj.title
|
|
data['keywords_%s'%code] = obj.keywords
|
|
data['descriptions_%s'%code] = obj.descriptions
|
|
|
|
|
|
|
|
form = ThemeForm(data)
|
|
|
|
args = {}
|
|
args.update(csrf(request))
|
|
|
|
args['form'] = form
|
|
args['languages'] = settings.LANGUAGES
|
|
args['theme_id'] = theme_id
|
|
|
|
return render_to_response('theme_add.html', args)
|
|
|
|
|
|
@login_required
|
|
def tag_change(request, tag_id=None):
|
|
try:
|
|
tag = Tag.objects.get(id=tag_id)
|
|
except:
|
|
return HttpResponseRedirect('/admin/theme/tag/all')
|
|
if request.POST:
|
|
form = TagForm(request.POST)
|
|
if form.is_valid():
|
|
form.save(tag_id)
|
|
return HttpResponseRedirect('/admin/theme/tag/all')
|
|
else:
|
|
data = {}
|
|
if tag.theme:
|
|
data['theme'] = tag.theme.id
|
|
#data from translated fields
|
|
for code, name in settings.LANGUAGES:
|
|
obj = Tag._meta.translations_model.objects.get(language_code = code,master__id=tag_id) #access to translated fields
|
|
data['name_%s'%code] = obj.name
|
|
data['description_%s'%code] = obj.description
|
|
data['main_title_%s'%code] = obj.main_title
|
|
data['title_%s'%code] = obj.title
|
|
data['keywords_%s'%code] = obj.keywords
|
|
data['descriptions_%s'%code] = obj.descriptions
|
|
|
|
form = TagForm(data)
|
|
|
|
args = {}
|
|
args.update(csrf(request))
|
|
|
|
args['form'] = form
|
|
args['languages'] = settings.LANGUAGES
|
|
args['tag_id'] = tag_id
|
|
|
|
return render_to_response('tag_add.html', args)
|
|
|
|
|
|
def search_tag(request):
|
|
theme = request.GET['theme']
|
|
theme_ids = theme.replace('theme=', '').split('&')
|
|
term = request.GET['term']
|
|
|
|
|
|
if not term:
|
|
qs = Tag.objects.filter(theme__id__in=theme_ids).order_by('translations__name').distinct()
|
|
else:
|
|
qs = Tag.objects.filter(theme__id__in=theme_ids, translations__name__contains=term).distinct()
|
|
|
|
tags = [{'id': tag.id, 'label': '%s(%s)'%(tag.name, tag.theme.name)} for tag in qs]
|
|
|
|
return HttpResponse(json.dumps(tags), content_type='application/json')
|
|
|
|
|
|
def search2(request):
|
|
term = request.GET['term']
|
|
if not term:
|
|
qs = Tag.objects.filter().order_by('translations__name')[:50]
|
|
else:
|
|
qs = Tag.objects.filter(translations__name__contains=term)[:50]
|
|
tags = [{'id': tag.id, 'text': '%s(%s)'%(tag.name, tag.theme.name)} for tag in qs]
|
|
return HttpResponse(json.dumps(tags), content_type='application/json')
|
|
|
|
|
|
class ThemeListView(AdminListView):
|
|
template_name = 'admin/theme/theme_list.html'
|
|
form_class = ThemeFilterForm
|
|
model = Theme
|
|
|
|
|
|
class TagListView(AdminListView):
|
|
template_name = 'admin/theme/tag_list.html'
|
|
form_class = TagFilterForm
|
|
model = Tag
|
|
|