From 772462eeca3002a1d52508aeba485aab2b4742ad Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Tue, 03 Mar 2026 19:06:19 +0000
Subject: [PATCH] =MAJOR OVERHAUL. Likely should have made a new branch ages ago. Key changes: Registrar.php is the base for custom post types, taxonomies, and user roles. Replaces JVB_CONTENT, JVB_TAXONOMY, and JVB_USER constants, eliminates most of Features.php (except for JVB_SITE, JVB_MEMBERSHIP), and has built in sanitizing and validation via sub-classes. Also started a major overhaul of the Schema output. Created a shit ton of property traits and classes to help sanitize and ensure proper data for different schema types. Still a bunch to do, but better to be starting committing changes here on this other branch.

---
 inc/managers/LoginManager.php |   60 ++++++++++++++++++++++++++++++++++--------------------------
 1 files changed, 34 insertions(+), 26 deletions(-)

diff --git a/inc/managers/LoginManager.php b/inc/managers/LoginManager.php
index 5a25159..5187724 100644
--- a/inc/managers/LoginManager.php
+++ b/inc/managers/LoginManager.php
@@ -1,11 +1,9 @@
 <?php
 namespace JVBase\managers;
 
-use JVBase\blocks\CustomBlocks;
 use JVBase\forms\TaxonomySelector;
-use JVBase\meta\MetaManager;
-use JVBase\meta\MetaForm;
-use JVBase\managers\AjaxRateLimiter;
+use JVBase\meta\Form;
+
 use JVBase\utility\Features;
 use WP_Error;
 use WP_User;
@@ -17,7 +15,7 @@
 class LoginManager
 {
 	protected Features $siteFeatures;
-	protected ?MetaForm $metaForm = null;
+	protected ?Form $form = null;
 	protected Cache $cache;
 
 
@@ -63,6 +61,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
@@ -308,18 +307,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');
@@ -406,12 +413,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();
@@ -438,11 +439,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,
@@ -533,7 +532,6 @@
 
 	protected function renderForms():void
 	{
-		$this->metaForm = new MetaForm();
 		$form = $this->action.'form';
 		?>
 		<section class="login-box col btw">
@@ -552,7 +550,7 @@
 				do_action('jvb_add_token_inputs', $this->action);
 
 				foreach ($this->fields as $name => $config) {
-					$this->metaForm->render($name, '', $config);
+					echo Form::render($name, '', $config);
 				}
 
 				$this->maybeTurnstile();
@@ -807,6 +805,7 @@
 					'successDescription' => JVB_LOGIN['forgot_password']['success']['description'] ?? ['Check your email for reset instructions'],
 				];
 			case 'resetpass':
+			case 'rp':
 				return [
 					'title' => JVB_LOGIN['reset_pass']['title'] ?? 'Reset Your Password',
 					'description' => JVB_LOGIN['reset_pass']['description'] ?? [],
@@ -874,6 +873,7 @@
     $has_turnstile = Features::hasIntegration('cloudflare');
 
     ob_start();
+
     ?>
 
 	document.addEventListener('DOMContentLoaded', async function () {
@@ -901,6 +901,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