Jake Vanderwerf
7 days ago 46d681c6b825d21b3f698d793c4e630c687d90ad
src/summary/render.php
New file
@@ -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;
}