Mercurial > libervia-web
annotate libervia/web/pages/forums/view/page_meta.py @ 1644:8a09eea9003f default tip
doc (user): Add doc for forum feature:
fix 463
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 06 Sep 2025 17:28:07 +0200 |
parents | c03297bb8d19 |
children |
rev | line source |
---|---|
1216 | 1 #!/usr/bin/env python3 |
1239 | 2 |
1058 | 3 |
1518
eb00d593801d
refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents:
1509
diff
changeset
|
4 from libervia.web.server.constants import Const as C |
eb00d593801d
refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents:
1509
diff
changeset
|
5 from libervia.backend.core.i18n import _, D_ |
eb00d593801d
refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents:
1509
diff
changeset
|
6 from libervia.backend.core.log import getLogger |
eb00d593801d
refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents:
1509
diff
changeset
|
7 from libervia.backend.tools.common import data_format |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1077
diff
changeset
|
8 |
1145
29eb15062416
pages: set __name__ for imported pages
Goffi <goffi@goffi.org>
parents:
1124
diff
changeset
|
9 log = getLogger(__name__) |
1058 | 10 |
1216 | 11 name = "forum_view" |
1427
eaf36fffcbdb
pages (forums): better breadcrumbs
Goffi <goffi@goffi.org>
parents:
1426
diff
changeset
|
12 label = D_("View") |
1642
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
13 access = C.PAGES_ACCESS_PROFILE |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
14 template = "forum/view_messages.html" |
1058 | 15 |
16 | |
17 def parse_url(self, request): | |
1642
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
18 self.get_path_args(request, ["service", "node", "item"], 3, service="jid") |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
19 |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
20 |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
21 def add_breadcrumb(self, request, breadcrumbs): |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
22 return None |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1077
diff
changeset
|
23 |
1058 | 24 |
1427
eaf36fffcbdb
pages (forums): better breadcrumbs
Goffi <goffi@goffi.org>
parents:
1426
diff
changeset
|
25 async def prepare_render(self, request): |
1642
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
26 profile = self.get_profile(request) or C.SERVICE_PROFILE |
1509
106bae41f5c8
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
1427
diff
changeset
|
27 data = self.get_r_data(request) |
1642
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
28 parent_service, parent_node, parent_item_id = ( |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
29 data["service"], |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
30 data["node"], |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
31 data["item"], |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
32 ) |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
33 parent_item_data = data_format.deserialise( |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
34 await self.host.bridge_call( |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
35 "mb_get", |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
36 parent_service.userhost(), |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
37 parent_node, |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
38 C.NO_LIMIT, |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
39 [parent_item_id], |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
40 data_format.serialise({}), |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
41 profile, |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
42 ) |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
43 ) |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
44 parent_item = parent_item_data["items"][0] |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
45 try: |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
46 service_s = parent_item["comments"][0]["service"] |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
47 node = parent_item["comments"][0]["node"] |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
48 except (KeyError, IndexError) as e: |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
49 log.warning(f"No comment node found {e}:\n{parent_item=}") |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
50 self.page_error(request, C.HTTP_SERVICE_UNAVAILABLE) |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
51 return |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
52 |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
53 page_max = data.get("page_max", 20) |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
54 extra = self.get_pubsub_extra(request, page_max=page_max) |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
55 self.handle_search(request, extra) |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
56 if not self.use_cache(request): |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
57 extra[C.KEY_USE_CACHE] = False |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
58 blog_data = data_format.deserialise( |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
59 await self.host.bridge_call( |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
60 "mb_get", |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
61 service_s, |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
62 node, |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
63 C.NO_LIMIT, |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
64 [], |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
65 data_format.serialise(extra), |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
66 profile, |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
67 ) |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
68 ) |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
69 for parent_item in blog_data["items"]: |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
70 try: |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
71 comments_service = parent_item["comments"][0]["service"] |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
72 comments_node = parent_item["comments"][0]["node"] |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
73 except (KeyError, IndexError): |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
74 log.warning(f"Can't get comments node for item: {parent_item}") |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
75 continue |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
76 else: |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
77 parent_item["http_url"] = self.get_page_by_name("forum_view").get_url( |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
78 comments_service, comments_node |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
79 ) |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
80 self.set_pagination(request, blog_data) |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
81 await self.fill_missing_identities( |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
82 request, [i["author_jid"] for i in blog_data["items"]] |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
83 ) |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
84 |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
85 # We check if we are subscribed to the service. |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
86 try: |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
87 subscriptions = data_format.deserialise( |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
88 await self.host.bridge_call( |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
89 "ps_subscriptions_get", |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
90 service_s, |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
91 node, |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
92 profile, |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
93 ) |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
94 ) |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
95 except Exception as e: |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
96 log.warning("Can't retrieve subscriptions, assuming that we are not subscribed.") |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
97 subscribed = False |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
98 else: |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
99 subscribed = any(s.get("state") == "subscribed" for s in subscriptions) |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
100 |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
101 request.template_data.update( |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
102 { |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
103 "topic_title": parent_item["title"], |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
104 "service": service_s, |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
105 "node": node, |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
106 "blog_items": blog_data, |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
107 "subscribed": subscribed, |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
108 } |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
109 ) |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
110 self.expose_to_scripts(request, node=node, service=service_s, subscribed=subscribed) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1077
diff
changeset
|
111 |
1058 | 112 |
1426
4cf2b73e63aa
pages (forums/view): use rich content to post a reply
Goffi <goffi@goffi.org>
parents:
1239
diff
changeset
|
113 async def on_data_post(self, request): |
1509
106bae41f5c8
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
1427
diff
changeset
|
114 profile = self.get_profile(request) |
1058 | 115 if profile is None: |
1509
106bae41f5c8
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
1427
diff
changeset
|
116 self.page_error(request, C.HTTP_FORBIDDEN) |
106bae41f5c8
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
1427
diff
changeset
|
117 type_ = self.get_posted_data(request, "type") |
1216 | 118 if type_ == "comment": |
1509
106bae41f5c8
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
1427
diff
changeset
|
119 service, node, body = self.get_posted_data(request, ("service", "node", "body")) |
1058 | 120 |
121 if not body: | |
1509
106bae41f5c8
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
1427
diff
changeset
|
122 self.page_error(request, C.HTTP_BAD_REQUEST) |
1639
301fe2f1a34a
Update `mb_send` calls following changes in backend.
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
123 mb_data = {"service": service, "node": node, "content_rich": body} |
1058 | 124 try: |
1509
106bae41f5c8
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
1427
diff
changeset
|
125 await self.host.bridge_call( |
1642
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
126 "mb_send", data_format.serialise(mb_data), profile |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1639
diff
changeset
|
127 ) |
1058 | 128 except Exception as e: |
1216 | 129 if "forbidden" in str(e): |
1509
106bae41f5c8
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
1427
diff
changeset
|
130 self.page_error(request, 401) |
1058 | 131 else: |
132 raise e | |
133 else: | |
1216 | 134 log.warning(_("Unhandled data type: {}").format(type_)) |