Link a signed-in visitor to the configured continue page #134
@@ -132,7 +132,7 @@ recorded in `us_policy_acceptances` with `registration_type = account` and
|
||||
The block's **After registration** panel picks the page a student continues to once
|
||||
registration finishes, and whether they get there by hand or automatically.
|
||||
|
||||
- **Sign-in page** (`loginPageId` / `login_page_id`) — the target of the "Sign in to your account" link shown after email confirmation (`?us_confirmed=1|ready`, falling back to the WordPress login screen) and of the "Continue to your account" link every **logged-in** visitor gets (`RegistrationPage::continueLink()`): an invited student who just finished signing up (`?us_registered=invite`), and anyone who simply arrives at the registration page already signed in. Neither gets the WordPress-login-screen fallback — with no page chosen there is no link at all, since sending someone already signed in to the login screen is the same dead end with extra steps.
|
||||
- **Sign-in page** (`loginPageId` / `login_page_id`) — the target of the "Sign in to your account" link shown after email confirmation (`?us_confirmed=1|ready`, falling back to the WordPress login screen) and of the **"Continue to _<page title>_"** link every **logged-in** visitor gets (`RegistrationPage::continueLink()`): an invited student who just finished signing up (`?us_registered=invite`), and anyone who simply arrives at the registration page already signed in. The link names the chosen page (via `get_the_title()`) so the visitor knows where it goes; an untitled page falls back to "Continue to your account" rather than reading "Continue to ". Neither gets the WordPress-login-screen fallback — with no page chosen there is no link at all, since sending someone already signed in to the login screen is the same dead end with extra steps.
|
||||
- **Redirect automatically** (`autoRedirect`, block only) — sends the student to that page instead of showing the link, via `BlockRegistrar::maybeAutoRedirect()` on `template_redirect`. It fires only on those two finished states (`RegistrationPage::isRegistrationComplete()`), so the "check your email" step, a validation error, and an `expired` confirmation link are always shown rather than redirected past. With no page chosen nothing happens — there is deliberately no login-screen fallback for the redirect. See `editor-blocks.md`.
|
||||
|
||||
## Token Redirect
|
||||
|
||||
@@ -351,8 +351,10 @@ class RegistrationPage {
|
||||
}
|
||||
|
||||
/**
|
||||
* The "continue to your account" paragraph shown to a logged-in visitor, or
|
||||
* an empty string when no destination page is configured.
|
||||
* The "continue" paragraph shown to a logged-in visitor, or an empty string
|
||||
* when no destination page is configured. The link names the chosen page, so
|
||||
* the visitor knows where it goes before clicking; an untitled page falls
|
||||
* back to generic wording rather than reading "Continue to ".
|
||||
*
|
||||
* The sign-in-page fallback {@see loginUrl()} applies is deliberately not
|
||||
* used here: pointing someone who is already signed in at the login screen is
|
||||
@@ -361,13 +363,25 @@ class RegistrationPage {
|
||||
* @param array<int|string, mixed> $atts
|
||||
*/
|
||||
private function continueLink( array $atts ): string {
|
||||
$continue = $this->continueUrl( $this->successPageId( $atts ) );
|
||||
$pageId = $this->successPageId( $atts );
|
||||
$continue = $this->continueUrl( $pageId );
|
||||
|
||||
return null === $continue
|
||||
? ''
|
||||
: '<p><a href="' . esc_url( $continue ) . '">'
|
||||
. esc_html__( 'Continue to your account', 'unsupervised-schedular' )
|
||||
. '</a></p>';
|
||||
if ( null === $continue ) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$title = trim( Val::string( get_the_title( $pageId ) ) );
|
||||
$label = '' === $title
|
||||
? esc_html__( 'Continue to your account', 'unsupervised-schedular' )
|
||||
: esc_html(
|
||||
sprintf(
|
||||
/* translators: %s: title of the page the student continues to. */
|
||||
__( 'Continue to %s', 'unsupervised-schedular' ),
|
||||
$title
|
||||
)
|
||||
);
|
||||
|
||||
return '<p><a href="' . esc_url( $continue ) . '">' . $label . '</a></p>';
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -497,11 +497,28 @@ class RegistrationPageTest extends TestCase
|
||||
Functions\when('is_user_logged_in')->justReturn(true);
|
||||
Functions\when('sanitize_key')->alias(static fn ($v) => strtolower((string) $v));
|
||||
Functions\expect('get_permalink')->once()->with(4)->andReturn('http://home.test/welcome/');
|
||||
Functions\when('get_the_title')->justReturn('Book a Lesson');
|
||||
|
||||
$html = $this->ctx['page']->render([ 'loginPageId' => 4 ]);
|
||||
|
||||
self::assertStringContainsString('now logged in', $html);
|
||||
self::assertStringContainsString('href="http://home.test/welcome/"', $html);
|
||||
// The link names its destination rather than saying "your account".
|
||||
self::assertStringContainsString('Continue to Book a Lesson', $html);
|
||||
}
|
||||
|
||||
public function testContinueLinkFallsBackToGenericWordingForAnUntitledPage(): void
|
||||
{
|
||||
Functions\when('is_user_logged_in')->justReturn(true);
|
||||
Functions\when('sanitize_key')->alias(static fn ($v) => strtolower((string) $v));
|
||||
Functions\when('get_permalink')->justReturn('http://home.test/welcome/');
|
||||
Functions\when('get_the_title')->justReturn(' ');
|
||||
|
||||
// An untitled page must not produce a link reading "Continue to ".
|
||||
$html = $this->ctx['page']->render([ 'loginPageId' => 4 ]);
|
||||
|
||||
self::assertStringContainsString('Continue to your account', $html);
|
||||
self::assertStringContainsString('href="http://home.test/welcome/"', $html);
|
||||
}
|
||||
|
||||
public function testAlreadyLoggedInVisitorIsLinkedToTheChosenPage(): void
|
||||
@@ -511,11 +528,13 @@ class RegistrationPageTest extends TestCase
|
||||
Functions\when('is_user_logged_in')->justReturn(true);
|
||||
Functions\when('sanitize_key')->alias(static fn ($v) => strtolower((string) $v));
|
||||
Functions\expect('get_permalink')->once()->with(4)->andReturn('http://home.test/welcome/');
|
||||
Functions\when('get_the_title')->justReturn('Book a Lesson');
|
||||
|
||||
$html = $this->ctx['page']->render([ 'loginPageId' => 4 ]);
|
||||
|
||||
self::assertStringContainsString('already have an account', $html);
|
||||
self::assertStringContainsString('href="http://home.test/welcome/"', $html);
|
||||
self::assertStringContainsString('Continue to Book a Lesson', $html);
|
||||
// Not the just-registered message — that branch needs its own flag.
|
||||
self::assertStringNotContainsString('us-success', $html);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user