111 lines
4.6 KiB
Python
111 lines
4.6 KiB
Python
from web.library.models import *
|
|
from django.http import HttpResponse, HttpResponseRedirect, Http404
|
|
from django.shortcuts import render_to_response, get_object_or_404
|
|
from django.db.models import Q
|
|
|
|
|
|
relations = {'Author' : u'Forfatter', 'Illustrator' : u'Tegner', 'Translator' : u'Oversetter'}
|
|
|
|
|
|
# Create your views here.
|
|
def BookView(request,book_identifier):
|
|
book=get_object_or_404(Book,isbn=book_identifier)
|
|
people = book.persons.all().order_by('person__last_name', 'person__first_name')
|
|
shelves = None
|
|
global relations
|
|
if book.category:
|
|
if book.category.placement:
|
|
shelves = book.category.placement.all()
|
|
contributors = {}
|
|
for person in people:
|
|
if str(person.relation) in relations:
|
|
relation = relations[str(person.relation)]
|
|
else:
|
|
relation = 'Medvirkende'
|
|
if not relation in contributors:
|
|
contributors[relation] = [0, []]
|
|
# contributors[person.relation] = "%s %s" % (person.person.first_name, person.person.last_name)
|
|
# else:
|
|
contributors[relation][0] += 1
|
|
contributors[relation][1].append(person)
|
|
print contributors
|
|
return render_to_response('book/view.html', {'book' : book, 'people' : people, 'shelves' : shelves, 'contributors' : contributors})
|
|
|
|
def BookRedirect(request,book_identifier):
|
|
ident=get_object_or_404(Id,id=book_identifier)
|
|
return HttpResponseRedirect('/book/'+ident.book.isbn)
|
|
|
|
def BookIndex(request):
|
|
return render_to_response('book/index.html', {'books': Book.objects.all().order_by('title')})
|
|
|
|
def PersonView(request,person_identifier):
|
|
global relations
|
|
person = get_object_or_404(Person,id=person_identifier)
|
|
books = person.books.all().order_by('book__published_year', 'book__title')
|
|
contributed = {}
|
|
for book in books:
|
|
if str(book.relation) in relations:
|
|
relation = relations[str(book.relation)]
|
|
else:
|
|
relation = 'Medvirkende'
|
|
if not relation in contributed:
|
|
contributed[relation] = [0, []]
|
|
contributed[relation][0] += 1
|
|
contributed[relation][1].append(book)
|
|
return render_to_response('person/view.html', {'title' : 'Worblehat: person '+person.first_name+' '+person.last_name, 'person' : person, 'books' : books, 'contributed' : contributed })
|
|
|
|
def PersonIndex(request):
|
|
return render_to_response('person/index.html', {'persons': Person.objects.all().order_by('last_name')})
|
|
|
|
def MapIndex(request):
|
|
shelves = Placement.get_all_shelves()
|
|
highlight_string = None
|
|
if 'vis' in request.GET:
|
|
highlight_string = request.GET['vis']
|
|
shelf_lists = [{'shelf_name': shelf,
|
|
'shelf_list': Placement.shelf_as_list_row_then_col(shelf)}
|
|
for shelf in shelves]
|
|
return render_to_response('map/index.html', {'shelf_lists': shelf_lists, 'highlight_string': highlight_string})
|
|
|
|
def MapView(request,shelf_identifier):
|
|
if shelf_identifier not in Placement.get_all_shelves():
|
|
raise Http404()
|
|
shelf_list = Placement.shelf_as_list_row_then_col(shelf_identifier)
|
|
return render_to_response('map/view.html', {'shelf_name': shelf_identifier, 'shelf': shelf_list})
|
|
|
|
def CategoryIndex(request):
|
|
return render_to_response('category/index.html', {'categories': Category.objects.all()})
|
|
|
|
def CategoryView(request,category_identifier):
|
|
category = get_object_or_404(Category,id=category_identifier)
|
|
book_list = category.book_set.all()
|
|
return render_to_response('category/view.html', {'category': category, 'book_list': book_list})
|
|
|
|
def IndexView(request):
|
|
return render_to_response('index.html', {'categories': Category.objects.all().order_by('name')})
|
|
|
|
def SearchView(request):
|
|
if 'searchterm' in request.GET:
|
|
search_string=request.GET['searchterm']
|
|
else:
|
|
search_string=''
|
|
results=search(search_string)
|
|
return render_to_response('search/search.html',{'search_string' : search_string, 'books' : results[0], 'people' : results[1], 'categories' : results[2]})
|
|
|
|
def search(string):
|
|
book_q=Book.objects.select_related('id','alt_titles')
|
|
person_q=Person.objects
|
|
category_q=Category.objects
|
|
for word in string.split(" "):
|
|
book_q=book_q.filter(Q(title__icontains=word) | Q(subtitle__icontains=word) |
|
|
Q(alt_titles__alt_title__icontains=word) | Q(id__id__icontains=word))
|
|
person_q=person_q.filter(Q(first_name__icontains=word) | Q(last_name__icontains=word) | Q(id__icontains=word))
|
|
category_q=category_q.filter(Q(id__icontains=word)|Q(name__icontains=word))
|
|
return [book_q.all(),person_q.all(),category_q.all()]
|
|
|
|
def remove_duplicates(list):
|
|
d={}
|
|
for i in list:
|
|
d[i]=None
|
|
return d.keys()
|