[IMP] website_sale_aplicoop: readable slug in the group order URL

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>
This commit is contained in:
GitHub Copilot 2026-08-11 16:49:54 +02:00
parent 2b1cabbb43
commit 23edee6154
14 changed files with 463 additions and 28 deletions

View file

@ -1,5 +1,25 @@
# Changelog - Website Sale Aplicoop
## [18.0.1.13.0] - 2026-08-11
### Added
- **Readable URLs for group orders**: `group.order` gains a `slug` field and the
public pages move from `/eskaera/<id>` to `/eskaera/<slug>` (e.g.
`/eskaera/escola-fructuos`). The slug is generated from the order name on
creation, is editable on the form (empty it to regenerate it from the name),
is unique, and rejects values that would collide with the shop's own routes
(`labels`, `save-order`, …) or with a plain number. A post-migration script
fills the slug of the orders that already existed.
### Changed
- `/eskaera/<id>` and `/eskaera/<id>/checkout` are kept as redirects to their
slug URL, so links already shared with members keep working. The AJAX
endpoints (`/eskaera/<id>/load-page`, `/eskaera/save-order`, …) stay numeric.
- The frontend reads the order id from the `data-order-id` attribute only; it
can no longer be recovered from the URL, which now carries the slug.
## [18.0.1.12.0] - 2026-08-06
### Removed