From 86c6cd3cc099d2480932ede03c12cea01e625c94 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Sun, 26 Apr 2026 21:56:28 +0000
Subject: [PATCH] =Requiring files based on Site class settings

---
 inc/managers/LoginManager.php |  126 +++++++++++++++---------------------------
 1 files changed, 45 insertions(+), 81 deletions(-)

diff --git a/inc/managers/LoginManager.php b/inc/managers/LoginManager.php
index 26700e2..d86d1e8 100644
--- a/inc/managers/LoginManager.php
+++ b/inc/managers/LoginManager.php
@@ -1,10 +1,10 @@
 <?php
 namespace JVBase\managers;
 
+use JVBase\base\Site;
 use JVBase\forms\TaxonomySelector;
 use JVBase\meta\Form;
 
-use JVBase\utility\Features;
 use WP_Error;
 use WP_User;
 
@@ -14,7 +14,6 @@
 
 class LoginManager
 {
-	protected Features $siteFeatures;
 	protected ?Form $form = null;
 	protected Cache $cache;
 
@@ -38,13 +37,10 @@
 
 	public function __construct()
 	{
-		$this->siteFeatures = Features::forSite();
-
-
 		$this->cache = Cache::for('login');
 
 		// Initialize magic link support if enabled
-		if ($this->siteFeatures->has('magicLink')) {
+		if (Site::has('magicLink')) {
 			$this->initMagicLinkSupport();
 		}
 
@@ -61,6 +57,7 @@
 		// Login success handling
 		add_action('wp_login', [$this, 'handleSuccessfulLogin'], 10, 2);
 
+		add_filter('lostpassword_url', [$this, 'resetPasswordUrl'], 10, 2);
 		add_filter( 'login_url', [$this, 'loginUrl'], 10, 3 );
 		add_filter( 'logout_url', [$this, 'logoutUrl'], 10, 2 );
 		// Allow other features to register handlers
@@ -128,7 +125,7 @@
 					'placeholder'=> 'look@me.com'
 				]
 			];
-			if (Features::forSite()->has('referrals')) {
+			if (Site::has('referrals')) {
 				$fields['referral_code'] = [
 					'type'	=> 'text',
 					'required'=> false,
@@ -306,18 +303,26 @@
 	}
 
 	public function logoutUrl(string $logout_url, string $redirect): string
-{
-	// Build custom logout URL
-	$logout_url = site_url('/login/', 'login');
-	$logout_url = add_query_arg('action', 'logout', $logout_url);
+	{
+		// Build custom logout URL
+		$logout_url = site_url('/login/', 'login');
+		$logout_url = add_query_arg('action', 'logout', $logout_url);
 
-	if (!empty($redirect)) {
-		$logout_url = add_query_arg('redirect_to', urlencode($redirect), $logout_url);
+		if (!empty($redirect)) {
+			$logout_url = add_query_arg('redirect_to', urlencode($redirect), $logout_url);
+		}
+
+		// Add nonce for security
+		return wp_nonce_url($logout_url, 'log-out');
 	}
+	public function resetPasswordUrl(string $url, string $redirect):string
+	{
+		error_log('reset Password Url:'.print_r($url, true));
+		error_log('reset password redirect: '.print_r($redirect, true));
 
-	// Add nonce for security
-	return wp_nonce_url($logout_url, 'log-out');
-}
+		return str_replace('wp_login.php', 'login/', $url);
+
+	}
 	public function getLoginPage():int|false
 	{
 		return (int)get_option(BASE.'login_page');
@@ -336,7 +341,7 @@
 
 	protected function initMagicLinkSupport(): void
 	{
-		if (!Features::forSite()->has('magicLink')) {
+		if (!Site::has('magicLink')) {
 			return;
 		}
 	}
@@ -404,12 +409,6 @@
 			wp_redirect(esc_attr($_GET['redirect_to'] ?? get_home_url()));
 			exit;
 		}
-		if (in_array($this->action, ['rp', 'resetpass']) && !is_user_logged_in()) {
-			wp_redirect(wp_login_url());
-			exit;
-		} elseif (is_user_logged_in()) {
-			wp_redirect(get_home_url(null, '/dash/'));
-		}
 		$this->setupLabels();
 		$this->setupFields();
 		$this->setupTitle();
@@ -436,11 +435,9 @@
 	protected function customStyles():void
 	{
 		$logo = get_theme_mod('custom_logo');
-		$small = $large = '';
 		if ($logo) {
-			$small = wp_get_attachment_image_src($logo, 'medium')[0];
-			$large = wp_get_attachment_image_src($logo, 'large')[0];
-
+			$small = wp_get_attachment_image_src($logo, 'medium')[0]??'';
+			$large = wp_get_attachment_image_src($logo, 'large')[0]??'';
 		}
 		echo '<style>
 			.login header,
@@ -714,7 +711,7 @@
 
 	protected function maybeTurnstile(): void
 	{
-		if (!Features::hasIntegration('cloudflare')) {
+		if (!Site::hasIntegration('cloudflare')) {
 			return;
 		}
 		JVB()->connect('cloudflare')->renderTurnstile();
@@ -722,7 +719,7 @@
 
 	protected function maybeTurnstileScripts(): void
 	{
-		if (!Features::hasIntegration('cloudflare')) {
+		if (!Site::hasIntegration('cloudflare')) {
 			return;
 		}
 		JVB()->connect('cloudflare')->enqueueTurnstileScripts();
@@ -730,7 +727,7 @@
 
 	protected function verifyTurnstile(): bool
 	{
-		if (!Features::hasIntegration('cloudflare')) {
+		if (!Site::hasIntegration('cloudflare')) {
 			return true; // Not enabled, pass verification
 		}
 
@@ -783,60 +780,19 @@
 	{
 		switch ($this->action) {
 			case 'register':
-				return [
-					'title' => JVB_LOGIN['register']['title'] ?? 'Create Your Account',
-					'description' => JVB_LOGIN['register']['description'] ?? [],
-					'extra' => JVB_LOGIN['register']['extra'] ?? [],
-					'footer' => JVB_LOGIN['register']['footer'] ?? '',
-					'email' => JVB_LOGIN['register']['email']['subject'] ?? '['.get_bloginfo('name').'] Finish Creating Your Account',
-					'submit' => JVB_LOGIN['register']['submit'] ?? 'Create Account',
-					'successTitle' => JVB_LOGIN['register']['success']['title'] ?? 'Success!',
-					'successDescription' => JVB_LOGIN['register']['success']['description'] ?? ['See your email for next steps','(Check your spam folder if you cannot find it after a couple minutes.)'],
-				];
+				return Site::login()->getLabels('register');
 			case 'lostpassword':
-				return [
-					'title' => JVB_LOGIN['forgot_password']['title'] ?? 'Reset Password',
-					'description' => JVB_LOGIN['forgot_password']['description'] ?? [],
-					'extra' => JVB_LOGIN['forgot_password']['extra'] ?? [],
-					'footer' => JVB_LOGIN['forgot_password']['footer'] ?? '',
-					'submit' => JVB_LOGIN['forgot_password']['submit'] ?? 'Send Reset Link',
-					'successTitle' => JVB_LOGIN['forgot_password']['success']['title'] ?? 'Success!',
-					'successDescription' => JVB_LOGIN['forgot_password']['success']['description'] ?? ['Check your email for reset instructions'],
-				];
+				return Site::login()->getLabels('lostPassword');
 			case 'resetpass':
-				return [
-					'title' => JVB_LOGIN['reset_pass']['title'] ?? 'Reset Your Password',
-					'description' => JVB_LOGIN['reset_pass']['description'] ?? [],
-					'extra' => JVB_LOGIN['reset_pass']['extra'] ?? [],
-					'footer' => JVB_LOGIN['reset_pass']['footer'] ?? '',
-					'submit' => JVB_LOGIN['reset_pass']['submit'] ?? 'Reset Password',
-				];
+			case 'rp':
+				return Site::login()->getLabels('resetPassword');
 			case 'logout':
-				return [
-					'title' => JVB_LOGIN['logout']['title'] ?? 'Logged Out!',
-					'description' => JVB_LOGIN['logout']['description'] ?? [],
-					'extra' => JVB_LOGIN['logout']['extra'] ?? [],
-					'footer' => JVB_LOGIN['logout']['footer'] ?? '',
-					'submit' => JVB_LOGIN['logout']['submit'] ?? '',
-				];
+				return Site::login()->getLabels('logout');
 			case 'magic':
-				return [
-					'title' => JVB_LOGIN['magic']['title'] ?? 'Log in with Magic Link',
-					'description' => JVB_LOGIN['magic']['description'] ?? ['Enter your email.','You\'ll get an email with a magic link.','Click it, and you\'re logged in!'],
-					'extra' => JVB_LOGIN['magic']['extra'] ?? [],
-					'footer' => JVB_LOGIN['magic']['footer'] ?? '',
-					'submit' => JVB_LOGIN['magic']['submit'] ?? jvbIcon('magic-wand').'Send Magic Link',
-
-				];
+				return Site::login()->getLabels('magic');
 			case 'login':
 			default:
-				return [
-					'title' => JVB_LOGIN['login']['title'] ?? 'Sign in',
-					'description' => JVB_LOGIN['login']['description'] ?? [],
-					'extra' => JVB_LOGIN['login']['extra'] ?? [],
-					'footer' => JVB_LOGIN['login']['footer'] ?? '',
-					'submit' => JVB_LOGIN['login']['submit'] ?? 'Sign In',
-				];
+				return Site::login()->getLabels('login');
 		}
 	}
 
@@ -868,9 +824,10 @@
     $action = $this->getAction();
 
     $redirect_to = isset($_GET['redirect_to']) ? esc_url_raw($_GET['redirect_to']) : '';
-    $has_turnstile = Features::hasIntegration('cloudflare');
+    $has_turnstile = Site::hasIntegration('cloudflare');
 
     ob_start();
+
     ?>
 
 	document.addEventListener('DOMContentLoaded', async function () {
@@ -883,9 +840,8 @@
 				if (!form || !window.jvbForm) return;
 
 				window.jvbForm.registerForm(form, {
-					autosave: false,
 					endpoint: '<?= $action ?>',
-					formStatus: false,
+					showStatus: false,
 					cache: false,
 				});
 
@@ -898,6 +854,14 @@
 						const formData = new FormData(formElement);
 						const formObject = Object.fromEntries(formData.entries());
 
+						let params = new URLSearchParams(window.location.search);
+						if (params.has('key')) {
+							formObject['key'] = params.get('key');
+						}
+						if (params.has('login')) {
+							formObject['login'] = params.get('login');
+						}
+
 						// Add redirect_to from URL
 						if (redirectTo) {
 							formObject.redirect_to = redirectTo;

--
Gitblit v1.10.0