#7 - QR Codes & payments

This commit was merged in pull request #22.
This commit is contained in:
Martin Slachta
2026-06-16 19:33:55 +02:00
parent cfbdca238c
commit df5f9b1df4
11 changed files with 251 additions and 72 deletions
+17 -1
View File
@@ -3,6 +3,7 @@
use Reservair\Templating\Elements\RsvReservationSummaryElement;
use Reservair\Templating\Elements\RsvReservationActionsElement;
use Reservair\Templating\Elements\RsvResetFormButtonElement;
use Reservair\Templating\Elements\RsvQrPaymentElement;
/**
* Plugin Name: Reservair
* Description: A reservation and booking system for WordPress. Site visitors browse available time slots and submit reservation requests via a Gutenberg block; administrators manage timetables, services, forms, and reservations from the WordPress admin panel.
@@ -33,7 +34,7 @@ register_activation_hook( __FILE__, [ 'RsvInstaller', 'install' ] );
* plugins we might interact with) is fully loaded.
*/
function rsv_bootstrap(): void {
global $rsv_form_registry, $rsv_template_registry;
global $rsv_form_registry, $rsv_template_registry, $rsv_form_price_registry;
// Re-grant the custom capability after a plugin *update* (the activation hook
// only runs on activate). No-op once the stored version matches.
@@ -53,11 +54,26 @@ function rsv_bootstrap(): void {
$rsv_form_registry->register( 'output-reservation-summary', new RsvReservationSummaryElementHandler() );
$rsv_form_registry->register( 'output-text', new RsvOutputTextElementHandler() );
// Price calculators — extensions add per-element calculators via the action.
add_action( 'rsv-register-price-calculator', function ( RsvFormPriceCalculatorRegistry $reg ): void {
$reg->register( 'reservation', function ( RsvFormElementDefinition $def, $value ): float {
if ( ! is_array( $value ) || ! is_array( $value['timetable_reservations'] ?? null ) ) {
return 0.0;
}
$price_per_block = (float) $def->getAttr( 'price_per_block', 0 );
return $price_per_block * count( $value['timetable_reservations'] );
} );
} );
$rsv_form_price_registry = RsvFormPriceCalculatorRegistry::boot();
// Template custom-element registry. Extensions register via the action.
add_action( 'rsv-template-register-custom-elements', function ( \Reservair\Templating\RsvTemplateRegistry $reg ): void {
$reg->register( 'reservation-summary', new RsvReservationSummaryElement() );
$reg->register( 'reservation-actions', new RsvReservationActionsElement() );
$reg->register( 'reset-form-button', new RsvResetFormButtonElement() );
$reg->register( 'qr-payment', new RsvQrPaymentElement() );
} );
$rsv_template_registry = new \Reservair\Templating\RsvTemplateRegistry();
do_action( 'rsv-template-register-custom-elements', $rsv_template_registry );