From 747d741293e064a979d7bf6c143ef969ea6d7629 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Sun, 24 May 2026 20:49:44 +0000
Subject: [PATCH] =GMBReview block minor tweaks. Refactored ReferralManager.php and ReferralRoutes.php to utilize the manager for all logic, and CustomTable for table interactions.

---
 src/fields/render.php |  320 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 320 insertions(+), 0 deletions(-)

diff --git a/src/fields/render.php b/src/fields/render.php
new file mode 100644
index 0000000..b5645eb
--- /dev/null
+++ b/src/fields/render.php
@@ -0,0 +1,320 @@
+<?php
+
+use JVBase\managers\Cache;
+use JVBase\meta\Meta;
+use JVBase\meta\Render;
+use JVBase\registrar\Registrar;
+
+if (!defined('ABSPATH')) {
+    exit; // Exit if accessed directly
+}
+/**
+ * Summary Block Render
+ *
+ * @package Edmonton_Ink
+ */
+
+function jvbRenderSummaryBlock(array $attributes):string
+{
+
+    // Buffer output
+    if (is_tax()) {
+        switch (get_queried_object()->taxonomy) {
+            case BASE.'shop':
+                return jvbRenderShopSummary();
+            default:
+                return jvbRenderTermSummary();
+        }
+    } elseif (is_singular()) {
+        return jvbRenderArtistSummary();
+    }
+    return '';
+}
+
+function jvbRenderArtistSummary():string
+{
+    $current = get_queried_object();
+    $cache = Cache::for('artistSummary', WEEK_IN_SECONDS);
+    $key = $current->ID;
+    $cached = $cache->get($key);
+    if ($cached !== false) {
+        return $cached;
+    }
+
+    ob_start();
+    $meta = Meta::forPost($current->ID);
+    $artist = jvbContentFromUser((int)$current->post_author);
+
+	$registrar = Registrar::getInstance($current->post_type);
+	$sections = [];
+	if ($registrar) {
+		$sections = $registrar->getSections();
+	}
+
+
+
+
+//    $handler = JVB()->getContent(str_replace(BASE,'', $current->post_type));
+    ?>
+    <nav id="artist" class="on-this-page index">
+        <label>Jump to:
+            <button type="button" aria-label="Show Index" title="Show Index" class="toggle" aria-expanded="false">
+                <?= jvbIcon('plus-square')?>
+            </button>
+        </label>
+        <ul>
+            <li><a href="#top" title="Back to Top"><?=jvbIcon('caret-circle-up')?></a></li>
+            <li><a href="#about">About</a></li>
+            <li><a href="#styles">Styles</a></li>
+            <li><a href="#contact">Contact</a></li>
+            <li><a href="#work">Work</a></li>
+        </ul>
+    </nav>
+    <header id="top">
+        <h1><small><?=(!empty($artist['city'])) ? $artist['city']['name'] :'Edmonton'?>'s Best <?= (!empty($artist['type'])) ?
+                    $artist['type']['name']:'Tattoo Artists'?>:
+            </small><?=$artist['display_name']?></h1>
+        <div>
+			<?php if (!empty($artist['shop'])) : ?>
+            <ul class="term-list shop">
+                <li>
+                    <a href="<?=$artist['shop']['url']?>" title="Learn more about <?=$artist['shop']['name']?>">
+                        <?= strtolower($artist['shop']['name'])?>
+                    </a>
+                </li>
+            </ul>
+			<?php endif; ?>
+			<?php if (!empty($artist['city'])): ?>
+            <ul class="term-list city">
+                <li>
+                    <a href="<?=$artist['city']['url']?>" title="See who else is rocking out of <?=$artist['city']['name']?>">
+                        <?= strtolower($artist['city']['name'])?>
+                    </a>
+                </li>
+            </ul>
+			<?php endif; ?>
+            <?php $styles = $meta->get('top_styles');
+            if (!empty($styles)) {
+                ?>
+                <ul class="term-list style">
+                    <?php
+                    foreach ($styles as $style) {
+                        $term = get_term((int)$style, BASE.'style');
+                        if ($term && !is_wp_error($term)) {
+                            $link = get_term_link((int)$style, BASE.'style');
+                            ?>
+                            <li>
+                                <a href="<?=$link?>" title="Learn more about <?=html_entity_decode($term->name)?>">
+                                    <?=strtolower(html_entity_decode($term->name))?>
+                                </a>
+                            </li>
+                            <?php
+                        }
+                    }
+                    ?>
+                </ul>
+                <?php
+            }
+            ?>
+        </div>
+    </header>
+    <section>
+        <details class="bio-info">
+            <summary class="row x-btw">
+                <h2>About <?= ($artist['name'] !== '') ? $artist['name'] : strtok($artist['display_name'], ' ')?></h2>
+            </summary>
+            <div class="columns stack-small">
+                <div class="column">
+                    <?= Render::renderFrom($meta, 'image_portrait'); ?>
+                </div>
+                <div class="column">
+					<?= Render::renderFrom($meta, 'short_bio'); ?>
+                </div>
+            </div>
+            <div id="styles">
+                <h3>Works In</h3>
+                <?= jvbGetTheTerms('style', $current->ID) ?>
+            </div>
+            <div class="contact">
+                <h3>Contact:</h3>
+                <?php
+                echo jvbRenderContactInfo($current->ID, $meta);
+                echo jvbRenderLinks($current->ID, $meta);
+                ?>
+            </div>
+
+            <div id="about">
+				<?= Render::renderFrom($meta, 'bio')?>
+            </div>
+        </details>
+    </section>
+    <section id="contact" class="">
+        <h2>Contact <?=$artist['name']?></h2>
+        <?php
+        echo jvbRenderContactInfo($current->ID, 'post');
+        echo jvbRenderLinks($current->ID, 'post');
+        ?>
+    </section>
+    <?php
+    $finished = ob_get_clean();
+    $cache->set($key, $finished);
+    return $finished;
+}
+
+function jvbRenderShopSummary()
+{
+    $current = get_queried_object();
+
+    $cache = Cache::for('shop_bio', WEEK_IN_SECONDS)->connect('taxonomy');
+    $key = $current->term_id;
+    $cached = $cache->get($key);
+    if ($cached !== false) {
+        return $cached;
+    }
+
+    ob_start();
+
+    $meta = Meta::forTerm($current->term_id);
+	$fields = $meta->getAll(['average_rating', 'established', 'bio','location','hours','specialties','awards','reviews']);
+    ?>
+    <nav id="shop" class="on-this-page index">
+        <label>Jump to:
+            <button type="button" aria-label="Show Index" title="Show Index" class="toggle" aria-expanded="false">
+                <?= jvbIcon('plus-square')?>
+            </button>
+        </label>
+        <ul>
+            <li><a href="#top" title="Back to Top"><?=jvbIcon('caret-circle-up')?></a></li> <?php
+            if ($fields['rating'] !== 'none') {
+                ?>
+                <li><a href="#rating">Rating</a></li>
+                <?php
+            } elseif ($fields['opened'] !== '') {
+                ?>
+                <li><a href="#opened">Opened</a></li>
+                <?php
+            } elseif ($fields['location'] !== '') {
+                ?>
+                <li><a href="#location">Location</a></li>
+                <?php
+            } elseif ($fields['about'] !== '') {
+                ?>
+                <li><a href="#about">About</a></li>
+                <?php
+            } elseif ($fields['hours'] !== '') {
+                ?>
+                <li><a href="#hours">Hours</a></li>
+                <?php
+            } elseif ($fields['specialties'] !== '') {
+                ?>
+                <li><a href="#specialties">Specialties</a></li>
+                <?php
+            } elseif ($fields['awards'] !== '') {
+                ?>
+                <li><a href="#awards">Awards</a></li>
+                <?php
+            } elseif ($fields['reviews'] !== '') {
+                ?>
+                <li><a href="#reviews">Reviews</a></li>
+                <?php
+            }
+            ?>
+            <li><a href="#contact">Contact</a></li>
+            <li><a href="#artists">Artists</a></li>
+        </ul>
+    </nav>
+    <header id="top">
+        <div class="columns stack-small">
+            <div class="column">
+                <?=jvbFormatImage($meta->get('image'))?>
+            </div>
+            <div class="column">
+                <h1>
+                    <small><?= (get_term((int)$meta->get('city'), BASE.'city')) ?
+                            get_term((int)$meta->get('city'), BASE.'city')->name :
+                            'Edmonton'?>'s Best Tattoo Shops</small>
+                    <?=$current->name?>
+                </h1>
+                <?= jvbFormatRating($current->term_id, 'term') ?>
+				<?= Render::renderFrom($meta,   'slogan'); ?>
+            </div>
+        </div>
+    </header>
+    <section>
+        <details class="bio-info">
+            <summary class="row x-btw">
+                <h2>Learn More About <?=$current->name?></h2>
+            </summary>
+            <div class="map">
+				<?= Render::renderFrom($meta, 'location'); ?>
+            </div>
+            <div class="short-bio">
+				<?= Render::renderFrom($meta, 'short_bio'); ?>
+            </div>
+
+            <div class="contact">
+                <h3>Contact:</h3>
+                <?php
+                echo jvbRenderContactInfo($current->term_id, 'term');
+                echo jvbRenderLinks($current->term_id, 'term');
+                ?>
+            </div>
+
+            <div id="about">
+				<?= Render::renderFrom($meta, 'bio')?>
+            </div>
+        </details>
+    </section>
+    <section id="contact" class="">
+        <h2>Contact </h2>
+        <?php
+        echo jvbRenderContactInfo($current->term_id, 'term');
+        echo jvbRenderLinks($current->term_id, 'term');
+        ?>
+    </section>
+    <?= jvbRenderHours($current->term_id, 'term')?>
+
+
+    <?php
+    $finished = ob_get_clean();
+    $cache->set($key, $finished);
+    return $finished;
+}
+
+
+function jvbRenderTermSummary()
+{
+    $current = get_queried_object();
+    $cache = Cache::for('term_summary', WEEK_IN_SECONDS)->connect('taxonomy');
+    $key = $current->ID;
+    $cached = $cache->get($key);
+    if ($cached !== false) {
+        return $cached;
+    }
+
+    ob_start();
+	$tax = jvbNoBase($current->taxonomy);
+    switch ($tax) {
+        case 'style':
+            $title = 'Tattoo Artists';
+            break;
+        case 'theme':
+            $title = 'Tattoos';
+            break;
+        default:
+            $title = '';
+    }
+
+    $meta = Meta::forTerm($current->ID);
+    $fields = $meta->getAll();
+
+    ?>
+    <header id="top">
+        <h1><?= get_the_archive_title() ?></h1>
+    </header>
+
+    <?php
+    $finished = ob_get_clean();
+    $cache->set($key, $finished);
+    return $finished;
+}

--
Gitblit v1.10.0