%s
%s
', self::note( __( 'Editor preview — students see their own lessons on the published page.', 'unsupervised-schedular' ) ), self::upcomingLessons() ); } $days = [ [ 'label' => __( 'Monday', 'unsupervised-schedular' ), 'slots' => [ [ '4:00 PM–4:30 PM', 30 ], [ '4:30 PM–5:00 PM', 30 ], ], ], [ 'label' => __( 'Wednesday', 'unsupervised-schedular' ), 'slots' => [ [ '5:00 PM–5:45 PM', 45 ], ], ], ]; $dayHtml = ''; foreach ( $days as $day ) { $slotHtml = ''; foreach ( $day['slots'] as $slot ) { $slotHtml .= sprintf( '
%s (%d min)
', esc_html( $slot[0] ), (int) $slot[1], esc_html__( 'Book', 'unsupervised-schedular' ) ); } $dayHtml .= sprintf( '

%s

%s
', esc_html( $day['label'] ), $slotHtml ); } $lessons = Booking\BookingPage::MODE_BOOKING === $mode ? '' : sprintf( '
%s
', self::upcomingLessons() ); return sprintf( '
%s%s
%s
', 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( '

%s

' . '
' . '%s (30 min)' . '%s' . '' . '%s' . '' . '
', 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. * * @param bool $singleClass Whether the block is pinned to one class, in * which case the live page omits the class * description and the preview does too. */ public static function groupClasses( bool $singleClass = false ): string { $note = $singleClass ? __( 'Editor preview — the published page shows the chosen class with its live schedule and enrolment status.', 'unsupervised-schedular' ) : __( 'Editor preview — students see live group classes on the published page.', 'unsupervised-schedular' ); $description = $singleClass ? '' : '

' . esc_html__( 'A sample class shown so the page can be styled.', 'unsupervised-schedular' ) . '

'; return sprintf( '
%s

%s

%s

%s

25.00 CAD

%s

', self::note( $note ), esc_html__( 'Beginner Group Class', 'unsupervised-schedular' ), esc_html__( 'Saturdays 10:00 AM–11:00 AM', 'unsupervised-schedular' ), $description, esc_html__( 'Enrol by Sep 6, 2026', 'unsupervised-schedular' ), esc_html__( 'Enrol', 'unsupervised-schedular' ) ); } /** * The live login form renders fine without any request state, so the * preview includes the real template (the editing user is logged in, which * would otherwise short-circuit to an "already logged in" message). */ public static function login(): string { $error = ''; ob_start(); include USC_PLUGIN_DIR . 'templates/frontend/login-page.php'; return self::note( __( 'Editor preview — logged-in visitors are offered a link to the booking page instead.', 'unsupervised-schedular' ) ) . (string) ob_get_clean(); } public static function registration(): string { $fields = sprintf( '

', esc_html__( 'Email', 'unsupervised-schedular' ) ); $fields .= sprintf( '

', esc_html__( 'Your name', 'unsupervised-schedular' ) ); $fields .= sprintf( '

', esc_html__( 'Password', 'unsupervised-schedular' ) ); $fields .= sprintf( '

', esc_attr__( 'Create Account', 'unsupervised-schedular' ) ); return sprintf( '
%s
%s
', self::note( __( 'Editor preview — the live form requires a valid invite link and lists signup policies.', 'unsupervised-schedular' ) ), $fields ); } private static function note( string $text ): string { return '

' . esc_html( $text ) . '

'; } }