Mercurial > libervia-web
comparison src/pages/forums/topics/page_meta.py @ 1058:2290b6ec3991
pages (forums): first draft
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 30 Jan 2018 08:15:04 +0100 |
parents | |
children | cdd389ef97bc |
comparison
equal
deleted
inserted
replaced
1057:50ba8947a6e8 | 1058:2290b6ec3991 |
---|---|
1 #!/usr/bin/env python2.7 | |
2 # -*- coding: utf-8 -*- | |
3 | |
4 from libervia.server.constants import Const as C | |
5 from twisted.internet import defer | |
6 from sat.core.i18n import _ | |
7 from sat.core.log import getLogger | |
8 from sat.tools.common import uri as xmpp_uri | |
9 log = getLogger('pages/forums/topics') | |
10 | |
11 name = u"forum_topics" | |
12 access = C.PAGES_ACCESS_PUBLIC | |
13 template = u"forum/view_topics.html" | |
14 | |
15 | |
16 def parse_url(self, request): | |
17 self.getPathArgs(request, ['service', 'node'], 2, | |
18 service = u'jid') | |
19 | |
20 | |
21 @defer.inlineCallbacks | |
22 def prepare_render(self, request): | |
23 profile = self.getProfile(request) or C.SERVICE_PROFILE | |
24 data = self.getRData(request) | |
25 service, node = data[u'service'], data[u'node'] | |
26 request.template_data.update({u'service': service, u'node': node}) | |
27 template_data = request.template_data | |
28 topics, metadata = yield self.host.bridgeCall(u'forumTopicsGet', service.full(), node, {}, profile) | |
29 template_data[u'identities'] = identities = {} | |
30 for topic in topics: | |
31 parsed_uri = xmpp_uri.parseXMPPUri(topic[u'uri']) | |
32 author = topic[u'author'] | |
33 topic[u'http_uri'] = self.getPageByName(u'forum_view').getURL(parsed_uri[u'path'], parsed_uri[u'node']) | |
34 if author not in identities: | |
35 identities[topic[u'author']] = yield self.host.bridgeCall(u'identityGet', author, profile) | |
36 template_data[u'topics'] = topics | |
37 | |
38 @defer.inlineCallbacks | |
39 def on_data_post(self, request): | |
40 profile = self.getProfile(request) | |
41 if profile is None: | |
42 self.pageError(request, C.HTTP_UNAUTHORIZED) | |
43 type_ = self.getPostedData(request, u'type') | |
44 if type_ == u'new_topic': | |
45 service, node, title, body = self.getPostedData(request, (u'service', u'node', u'title', u'body')) | |
46 | |
47 if not title or not body: | |
48 self.pageError(request, C.HTTP_BAD_REQUEST) | |
49 topic_data = {u"title": title, u"content": body} | |
50 try: | |
51 yield self.host.bridgeCall(u'forumTopicCreate', service, node, topic_data, profile) | |
52 except Exception as e: | |
53 if u"forbidden" in unicode(e): | |
54 self.pageError(request, 401) | |
55 else: | |
56 raise e | |
57 else: | |
58 log.warning(_(u"Unhandled data type: {}").format(type_)) |