From 3e4e3db64b366028845cfd610c5b17f26bd062ee Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Sun, 06 Sep 2026 23:04:45 +0000
Subject: [PATCH] =Added conditional logic. Skeletoned a block to select a particular meta for display.
---
inc/registrar/helpers/MakeCalendarType.php | 160 +++++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 130 insertions(+), 30 deletions(-)
diff --git a/inc/registrar/helpers/MakeCalendarType.php b/inc/registrar/helpers/MakeCalendarType.php
index 5ca3bf7..1c2d011 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,54 +52,55 @@
],
'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',
'label' => 'Make Multi-Day Event',
'default' => false,
],
- 'date_end' => [
- 'type' => 'date',
- 'label' => __('Date End', 'jvb'),
- 'condition' => [
- 'field' => 'make_multiple',
- 'operator' => '==',
- 'value' => 1
- ]
- ],
+// 'date_end' => [
+// 'type' => 'date',
+// 'label' => 'Date End',
+// 'condition' => [
+// 'field' => 'make_multiple',
+// 'operator' => '==',
+// 'value' => 1
+// ]
+// ],
'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' => [
'type' => 'repeater',
'label' => 'Daily Schedule',
'description' => 'Set specific times for multi-day events',
+ 'add_label' => 'Add Day',
'condition' => [
'field' => 'make_multiple',
'operator' => '==',
@@ -114,14 +127,12 @@
],
'max_participants' => [
'type' => 'number',
- 'label' => __('Maximum Participants', 'jvb'),
- 'bulkEdit'=> true,
+ 'label' => 'Maximum Participants',
],
'is_free' => [
'type' => 'true_false',
'label' => 'Free Event?',
'default' => 1,
- 'bulkEdit'=> true,
],
'cost' => [
'type' => 'number',
@@ -132,7 +143,6 @@
'operator' => '!=',
'value' => 1
],
- 'bulkEdit'=> true,
],
'ticket_url' => [
'type' => 'url',
@@ -151,7 +161,6 @@
'type' => 'true_false',
'label' => 'Drop-ins Welcome?',
'default' => true,
- 'bulkEdit'=> true,
],
'recurrence' => [
'type' => 'group',
@@ -293,16 +302,11 @@
if ($post->post_type === $this->postType) {
$get = ['year', 'month','day'];
$values = Meta::forPost($post->ID)->getAll($get);
-
foreach ($values as $key => $value) {
- if (!empty($value)) {
+ if (!empty($value) && $value !== 0) {
$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);
}
}
}
@@ -325,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