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