]> ToastFreeware Gitweb - philipp/winterrodeln/wradmin.git/blob - wradmin/wradmin/controllers/gasthaus.py
fcbea1d062cbcbb2c769a075b4a4f8a3fb4aefdf
[philipp/winterrodeln/wradmin.git] / wradmin / wradmin / controllers / gasthaus.py
1 #!/usr/bin/python2.6
2 # -*- coding: iso-8859-15 -*-
3 import logging
4
5 from pylons import request, response, session, url, tmpl_context as c
6 from pylons.controllers.util import abort, redirect
7 import webhelpers.paginate as paginate
8
9 from wradmin.lib.base import BaseController, render
10 import wradmin.model as model
11 import sqlalchemy as sa
12 import formencode
13 import re
14
15 import wrpylib.wrmwmarkup
16
17 log = logging.getLogger(__name__)
18
19 class GasthausController(BaseController):
20
21     def list(self):
22         "Lists all inns"
23         q = model.meta.Session.query(model.WrInnCache)
24         q = q.order_by(model.WrInnCache.page_title)
25         c.paginator = paginate.Page(q, page=int(request.params.get('page', 1)), items_per_page = 25)
26         return render('gasthaus_list.html')
27     
28     
29     def view(self, id):
30         "Displays an inn"
31         q = model.meta.Session.query(model.WrInnCache)
32         c.inn =  q.get(id)
33         if c.inn is None: abort(404)
34         return render('gasthaus_view.html')
35     
36     
37     def update(self):
38         "Updates the wrinncache table from the wiki"
39         from wradmin.model import page_table as page, wrinncache_table as wrinncache, categorylinks_table as categorylinks, revision_table as revision, text_table as text
40         from sqlalchemy.sql import select
41         c = model.meta.Session.connection()
42         
43         # Query all inns
44         q = select([page, categorylinks, revision, text], (page.c.page_latest==revision.c.rev_id) & (text.c.old_id==revision.c.rev_text_id) & (categorylinks.c.cl_from==page.c.page_id) & (categorylinks.c.cl_to==u'Gasthaus'))
45         inn_pages = c.execute(q)
46         
47         # Delete all existing entries in wrinncache
48         c.execute(wrinncache.delete())
49         
50         # Refill wrinncache table
51         error_msg = u''
52         for inn_page in inn_pages:
53             try: 
54                 start, end, inn = wrpylib.wrmwmarkup.gasthausbox_to_inn(inn_page.old_text, model.WrInnCache())
55                 inn.page_id = inn_page.page_id
56                 inn.page_title = inn_page.page_title
57                 inn.under_construction = c.execute(select([categorylinks], (categorylinks.c.cl_from==inn_page.page_id) & (categorylinks.c.cl_to == u'In_Arbeit')).alias('x').count()).fetchone()[0] > 0 # It would be better to do this in the query above
58                 model.meta.Session.add(inn)
59             except (RuntimeError, formencode.Invalid) as e: error_msg = u"Fehler bei Gasthaus '%s': " % inn_page.page_title + unicode(e)
60         model.meta.Session.commit()
61         
62         # Redirect to result page
63         if error_msg == '': session['flash'] = u'Die Gasthausliste wurde erfolgreich aktualisiert.'
64         else: session['flash'] = error_msg
65         session.save()
66         return redirect(url(controller='gasthaus', action='list'))