Group order pages were published under their database id (`/eskaera/1`), which says nothing to the member opening the link. `group.order` gains a `slug` field and the public pages move to `/eskaera/<slug>` (e.g. `/eskaera/escola-fructuos`). The slug is generated from the order name on creation, is unique, and can be edited under the name on the form; emptying it regenerates it from the current name. Values that would make the order unreachable are rejected: a plain number (the legacy numeric URLs win that match) and the static routes served under `/eskaera/` (`labels`, `save-order`, `i18n`, ...). `/eskaera/<id>` and `/eskaera/<id>/checkout` are kept as redirects to their slug URL, so the links already shared with members keep working. The AJAX endpoints (`load-page`, `save-order`, `confirm`, ...) stay numeric: they never show up in the address bar. Consequently the frontend now reads the order id from the `data-order-id` attribute only, as the URL no longer carries it. The post-migration script fills the slug of the orders that already existed. Renaming the `/eskaera` prefix itself (`/escolas` for a schools deployment) needs no code: a *308 Redirect / Rewrite* rule per public route in Website > Configuration > Redirects serves the pages on the new prefix, rewrites the links in the templates and redirects the old URLs, per website. Documented in `readme/CONFIGURE.rst`. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
30 lines
854 B
Python
30 lines
854 B
Python
"""Backfill the URL slug of consumer group orders created before this version.
|
|
|
|
Public pages moved from /eskaera/<id> to /eskaera/<slug>. Orders that already
|
|
existed have no slug yet, so they would not be reachable until saved again.
|
|
Generate one from their name, keeping it unique.
|
|
"""
|
|
|
|
import logging
|
|
|
|
from odoo import SUPERUSER_ID
|
|
from odoo import api
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
|
|
def migrate(cr, version):
|
|
if not version:
|
|
return
|
|
|
|
env = api.Environment(cr, SUPERUSER_ID, {})
|
|
orders = env["group.order"].search([("slug", "=", False)], order="id")
|
|
for order in orders:
|
|
order.slug = order._generate_unique_slug(order.name)
|
|
|
|
if orders:
|
|
_logger.info(
|
|
"Generated URL slugs for %d consumer group orders: %s",
|
|
len(orders),
|
|
", ".join(orders.mapped("slug")),
|
|
)
|