From 7935d26cd16a4f8f69a59a44e27a7263b60e54bf Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Mon, 14 Sep 2026 19:05:30 +0000
Subject: [PATCH] =Simple Calendar block up and running

---
 inc/blocks/SimpleCalendarBlock.php |   70 ++++++++++++++++++++---------------
 1 files changed, 40 insertions(+), 30 deletions(-)

diff --git a/inc/blocks/SimpleCalendarBlock.php b/inc/blocks/SimpleCalendarBlock.php
index c83d0a3..41eaa2b 100644
--- a/inc/blocks/SimpleCalendarBlock.php
+++ b/inc/blocks/SimpleCalendarBlock.php
@@ -2,6 +2,7 @@
 namespace JVBase\blocks;
 
 use DateTime;
+use JVBase\helpers\Events;
 use JVBase\managers\Cache;
 use JVBase\meta\Meta;
 use JVBase\registrar\Registrar;
@@ -154,7 +155,7 @@
 				$title .= sprintf(
 					' %s %s',
 					is_tax() ? 'happening on' : 'in',
-					$this->getMonthName((int)$this->has('emonth')),
+					Events::getMonthName((int)$this->has('emonth')),
 				);
 			}
 			if ($this->has('eday')) {
@@ -188,7 +189,8 @@
 				}
 				if (!empty($out)) {
 					$content = sprintf(
-				'<ul class="term-list content"><li class="label">Content:</li>%s</ul>',
+				'<details class="content row start"><summary>%sBy Content</summary><ul class="term-list content">%s</ul></details>',
+						jvbIcon('calendar-alt'),
 						implode('', $out)
 					);
 				}
@@ -213,10 +215,13 @@
 						}
 					}
 					if (!empty($out)) {
+						$inst = Registrar::getInstance($slug);
 						$taxonomies .= sprintf(
-							'<ul class="term-list row start %s"><li class="label">%s</li>%s</ul>',
+							'<details class="%s row start"><summary>%sBy %s</summary><ul class="term-list row start %s">%s</ul></details>',
+							$inst->getSlug(),
+							jvbIcon($inst->getIcon()??'folder'),
+							$inst->getSingular(),
 							$slug,
-							$title,
 							implode('', $out)
 						);
 					}
@@ -225,10 +230,10 @@
 
 			$dates = $this->getDateNavigation();
 
-			if (!is_post_type_archive($this->content[0]) || $this->isDatedArchive()) {
+			if (!is_post_type_archive($this->firstContent()) || $this->isDatedArchive()) {
 				echo sprintf(
 					'<a href="%s" class="btn chip">All Events</a>',
-					get_post_type_archive_link($this->content[0])
+					get_post_type_archive_link($this->firstContent())
 				);
 			}
 			if (!empty($content) || !empty($taxonomies) || !empty($dates)) {
@@ -306,7 +311,7 @@
 
 							foreach ($months as $month => $days) {
 								$m = intval($month);
-								$monthName = $this->getMonthName($m);
+								$monthName = Events::getMonthName($m);
 
 								$out .= sprintf(
 									'<li><a href="%s/%d/%s" title="View all posts in %s, %d">%s</a></li>',
@@ -368,7 +373,7 @@
 		$events = implode('', array_map([$this, 'formatItem'], $items->posts));
 
 		$events = empty($events) ? '<p class="empty">Nothing here yet</p>' : sprintf(
-			'<ul class="item-list">%s</ul>',
+			'<ul class="item-list col">%s</ul>',
 			$events
 		);
 		$total = $items->max_num_pages;
@@ -400,6 +405,7 @@
 			'post_status'	=> 'publish',
 			'orderby'		=> 'meta_value',
 			'meta_key'		=> BASE.'date_start',
+			'order'			=> 'ASC',
 			'meta_type'		=> 'DATETIME',
 			'posts_per_page'=> 30,
 			'fields'		=> 'ids',
@@ -449,22 +455,38 @@
 	{
 		$meta = Meta::forPost($ID);
 		$type = jvbNoBase(get_post_type($ID));
+		if (empty($meta->get('date_start'))) {
+			return '';
+		}
 		$date = strtotime($meta->get('date_start'));
+		$img = empty($meta->get('post_thumbnail')) ? '' : jvbFormatImage($meta->get('post_thumbnail'), 'tiny', 'medium');
+		$fields = $meta->getAll();
 		return sprintf(
 	'<li class="item %s">
 				%s
-				<h3>
-					<a href="%s" title="Learn More">%s</a>
-					<small><time datetime="%s">%s</time></small>
-				</h3>
+				%s
+				<div class="row start header">
+					%s
+					<h3>
+						<a href="%s" title="Learn More">%s</a>
+					</h3>
+				</div>
+				<div class="meta">
+					<p>%s</p>
+					%s
+					%s
+				</div>
 				%s
 			</li>',
 			$type,
-			empty($meta->get('post_thumbnail')) ? '' : jvbFormatImage($meta->get('post_thumbnail'), 'tiny', 'medium'),
+			Events::tags($fields),
+			$img,
+			Events::calendarDay($fields['date_start']),
 			get_the_permalink($ID),
 			$meta->get('post_title'),
-			date('c', $date),
-			date('F j, Y', $date),
+			Events::formatDay($meta->get('date_start'), $meta->get('time_start'), $meta->get('time_end')),
+			Events::location($fields),
+			Events::terms($fields, false),
 			empty($meta->get('post_excerpt')) ? '' : wpautop($meta->get('post_excerpt'))
 		);
 	}
@@ -490,21 +512,9 @@
 			false;
 	}
 
-	protected function getMonthName(int $num):string
+
+	protected function firstContent():string
 	{
-		return match($num) {
-			1 => 'January',
-			2 => 'February',
-			3 => 'March',
-			4 => 'April',
-			5 => 'May',
-			6 => 'June',
-			7 => 'July',
-			8 => 'August',
-			9 => 'September',
-			10 => 'October',
-			11 => 'November',
-			12 => 'December',
-		};
+		return array_keys($this->content)[0]??'';
 	}
 }

--
Gitblit v1.10.0