From 4089ba01e0881c89a72332e13bc3a80b6bddec2a Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Mon, 29 Jun 2026 22:15:55 +0000
Subject: [PATCH] =DashboardManager overhaul. A bit easier to modify the output of pages. Still have to get the account pages to work as expected, as well as verify the integrations and others are working - but registrar/content pages work as expected. Also fixed up the table generation in CRUD.js and CRUDSkeleton.php

---
 inc/registrar/helpers/MakeCalendarType.php |  136 ++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 120 insertions(+), 16 deletions(-)

diff --git a/inc/registrar/helpers/MakeCalendarType.php b/inc/registrar/helpers/MakeCalendarType.php
index 9ad4d76..b7a68b8 100644
--- a/inc/registrar/helpers/MakeCalendarType.php
+++ b/inc/registrar/helpers/MakeCalendarType.php
@@ -4,6 +4,7 @@
 use JVBase\meta\Meta;
 use JVBase\registrar\Registrar;
 use WP_Post;
+use WP_Query;
 
 if (!defined('ABSPATH')) {
 	exit;
@@ -12,7 +13,8 @@
 class MakeCalendarType {
 	protected string $slug;
 	protected string $postType;
-	protected Registrar $registrar;
+	private Registrar $registrar;
+	protected string $hook;
 	public function __construct(string $slug, Registrar $registrar) {
 		$this->slug = $slug;
 		$this->postType = jvbCheckBase($slug);
@@ -23,6 +25,16 @@
 		add_filter('post_type_archive_link', [$this, 'handlePostTypeArchiveLinks'], 15, 2);
 		add_filter('query_vars', [$this, 'addQueryVars']);
 		add_action('init', [$this, 'addCalendarRewrites']);
+
+		$this->hook = BASE.'mark_'.$this->slug.'_passed';
+		add_action($this->hook, [$this, 'markPassed']);
+	}
+
+
+	public function __debugInfo() {
+		$vars = get_object_vars($this);
+		unset($vars['registrar']);
+		return $vars;
 	}
 
 	protected function addCalendarFields():void
@@ -40,15 +52,15 @@
 			],
 			'date_start' => [
 				'type'      => 'date',
-				'label'     => __('Date', 'jvb'),
+				'label'     => 'Date',
 			],
 			'time_start' => [
 				'type'      => 'time',
-				'label'     => __('Time Start', 'jvb'),
+				'label'     => 'Time Start',
 			],
 			'time_end' => [
 				'type'      => 'time',
-				'label'     => __('Time End', 'jvb'),
+				'label'     => 'Time End',
 			],
 			'make_multiple' => [
 				'type'      => 'true_false',
@@ -57,7 +69,7 @@
 			],
 			'date_end' => [
 				'type'      => 'date',
-				'label'     => __('Date End', 'jvb'),
+				'label'     => 'Date End',
 				'condition' => [
 					'field' => 'make_multiple',
 					'operator' => '==',
@@ -66,22 +78,22 @@
 			],
 			'past' => [
 				'type'      => 'true_false',
-				'label'     => __('Past Event', 'jvb'),
+				'label'     => 'Past Event',
 				'hidden'    => true,
 			],
 			'year' => [
 				'type'      => 'number',
-				'label'     => __('Year', 'jvb'),
+				'label'     => 'Year',
 				'hidden'    => true,
 			],
 			'month' => [
 				'type'      => 'number',
-				'label'     => __('Month', 'jvb'),
+				'label'     => 'Month',
 				'hidden'    => true,
 			],
 			'day' => [
 				'type'      => 'number',
-				'label'     => __('Day', 'jvb'),
+				'label'     => 'Day',
 				'hidden'    => true,
 			],
 			'schedule' => [
@@ -114,7 +126,7 @@
 			],
 			'max_participants' => [
 				'type'      => 'number',
-				'label'     => __('Maximum Participants', 'jvb'),
+				'label'     => 'Maximum Participants',
 			],
 			'is_free' => [
 				'type' => 'true_false',
@@ -293,12 +305,8 @@
 			foreach ($values as $key => $value) {
 				if (!empty($value)) {
 					$url = str_replace("%e$key%", $value, $url);
-				}
-			}
-			$doubleCheck = ['eyear', 'emonth', 'eday'];
-			foreach ($doubleCheck as $check) {
-				if (str_contains($url, $check)) {
-					$url = str_replace("/%e$check%", '', $url);
+				} else {
+					$url = str_replace("/%e$key%", '', $url);
 				}
 			}
 		}
@@ -321,10 +329,106 @@
 		return $vars;
 	}
 
+	protected function scheduleMarkPassed():void
+	{
+		if (!wp_next_scheduled($this->hook)) {
+			$time = strtotime('tomorrow at 12:01am');
+			wp_schedule_event($time, 'daily', $this->hook);
+		}
+	}
+		public function markPassed():void
+		{
+			$now = date('Y-m-d');
+			$items = new WP_Query([
+				'post_type'			=> $this->postType,
+				'posts_per_page'	=> -1,
+				'post_status'		=> 'publish',
+				'meta_query'		=> [
+					'relation'	=> 'AND',
+					[
+						'key'	=> BASE.'past',
+						'value'	=> '1',
+						'compare'=> '!='
+					],
+					[
+						'key'	=> BASE.'date_start',
+						'value'	=> $now,
+						'compare'	=> '<',
+						'type'	=> 'DATETIME'
+					]
+				],
+				'fields'	=> 'ids',
+			]);
+
+			if ($items->have_posts()) {
+				foreach ($items->posts as $ID) {
+					$meta = Meta::forPost($ID);
+					$meta->set('past', '1');
+				}
+			}
+		}
 	public function addCalendarRewrites():void
 	{
+		$this->scheduleMarkPassed();
 		add_rewrite_tag('%eyear%', '([^&]+)');
 		add_rewrite_tag('%emonth%', '([^&]+)');
 		add_rewrite_tag('%eday%', '([^&]+)');
+		$registrar = Registrar::getInstance($this->slug);
+		$base = $registrar->registrar->rewrite['slug']??$this->slug;
+
+		// Adds the rewrite rule to capture URLs with year, month, and day.
+		add_rewrite_rule(
+			'^'.$base.'/([0-9]{4})/([0-9]{2})/([0-9]{2})/?$',
+			'index.php?post_type='.$this->postType.'&eyear=$matches[1]&emonth=$matches[2]&eday=$matches[3]',
+			'top'
+		);
+			add_rewrite_rule(
+				'^'.$base.'/([0-9]{4})/([0-9]{2})/([0-9]{2})/page/([0-9-]+)/?$',
+				'index.php?post_type='.$this->postType.'&eyear=$matches[1]&emonth=$matches[2]&eday=$matches[3]&paged=$matches[4]',
+				'top'
+			);
+
+		// Adds the rewrite rule to capture URLs with year, month only.
+		add_rewrite_rule(
+			'^'.$base.'/([0-9]{4})/([0-9]{2})/?$',
+			'index.php?post_type='.$this->postType.'&eyear=$matches[1]&emonth=$matches[2]',
+			'top'
+		);
+			add_rewrite_rule(
+				'^'.$base.'/([0-9]{4})/([0-9]{2})/page/([0-9-]+)/?$',
+				'index.php?post_type='.$this->postType.'&eyear=$matches[1]&emonth=$matches[2]&paged=$matches[3]',
+				'top'
+			);
+
+		// Adds the rewrite rule to capture URLs with year only.
+		add_rewrite_rule(
+			'^'.$base.'/([0-9]{4})/?$',
+			'index.php?post_type='.$this->postType.'&eyear=$matches[1]',
+			'top'
+		);
+			add_rewrite_rule(
+				'^'.$base.'/([0-9]{4})/page/([0-9-]+)/?$',
+				'index.php?post_type='.$this->postType.'&eyear=$matches[1]&paged=$matches[2]',
+				'top'
+			);
+
+		// Adds the rewrite rule for all events
+		add_rewrite_rule(
+			'^'.$base.'/?$',
+			'index.php?post_type='.$this->postType,
+			'top'
+		);
+			add_rewrite_rule(
+				'^'.$base.'/page/([0-9-]+)/?$',
+				'index.php?post_type='.$this->postType.'&paged=$matches[1]',
+				'top'
+			);
+
+		add_rewrite_rule(
+			"^{$base}/([^/]+)/?$",
+			"index.php?post_type={$this->postType}&name=\$matches[1]",
+			'top'
+		);
+
 	}
 }

--
Gitblit v1.10.0