CI / Tests (PHP 8.2) (pull_request) Successful in 41s
CI / Tests (PHP 8.1) (pull_request) Successful in 42s
CI / No Debug Code (pull_request) Successful in 2s
CI / PHPStan (pull_request) Successful in 2m48s
CI / Coding Standards (pull_request) Successful in 3m1s
CI / Tests (PHP 8.3) (pull_request) Successful in 2m44s
CI / Build Plugin Zip (pull_request) Skipped
The block reports who is signed in and nothing more. Dropping the "Booking for …" line takes GuardianService with it — it was the only reason the page had a dependency at all, so AccountPage now constructs with no arguments. Co-Authored-By: Claude Opus 5 <[email protected]>
79 lines
2.4 KiB
PHP
79 lines
2.4 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
namespace Unsupervised\Schedular\Auth;
|
|
|
|
use Unsupervised\Schedular\Val;
|
|
|
|
/**
|
|
* Who is signed in, and the way out.
|
|
*
|
|
* Meant for a header, sidebar or account page — somewhere it sits alongside
|
|
* other content rather than being the whole of it. That shapes the two
|
|
* decisions below.
|
|
*/
|
|
class AccountPage {
|
|
|
|
/**
|
|
* Renders the account shortcode/block output.
|
|
*
|
|
* Signed out, this renders a sign-in link when a login page is configured and
|
|
* **nothing at all** when one is not. A block whose whole job is "you are
|
|
* signed in as X" has nothing to say to a stranger, and a bare "you are not
|
|
* signed in" in a site header is noise with no way to act on it. The editor
|
|
* preview shows the populated state regardless, so the block is never
|
|
* invisible to the person placing it.
|
|
*
|
|
* @param array<int|string, mixed> $atts Block attributes (`loginPageId`) or
|
|
* shortcode attributes (`login_page_id`).
|
|
*/
|
|
public function render( array $atts ): string {
|
|
$loginPageId = Val::int( $atts['loginPageId'] ?? $atts['login_page_id'] ?? 0 );
|
|
$loginUrl = $this->pageUrl( $loginPageId );
|
|
|
|
wp_enqueue_style( 'us-scheduler' );
|
|
|
|
if ( ! is_user_logged_in() ) {
|
|
if ( null === $loginUrl ) {
|
|
return '';
|
|
}
|
|
|
|
return sprintf(
|
|
'<div class="us-account us-account-out"><a class="us-account-signin" href="%s">%s</a></div>',
|
|
esc_url( $loginUrl ),
|
|
esc_html__( 'Sign in', 'unsupervised-schedular' )
|
|
);
|
|
}
|
|
|
|
// Always a WP_User here — is_user_logged_in() above rules out the
|
|
// id-0 placeholder wp_get_current_user() returns for a visitor.
|
|
$user = wp_get_current_user();
|
|
|
|
$name = UserName::format( $user, get_current_user_id() );
|
|
$email = $user->user_email;
|
|
|
|
// Back to where they were, so signing out of a header link does not also
|
|
// navigate them somewhere. The login page is the better landing spot when
|
|
// one is configured, since the current page may be members-only.
|
|
$logoutUrl = wp_logout_url( $loginUrl ?? (string) get_permalink() );
|
|
|
|
ob_start();
|
|
include USC_PLUGIN_DIR . 'templates/frontend/account-page.php';
|
|
return (string) ob_get_clean();
|
|
}
|
|
|
|
/**
|
|
* Permalink of a configured page, or null when none is chosen or the chosen
|
|
* page has since been deleted.
|
|
*/
|
|
private function pageUrl( int $pageId ): ?string {
|
|
if ( $pageId <= 0 ) {
|
|
return null;
|
|
}
|
|
|
|
$url = get_permalink( $pageId );
|
|
|
|
return is_string( $url ) ? $url : null;
|
|
}
|
|
}
|