Jake Vanderwerf
2026-09-14 7935d26cd16a4f8f69a59a44e27a7263b60e54bf
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]??'';
   }
}