Issue #3611638: Ticket generation submodule (yoyaku_ticket): PDF with QR code

Adds the yoyaku_ticket submodule: printable/emailable PDF tickets for confirmed bookings, each carrying an HMAC-signed QR code that a door scanner can validate offline.

What it adds

  • One ticket per confirmed booking line (the QR names the booking and admits its quantity).
  • A swappable PdfRenderer plugin type, with a bundled Dompdf renderer (dompdf/dompdf).
  • QR generation via endroid/qr-code.
  • Two namespaced HMAC tokens (mirroring CancelToken): a QR check-in token and a download-link token, so neither can be replayed as the other. The QR expiry is tied to the event end.
  • A public signed download route and a [yoyaku-order:ticket-url] token.
  • A hook_yoyaku_ticket_units_alter seam so other submodules can redefine the tickets.

Not in scope (follow-ups)

  • Per-seat tickets and per-resource-type granularity: #3612561 (seating bridge).
  • Attaching tickets to the Orchestra confirmation email: depends on Orchestra #3612558.

Tests

  • Unit: token round-trip, tamper, expiry, cross-prefix rejection.
  • Kernel: builder produces per-booking units and real PDF bytes.
  • Functional: the signed download route streams the PDF; bad or forged tokens 404.

The PDF/QR libraries (dompdf/dompdf, endroid/qr-code) are added to require-dev and suggest. A documentation page, submodule README and French translations are included.

Merge request reports

Loading