source: django/repo/search/views.py @ 17:6a35996d3cb4

Revision 17:6a35996d3cb4, 50.1 KB checked in by hagenbruch@phoibe.ub.rub.de, 8 years ago (diff)

Support for handling the status of consent for abstracts.

  • Property exe set to *
Line 
1# -*- coding: utf-8 -*-
2from django.conf import settings
3from django.contrib import auth
4from django.core.paginator import Paginator
5from django.http import HttpResponse
6from django.http import HttpResponseRedirect
7from django.shortcuts import render_to_response
8from django.template import RequestContext
9import logging
10from pyRdfa import processURI
11import re
12import simplejson as json
13import urllib
14
15logging.basicConfig(level=logging.DEBUG)
16
17SORT_OPTS = {
18    'cre_asc': 'sperson+asc',
19    'tit_asc': 'sorttitle+asc',
20    'yr_desc': 'fdate+desc',
21}
22
23def _fetch_result(params):
24    return eval(urllib.urlopen(settings.SOLR_URL, params).read())
25
26class Facet(object):
27    """
28        A facet is an entity consisting of a category and a count for this category. Some facets will also have a list of sub facets. On the surface a facet will displayed as 'cat (count)' and will get a link for a filter query.
29        """
30    def __init__(self):
31        super(Facet, self).__init__()
32        self.subs = []
33
34    def __repr__(self):
35        if self.subs is not None:
36            facet = '%s (%s)\n' % (self.cat, self.count)
37        else:
38            facet = '%s (%s)' % (self.cat, self.count)
39        if self.subs is not None:
40            for sub in self.subs:
41                facet += ' * %s (%s)\n' % (sub.cat, sub.count)
42        return facet.encode('utf-8')
43
44
45def _concatenate_facets(facets, subs):
46    facet_list = []
47    while facets:
48        cat, count = facets[0:2]
49        del facets[0:2]
50        if cat in subs:
51            tmp_list = []
52            for cats in subs:
53                while subs.get(cat):
54                    tmpcat, tmpcount = subs.get(cat)[0:2]
55                    del subs.get(cat)[0:2]
56                    sub_facet = Facet()
57                    sub_facet.cat = tmpcat
58                    sub_facet.count = tmpcount
59                    tmp_list.append(sub_facet)
60            facet = Facet()
61            facet.cat = cat
62            facet.count = count
63            facet.subs = tmp_list
64            facet_list.append(facet)
65        else:
66            facet = Facet()
67            facet.cat = cat
68            facet.count = count
69            facet.subs = None
70            facet_list.append(facet)
71    return facet_list
72
73def resultlist(request):
74    query = request.GET.get('q', '').encode('utf-8')
75    filter_query = urllib.unquote(request.GET.get('fq', '').encode('utf-8'))
76    sorting = request.GET.get('sort', '')
77
78    offset = 0
79    if len(request.GET.get('page', '')) > 0:
80        offset = int(request.GET.get('page')) * 10
81
82    #logging.debug(request.GET.get('page', ''))
83    # Cookies enabled?
84    # if request.session.test_cookie_worked():
85    #   request.session.delete_test_cookie()
86    # else:
87    #   return HttpResponse('Bitte Cookies einschalten!')
88
89    # Handle the smartass cases for empty queries and people who are used to
90    # querying FAST for all records...
91    if query is '' or query is '.':
92        query = '*:*'
93
94    # Advanced search
95    title = request.GET.get('titel', '').encode('utf-8')
96    person = request.GET.get('person', '').encode('utf-8')
97    subject = request.GET.get('schlagwoerter', '').encode('utf-8')
98    journal = request.GET.get('zeitschrift', '').encode('utf-8')
99    abbr_journal = request.GET.get('abk', '').encode('utf-8')
100    isxn = request.GET.get('isxn', '').encode('utf-8')
101       
102    if title or person or subject or journal or abbr_journal or isxn:
103        if title:
104            query += 'title:%s&' % title
105        if person:
106            query += 'fperson:%s&' % person
107        if subject:
108            query += 'subject:%s&' % subject
109        if journal:
110            query += 'fjtitle:%s&' % journal
111        if abbr_journal:
112            query += 'abbr_jtitle:%s&' % abbr_journal
113        if isxn:
114            query += 'issn:%s&' % isxn # Feld, in dem alle isxns stehen basteln!
115       
116    if request.session.get('query') != query or filter_query == '':
117        request.session['searchterms'] = []
118    request.session['query'] = query
119    #query = urllib.unquote_plus(query)
120       
121    stdparams = 'facet=true&facet.field=fperson&facet.field=fsubject&facet.field=fdate&facet.field=fjtitle&facet.field=genrel1&facet.field=language&facet.field=fakultaet&facet.mincount=1&facet.tree=genrel1,genrel2&facet.tree=fakultaet,fach&facet.tree=zentraleeinheit,fach&facet.field=zentraleeinheit&facet.limit=5&wt=python&start=%s&' % str(offset)
122    ilist_params = 'fl=entryID&rows=60000&wt=python'
123    params = 'q=%s&' % urllib.quote_plus(query)
124
125    if sorting == 'yr_desc':
126        stdparams += '&sort=fdate+desc'
127        ilist_params += '&sort=fdate+desc'
128
129    ctx = {}
130       
131    ctx['sorting'] = sorting
132    request.session['sorting'] = sorting
133       
134    ctx['query'] = query
135    if filter_query:
136        if filter_query not in request.session['searchterms']:
137            request.session.setdefault('searchterms', []).append(filter_query)
138            ctx['searchterms'] = request.session['searchterms']
139        else:
140            idx = request.session['searchterms'].index(filter_query)
141            request.session['searchterms'] = request.session['searchterms'][:idx + 1]
142            ctx['searchterms'] = request.session['searchterms']
143
144    if filter_query:
145        if request.session['searchterms']:
146            params += 'fq=%s&' % filter_query
147            for term in request.session['searchterms']:
148                params += 'fq=%s&' % term
149        else:
150            params += 'fq=%s&' % filter_query
151
152    iparams = params
153    params += stdparams
154    #result = eval(urllib.urlopen('http://134.147.247.36:8080/solr/select/?', params).read())
155    result = _fetch_result(params)
156
157    if result['response']['numFound'] == 0:
158        return HttpResponseRedirect('/empty')
159    elif result['response']['numFound'] == 1:
160        return HttpResponseRedirect('/entry/%s' % result['response']['docs'][0]['entryID'])
161
162
163    ilist_result = _fetch_result(iparams + ilist_params)
164    ilist = ilist_result['response']['docs']
165    ctx['ilist'] = ilist
166
167    #logging.debug(ilist)
168
169    genre_tree = result['facet_counts']['trees']['genrel1,genrel2']
170    fak_tree = result['facet_counts']['trees']['fakultaet,fach']
171    ze_tree = result['facet_counts']['trees']['zentraleeinheit,fach']
172
173    genre = result['facet_counts']['facet_fields']['genrel1']
174    #logging.debug(result['facet_counts']['facet_fields']['language'])
175    #genre_dict = _make_dict(genre)
176    #ctx['gt'] = genre_dict
177    fak = result['facet_counts']['facet_fields']['fakultaet']
178    ze = result['facet_counts']['facet_fields']['zentraleeinheit']
179    #orga_dict = _make_dict(orga)
180
181
182#       trie = []
183#       l1_sorted = sorted(genre_dict.items(), key = lambda(k, v): (v, k), reverse = True)
184#       for l1 in l1_sorted:
185#               trie.append('%s (%s)' % (l1[0], l1[1]))
186#               trie.append(_concatenate_list(genre_tree[l1[0]]))
187#
188#       ctx['genre_tree'] = trie
189#
190    docs = result['response']['docs']
191    ctx['docs'] = docs
192#
193#       facet_dict = _concatenate_facets(result['facet_counts']['facet_fields'])
194#
195
196
197#       ctx['person_facet'] = facet_dict.get('fperson', '')
198#       ctx['date_facet'] = facet_dict.get('fdate', '')
199#       ctx['subject_facet'] = facet_dict.get('fsubject', '')
200#       ctx['jtitle_facet'] = facet_dict.get('fjtitle', '')
201#       ctx['genrel1_facet'] = facet_dict.get('genrel1', '')
202#       #ctx['genrel2_facet'] = facet_dict.get('genrel2', '')
203#       ctx['lang_facet'] = facet_dict.get('language', '')
204#       #ctx['fakultaet_facet'] = facet_dict.get('fakultaet', '')
205#       #ctx['fach_facet'] = facet_dict.get('fach', '')
206#       ctx['abbr_facet'] = facet_dict.get('abbr_jtitle', '')
207               
208    # request.session['spagination'] = _single_pagination(docs)
209
210    ctx['fakultaet_facet'] = _concatenate_facets(fak, fak_tree)
211    ctx['genre_facet'] = _concatenate_facets(genre, genre_tree)
212    ctx['zentraleeinheit_facet'] = _concatenate_facets(ze, ze_tree)
213    ctx['person_facet'] = _concatenate_facets(result['facet_counts']['facet_fields']['fperson'], [])
214    ctx['date_facet'] = _concatenate_facets(result['facet_counts']['facet_fields']['fdate'], [])
215    ctx['subject_facet'] = _concatenate_facets(result['facet_counts']['facet_fields']['fsubject'], [])
216    ctx['jtitle_facet'] = _concatenate_facets(result['facet_counts']['facet_fields']['fjtitle'], [])
217    ctx['lang_facet'] = _concatenate_facets(result['facet_counts']['facet_fields']['language'], [])
218
219    #logging.debug(ctx['date_facet'])
220    header = {}
221    header['QTime'] = result['responseHeader']['QTime']
222    header['numFound'] = result['response']['numFound']
223    ctx['header'] = header
224       
225    request.session['numFound'] = header['numFound']
226
227
228    p = Paginator(ilist, 10)
229    cur_page = p.page(request.GET.get('page', 1))
230    ctx['page_obj'] = cur_page
231    starter = int(cur_page.start_index()) - 1
232    ctx['starter'] = starter
233       
234    # watchlist_count = ''
235    # if request.session.get('watchlist'):
236    #   watchlist_count = len(request.session['watchlist'])
237    # ctx['watchlist_count'] = watchlist_count
238    if request.session.get('watchlist'):
239        ctx['watchlist'] = request.session['watchlist']
240       
241    return render_to_response('resultlist.html', ctx, context_instance=RequestContext(request))
242
243def mindex(request):
244    params = 'q=*:*&facet=true&facet.field=fakultaet&facet.field=zentraleeinheit&facet.tree=fakultaet,fach&facet.tree=zentraleeinheit,fach&facet.field=zentraleeinheit&facet.field=fsubject&facet.mincount=1&facet.limit=20&wt=python&fl=id'
245    result = _fetch_result(params)
246
247    request.session['searchterms'] = []
248
249    fak_tree = result['facet_counts']['trees']['fakultaet,fach']
250    ze_tree = result['facet_counts']['trees']['zentraleeinheit,fach']
251    fak = result['facet_counts']['facet_fields']['fakultaet']
252    ze = result['facet_counts']['facet_fields']['zentraleeinheit']
253
254    fak_facet = _concatenate_facets(fak, fak_tree)
255    ze_facet = _concatenate_facets(ze, ze_tree)
256
257    subject_facet = _concatenate_facets(result['facet_counts']['facet_fields']['fsubject'], [])
258
259    return render_to_response(
260                              'mobile_index.html', {
261                              'fakultaet_facet': fak_facet,
262                              'zentraleeinheit_facet': ze_facet,
263                              'subject_facet': subject_facet,
264                              }
265                              )
266
267def mresult(request):
268    query = request.GET.get('q', '').encode('utf-8')
269    params = 'q=%s&wt=python&rows=100&fl=title+entryID+genrel1' % urllib.quote_plus(query)
270    result = _fetch_result(params)
271
272    if result['response']['numFound'] == 0:
273        # TODO: Implement seperate page to display zero hits on mobile
274        return HttpResponseRedirect('/empty')
275    elif result['response']['numFound'] == 1:
276        return HttpResponseRedirect('/entry/%s' % result['response']['docs'][0]['entryID'])
277
278    docs = result['response']['docs']
279
280    header = {}
281    header['QTime'] = result['responseHeader']['QTime']
282    header['numFound'] = result['response']['numFound']
283
284    #request.session['numFound'] = header['numFound']
285
286    p = Paginator(docs, 10)
287    cur_page = p.page(request.GET.get('page', 1))
288    starter = int(cur_page.start_index()) - 1
289
290    return render_to_response(
291                              'mobile_resultlist.html', {
292                              'docs': docs,
293                              'header': header,
294                              'page_obj': cur_page,
295                              'starter': starter
296                              }
297                              )
298
299def mentry(request, entry_id):
300    params = 'q=entryID:%s&wt=python&mlt=true&mlt.fl=title,subject&mlt.count=5' % entry_id.encode('utf-8')
301    result = _fetch_result(params)
302    moreLikeThis = result['moreLikeThis'][entry_id]['docs']
303    record = result['response']['docs'][0]
304
305    return render_to_response(
306                              'mobile_entry.html', {
307                              'record': record,
308                              'moreLikeThis': moreLikeThis,
309                              }
310                              )
311
312def advanced(request):
313    #TODO...
314    return render_to_response('advanced_search.html', '')
315
316def info(request):
317    #TODO...
318    return render_to_response('information.html', '')
319
320def index(request):
321    #return render_to_response('index.html', '')
322    params = 'q=*:*&facet=true&facet.field=fakultaet&facet.field=zentraleeinheit&facet.tree=fakultaet,fach&facet.tree=zentraleeinheit,fach&facet.field=zentraleeinheit&facet.mincount=1&wt=python&fl=id'
323    #result = eval(urllib.urlopen('http://134.147.247.36:8080/solr/select/?q=*:*&facet=true&facet.field=fakultaet&facet.field=zentraleeinheit&facet.tree=fakultaet,fach&facet.tree=zentraleeinheit,fach&facet.field=zentraleeinheit&facet.mincount=1&wt=python&fl=id').read())
324    result = _fetch_result(params)
325
326    request.session['searchterms'] = []
327
328    fak_tree = result['facet_counts']['trees']['fakultaet,fach']
329    ze_tree = result['facet_counts']['trees']['zentraleeinheit,fach']
330    fak = result['facet_counts']['facet_fields']['fakultaet']
331    ze = result['facet_counts']['facet_fields']['zentraleeinheit']
332
333    fak_facet = _concatenate_facets(fak, fak_tree)
334    ze_facet = _concatenate_facets(ze, ze_tree)
335
336    return render_to_response(
337                              'index.html', {
338                              'fakultaet_facet': fak_facet,
339                              'zentraleeinheit_facet': ze_facet,
340                              'user': request.user,
341                              }
342                              )
343
344def empty(request):
345    # Cookies enabled?
346    # if request.session.test_cookie_worked():
347    #   request.session.delete_test_cookie()
348    # else:
349    #   return HttpResponse('Bitte Cookies einschalten!')
350
351    params = '*:*&facet=true&facet.field=fsubject&facet.mincount=1&wt=python&fl=id'
352    #result = eval(urllib.urlopen('http://134.147.247.36:8080/solr/select/?q=*:*&facet=true&facet.field=fsubject&facet.mincount=1&wt=python&fl=id').read())
353    result = _fetch_result(params)
354    facets = result['facet_counts']['facet_fields']['fsubject']
355
356    min_count = facets[-1]
357    max_count = facets[1]
358
359    freq_range = float(max_count - min_count)
360
361    MAX_WEIGHT = 5
362
363    facet_dict = {}
364
365    while facets:
366        cat, count = facets[0:2]
367        del facets[0:2]
368        weight = int(MAX_WEIGHT * (count - min_count) / freq_range)
369        facet_dict.setdefault(cat, {'query': 'subject:%22' + cat + '%22', 'weight': weight})
370
371    tagcloud = [(cat, facet_dict[cat]) for cat in sorted(facet_dict.keys())]
372       
373    return render_to_response('empty.html', {'tagcloud': tagcloud})
374
375def _watchlist_helper(watchlist):
376    wl_length = len(watchlist)
377    suffix = ''
378    if wl_length == 0 or wl_length > 1:
379        suffix = 'äge'
380    else:
381        suffix = 'ag'
382    wl_div = '<div id="merkliste"><a href="/watchlist">Merkliste&nbsp;<img src="/media/img/merkliste.png" title="Zur Merkliste gehen" alt="Zur Merkliste"/></a>&nbsp;(%d Eintr%s)</div>' % (wl_length, suffix)
383    return wl_div
384
385def ajax_watchlist_add(request):
386    wl_id = request.POST.get('id')
387    request.session.setdefault('watchlist', []).append(wl_id)
388    wl_div = _watchlist_helper(request.session.get('watchlist'))
389    return HttpResponse(wl_div, mimetype='text/html')
390       
391def watchlist_add(request):
392    if not request.session.has_key('watchlist'):
393        request.session['watchlist'] = []
394    if request.method == 'POST':
395        ids = request.POST.getlist('id')
396        for my_id in ids:
397            request.session['watchlist'].append(my_id)
398        if request.session['searchterms']:
399            if request.session['sorting'] == 'yr_desc':
400                return HttpResponseRedirect('/search?q=%s&fq=%s&sort=fdate+desc' % (request.session['query'], '+'.join(request.session['searchterms'])))
401            else:
402                return HttpResponseRedirect('/search?q=%s&fq=%s' % (request.session['query'], '+'.join(request.session['searchterms'])))
403        else:
404            return HttpResponseRedirect('/search?q=%s' % request.session['query'])
405               
406def ajax_watchlist_remove(request):
407    wl_id = request.POST.get('id')
408    request.session.get('watchlist').remove(wl_id)
409    #wl_div = _watchlist_helper(request.session.get('watchlist'))
410    #return HttpResponse(wl_div, mimetype = 'text/html')
411    return HttpResponse()
412
413def watchlist_delete(request):
414    if request.method == 'POST':
415        ids = request.POST.getlist('id')
416        for my_id in ids:
417            request.session['watchlist'].remove(my_id)
418        return HttpResponseRedirect('/watchlist')
419
420def watchlist_clear(request):
421    request.session['watchlist'] = []
422    return HttpResponseRedirect('/watchlist')
423
424def watchlist(request):
425    docs = []
426    numFound = ''
427    ids = []
428    if request.session.get('watchlist'):
429        my_ids = []
430        params = ''
431        docs = {}
432        my_ids = request.session.get('watchlist')
433        request.session['numFound'] = len(my_ids)
434        paginate_docs = []
435        for my_id in my_ids:
436            if my_ids.index(my_id) == 0:
437                params = 'q=entryID:%s' % my_id
438            else:
439                # params += ' OR entryID:%s' % my_id
440                params += '+OR+entryID:%s' % my_id
441            paginate_docs.append({'entryID': my_id})
442            ids.append('entryID:' + my_id)
443        if request.GET.get('sort'):
444            params += '&sort=%s' % SORT_OPTS[request.GET.get('sort')]
445        else:
446            params += '&sort=sperson+asc'
447        params += '&wt=python&rows=60000'
448        # Wrong url-encoding by browser???
449        params.replace(' ', '+')
450        #result = eval(urllib.urlopen('http://134.147.247.36:8080/solr/select/?', params).read())
451        result = _fetch_result(params)
452        docs = result['response']['docs']
453        # docs.reverse()
454       
455    return render_to_response('watchlist.html',
456                              {'watchlist': docs,
457                              'entryIDs': ids,
458                              'query': request.session.get('query'),
459                              'searchterms': request.session.get('searchterms', ''),
460                              'sorting': request.GET.get('sort', '')}, context_instance=RequestContext(request))
461
462def entry(request, entry_id, pos):
463    params = 'q=entryID:%s&wt=python&mlt=true&mlt.fl=title,subject&mlt.count=5' % entry_id.encode('utf-8')
464
465    #logging.info(request.META)
466    #result = eval(urllib.urlopen('http://134.147.247.36:8080/solr/select/?', params).read())
467    result = _fetch_result(params)
468
469    # 'MoreLikeThis' documents are attached to their respective source docs (via ID)
470    #my_id = entry_id.split('_')
471    #moreLikeThis = result['moreLikeThis']['tag:ub.rub.de,2009:geodidaktik:%s' % my_id[1]]['docs']
472    moreLikeThis = result['moreLikeThis'][entry_id]['docs']
473       
474    record = result['response']['docs'][0]
475
476    numFound = request.session['numFound']
477
478    # Leafing through the result set...
479    previous = ''
480    next = ''
481    offset = int(pos) - 1
482       
483    if numFound > 1:
484        if offset == 0:
485            if request.session.get('searchterms'):
486                params = 'q=%s&fq=%s&wt=python&start=1&rows=1&fl=entryID' % (request.session.get('query'), '+'.join(request.session.get('searchterms')))
487            else:
488                params = 'q=%s&wt=python&start=1&rows=1&fl=entryID' % (request.session.get('query'))
489            #result = eval(urllib.urlopen('http://134.147.247.36:8080/solr/select/?', params).read())
490            result = _fetch_result(params)
491            next = result['response']['docs'][0]['entryID']
492        elif int(pos) == numFound:
493            if request.session.get('searchterms'):
494                params = 'q=%s&fq=%s&wt=python&start=%d&rows=1&fl=entryID' % (request.session.get('query'), '+'.join(request.session.get('searchterms')), offset - 1)
495            else:
496                params = 'q=%s&wt=python&start=%d&rows=1&fl=entryID' % (request.session.get('query'), offset - 1)
497            #result = eval(urllib.urlopen('http://134.147.247.36:8080/solr/select/?', params).read())
498            result = _fetch_result(params)
499            previous = result['response']['docs'][0]['entryID']
500        else:
501            if request.session.get('searchterms'):
502                params = 'q=%s&fq=%s&wt=python&start=%d&rows=3&fl=entryID' % (request.session.get('query'), '+'.join(request.session.get('searchterms')), offset - 1)
503            else:
504                params = 'q=%s&wt=python&start=%d&rows=3&fl=entryID' % (request.session.get('query'), offset - 1)
505            #result = eval(urllib.urlopen('http://134.147.247.36:8080/solr/select/?', params).read())
506            result = _fetch_result(params)
507            previous = result['response']['docs'][0]['entryID']
508            next = result['response']['docs'][2]['entryID']
509    else:
510        pass
511
512    watchlist = request.session.get('watchlist')
513
514    # Creators can also be editors; turn them into persons...
515    persons = ''
516    if record.get('creator') and record.get('editor'):
517        persons = record.get('creator') + filter(lambda x: x not in record.get('creator'), record.get('editor'))
518    elif record.get('creator'):
519        persons = record.get('creator')
520    elif record.get('editor'):
521        persons = record.get('editor')
522
523    # Dirty hack... :-D
524    try:
525        rissn = record.get('issn')[0]
526        i = list(rissn)
527        i.insert(4, '-')
528        issn = ''.join(i)
529
530        record['issn'][0] = issn
531    except TypeError:
532        pass
533
534    return render_to_response('record.html',
535                              {'record': record,
536                              'persons': persons,
537                              'moreLikeThis': moreLikeThis,
538                              'previous': previous,
539                              'next': next,
540                              'pos': pos,
541                              'numFound': numFound,
542                              'eid': entry_id,
543                              'watchlist': watchlist,
544                              }
545                              )
546
547def entry_nopag(request, entry_id):
548    params = 'q=entryID:%s&wt=python&mlt=true&mlt.fl=title,subject&mlt.count=5' % entry_id
549
550    #result = eval(urllib.urlopen('http://134.147.247.36:8080/solr/select/?', params).read())
551    result = _fetch_result(params)
552
553    # 'MoreLikeThis' documents are attached to their respective source docs (via ID)
554    moreLikeThis = result['moreLikeThis'][entry_id]['docs']
555
556    record = result['response']['docs'][0]
557
558    # Dirty hack... :-D
559    try:
560        rissn = record.get('issn')[0]
561        i = list(rissn)
562        i.insert(4, '-')
563        issn = ''.join(i)
564
565        record['issn'][0] = issn
566    except TypeError:
567        pass
568
569    return render_to_response('record.html',
570                              {'record': record,
571                              'moreLikeThis': moreLikeThis,
572                              'previous': '',
573                              'next': '',
574                              'pos': '1',
575                              'numFound': '1',
576                              'eid': entry_id,
577                              }
578                              )
579
580
581def mltentry(request, entry_id):
582    params = 'q=entryID:%s&wt=python&mlt=true&mlt.fl=title,subject&mlt.count=5' % entry_id
583
584    #result = eval(urllib.urlopen('http://134.147.247.36:8080/solr/select/?', params).read())
585    result = _fetch_result(params)
586
587    # 'MoreLikeThis' documents are attached to their respective source docs (via ID)
588    #my_id = entry_id.split('_')
589    #moreLikeThis = result['moreLikeThis']['tag:ub.rub.de,2009:geodidaktik:%s' % my_id[1]]['docs']
590    moreLikeThis = result['moreLikeThis'][entry_id]['docs']
591       
592    record = result['response']['docs'][0]
593
594    return render_to_response('mlt.html',
595                              {'record': record,
596                              'moreLikeThis': moreLikeThis,
597                              'eid': entry_id,
598                              }
599                              )
600
601def _extract_xml(query, searchterms, format, sorting):
602    if searchterms:
603        params = 'q=%s&fq=%s&fl=%s+title+creator+fdate+id+entryID+score&wt=python&rows=60000' % (query, searchterms, format)
604    else:
605        params = 'q=%s&fl=%s+title+creator+fdate+id+entryID+score&wt=python&rows=60000' % (query, format)
606       
607    if sorting:
608        params += '&sort=%s' % SORT_OPTS[sorting]
609       
610    #result = eval(urllib.urlopen('http://134.147.247.36:8080/solr/select/?', params).read())
611    result = _fetch_result(params)
612       
613    docs = result['response']['docs']#[format]
614       
615    # for records in docs:
616    #   xml = records[format]
617    #   xml_temp = xml.replace('<![CDATA[', '')
618    #   xml_temp = xml_temp.replace(']]>', '')
619    #   records['xml'] = xml_temp
620               
621    header = {}
622    header['QTime'] = result['responseHeader']['QTime']
623    header['numFound'] = result['response']['numFound']
624       
625    return docs, header
626
627def atom_mods_dump(request):
628    query = '*:*'
629
630    docs, header = _extract_xml(query, '', 'mods', '')
631       
632    return render_to_response('atom.xml',
633                              {'docs': docs,
634                              'header': header,
635                              'query': query,
636                              'format': 'mods',
637                              },
638                              mimetype='application/atom+xml'
639                              )
640
641def atom_dc_dump(request):
642    query = '*:*'
643
644    docs, header = _extract_xml(query, '', 'dcds', '')
645
646    return render_to_response('atom.xml',
647                              {'docs': docs,
648                              'header': header,
649                              'query': query,
650                              'format': 'dcds',
651                              },
652                              mimetype='application/atom+xml'
653                              )
654
655def atom_mods(request):
656    query = request.GET.get('q', '').encode('utf-8')
657    searchterms = request.GET.get('fq', '').encode('utf-8')
658    docs, header = _extract_xml(query, searchterms, 'mods', '')
659       
660    return render_to_response('atom.xml',
661                              {'docs': docs,
662                              'header': header,
663                              'query': query,
664                              'format': 'mods',
665                              },
666                              mimetype='application/atom+xml'
667                              )
668
669def atom_dc(request):
670    query = request.GET.get('q', '').encode('utf-8')
671    searchterms = request.GET.get('fq', '').encode('utf-8')
672    docs, header = _extract_xml(query, searchterms, 'dcds', '')
673
674    return render_to_response('atom.xml',
675                              {'docs': docs,
676                              'header': header,
677                              'query': query,
678                              'format': 'dcds',
679                              },
680                              mimetype='application/atom+xml'
681                              )
682
683def xml_mods_dump(request):
684    query = '*:*'
685    docs, header = _extract_xml(query, '', 'mods', '')
686
687    return render_to_response('mods.xml',
688                              {'docs': docs},
689                              mimetype='application/xml')
690
691def xml_dc_dump(request):
692    query = '*:*'
693    docs, header = _extract_xml(query, '', 'dcds', '')
694
695    return render_to_response('dcds.xml',
696                              {'docs': docs},
697                              mimetype='application/xml')
698
699def xml_mods(request):
700    query = request.GET.get('q', '').encode('utf-8')
701    searchterms = request.GET.get('fq', '').encode('utf-8')
702    sorting = request.GET.get('sort', '')
703    docs, header = _extract_xml(query, searchterms, 'mods', sorting)
704       
705    return render_to_response('mods.xml',
706                              {'docs': docs},
707                              mimetype='application/xml')
708       
709def xml_dc(request):
710    query = request.GET.get('q', '').encode('utf-8')
711    searchterms = request.GET.get('fq', '').encode('utf-8')
712    sorting = request.GET.get('sort', '')
713    docs, header = _extract_xml(query, searchterms, 'dcds', sorting)
714
715    return render_to_response('dcds.xml',
716                              {'docs': docs},
717                              mimetype='application/xml')
718
719def xml_oai(request):
720    verb = request.GET.get('verb', '')
721
722    valid_metadata_prefixes = ('oai_dc', 'mods')
723       
724    if verb == 'Identify':
725               
726        if len(request.GET) > 1:
727            return render_to_response('oai_error.xml',
728                                      {'verb': verb,
729                                      'error_code': 'badArgument',
730                                      'error_text': 'The request includes illegal arguments, is missing required arguments, includes a repeated argument, or values for arguments have an illegal syntax.'},
731                                      mimetype='text/xml')
732        else:
733            ident_info = {
734            'repositoryName': 'Docrepoenschaften, Ruhr-Universität Bochum',
735            'baseURL': 'http://bibliographie.ub.rub.de/export/xml/oai',
736            'protocolVersion': '2.0',
737            'adminEmail': ['andre.hagenbruch@rub.de', 'veronika.josenhans@rub.de'],
738            'earliestTimestamp': '2009-04-01',
739            'deletedRecord': 'no',
740            'granularity': 'YYYY-MM-DD',
741            'repositoryIdentifier': 'docrepo.ub.rub.de',
742            'delimiter': ':',
743            'sampleIdentifier': 'oai:docrepo.ub.rub.de:zisgeo1'
744            }
745               
746            return render_to_response('oai_identify.xml',
747                                      {'verb': verb,
748                                      'info': ident_info,},
749                                      mimetype='text/xml')
750    elif verb == 'ListSets':
751               
752        if len(request.GET) > 1:
753            return render_to_response('oai_error.xml',
754                                      {'verb': verb,
755                                      'error_code': 'badArgument',
756                                      'error_text': 'The request includes illegal arguments, is missing required arguments, includes a repeated argument, or values for arguments have an illegal syntax.'},
757                                      mimetype='text/xml')
758        else:
759            set_info = {
760            'zisgeo': 'Aufsätze aus Zeitschriften der Bibliothek des Geographischen Instituts der Ruhr-Universität Bochum seit 1982.',
761            'geodidaktik': 'Aufsätze aus geographiedidaktischen Zeitschriften.'
762            }
763            params = 'q=*:*&fl=false&wt=python&facet=on&facet.field=fakultaet'
764
765            #result = eval(urllib.urlopen('http://134.147.247.36:8080/solr/select/?', params).read())
766            result = _fetch_result(params)
767
768            docs = result['facet_counts']['facet_fields']['fakultaet']
769            collections = [coll for coll in docs if docs.index(coll) % 2 == 0]
770               
771            return render_to_response('oai_listsets.xml',
772                                      {'verb': verb,
773                                      'info': set_info,
774                                      'collections': collections},
775                                      mimetype='text/xml')
776    elif verb == 'ListIdentifiers':
777        allowed_params = ('verb', 'from', 'until', 'metadataPrefix', 'set')
778
779        # Optional parameters
780        oai_from = request.GET.get('from', '')
781        oai_until = request.GET.get('until', '')
782        oai_set = request.GET.get('set', '')
783               
784        # Required parameter
785        oai_metadata_prefix = ''
786               
787        try:
788            oai_metadata_prefix = request.GET['metadataPrefix']
789            for param in request.GET.keys():
790                if param not in allowed_params:
791                    raise KeyError
792        except KeyError:
793            return render_to_response('oai_error.xml',
794                                      {'verb': verb,
795                                      'error_code': 'badArgument',
796                                      'error_text': 'The request includes illegal arguments, is missing required arguments, includes a repeated argument, or values for arguments have an illegal syntax.'},
797                                      mimetype='text/xml')
798               
799        if oai_metadata_prefix not in valid_metadata_prefixes:
800            return render_to_response('oai_error.xml',
801                                      {'verb': verb,
802                                      'error_code': 'cannotDisseminateFormat',
803                                      'error_text': 'The metadata format identified by the value given for the metadataPrefix argument is not supported by the item or by the repository.'},
804                                      mimetype='text/xml')
805        else:
806            params = ''
807            if oai_from and not oai_until:
808                params = 'q=recordCreationDate:[%s+TO+*]' % (oai_from + 'T00:00:00Z')
809            elif not oai_from and oai_until:
810                params = 'q=recordCreationDate:[*+TO+%s]' % (oai_until + 'T00:00:00Z')
811            else:
812                params = 'q=*:*'
813                               
814            if oai_set:
815                params += '+AND+fakultaet:%s' % oai_set
816                       
817            params += '&fl=entryID+recordCreationDate+fakultaet&rows=60000&wt=python'
818                       
819            #result = eval(urllib.urlopen('http://134.147.247.36:8080/solr/select/?', params).read())
820            result = _fetch_result(params)
821                       
822            docs = result['response']['docs']
823                       
824            return render_to_response('oai_listidentifiers.xml',
825                                      {'verb': verb,
826                                      'docs': docs},
827                                      mimetype='application/xml')
828    elif verb == 'ListMetadataFormat':
829        id_re = re.compile('^oai:docrepo.ub.rub.de:(\w+)')
830        identifier = request.GET.get('identifier', '')
831               
832        if not id_re.search(identifier):
833            return render_to_response('oai_error.xml',
834                                      {'verb': verb,
835                                      'error_code': 'idDoesNotExist',
836                                      'error_text': 'The value of the identifier argument is unknown or illegal in this repository.'},
837                                      mimetype='text/xml')
838        #elif:
839            #pass # Check if the ID exists in the index...
840    elif verb == 'GetRecord':
841        id_re = re.compile('.+:(.+)$')
842        oai_metadta_prefix = ''
843        try:
844            oai_metadata_prefix = request.GET.get('metadataPrefix')
845        except KeyError:
846            return render_to_response('oai_error.xml',
847                                      {'verb': verb,
848                                      'error_code': 'badArgument',
849                                      'error_text': 'The request includes illegal arguments, is missing required arguments, includes a repeated argument, or values for arguments have an illegal syntax.'},
850                                      mimetype='text/xml')
851        if oai_metadata_prefix in valid_metadata_prefixes:
852            oai_identifier = ''
853            identifier = ''
854            try:
855                oai_identifier = request.GET.get('identifier')
856                m = id_re.search(oai_identifier)
857                identifier = m.group(1)
858            except KeyError:
859                return render_to_response('oai_error.xml',
860                                          {'verb': verb,
861                                          'error_code': 'badArgument',
862                                          'error_text': 'The request includes illegal arguments, is missing required arguments, includes a repeated argument, or values for arguments have an illegal syntax.'},
863                                          mimetype='text/xml')
864                       
865            params = 'q=entryID:%s&fl=fakultaet+entryID+recordCreationDate+%s&wt=python' % (identifier, oai_metadata_prefix.replace('oai_', ''))
866                       
867            #result = eval(urllib.urlopen('http://134.147.247.36:8080/solr/select/?', params).read())
868            result = _fetch_result(params)
869                       
870            if result['response']['numFound'] == 0:
871                return render_to_response('oai_error.xml',
872                                          {'verb': verb,
873                                          'error_code': 'idDoesNotExist',
874                                          'error_text': 'The value of the identifier argument is unknown or illegal in this repository.'},
875                                          mimetype='text/xml')
876            else:
877                docs = result['response']['docs']
878                format = oai_metadata_prefix.replace('oai_', '')
879                               
880                for records in docs:
881                    xml = records[format]
882                    # xml_temp = xml.replace('<![CDATA[', '')
883                    # xml_temp = xml_temp.replace(']]>', '')
884                    xml_temp = xml.lstrip('<![CDATA[', '')
885                    xml_temp = xml_temp.rstrip(']]>', '')
886                    records[format] = xml_temp
887                                       
888                return render_to_response('oai_getrecord.xml',
889                                          {'verb': verb,
890                                          'record': docs[0],
891                                          'oai_id': oai_identifier,
892                                          'format': format},
893                                          mimetype='text/xml')
894        else:
895            return render_to_response('oai_error.xml',
896                                      {'verb': verb,
897                                      'error_code': 'cannotDisseminateFormat',
898                                      'error_text': 'The metadata format identified by the value given for the metadataPrefix argument is not supported by the item or by the repository.'},
899                                      mimetype='text/xml')
900    else:
901        return render_to_response('oai_error.xml',
902                                  {'verb': verb,
903                                  'error_code': 'badVerb',
904                                  'error_text': 'Value of the verb argument is not a legal OAI-PMH verb, the verb argument is missing, or the verb argument is repeated.'},
905                                  mimetype='text/xml')
906
907def _extract_text(query, searchterms, format, sorting):
908    if searchterms:
909        params = 'q=%s&fq=%s&fl=%s&wt=python&rows=60000' % (query, searchterms, format)
910    else:
911        params = 'q=%s&fl=%s&wt=python&rows=60000' % (query, format)
912
913    if sorting:
914        params += '&sort=%s' % SORT_OPTS[sorting]
915    #result = eval(urllib.urlopen('http://134.147.247.36:8080/solr/select/?', params).read())
916    result = _fetch_result(params)
917
918    return result['response']['docs']
919
920def text_bibtex_dump(request):
921    query = '*:*'
922    docs = _extract_text(query, 'bibtex')
923
924    return render_to_response('bibtex.txt',
925                              {'docs': docs},
926                              mimetype='text/plain')
927
928def text_bibtex(request):
929    query = request.GET.get('q', '').encode('utf-8')
930    searchterms = request.GET.get('fq', '').encode('utf-8')
931    sorting = request.GET.get('sort', '')
932    docs = _extract_text(query, searchterms, 'bibtex', sorting)
933
934    return render_to_response('bibtex.txt',
935                              {'docs': docs},
936                              mimetype='text/plain')
937
938def text_ris_dump(request):
939    query = '*:*'
940    docs = _extract_text(query, 'ris')
941
942    return render_to_response('ris.txt',
943                              {'docs': docs},
944                              mimetype='application/x-Research-Info-Systems')
945
946
947def text_ris(request):
948    query = request.GET.get('q', '').encode('utf-8')
949    searchterms = request.GET.get('fq', '').encode('utf-8')
950    sorting = request.GET.get('sort', '')
951    docs = _extract_text(query, searchterms, 'ris', sorting)
952
953    return render_to_response('ris.txt',
954                              {'docs': docs},
955                              mimetype='application/x-Research-Info-Systems')
956
957def object_json_dump(request):
958    query = '*:*'
959    docs = _extract_text(query, 'json')
960       
961    return render_to_response('object.json',
962                              {'docs': docs},
963                              mimetype='application/json')
964
965def object_json(request):
966    query = request.GET.get('q', '').encode('utf-8')
967    searchterms = request.GET.get('fq', '').encode('utf-8')
968    sorting = request.GET.get('sort', '')
969    docs = _extract_text(query, searchterms, 'json', sorting)
970       
971    return render_to_response('object.json',
972                              {'docs': docs},
973                              mimetype='application/json')
974
975def _cloudmaker(facets, facet):
976    min_count = facets[-1]
977    max_count = facets[1]
978
979    freq_range = float(max_count - min_count)
980
981    MAX_WEIGHT = 5
982
983    facet_dict = {}
984    tag_cloud = []
985       
986    # Sometimes all counts are 1 which leads to a ZeroDivisionError...
987    try:
988        while facets:
989            cat, count = facets[0:2]
990            del facets[0:2]
991            weight = int(MAX_WEIGHT * (count - min_count) / freq_range)
992            facet_dict.setdefault(cat, {'query': facet + ':%22' + cat + '%22', 'weight': weight})
993
994        tagcloud = [(cat, facet_dict[cat]) for cat in sorted(facet_dict.keys())]
995    except ZeroDivisionError:
996        while facets:
997            cat, count = facets[0:2]
998            del facets[0:2]
999            facet_dict.setdefault(cat, {'query': facet + ':%22' + cat + '%22', 'weight': 0})
1000        tagcloud = [(cat, facet_dict[cat]) for cat in sorted(facet_dict.keys())]
1001               
1002    return tagcloud
1003       
1004
1005def fakcloud(request, fakultaet):
1006    request.session.set_test_cookie()
1007
1008    params = 'fakultaet:%s&facet=true&facet.field=fsubject&facet.field=fjtitle&facet.field=fperson&facet.mincount=1&wt=python&fl=id'
1009    #result = eval(urllib.urlopen('http://134.147.247.36:8080/solr/select/?q=fakultaet:%s&facet=true&facet.field=fsubject&facet.field=fjtitle&facet.field=fperson&facet.mincount=1&wt=python&fl=id' % fakultaet).read())
1010    result = _fetch_result(params % fakultaet)
1011    subject_facets = result['facet_counts']['facet_fields']['fsubject']
1012    jtitle_facets = result['facet_counts']['facet_fields']['fjtitle']
1013    person_facets = result['facet_counts']['facet_fields']['fperson']
1014
1015    subject_cloud = _cloudmaker(subject_facets, 'fsubject')
1016    jtitle_cloud = _cloudmaker(jtitle_facets, 'fjtitle')
1017    person_cloud = _cloudmaker(person_facets, 'fperson')
1018
1019    return render_to_response('fakcloud.html',
1020                              {
1021                              'subject_cloud': subject_cloud,
1022                              'jtitle_cloud': jtitle_cloud,
1023                              'person_cloud': person_cloud,
1024                              'fakultaet': fakultaet,
1025                              }
1026                              )
1027
1028def cloud(request, category):
1029    #base = 'http://134.147.247.36:8080/solr/select/?q=*:*&facet=true&facet.field=%s&facet.mincount=1&wt=python&fl=id'
1030    params = 'q=*:*&facet=true&facet.field=%s&facet.mincount=1&wt=python&fl=id'
1031    facet = ''
1032    fresult = ''
1033
1034    facet_map = {
1035        'person': 'fperson',
1036        'subject': 'fsubject',
1037        'journal': 'fjtitle'
1038    }
1039
1040    if not category in ('person', 'subject', 'journal'):
1041        return HttpResponseRedirect('/cloud_error', 'Zu dieser Kategorie gibt es keine Cloud!')
1042    else:
1043        facet = facet_map.get(category)
1044
1045    #result = eval(urllib.urlopen(base % facet).read())
1046    result = _fetch_result(params % facet)
1047    fresult = result['facet_counts']['facet_fields'][facet_map.get(category)]
1048
1049    mycloud = _cloudmaker(fresult, facet_map.get(category))
1050
1051    return render_to_response('cloud.html', {'cloud': mycloud})
1052
1053def _zero_strip(counts, years):
1054    while counts[0] == 0:
1055        del counts[0]
1056        del years[0]
1057
1058    counts.reverse()
1059    years.reverse()
1060
1061    return counts, years
1062
1063def _make_timeline(result):
1064    '''Publication frequency by years'''
1065    docs = result['facet_counts']['facet_fields']
1066
1067    timeline = []
1068
1069    while docs['fdate']:
1070        (date, date_count) = docs['fdate'][0:2]
1071        del docs['fdate'][0:2]
1072        timeline.append('%s, %s' % (date[0:4], date_count))
1073
1074    return timeline
1075
1076def stats(request, cat, query):
1077    '''Retrieve date facet data for publication timelines. Valid categories are
1078    faculties, research departments, subjects, persons, or topics. For faculties
1079    we also fetch data for subordinated subjects so it can be displayed alongside
1080    the faculty diagram.'''
1081
1082    if cat not in ('fakultaet', 'zentraleeinheit', 'fach', 'person', 'subject'):
1083        return HttpResponseRedirect('/stats_error', 'Zu dieser Kategorie gibt es keine Statistik!')
1084    else:
1085        if cat == 'fakultaet':
1086            faecher = {}
1087            params = 'q=fakultaet:"%s"&rows=0&facet=true&facet.tree=fakultaet,fach&facet.field=fdate&facet.mincount=1&wt=python' % query
1088            result = _fetch_result(params)
1089
1090            if len(result['facet_counts']['trees']['fakultaet,fach'].get(query, '')) > 0:
1091                for fach in result['facet_counts']['trees']['fakultaet,fach'][query]:
1092                    if not unicode(fach).isdigit():
1093                        fparams = 'q=fach:%s&rows=0&facet=true&facet.field=fdate&facet.sort=index&facet.mincount=1&wt=python' % fach.encode('utf-8')
1094                        fresult = _fetch_result(fparams)
1095                        #faecher.setdefault(fach, {}).setdefault('count', fresult['response']['numFound'])
1096                        faecher.setdefault(fach, {}).setdefault('timeline', _make_timeline(fresult))
1097
1098            timeline = _make_timeline(result)
1099
1100            #logging.debug(timeline)
1101            #logging.debug(faecher)
1102           
1103            return render_to_response('stats.html',
1104                                      {'timeline': timeline,
1105                                      'cat': cat,
1106                                      'name': query,
1107                                      'faecher': faecher
1108                                      }
1109                                      )
1110        else:
1111            params = 'q=%s:"%s"&rows=0&facet=true&facet.field=fdate&facet.sort=index&wt=python&facet.mincount=1' % (cat, query)
1112            result = _fetch_result(params)
1113            timeline = _make_timeline(result)
1114
1115            return render_to_response('stats.html',
1116                                      {'timeline': timeline,
1117                                      'cat': cat,
1118                                      'name': query
1119                                      }
1120                                      )
1121
1122def rdf_export(request, format, entry_ID):
1123    uri = 'http://bibliographie.ub.rub.de/entry/%s' % entry_ID
1124    form = {
1125        # 'host': 'xhtml',
1126        'parser': 'strict',
1127        }
1128       
1129    retval = processURI(uri, format, form)
1130    if format == "n3":
1131        # print 'Content-Type: text/n3; charset=utf-8'
1132        return render_to_response('n3.txt',
1133                                  {'nthree': retval},
1134                                  # mimetype = 'text/n3'
1135                                  mimetype='text/plain'
1136                                  )
1137    elif format == "nt":
1138        # print 'Content-Type: text/turtle; charset=utf-8'
1139        return render_to_response('nt.txt',
1140                                  {'nt': retval},
1141                                  # mimetype = 'text/turtle'
1142                                  mimetype='text/plain'
1143                                  )
1144    elif format == "turtle":
1145        # print 'Content-Type: text/turtle; charset=utf-8'
1146        return render_to_response('turtle.txt',
1147                                  {'turtle': retval},
1148                                  # mimetype = 'text/turtle'
1149                                  mimetype='text/plain'
1150                                  )
1151    else:
1152        # print 'Content-Type: application/rdf+xml; charset=utf-8'
1153        return render_to_response('rdf.xml',
1154                                  {'rdfxml': retval},
1155                                  mimetype='application/rdf+xml'
1156                                  )
1157
1158def unapi(request):
1159    if request.GET.get('id', '').encode('utf-8') and request.GET.get('format', ''):
1160        unapi_id = request.GET.get('id', '')
1161        unapi_format = request.GET.get('format', '')
1162
1163        parts = unapi_id.split('/')
1164
1165        params = 'q=entryID:%s&wt=python&fl=%s' % (parts[4], unapi_format)
1166        #result = eval(urllib.urlopen('http://134.147.247.36:8080/solr/select/?', params).read())
1167        result = _fetch_result(params)
1168
1169        docs = result['response']['docs']
1170
1171        if result['response']['numFound'] == 0:
1172            resp = HttpResponse()
1173            resp.status_code = 404
1174            return resp
1175
1176        resp = HttpResponse()
1177
1178        if unapi_format == 'mods':
1179            resp = render_to_response('mods.xml',
1180                                      {'docs': docs},
1181                                      mimetype='application/xml')
1182        elif unapi_format == 'dc':
1183            resp = render_to_response('dcds.xml',
1184                                      {'docs': docs},
1185                                      mimetype='application/xml'
1186                                      )
1187        elif unapi_format == 'ris':
1188            resp = render_to_response('ris.txt',
1189                                      {'docs': docs},
1190                                      mimetype='text/plain')
1191        elif unapi_format == 'bibtex':
1192            resp = render_to_response('bibtex.txt',
1193                                      {'docs': docs},
1194                                      mimetype='text/plain')
1195        else:
1196            resp.status_code = 406
1197            return resp
1198
1199        resp.status_code = 302
1200        return resp
1201               
1202    elif request.GET.get('id', ''):
1203        unapi_id = request.GET.get('id', '')
1204        resp = render_to_response('unapi_desc.xml',
1205                                  {'unapi_id': unapi_id},
1206                                  mimetype='application/xml')
1207        resp.status_code = 300
1208        return resp
1209    else:
1210        resp = render_to_response('unapi_desc.xml',
1211                                  {},
1212                                  mimetype='application/xml')
1213        resp.status_code = 300
1214        return resp
1215
1216def creator(request, name):
1217    return HttpResponseRedirect('/search?q=creator:%s' % name)
1218
1219def editor(request, name):
1220    return HttpResponseRedirect('/search?q=editor:%s' % name)
1221
1222def person(request, name):
1223    return HttpResponseRedirect('/search?q=person:%s' % name)
1224
1225def subject(request, subject):
1226    return HttpResponseRedirect('/search?q=subject:%s' % subject)
1227
1228def journal(request, journal):
1229    return HttpResponseRedirect('/search?q=journal_title:%s' % journal)
1230
1231def series(request, series):
1232    return HttpResponseRedirect('/search?q=series_title:%s' % series)
1233
1234def fakultaet(request, fakultaet):
1235    return HttpResponseRedirect('/search?q=fakultaet:%s' % fakultaet)
1236
1237def fach(request, fach):
1238    return HttpResponseRedirect('/search?q=fach:%s' % fach)
1239
1240def signin(request):
1241    usr = request.POST.get('username', '')
1242    pw = request.POST.get('password', '')
1243    user = auth.authenticate(username=usr, password=pw)
1244    if user is not None:
1245        auth.login(request, user)
1246        return HttpResponseRedirect('/')
1247    else:
1248        return render_to_response('authenticated.html',
1249                                  {'usr': usr,
1250                                  'pw': 'Nicht authentifiziert'}
1251                                  )
1252
1253def logout(request):
1254    auth.logout(request)
1255    return HttpResponseRedirect('/')
Note: See TracBrowser for help on using the repository browser.