Add per-embed lesson-type and section options to the booking block
CI / Tests (PHP 8.1) (pull_request) Successful in 47s
CI / Tests (PHP 8.2) (pull_request) Successful in 54s
CI / No Debug Code (pull_request) Successful in 2s
CI / PHPStan (pull_request) Successful in 2m51s
CI / Coding Standards (pull_request) Successful in 2m56s
CI / Tests (PHP 8.3) (pull_request) Successful in 2m42s
CI / Build Plugin Zip (pull_request) Skipped
CI / Tests (PHP 8.1) (pull_request) Successful in 47s
CI / Tests (PHP 8.2) (pull_request) Successful in 54s
CI / No Debug Code (pull_request) Successful in 2s
CI / PHPStan (pull_request) Successful in 2m51s
CI / Coding Standards (pull_request) Successful in 2m56s
CI / Tests (PHP 8.3) (pull_request) Successful in 2m42s
CI / Build Plugin Zip (pull_request) Skipped
Three sidebar options on the Lesson Booking block, all mirrored as shortcode attributes and carried to the front end as data attributes on #us-booking-app (or as omitted containers): - Lesson type (lessonTypeId / lesson_type) pins the calendar to a single private-lesson type: only the times bookable as it are listed, and it is the only type bookable there, auto-selected on the registration form. A pinned type that is no longer offered says so instead of showing an empty calendar. - Show the lesson-type filter (showTypeFilter / show_filter) drops the "Show Only" control for studios that do not want it. - Sections (displayMode / show) embeds one half of the page — the booking calendar or the student's upcoming lessons — so the two can live on different pages. The script skips the work belonging to a missing half: no availability or catalog request for an upcoming-only embed, no bookings request for a booking-only one. An unrecognised value renders the whole page. The editor preview follows the same setting. Also fixes the expanded filter's first lesson type sharing a line with the "Lesson type" heading — the choices now sit in their own row beneath it. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
+45
-2
@@ -15,7 +15,23 @@ namespace Unsupervised\Schedular;
|
||||
*/
|
||||
class BlockPreview {
|
||||
|
||||
public static function booking(): string {
|
||||
/**
|
||||
* Sample booking page.
|
||||
*
|
||||
* @param string $mode Which halves the block embeds — one of
|
||||
* {@see Booking\BookingPage::MODE_BOTH},
|
||||
* `MODE_BOOKING` or `MODE_UPCOMING`. The preview shows
|
||||
* the same sections the published page would.
|
||||
*/
|
||||
public static function booking( string $mode = Booking\BookingPage::MODE_BOTH ): string {
|
||||
if ( Booking\BookingPage::MODE_UPCOMING === $mode ) {
|
||||
return sprintf(
|
||||
'<div id="us-booking-app">%s<div id="us-my-lessons">%s</div></div>',
|
||||
self::note( __( 'Editor preview — students see their own lessons on the published page.', 'unsupervised-schedular' ) ),
|
||||
self::upcomingLessons()
|
||||
);
|
||||
}
|
||||
|
||||
$days = [
|
||||
[
|
||||
'label' => __( 'Monday', 'unsupervised-schedular' ),
|
||||
@@ -51,13 +67,40 @@ class BlockPreview {
|
||||
);
|
||||
}
|
||||
|
||||
$lessons = Booking\BookingPage::MODE_BOOKING === $mode
|
||||
? ''
|
||||
: sprintf( '<div id="us-my-lessons">%s</div>', self::upcomingLessons() );
|
||||
|
||||
return sprintf(
|
||||
'<div id="us-booking-app">%s<div id="us-slot-list">%s</div></div>',
|
||||
'<div id="us-booking-app">%s%s<div id="us-slot-list">%s</div></div>',
|
||||
self::note( __( 'Editor preview — students see live availability on the published page.', 'unsupervised-schedular' ) ),
|
||||
$lessons,
|
||||
$dayHtml
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sample "your upcoming lessons" panel, shared by the booking preview's
|
||||
* full and upcoming-only modes.
|
||||
*/
|
||||
private static function upcomingLessons(): string {
|
||||
return sprintf(
|
||||
'<div class="us-my-lessons"><h3>%s</h3>'
|
||||
. '<div class="us-my-lesson"><span class="us-my-lesson-info">'
|
||||
. '<strong class="us-my-lesson-title">%s <span class="us-my-lesson-duration">(30 min)</span></strong>'
|
||||
. '<span class="us-my-lesson-when">%s</span></span>'
|
||||
. '<span class="us-my-lesson-actions">'
|
||||
. '<span class="us-lesson-status us-lesson-status-confirmed">%s</span>'
|
||||
. '<button type="button" class="us-cancel-lesson" disabled>%s</button>'
|
||||
. '</span></div></div>',
|
||||
esc_html__( 'Your upcoming lessons', 'unsupervised-schedular' ),
|
||||
esc_html__( 'Piano Lesson', 'unsupervised-schedular' ),
|
||||
esc_html__( 'Monday · 4:00 PM–4:30 PM', 'unsupervised-schedular' ),
|
||||
esc_html__( 'Confirmed', 'unsupervised-schedular' ),
|
||||
esc_html__( 'Cancel', 'unsupervised-schedular' )
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sample group-class card.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user