annotate src/pages/common/blog/page_meta.py @ 1068:5e809a49971c

pages: new pages_tools module: this module will have helper methods which are common but not common enough to be in the main LiberviaPage class. A first method retrieve comments and convert them to data objects.
author Goffi <goffi@goffi.org>
date Sun, 18 Mar 2018 11:34:01 +0100
parents 50ba8947a6e8
children 7dc20bacd3b6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
928
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
1 #!/usr/bin/env python2.7
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
3 from libervia.server.constants import Const as C
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
4 from twisted.words.protocols.jabber import jid
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
5 from twisted.internet import defer
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
6 from sat.tools.common import data_objects
947
92f0eeb6dc72 pages: cache identities identities in session + get identities for comments in blog
Goffi <goffi@goffi.org>
parents: 939
diff changeset
7 from libervia.server import session_iface
928
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
8 from sat.core.i18n import _
1029
78b7b5ec7ca1 pages (common/blog): if background is set in user preferences, use it
Goffi <goffi@goffi.org>
parents: 1026
diff changeset
9 from sat.tools.common.template import safe
1048
d4290178662c pages (common/blog): fixed bad import
Goffi <goffi@goffi.org>
parents: 1042
diff changeset
10 from libervia.server import utils
1051
d3ac6fb10fd5 pages (common/blog): tranform special characters to their ascii equivalent
Goffi <goffi@goffi.org>
parents: 1048
diff changeset
11 import unicodedata
1036
f5661761b1b9 pages (common/blog): URL improvments:
Goffi <goffi@goffi.org>
parents: 1029
diff changeset
12 import re
1029
78b7b5ec7ca1 pages (common/blog): if background is set in user preferences, use it
Goffi <goffi@goffi.org>
parents: 1026
diff changeset
13 import cgi
1057
50ba8947a6e8 common/blog: "service" and "node" are now set in template_data
Goffi <goffi@goffi.org>
parents: 1051
diff changeset
14 from sat.core.log import getLogger
928
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
15 log = getLogger('pages/common/blog')
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
16
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
17 """generic blog (with service/node provided)"""
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
18 name = u'blog'
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
19 template = u"blog/articles.html"
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
20 uri_handlers = {(u'pubsub', u'microblog'): 'microblog_uri'}
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
21
1051
d3ac6fb10fd5 pages (common/blog): tranform special characters to their ascii equivalent
Goffi <goffi@goffi.org>
parents: 1048
diff changeset
22 RE_TEXT_URL = re.compile(ur'[^a-zA-Z,_]+')
1036
f5661761b1b9 pages (common/blog): URL improvments:
Goffi <goffi@goffi.org>
parents: 1029
diff changeset
23 TEXT_MAX_LEN = 60
1042
f7d45c989c05 pages (common/blog): use more friendly URLs
Goffi <goffi@goffi.org>
parents: 1040
diff changeset
24 TEXT_WORD_MIN_LENGHT = 4
f7d45c989c05 pages (common/blog): use more friendly URLs
Goffi <goffi@goffi.org>
parents: 1040
diff changeset
25 URL_LIMIT_MARK = 90 # if canonical URL is longer than that, text will not be appended
928
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
26
1057
50ba8947a6e8 common/blog: "service" and "node" are now set in template_data
Goffi <goffi@goffi.org>
parents: 1051
diff changeset
27
928
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
28 def microblog_uri(self, uri_data):
1038
6b906b1f419a pages: fixed XMPP URIs handling
Goffi <goffi@goffi.org>
parents: 1036
diff changeset
29 args = [uri_data[u'path'], uri_data[u'node']]
6b906b1f419a pages: fixed XMPP URIs handling
Goffi <goffi@goffi.org>
parents: 1036
diff changeset
30 if u'item' in uri_data:
6b906b1f419a pages: fixed XMPP URIs handling
Goffi <goffi@goffi.org>
parents: 1036
diff changeset
31 args.extend([u'id', uri_data[u'item']])
6b906b1f419a pages: fixed XMPP URIs handling
Goffi <goffi@goffi.org>
parents: 1036
diff changeset
32 return self.getURL(*args)
928
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
33
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
34 def parse_url(self, request):
1016
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
35 """URL is /[service]/[node]/[filter_keyword]/[item]|[other]
928
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
36
1016
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
37 if [node] is '@', default namespace is used
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
38 if a value is unset, default one will be used
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
39 keyword can be one of:
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
40 id: next value is a item id
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
41 tag: next value is a blog tag
928
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
42 """
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
43 data = self.getRData(request)
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
44
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
45 try:
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
46 service = self.nextPath(request)
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
47 except IndexError:
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
48 data['service'] = u''
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
49 else:
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
50 try:
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
51 data[u"service"] = jid.JID(service)
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
52 except Exception:
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
53 log.warning(_(u"bad service entered: {}").format(service))
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
54 self.pageError(request, C.HTTP_BAD_REQUEST)
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
55
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
56 try:
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
57 data['node'] = self.nextPath(request)
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
58 except IndexError:
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
59 data['node'] = u''
1016
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
60 else:
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
61 if data['node'] == u'@':
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
62 data['node'] = u''
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
63
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
64 try:
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
65 filter_kw = data['filter_keyword'] = self.nextPath(request)
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
66 except IndexError:
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
67 pass
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
68 else:
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
69 if filter_kw == u'id':
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
70 try:
1024
2ae3b6291456 pages (common/blog): handle tags filtering using "/tag/[tag]" in path
Goffi <goffi@goffi.org>
parents: 1016
diff changeset
71 data[u'item'] = self.nextPath(request)
2ae3b6291456 pages (common/blog): handle tags filtering using "/tag/[tag]" in path
Goffi <goffi@goffi.org>
parents: 1016
diff changeset
72 except IndexError:
2ae3b6291456 pages (common/blog): handle tags filtering using "/tag/[tag]" in path
Goffi <goffi@goffi.org>
parents: 1016
diff changeset
73 self.pageError(request, C.HTTP_BAD_REQUEST)
1036
f5661761b1b9 pages (common/blog): URL improvments:
Goffi <goffi@goffi.org>
parents: 1029
diff changeset
74 # we get one more argument in case text has been added to have a nice URL
f5661761b1b9 pages (common/blog): URL improvments:
Goffi <goffi@goffi.org>
parents: 1029
diff changeset
75 try:
f5661761b1b9 pages (common/blog): URL improvments:
Goffi <goffi@goffi.org>
parents: 1029
diff changeset
76 self.nextPath(request)
f5661761b1b9 pages (common/blog): URL improvments:
Goffi <goffi@goffi.org>
parents: 1029
diff changeset
77 except IndexError:
f5661761b1b9 pages (common/blog): URL improvments:
Goffi <goffi@goffi.org>
parents: 1029
diff changeset
78 pass
1024
2ae3b6291456 pages (common/blog): handle tags filtering using "/tag/[tag]" in path
Goffi <goffi@goffi.org>
parents: 1016
diff changeset
79 elif filter_kw == u'tag':
2ae3b6291456 pages (common/blog): handle tags filtering using "/tag/[tag]" in path
Goffi <goffi@goffi.org>
parents: 1016
diff changeset
80 try:
2ae3b6291456 pages (common/blog): handle tags filtering using "/tag/[tag]" in path
Goffi <goffi@goffi.org>
parents: 1016
diff changeset
81 data[u'tag'] = self.nextPath(request)
1016
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
82 except IndexError:
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
83 self.pageError(request, C.HTTP_BAD_REQUEST)
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
84 else:
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
85 # invalid filter keyword
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
86 log.warning(_(u"invalid filter keyword: {filter_kw}").format(filter_kw=filter_kw))
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
87 self.pageError(request, C.HTTP_BAD_REQUEST)
928
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
88
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
89
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
90 @defer.inlineCallbacks
947
92f0eeb6dc72 pages: cache identities identities in session + get identities for comments in blog
Goffi <goffi@goffi.org>
parents: 939
diff changeset
91 def appendComments(self, blog_items, identities, profile):
932
af6a62e21053 pages (common/blog): new show_comments variable is used in session data, if True comments are grabbed and chained to items
Goffi <goffi@goffi.org>
parents: 928
diff changeset
92 for blog_item in blog_items:
947
92f0eeb6dc72 pages: cache identities identities in session + get identities for comments in blog
Goffi <goffi@goffi.org>
parents: 939
diff changeset
93 if identities is not None:
92f0eeb6dc72 pages: cache identities identities in session + get identities for comments in blog
Goffi <goffi@goffi.org>
parents: 939
diff changeset
94 author = blog_item.author_jid
1039
6bc7768faa5d pages (common/blog): don't fail if author is missing
Goffi <goffi@goffi.org>
parents: 1038
diff changeset
95 if not author:
6bc7768faa5d pages (common/blog): don't fail if author is missing
Goffi <goffi@goffi.org>
parents: 1038
diff changeset
96 log.warning(_(u"no author found for item {item_id}").format(item_id=blog_item.id))
6bc7768faa5d pages (common/blog): don't fail if author is missing
Goffi <goffi@goffi.org>
parents: 1038
diff changeset
97 else:
6bc7768faa5d pages (common/blog): don't fail if author is missing
Goffi <goffi@goffi.org>
parents: 1038
diff changeset
98 if author not in identities:
6bc7768faa5d pages (common/blog): don't fail if author is missing
Goffi <goffi@goffi.org>
parents: 1038
diff changeset
99 identities[author] = yield self.host.bridgeCall(u'identityGet', author, profile)
932
af6a62e21053 pages (common/blog): new show_comments variable is used in session data, if True comments are grabbed and chained to items
Goffi <goffi@goffi.org>
parents: 928
diff changeset
100 for comment_data in blog_item.comments:
af6a62e21053 pages (common/blog): new show_comments variable is used in session data, if True comments are grabbed and chained to items
Goffi <goffi@goffi.org>
parents: 928
diff changeset
101 service = comment_data[u'service']
af6a62e21053 pages (common/blog): new show_comments variable is used in session data, if True comments are grabbed and chained to items
Goffi <goffi@goffi.org>
parents: 928
diff changeset
102 node = comment_data[u'node']
948
c20ac29d869f pages (common/blog): don't fail if an error is raised while getting comment
Goffi <goffi@goffi.org>
parents: 947
diff changeset
103 try:
1040
90b11cd6f28f pages (common/blog): use bridgeCall instead of bridge
Goffi <goffi@goffi.org>
parents: 1039
diff changeset
104 comments_data = yield self.host.bridgeCall(u'mbGet',
948
c20ac29d869f pages (common/blog): don't fail if an error is raised while getting comment
Goffi <goffi@goffi.org>
parents: 947
diff changeset
105 service,
c20ac29d869f pages (common/blog): don't fail if an error is raised while getting comment
Goffi <goffi@goffi.org>
parents: 947
diff changeset
106 node,
c20ac29d869f pages (common/blog): don't fail if an error is raised while getting comment
Goffi <goffi@goffi.org>
parents: 947
diff changeset
107 C.NO_LIMIT,
c20ac29d869f pages (common/blog): don't fail if an error is raised while getting comment
Goffi <goffi@goffi.org>
parents: 947
diff changeset
108 [],
c20ac29d869f pages (common/blog): don't fail if an error is raised while getting comment
Goffi <goffi@goffi.org>
parents: 947
diff changeset
109 {},
c20ac29d869f pages (common/blog): don't fail if an error is raised while getting comment
Goffi <goffi@goffi.org>
parents: 947
diff changeset
110 profile)
c20ac29d869f pages (common/blog): don't fail if an error is raised while getting comment
Goffi <goffi@goffi.org>
parents: 947
diff changeset
111 except Exception as e:
c20ac29d869f pages (common/blog): don't fail if an error is raised while getting comment
Goffi <goffi@goffi.org>
parents: 947
diff changeset
112 log.warning(_(u"Can't get comments at {node} (service: {service}): {msg}").format(
c20ac29d869f pages (common/blog): don't fail if an error is raised while getting comment
Goffi <goffi@goffi.org>
parents: 947
diff changeset
113 service=service,
c20ac29d869f pages (common/blog): don't fail if an error is raised while getting comment
Goffi <goffi@goffi.org>
parents: 947
diff changeset
114 node=node,
c20ac29d869f pages (common/blog): don't fail if an error is raised while getting comment
Goffi <goffi@goffi.org>
parents: 947
diff changeset
115 msg=e))
c20ac29d869f pages (common/blog): don't fail if an error is raised while getting comment
Goffi <goffi@goffi.org>
parents: 947
diff changeset
116 continue
c20ac29d869f pages (common/blog): don't fail if an error is raised while getting comment
Goffi <goffi@goffi.org>
parents: 947
diff changeset
117
932
af6a62e21053 pages (common/blog): new show_comments variable is used in session data, if True comments are grabbed and chained to items
Goffi <goffi@goffi.org>
parents: 928
diff changeset
118 comments = data_objects.BlogItems(comments_data)
af6a62e21053 pages (common/blog): new show_comments variable is used in session data, if True comments are grabbed and chained to items
Goffi <goffi@goffi.org>
parents: 928
diff changeset
119 blog_item.appendCommentsItems(comments)
947
92f0eeb6dc72 pages: cache identities identities in session + get identities for comments in blog
Goffi <goffi@goffi.org>
parents: 939
diff changeset
120 yield appendComments(self, comments, identities, profile)
932
af6a62e21053 pages (common/blog): new show_comments variable is used in session data, if True comments are grabbed and chained to items
Goffi <goffi@goffi.org>
parents: 928
diff changeset
121
1011
fe08a5c95b27 pages (blog): added pagination using RSM and blog now fill older_url and newer_url in template_data
Goffi <goffi@goffi.org>
parents: 996
diff changeset
122 @defer.inlineCallbacks
1016
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
123 def getBlogData(self, request, service, node, item_id, extra, profile):
1011
fe08a5c95b27 pages (blog): added pagination using RSM and blog now fill older_url and newer_url in template_data
Goffi <goffi@goffi.org>
parents: 996
diff changeset
124 try:
1016
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
125 if item_id:
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
126 items_id = [item_id]
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
127 else:
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
128 items_id = []
1040
90b11cd6f28f pages (common/blog): use bridgeCall instead of bridge
Goffi <goffi@goffi.org>
parents: 1039
diff changeset
129 blog_data = yield self.host.bridgeCall(u'mbGet',
1011
fe08a5c95b27 pages (blog): added pagination using RSM and blog now fill older_url and newer_url in template_data
Goffi <goffi@goffi.org>
parents: 996
diff changeset
130 service.userhost(),
fe08a5c95b27 pages (blog): added pagination using RSM and blog now fill older_url and newer_url in template_data
Goffi <goffi@goffi.org>
parents: 996
diff changeset
131 node,
fe08a5c95b27 pages (blog): added pagination using RSM and blog now fill older_url and newer_url in template_data
Goffi <goffi@goffi.org>
parents: 996
diff changeset
132 C.NO_LIMIT,
1016
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
133 items_id,
1011
fe08a5c95b27 pages (blog): added pagination using RSM and blog now fill older_url and newer_url in template_data
Goffi <goffi@goffi.org>
parents: 996
diff changeset
134 extra,
fe08a5c95b27 pages (blog): added pagination using RSM and blog now fill older_url and newer_url in template_data
Goffi <goffi@goffi.org>
parents: 996
diff changeset
135 profile)
fe08a5c95b27 pages (blog): added pagination using RSM and blog now fill older_url and newer_url in template_data
Goffi <goffi@goffi.org>
parents: 996
diff changeset
136 except Exception as e:
fe08a5c95b27 pages (blog): added pagination using RSM and blog now fill older_url and newer_url in template_data
Goffi <goffi@goffi.org>
parents: 996
diff changeset
137 # FIXME: need a better way to test errors in bridge errback
fe08a5c95b27 pages (blog): added pagination using RSM and blog now fill older_url and newer_url in template_data
Goffi <goffi@goffi.org>
parents: 996
diff changeset
138 if u"forbidden" in unicode(e):
fe08a5c95b27 pages (blog): added pagination using RSM and blog now fill older_url and newer_url in template_data
Goffi <goffi@goffi.org>
parents: 996
diff changeset
139 self.pageError(request, 401)
fe08a5c95b27 pages (blog): added pagination using RSM and blog now fill older_url and newer_url in template_data
Goffi <goffi@goffi.org>
parents: 996
diff changeset
140 else:
fe08a5c95b27 pages (blog): added pagination using RSM and blog now fill older_url and newer_url in template_data
Goffi <goffi@goffi.org>
parents: 996
diff changeset
141 raise e
fe08a5c95b27 pages (blog): added pagination using RSM and blog now fill older_url and newer_url in template_data
Goffi <goffi@goffi.org>
parents: 996
diff changeset
142
fe08a5c95b27 pages (blog): added pagination using RSM and blog now fill older_url and newer_url in template_data
Goffi <goffi@goffi.org>
parents: 996
diff changeset
143 items = data_objects.BlogItems(blog_data)
fe08a5c95b27 pages (blog): added pagination using RSM and blog now fill older_url and newer_url in template_data
Goffi <goffi@goffi.org>
parents: 996
diff changeset
144 defer.returnValue((blog_data, items))
932
af6a62e21053 pages (common/blog): new show_comments variable is used in session data, if True comments are grabbed and chained to items
Goffi <goffi@goffi.org>
parents: 928
diff changeset
145
af6a62e21053 pages (common/blog): new show_comments variable is used in session data, if True comments are grabbed and chained to items
Goffi <goffi@goffi.org>
parents: 928
diff changeset
146 @defer.inlineCallbacks
928
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
147 def prepare_render(self, request):
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
148 data = self.getRData(request)
932
af6a62e21053 pages (common/blog): new show_comments variable is used in session data, if True comments are grabbed and chained to items
Goffi <goffi@goffi.org>
parents: 928
diff changeset
149 # if the comments are not explicitly hidden, we show them
1016
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
150 service, node, item_id, show_comments = data.get(u'service', u''), data.get(u'node', u''), data.get(u'item'), data.get(u'show_comments', True)
928
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
151 profile = self.getProfile(request)
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
152 if profile is None:
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
153 profile = C.SERVICE_PROFILE
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
154
1057
50ba8947a6e8 common/blog: "service" and "node" are now set in template_data
Goffi <goffi@goffi.org>
parents: 1051
diff changeset
155 ## pagination/filtering parameters
1011
fe08a5c95b27 pages (blog): added pagination using RSM and blog now fill older_url and newer_url in template_data
Goffi <goffi@goffi.org>
parents: 996
diff changeset
156 params = self.getAllPostedData(request, multiple=False)
1016
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
157 if item_id:
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
158 extra = {}
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
159 else:
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
160 extra = {u'rsm_max': u'10'}
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
161 if u'after' in params:
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
162 extra[u'rsm_after'] = params[u'after']
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
163 elif u'before' in params:
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
164 extra[u'rsm_before'] = params[u'before']
1024
2ae3b6291456 pages (common/blog): handle tags filtering using "/tag/[tag]" in path
Goffi <goffi@goffi.org>
parents: 1016
diff changeset
165 tag = data.get('tag')
2ae3b6291456 pages (common/blog): handle tags filtering using "/tag/[tag]" in path
Goffi <goffi@goffi.org>
parents: 1016
diff changeset
166 if tag:
2ae3b6291456 pages (common/blog): handle tags filtering using "/tag/[tag]" in path
Goffi <goffi@goffi.org>
parents: 1016
diff changeset
167 extra[u'mam_filter_{}'.format(C.MAM_FILTER_CATEGORY)] = tag
928
ee243d48100e pages (common): added common hierarchy for reusable pages (blog is the first)
Goffi <goffi@goffi.org>
parents:
diff changeset
168
1057
50ba8947a6e8 common/blog: "service" and "node" are now set in template_data
Goffi <goffi@goffi.org>
parents: 1051
diff changeset
169 ## main data ##
50ba8947a6e8 common/blog: "service" and "node" are now set in template_data
Goffi <goffi@goffi.org>
parents: 1051
diff changeset
170 # we get data from backend/XMPP here
1016
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
171 blog_data, items = yield getBlogData(self, request, service, node, item_id, extra, profile)
1057
50ba8947a6e8 common/blog: "service" and "node" are now set in template_data
Goffi <goffi@goffi.org>
parents: 1051
diff changeset
172
50ba8947a6e8 common/blog: "service" and "node" are now set in template_data
Goffi <goffi@goffi.org>
parents: 1051
diff changeset
173 ## navigation ##
50ba8947a6e8 common/blog: "service" and "node" are now set in template_data
Goffi <goffi@goffi.org>
parents: 1051
diff changeset
174 # no let's fill service, node and pagination URLs
947
92f0eeb6dc72 pages: cache identities identities in session + get identities for comments in blog
Goffi <goffi@goffi.org>
parents: 939
diff changeset
175 template_data = request.template_data
1057
50ba8947a6e8 common/blog: "service" and "node" are now set in template_data
Goffi <goffi@goffi.org>
parents: 1051
diff changeset
176 if u'service' not in template_data:
50ba8947a6e8 common/blog: "service" and "node" are now set in template_data
Goffi <goffi@goffi.org>
parents: 1051
diff changeset
177 template_data[u'service'] = service
50ba8947a6e8 common/blog: "service" and "node" are now set in template_data
Goffi <goffi@goffi.org>
parents: 1051
diff changeset
178 if u'node' not in template_data:
50ba8947a6e8 common/blog: "service" and "node" are now set in template_data
Goffi <goffi@goffi.org>
parents: 1051
diff changeset
179 template_data[u'node'] = node
1036
f5661761b1b9 pages (common/blog): URL improvments:
Goffi <goffi@goffi.org>
parents: 1029
diff changeset
180 target_profile = template_data.get(u'target_profile')
f5661761b1b9 pages (common/blog): URL improvments:
Goffi <goffi@goffi.org>
parents: 1029
diff changeset
181
1011
fe08a5c95b27 pages (blog): added pagination using RSM and blog now fill older_url and newer_url in template_data
Goffi <goffi@goffi.org>
parents: 996
diff changeset
182 if items:
1016
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
183 if not item_id:
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
184 last_id = items[-1].id
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
185 template_data['older_url'] = self.getParamURL(request, after=last_id)
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
186 if u'before' in params or u'after' in params:
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
187 first_id = items[0].id
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
188 template_data['newer_url'] = self.getParamURL(request, before=first_id)
1011
fe08a5c95b27 pages (blog): added pagination using RSM and blog now fill older_url and newer_url in template_data
Goffi <goffi@goffi.org>
parents: 996
diff changeset
189 else:
1016
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
190 if item_id:
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
191 # if item id has been specified in URL and it's not found,
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
192 # we must return an error
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
193 self.pageError(request, C.HTTP_NOT_FOUND)
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
194
1011
fe08a5c95b27 pages (blog): added pagination using RSM and blog now fill older_url and newer_url in template_data
Goffi <goffi@goffi.org>
parents: 996
diff changeset
195 # no items, we have requested items before last post, or blog is empty
fe08a5c95b27 pages (blog): added pagination using RSM and blog now fill older_url and newer_url in template_data
Goffi <goffi@goffi.org>
parents: 996
diff changeset
196 extra = {u'rsm_max': u'10'}
1016
fc1c913cc9d1 pages (blog_new, common/blog): various blog improvments:
Goffi <goffi@goffi.org>
parents: 1011
diff changeset
197 blog_data, items = yield getBlogData(self, request, service, node, None, extra, profile)
1011
fe08a5c95b27 pages (blog): added pagination using RSM and blog now fill older_url and newer_url in template_data
Goffi <goffi@goffi.org>
parents: 996
diff changeset
198 if items:
fe08a5c95b27 pages (blog): added pagination using RSM and blog now fill older_url and newer_url in template_data
Goffi <goffi@goffi.org>
parents: 996
diff changeset
199 last_id = items[-1].id
fe08a5c95b27 pages (blog): added pagination using RSM and blog now fill older_url and newer_url in template_data
Goffi <goffi@goffi.org>
parents: 996
diff changeset
200 template_data['older_url'] = self.getParamURL(request, after=last_id)
fe08a5c95b27 pages (blog): added pagination using RSM and blog now fill older_url and newer_url in template_data
Goffi <goffi@goffi.org>
parents: 996
diff changeset
201
1057
50ba8947a6e8 common/blog: "service" and "node" are now set in template_data
Goffi <goffi@goffi.org>
parents: 1051
diff changeset
202 ## identities ##
50ba8947a6e8 common/blog: "service" and "node" are now set in template_data
Goffi <goffi@goffi.org>
parents: 1051
diff changeset
203 # identities are use to show nice nickname or avatars
947
92f0eeb6dc72 pages: cache identities identities in session + get identities for comments in blog
Goffi <goffi@goffi.org>
parents: 939
diff changeset
204 identities = template_data[u'identities'] = self.host.getSessionData(request, session_iface.ISATSession).identities
932
af6a62e21053 pages (common/blog): new show_comments variable is used in session data, if True comments are grabbed and chained to items
Goffi <goffi@goffi.org>
parents: 928
diff changeset
205
1057
50ba8947a6e8 common/blog: "service" and "node" are now set in template_data
Goffi <goffi@goffi.org>
parents: 1051
diff changeset
206 ## Comments ##
50ba8947a6e8 common/blog: "service" and "node" are now set in template_data
Goffi <goffi@goffi.org>
parents: 1051
diff changeset
207 # if comments are requested, we need to take them
932
af6a62e21053 pages (common/blog): new show_comments variable is used in session data, if True comments are grabbed and chained to items
Goffi <goffi@goffi.org>
parents: 928
diff changeset
208 if show_comments:
947
92f0eeb6dc72 pages: cache identities identities in session + get identities for comments in blog
Goffi <goffi@goffi.org>
parents: 939
diff changeset
209 yield appendComments(self, items, identities, profile)
932
af6a62e21053 pages (common/blog): new show_comments variable is used in session data, if True comments are grabbed and chained to items
Goffi <goffi@goffi.org>
parents: 928
diff changeset
210
1057
50ba8947a6e8 common/blog: "service" and "node" are now set in template_data
Goffi <goffi@goffi.org>
parents: 1051
diff changeset
211 ## URLs ##
50ba8947a6e8 common/blog: "service" and "node" are now set in template_data
Goffi <goffi@goffi.org>
parents: 1051
diff changeset
212 # We will fill items_http_uri and tags_http_uri in template_data with suitable urls
1036
f5661761b1b9 pages (common/blog): URL improvments:
Goffi <goffi@goffi.org>
parents: 1029
diff changeset
213 # if we know the profile, we use it instead of service + blog (nicer url)
f5661761b1b9 pages (common/blog): URL improvments:
Goffi <goffi@goffi.org>
parents: 1029
diff changeset
214 if target_profile is None:
1042
f7d45c989c05 pages (common/blog): use more friendly URLs
Goffi <goffi@goffi.org>
parents: 1040
diff changeset
215 blog_base_url_item = self.getPageByName(u'blog_view').getURL(service.full(), node or u'@', u'id')
f7d45c989c05 pages (common/blog): use more friendly URLs
Goffi <goffi@goffi.org>
parents: 1040
diff changeset
216 blog_base_url_tag = self.getPageByName(u'blog_view').getURL(service.full(), node or u'@', u'tag')
1036
f5661761b1b9 pages (common/blog): URL improvments:
Goffi <goffi@goffi.org>
parents: 1029
diff changeset
217 else:
1042
f7d45c989c05 pages (common/blog): use more friendly URLs
Goffi <goffi@goffi.org>
parents: 1040
diff changeset
218 blog_base_url_item = self.getURLByNames([(u'user', [target_profile]), (u'user_blog', [u'id'])])
f7d45c989c05 pages (common/blog): use more friendly URLs
Goffi <goffi@goffi.org>
parents: 1040
diff changeset
219 blog_base_url_tag = self.getURLByNames([(u'user', [target_profile]), (u'user_blog', [u'tag'])])
1036
f5661761b1b9 pages (common/blog): URL improvments:
Goffi <goffi@goffi.org>
parents: 1029
diff changeset
220 # we also set the background image if specified by user
1029
78b7b5ec7ca1 pages (common/blog): if background is set in user preferences, use it
Goffi <goffi@goffi.org>
parents: 1026
diff changeset
221 bg_img = yield self.host.bridgeCall(u'asyncGetParamA', u'Background', u'Blog page', u'value', -1, template_data[u'target_profile'])
78b7b5ec7ca1 pages (common/blog): if background is set in user preferences, use it
Goffi <goffi@goffi.org>
parents: 1026
diff changeset
222 if bg_img:
78b7b5ec7ca1 pages (common/blog): if background is set in user preferences, use it
Goffi <goffi@goffi.org>
parents: 1026
diff changeset
223 template_data['dynamic_style'] = safe(u"""
78b7b5ec7ca1 pages (common/blog): if background is set in user preferences, use it
Goffi <goffi@goffi.org>
parents: 1026
diff changeset
224 :root {
78b7b5ec7ca1 pages (common/blog): if background is set in user preferences, use it
Goffi <goffi@goffi.org>
parents: 1026
diff changeset
225 --bg-img: url("%s");
78b7b5ec7ca1 pages (common/blog): if background is set in user preferences, use it
Goffi <goffi@goffi.org>
parents: 1026
diff changeset
226 }
78b7b5ec7ca1 pages (common/blog): if background is set in user preferences, use it
Goffi <goffi@goffi.org>
parents: 1026
diff changeset
227 """ % cgi.escape(bg_img, True))
933
e4c13a995e0b pages (common/blog): data post (i.e. new comments) is now handled
Goffi <goffi@goffi.org>
parents: 932
diff changeset
228
1036
f5661761b1b9 pages (common/blog): URL improvments:
Goffi <goffi@goffi.org>
parents: 1029
diff changeset
229 template_data[u'items'] = data[u'items'] = items
f5661761b1b9 pages (common/blog): URL improvments:
Goffi <goffi@goffi.org>
parents: 1029
diff changeset
230 if request.args.get('reverse') == ['1']:
f5661761b1b9 pages (common/blog): URL improvments:
Goffi <goffi@goffi.org>
parents: 1029
diff changeset
231 template_data[u'items'].items.reverse()
f5661761b1b9 pages (common/blog): URL improvments:
Goffi <goffi@goffi.org>
parents: 1029
diff changeset
232 template_data[u'items_http_uri'] = items_http_uri = {}
f5661761b1b9 pages (common/blog): URL improvments:
Goffi <goffi@goffi.org>
parents: 1029
diff changeset
233 template_data[u'tags_http_uri'] = tags_http_uri = {}
1057
50ba8947a6e8 common/blog: "service" and "node" are now set in template_data
Goffi <goffi@goffi.org>
parents: 1051
diff changeset
234
50ba8947a6e8 common/blog: "service" and "node" are now set in template_data
Goffi <goffi@goffi.org>
parents: 1051
diff changeset
235
1036
f5661761b1b9 pages (common/blog): URL improvments:
Goffi <goffi@goffi.org>
parents: 1029
diff changeset
236 for item in items:
1042
f7d45c989c05 pages (common/blog): use more friendly URLs
Goffi <goffi@goffi.org>
parents: 1040
diff changeset
237 blog_canonical_url = u'/'.join([blog_base_url_item, utils.quote(item.id)])
f7d45c989c05 pages (common/blog): use more friendly URLs
Goffi <goffi@goffi.org>
parents: 1040
diff changeset
238 if len(blog_canonical_url) > URL_LIMIT_MARK:
f7d45c989c05 pages (common/blog): use more friendly URLs
Goffi <goffi@goffi.org>
parents: 1040
diff changeset
239 blog_url = blog_canonical_url
f7d45c989c05 pages (common/blog): use more friendly URLs
Goffi <goffi@goffi.org>
parents: 1040
diff changeset
240 else:
f7d45c989c05 pages (common/blog): use more friendly URLs
Goffi <goffi@goffi.org>
parents: 1040
diff changeset
241 # we add text from title or body at the end of URL
1057
50ba8947a6e8 common/blog: "service" and "node" are now set in template_data
Goffi <goffi@goffi.org>
parents: 1051
diff changeset
242 # to make it more human readable
1042
f7d45c989c05 pages (common/blog): use more friendly URLs
Goffi <goffi@goffi.org>
parents: 1040
diff changeset
243 text = item.title or item.content
1051
d3ac6fb10fd5 pages (common/blog): tranform special characters to their ascii equivalent
Goffi <goffi@goffi.org>
parents: 1048
diff changeset
244 # we change special chars to ascii one, trick found at https://stackoverflow.com/a/3194567
d3ac6fb10fd5 pages (common/blog): tranform special characters to their ascii equivalent
Goffi <goffi@goffi.org>
parents: 1048
diff changeset
245 text = unicodedata.normalize('NFD', text).encode('ascii', 'ignore')
1042
f7d45c989c05 pages (common/blog): use more friendly URLs
Goffi <goffi@goffi.org>
parents: 1040
diff changeset
246 text = RE_TEXT_URL.sub(u' ', text).lower()
f7d45c989c05 pages (common/blog): use more friendly URLs
Goffi <goffi@goffi.org>
parents: 1040
diff changeset
247 text = u'-'.join([t for t in text.split() if t and len(t)>=TEXT_WORD_MIN_LENGHT])
f7d45c989c05 pages (common/blog): use more friendly URLs
Goffi <goffi@goffi.org>
parents: 1040
diff changeset
248 while len(text) > TEXT_MAX_LEN:
f7d45c989c05 pages (common/blog): use more friendly URLs
Goffi <goffi@goffi.org>
parents: 1040
diff changeset
249 if u'-' in text:
f7d45c989c05 pages (common/blog): use more friendly URLs
Goffi <goffi@goffi.org>
parents: 1040
diff changeset
250 text = text.rsplit(u'-', 1)[0]
f7d45c989c05 pages (common/blog): use more friendly URLs
Goffi <goffi@goffi.org>
parents: 1040
diff changeset
251 else:
f7d45c989c05 pages (common/blog): use more friendly URLs
Goffi <goffi@goffi.org>
parents: 1040
diff changeset
252 text = text[:TEXT_MAX_LEN]
f7d45c989c05 pages (common/blog): use more friendly URLs
Goffi <goffi@goffi.org>
parents: 1040
diff changeset
253 if text:
f7d45c989c05 pages (common/blog): use more friendly URLs
Goffi <goffi@goffi.org>
parents: 1040
diff changeset
254 blog_url = blog_canonical_url + u'/' + text
1036
f5661761b1b9 pages (common/blog): URL improvments:
Goffi <goffi@goffi.org>
parents: 1029
diff changeset
255 else:
1042
f7d45c989c05 pages (common/blog): use more friendly URLs
Goffi <goffi@goffi.org>
parents: 1040
diff changeset
256 blog_url = blog_canonical_url
1036
f5661761b1b9 pages (common/blog): URL improvments:
Goffi <goffi@goffi.org>
parents: 1029
diff changeset
257
f5661761b1b9 pages (common/blog): URL improvments:
Goffi <goffi@goffi.org>
parents: 1029
diff changeset
258 items_http_uri[item.id] = self.host.getExtBaseURL(request, blog_url)
f5661761b1b9 pages (common/blog): URL improvments:
Goffi <goffi@goffi.org>
parents: 1029
diff changeset
259 for tag in item.tags:
f5661761b1b9 pages (common/blog): URL improvments:
Goffi <goffi@goffi.org>
parents: 1029
diff changeset
260 if tag not in tags_http_uri:
1042
f7d45c989c05 pages (common/blog): use more friendly URLs
Goffi <goffi@goffi.org>
parents: 1040
diff changeset
261 tag_url = u'/'.join([blog_base_url_tag, utils.quote(tag)])
1036
f5661761b1b9 pages (common/blog): URL improvments:
Goffi <goffi@goffi.org>
parents: 1029
diff changeset
262 tags_http_uri[tag] = self.host.getExtBaseURL(request, tag_url)
1057
50ba8947a6e8 common/blog: "service" and "node" are now set in template_data
Goffi <goffi@goffi.org>
parents: 1051
diff changeset
263
50ba8947a6e8 common/blog: "service" and "node" are now set in template_data
Goffi <goffi@goffi.org>
parents: 1051
diff changeset
264 # if True, page should display a comment box
1036
f5661761b1b9 pages (common/blog): URL improvments:
Goffi <goffi@goffi.org>
parents: 1029
diff changeset
265 template_data[u'allow_commenting'] = data.get(u'allow_commenting', False)
f5661761b1b9 pages (common/blog): URL improvments:
Goffi <goffi@goffi.org>
parents: 1029
diff changeset
266
933
e4c13a995e0b pages (common/blog): data post (i.e. new comments) is now handled
Goffi <goffi@goffi.org>
parents: 932
diff changeset
267
e4c13a995e0b pages (common/blog): data post (i.e. new comments) is now handled
Goffi <goffi@goffi.org>
parents: 932
diff changeset
268 @defer.inlineCallbacks
e4c13a995e0b pages (common/blog): data post (i.e. new comments) is now handled
Goffi <goffi@goffi.org>
parents: 932
diff changeset
269 def on_data_post(self, request):
e4c13a995e0b pages (common/blog): data post (i.e. new comments) is now handled
Goffi <goffi@goffi.org>
parents: 932
diff changeset
270 profile = self.getProfile(request)
e4c13a995e0b pages (common/blog): data post (i.e. new comments) is now handled
Goffi <goffi@goffi.org>
parents: 932
diff changeset
271 if profile is None:
e4c13a995e0b pages (common/blog): data post (i.e. new comments) is now handled
Goffi <goffi@goffi.org>
parents: 932
diff changeset
272 self.pageError(request, C.HTTP_UNAUTHORIZED)
939
1375b96f4309 pages (common/blog): check posted data type for comments
Goffi <goffi@goffi.org>
parents: 933
diff changeset
273 type_ = self.getPostedData(request, u'type')
1375b96f4309 pages (common/blog): check posted data type for comments
Goffi <goffi@goffi.org>
parents: 933
diff changeset
274 if type_ == u'comment':
1375b96f4309 pages (common/blog): check posted data type for comments
Goffi <goffi@goffi.org>
parents: 933
diff changeset
275 service, node, body = self.getPostedData(request, (u'service', u'node', u'body'))
1375b96f4309 pages (common/blog): check posted data type for comments
Goffi <goffi@goffi.org>
parents: 933
diff changeset
276
1375b96f4309 pages (common/blog): check posted data type for comments
Goffi <goffi@goffi.org>
parents: 933
diff changeset
277 if not body:
1375b96f4309 pages (common/blog): check posted data type for comments
Goffi <goffi@goffi.org>
parents: 933
diff changeset
278 self.pageError(request, C.HTTP_BAD_REQUEST)
1375b96f4309 pages (common/blog): check posted data type for comments
Goffi <goffi@goffi.org>
parents: 933
diff changeset
279 comment_data = {u"content": body}
1375b96f4309 pages (common/blog): check posted data type for comments
Goffi <goffi@goffi.org>
parents: 933
diff changeset
280 try:
1040
90b11cd6f28f pages (common/blog): use bridgeCall instead of bridge
Goffi <goffi@goffi.org>
parents: 1039
diff changeset
281 yield self.host.bridgeCall(u'mbSend', service, node, comment_data, profile)
939
1375b96f4309 pages (common/blog): check posted data type for comments
Goffi <goffi@goffi.org>
parents: 933
diff changeset
282 except Exception as e:
1375b96f4309 pages (common/blog): check posted data type for comments
Goffi <goffi@goffi.org>
parents: 933
diff changeset
283 if u"forbidden" in unicode(e):
1375b96f4309 pages (common/blog): check posted data type for comments
Goffi <goffi@goffi.org>
parents: 933
diff changeset
284 self.pageError(request, 401)
1375b96f4309 pages (common/blog): check posted data type for comments
Goffi <goffi@goffi.org>
parents: 933
diff changeset
285 else:
1375b96f4309 pages (common/blog): check posted data type for comments
Goffi <goffi@goffi.org>
parents: 933
diff changeset
286 raise e
1375b96f4309 pages (common/blog): check posted data type for comments
Goffi <goffi@goffi.org>
parents: 933
diff changeset
287 else:
1375b96f4309 pages (common/blog): check posted data type for comments
Goffi <goffi@goffi.org>
parents: 933
diff changeset
288 log.warning(_(u"Unhandled data type: {}").format(type_))