diff --git a/docs/features/account-registration.md b/docs/features/account-registration.md index 16297ce..e136211 100644 --- a/docs/features/account-registration.md +++ b/docs/features/account-registration.md @@ -41,6 +41,7 @@ recorded in `us_policy_acceptances` with `registration_type = account` and ## Admin Interface **Invites** in wp-admin (`manage_students`, studio admin only): +- Select the **registration page** (the page hosting `[us_student_register]`), stored in the `us_registration_page_id` option; invitation links point there (falling back to the home page if unset) - Invite an email (creates a pending invite + link) - List pending invites; revoke an invite diff --git a/src/Auth/RegistrationController.php b/src/Auth/RegistrationController.php index f70f5e6..2bc1308 100644 --- a/src/Auth/RegistrationController.php +++ b/src/Auth/RegistrationController.php @@ -5,6 +5,11 @@ namespace Unsupervised\Schedular\Auth; class RegistrationController { + /** + * Option storing the page ID that hosts the [us_student_register] shortcode. + */ + public const OPTION_PAGE = 'us_registration_page_id'; + public function __construct( private InviteRepository $invites ) {} public function renderPage(): void { @@ -16,7 +21,9 @@ class RegistrationController { $this->handleFormAction(); } - $pendingInvites = $this->invites->findPending(); + $pendingInvites = $this->invites->findPending(); + $registrationPageId = (int) get_option( self::OPTION_PAGE, 0 ); + $registrationPageUrl = $registrationPageId > 0 ? (string) get_permalink( $registrationPageId ) : ''; include USC_PLUGIN_DIR . 'templates/admin/invites.php'; } @@ -26,6 +33,10 @@ class RegistrationController { // phpcs:disable WordPress.Security.NonceVerification.Missing $action = sanitize_key( wp_unslash( $_POST['usc_action'] ?? '' ) ); + if ( 'set_page' === $action ) { + update_option( self::OPTION_PAGE, absint( $_POST['registration_page_id'] ?? 0 ) ); + } + if ( 'invite' === $action ) { $email = sanitize_email( wp_unslash( $_POST['email'] ?? '' ) ); diff --git a/templates/admin/invites.php b/templates/admin/invites.php index b5ce256..3861330 100644 --- a/templates/admin/invites.php +++ b/templates/admin/invites.php @@ -5,12 +5,46 @@ if (! defined('ABSPATH')) { exit; } -/** @var list<\Unsupervised\Schedular\Auth\Invite> $pendingInvites */ +/** + * @var list<\Unsupervised\Schedular\Auth\Invite> $pendingInvites + * @var int $registrationPageId + * @var string $registrationPageUrl + */ ?>