Mercurial > libervia-web
annotate libervia/web/pages/forums/topics/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 uri as xmpp_uri |
eb00d593801d
refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents:
1509
diff
changeset
|
8 from libervia.backend.tools.common import data_format |
eb00d593801d
refactoring: rename `libervia` to `libervia.web` + update imports following backend changes
Goffi <goffi@goffi.org>
parents:
1509
diff
changeset
|
9 from libervia.web.server import session_iface |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1058
diff
changeset
|
10 |
1145
29eb15062416
pages: set __name__ for imported pages
Goffi <goffi@goffi.org>
parents:
1124
diff
changeset
|
11 log = getLogger(__name__) |
1058 | 12 |
1216 | 13 name = "forum_topics" |
1427
eaf36fffcbdb
pages (forums): better breadcrumbs
Goffi <goffi@goffi.org>
parents:
1425
diff
changeset
|
14 label = D_("Forum Topics") |
1058 | 15 access = C.PAGES_ACCESS_PUBLIC |
1216 | 16 template = "forum/view_topics.html" |
1058 | 17 |
18 | |
19 def parse_url(self, request): | |
1509
106bae41f5c8
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
1506
diff
changeset
|
20 self.get_path_args(request, ["service", "node"], 2, service="jid") |
1058 | 21 |
22 | |
1427
eaf36fffcbdb
pages (forums): better breadcrumbs
Goffi <goffi@goffi.org>
parents:
1425
diff
changeset
|
23 def add_breadcrumb(self, request, breadcrumbs): |
1642
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
24 return None |
1427
eaf36fffcbdb
pages (forums): better breadcrumbs
Goffi <goffi@goffi.org>
parents:
1425
diff
changeset
|
25 |
eaf36fffcbdb
pages (forums): better breadcrumbs
Goffi <goffi@goffi.org>
parents:
1425
diff
changeset
|
26 |
eaf36fffcbdb
pages (forums): better breadcrumbs
Goffi <goffi@goffi.org>
parents:
1425
diff
changeset
|
27 async def prepare_render(self, request): |
1509
106bae41f5c8
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
1506
diff
changeset
|
28 profile = self.get_profile(request) or C.SERVICE_PROFILE |
106bae41f5c8
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
1506
diff
changeset
|
29 data = self.get_r_data(request) |
1216 | 30 service, node = data["service"], data["node"] |
31 request.template_data.update({"service": service, "node": node}) | |
1058 | 32 template_data = request.template_data |
1432
fa6fe9511aca
pages (forums/topics): deserialise extra + use pagination
Goffi <goffi@goffi.org>
parents:
1427
diff
changeset
|
33 page_max = data.get("page_max", 20) |
1509
106bae41f5c8
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
1506
diff
changeset
|
34 extra = self.get_pubsub_extra(request, page_max=page_max) |
1642
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
35 if not self.use_cache(request): |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
36 extra[C.KEY_USE_CACHE] = False |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
37 blog_data = data_format.deserialise( |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
38 await self.host.bridge_call( |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
39 'mb_get', |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
40 service.userhost(), |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
41 node, |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
42 C.NO_LIMIT, |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
43 [], |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
44 data_format.serialise(extra), |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
45 profile |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
46 ) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1058
diff
changeset
|
47 ) |
1642
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
48 for item in blog_data["items"]: |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
49 try: |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
50 # We check that there is a comment node for this topic. |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
51 item["comments"][0]["service"] |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
52 item["comments"][0]["node"] |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
53 except (KeyError, IndexError): |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
54 log.warning(f"Can't get comments node for item: {item}") |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
55 continue |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
56 else: |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
57 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:
1518
diff
changeset
|
58 service.full(), node, item["id"] |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1058
diff
changeset
|
59 ) |
1642
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
60 self.set_pagination(request, blog_data) |
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
61 await self.fill_missing_identities(request, [i['author_jid'] for i in blog_data['items']]) |
1243
8aff742d0dd0
pages: updated `identityGet` call, following backend changes
Goffi <goffi@goffi.org>
parents:
1239
diff
changeset
|
62 |
1642
c03297bb8d19
server, browser (forums): Redesign of the forum feature:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
63 template_data['blog_items'] = blog_data |
1509
106bae41f5c8
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
1506
diff
changeset
|
64 template_data["url_topic_new"] = self.get_sub_page_url(request, "forum_topic_new") |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1058
diff
changeset
|
65 |
1058 | 66 |
1427
eaf36fffcbdb
pages (forums): better breadcrumbs
Goffi <goffi@goffi.org>
parents:
1425
diff
changeset
|
67 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:
1506
diff
changeset
|
68 profile = self.get_profile(request) |
1058 | 69 if profile is None: |
1509
106bae41f5c8
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
1506
diff
changeset
|
70 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:
1506
diff
changeset
|
71 type_ = self.get_posted_data(request, "type") |
1216 | 72 if type_ == "new_topic": |
1509
106bae41f5c8
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
1506
diff
changeset
|
73 service, node, title, body = self.get_posted_data( |
1216 | 74 request, ("service", "node", "title", "body") |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1058
diff
changeset
|
75 ) |
1058 | 76 |
77 if not title or not body: | |
1509
106bae41f5c8
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
1506
diff
changeset
|
78 self.page_error(request, C.HTTP_BAD_REQUEST) |
1216 | 79 topic_data = {"title": title, "content": body} |
1058 | 80 try: |
1509
106bae41f5c8
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
1506
diff
changeset
|
81 await self.host.bridge_call( |
106bae41f5c8
massive refactoring from camelCase -> snake_case. See backend commit log for more details
Goffi <goffi@goffi.org>
parents:
1506
diff
changeset
|
82 "forum_topic_create", service, node, topic_data, profile |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1058
diff
changeset
|
83 ) |
1058 | 84 except Exception as e: |
1216 | 85 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:
1506
diff
changeset
|
86 self.page_error(request, 401) |
1058 | 87 else: |
88 raise e | |
89 else: | |
1216 | 90 log.warning(_("Unhandled data type: {}").format(type_)) |