Jake Vanderwerf
2026-04-26 5fe601cd1962dca79c0765a54ce864af5abb7d40
content/art.php
@@ -1,189 +1,333 @@
<?php
// /content/art.php
use JVBase\meta\Meta;
use JVBase\registrar\Registrar;
function ajv_art():array
{
    return [
        'singular'       => 'Art',
        'plural'       => 'Art',
        'dash_title'    => 'Art',
        'dash_description' => 'Manage your art posts',
        'directory' => 'Art',
        'breadcrumb'    => 'Art',
        'addCrumb'  => 'form',
        'hide_single'  => false,
        'show_feed'    => true,
        'show_directory'=> true,
        'favouritable' => true,
        'karma'        => false,
        'icon'         => 'palette',
        'seo' => [
            'schema' => [
                'type' => 'VisualArtwork',
                'name' => '{{post_title}}',
                'description' => '{{post_excerpt}}',
                'about' => ['@id' => '{{site_url}}/#art'],
                'associatedMedia' => '{{post_thumbnail}}',
                'dateCreated' => '{{post_date}}',
                // artform, artMedium, creator, keywords auto-enriched by VisualArtworkResolver
            ],
            'meta' => [
                'title' => '{{post_title}} — {{form.name}} Art | Handmade. Human.',
                'description' => '{{post_excerpt}}',
            ],
            'archive' => [
                'type' => 'CollectionPage',
                'name' => 'Canadian Art. Made in Edmonton, Alberta.',
                'description' => 'Handmade sculpture, jewelry, and more from Edmonton, Alberta.',
            ],
        ],
        'feed'      => [
            'single'    => [
                'pre_title' => 'Canadian Art. Made in Edmonton, Alberta.',
            ],
            'archive'   => [
if (!defined('ABSPATH')) {
    exit;
}
add_action('plugins_loaded', 'ajv_art',1);
//Add fields later so we can verify taxonomies/post types exist
add_action('plugins_loaded', 'ajv_art_fields', 2);
add_filter('ajv_ArtSchemaDefault', 'ajv_art_schema');
add_filter('ajv_ArtMetaDefault', 'ajv_art_meta');
add_filter('ajv_ArtArchiveDefault', 'ajv_art_archive');
function ajv_art(){
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $art = Registrar::forPost('art', 'Art', 'Art')
        ->setIcon('palette')
        ->make([
            'rewrite'   => [
                'slug'          => 'art',
                'with_front'    => false,
            ],
            'config'    => [
                'is_gallery'    => false,
                'content'       => 'art',
                'context'       => 'art',
                'id'            => [],
                'class'         => [],
            'taxonomies'    => [
                'project',
                'form',
                'city',
                'media',
                'style',
                'theme'
            ]
        ],
        'rewrite'      => [
            'slug'       => 'art',
            'with_front' => false,
        ],
        ])
        ->setAll([
            'show_feed',
            'show_directory',
            'favouritable'
        ]);
        'fields'       => [
            'post_status'         => [
                'type'      => 'radio',
                'label'     => 'Status',
                'options'   => [
                    'publish'   => 'Show',
                    'draft'     => 'Hide',
                    'trash'     => 'Scrap',
                    'delete'    => 'Permanently Delete'
                ],
                'hidden'    => true,
//$directory = $art->getConfig('directory');
}
function ajv_art_fields():void
{
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $art = Registrar::getInstance('art');
    $breadcrumbs = $art->config('breadcrumbs');
    $breadcrumbs->setCrumb(['project', 'form']);
    $fields = $art->fields();
    $fields->addField('project', [
        'type'      => 'selector',
        'subtype'   => 'taxonomy',
        'taxonomy'  => 'project',
        'label'     => 'Project',
    ]);
    $fields->addField('form', [
        'type'      => 'selector',
        'subtype'   => 'taxonomy',
        'taxonomy'  => 'form',
        'label'     => 'Form',
    ]);
    $fields->addField('city', [
        'type'      => 'selector',
        'subtype'   => 'taxonomy',
        'taxonomy'  => 'city',
        'label'     => 'City',
    ]);
    $fields->addField('media', [
        'type'      => 'selector',
        'subtype'   => 'taxonomy',
        'taxonomy'  => 'media',
        'label'     => 'Media',
    ]);
    $fields->addField('style', [
        'type'      => 'selector',
        'subtype'   => 'taxonomy',
        'taxonomy'  => 'style',
        'label'     => 'Style',
    ]);
    $fields->addField('theme', [
        'type'      => 'selector',
        'subtype'      => 'taxonomy',
        'taxonomy'  => 'theme',
        'label'     => 'Theme',
    ]);
    $fields->addField('gallery', [
        'type'      => 'upload',
        'multiple'  => true,
        'label'     => 'Gallery',
    ]);
    $fields->addField('price', [
        'type'      => 'number',
        'label'     => 'Price',
    ]);
    $fields->addField('needs', [
        'type'       => 'repeater',
        'label'      => 'Needs',
        'fields'     => [
            'need' => [
                'type' => 'text',
                'label' => 'Need',
                'required' => true
            ],
            'post_title'     => [
                'type'  => 'text',
                'label' => 'Title',
            ],
            'post_date' => [
                'type'  => 'date',
                'label' => 'Date',
            ],
            'city'  => [
                'type'  => 'taxonomy',
                'taxonomy'  => 'city',
                'autocomplete'  => true,
                'label' => 'City',
            ],
            'form'  => [
                'type'  => 'taxonomy',
                'taxonomy'  => 'form',
                'autocomplete'  => true,
                'label' => 'Art Form',
            ],
            'media'  => [
                'type'  => 'taxonomy',
                'taxonomy'  => 'media',
                'autocomplete'  => true,
                'label' => 'Media',
            ],
            'style'  => [
                'type'  => 'taxonomy',
                'taxonomy'  => 'style',
                'autocomplete'  => true,
                'label' => 'Style',
            ],
            'theme'  => [
                'type'  => 'taxonomy',
                'taxonomy'  => 'theme',
                'autocomplete'  => true,
                'label' => 'Theme',
            ],
            'project'  => [
                'type'  => 'taxonomy',
                'taxonomy'  => 'project',
                'autocomplete'  => true,
                'label' => 'Project',
            ],
            'post_thumbnail' => [
            'image' => [
                'type'  => 'upload',
                'label' => 'Image',
                'multiple' => true,
                'label' => 'Example Image'
            ],
            'gallery'        => [
                'type'  => 'upload',
                'multiple'=> 'true',
                'label' => 'Gallery',
            ],
            'price'          => [
                'type'  => 'number',
                'label' => 'Price',
            ],
            'post_excerpt'  => [
                'type'  => 'textarea',
                'label' => 'Short Blurb',
            ],
            'post_content'   => [
            'fulfilled' => [
                'type'  => 'textarea',
                'quill' => true,
                'label' => 'Notes'
                'label' => 'How I fulfilled it'
            ]
        ]
    ]);
    $fields->addField('wants', [
        'type'       => 'repeater',
        'label'      => 'Wants',
        'fields'     => [
            'need' => [
                'type' => 'text',
                'label' => 'Need',
                'required' => true
            ],
            'needs' => [
                'type'  => 'repeater',
                'label' => 'Needs',
                'fields'=> [
                    'need' => [
                        'type' => 'text',
                        'label' => 'Need',
                        'required' => true
                    ],
                    'image' => [
                        'type'  => 'upload',
                        'multiple' => true,
                        'label' => 'Example Image'
                    ],
                    'fulfilled' => [
                        'type'  => 'textarea',
                        'quill' => true,
                        'label' => 'How I fulfilled it'
                    ]
                ]
            'image' => [
                'type'  => 'upload',
                'multiple' => true,
                'label' => 'Example Image'
            ],
            'wants' => [
                'type'  => 'repeater',
                'label' => 'Wants',
                'fields'=> [
                    'need' => [
                        'type' => 'text',
                        'label' => 'Want',
                        'required' => true
                    ],
                    'image' => [
                        'type'  => 'upload',
                        'multiple' => true,
                        'label' => 'Example Image'
                    ],
                    'fulfilled' => [
                        'type'  => 'textarea',
                        'quill' => true,
                        'label' => 'How I fulfilled it'
                    ]
                ]
            ],
        ],
        'single_image' => false,
        'upload_title' => 'Upload Artwork',
    ];
            'fulfilled' => [
                'type'  => 'textarea',
                'quill' => true,
                'label' => 'How I fulfilled it'
            ]
        ]
    ]);
}
//function ajv_art():array
//{
//    return [
//        'singular'       => 'Art',
//        'plural'       => 'Art',
//        'dash_title'    => 'Art',
//        'dash_description' => 'Manage your art posts',
//        'directory' => 'Art',
//        'breadcrumb'    => 'Art',
//        'addCrumb'  => 'form',
//        'hide_single'  => false,
//        'show_feed'    => true,
//        'show_directory'=> true,
//        'favouritable' => true,
//        'karma'        => false,
//        'icon'         => 'palette',
//        'seo' => [
//            'schema' => [
//                'type' => 'VisualArtwork',
//                'name' => '{{post_title}}',
//                'description' => '{{post_excerpt}}',
//                'about' => ['@id' => '{{site_url}}/#art'],
//                'associatedMedia' => '{{post_thumbnail}}',
//                'dateCreated' => '{{post_date}}',
//                // artform, artMedium, creator, keywords auto-enriched by VisualArtworkResolver
//            ],
//            'meta' => [
//                'title' => '{{post_title}} — {{form.name}} Art | Handmade. Human.',
//                'description' => '{{post_excerpt}}',
//            ],
//            'archive' => [
//                'type' => 'CollectionPage',
//                'name' => 'Canadian Art. Made in Edmonton, Alberta.',
//                'description' => 'Handmade sculpture, jewelry, and more from Edmonton, Alberta.',
//            ],
//        ],
//        'feed'      => [
//            'single'    => [
//                'pre_title' => 'Canadian Art. Made in Edmonton, Alberta.',
//            ],
//            'archive'   => [
//
//            ],
//            'config'    => [
//                'is_gallery'    => false,
//                'content'       => 'art',
//                'context'       => 'art',
//                'id'            => [],
//                'class'         => [],
//            ]
//        ],
//        'rewrite'      => [
//            'slug'       => 'art',
//            'with_front' => false,
//        ],
//
//        'fields'       => [
//            'post_status'         => [
//                'type'      => 'radio',
//                'label'     => 'Status',
//                'options'   => [
//                    'publish'   => 'Show',
//                    'draft'     => 'Hide',
//                    'trash'     => 'Scrap',
//                    'delete'    => 'Permanently Delete'
//                ],
//                'hidden'    => true,
//            ],
//            'post_title'     => [
//                'type'  => 'text',
//                'label' => 'Title',
//            ],
//            'post_date' => [
//                'type'  => 'date',
//                'label' => 'Date',
//            ],
//            'city'  => [
//                'type'  => 'taxonomy',
//                'taxonomy'  => 'city',
//                'autocomplete'  => true,
//                'label' => 'City',
//            ],
//            'form'  => [
//                'type'  => 'taxonomy',
//                'taxonomy'  => 'form',
//                'autocomplete'  => true,
//                'label' => 'Art Form',
//            ],
//            'media'  => [
//                'type'  => 'taxonomy',
//                'taxonomy'  => 'media',
//                'autocomplete'  => true,
//                'label' => 'Media',
//            ],
//            'style'  => [
//                'type'  => 'taxonomy',
//                'taxonomy'  => 'style',
//                'autocomplete'  => true,
//                'label' => 'Style',
//            ],
//            'theme'  => [
//                'type'  => 'taxonomy',
//                'taxonomy'  => 'theme',
//                'autocomplete'  => true,
//                'label' => 'Theme',
//            ],
//            'project'  => [
//                'type'  => 'taxonomy',
//                'taxonomy'  => 'project',
//                'autocomplete'  => true,
//                'label' => 'Project',
//            ],
//            'post_thumbnail' => [
//                'type'  => 'upload',
//                'label' => 'Image',
//            ],
//            'gallery'        => [
//                'type'  => 'upload',
//                'multiple'=> true,
//                'label' => 'Gallery',
//            ],
//            'price'          => [
//                'type'  => 'number',
//                'label' => 'Price',
//            ],
//            'post_excerpt'  => [
//                'type'  => 'textarea',
//                'label' => 'Short Blurb',
//            ],
//            'post_content'   => [
//                'type'  => 'textarea',
//                'quill' => true,
//                'label' => 'Notes'
//            ],
//            'needs' => [
//                'type'  => 'repeater',
//                'label' => 'Needs',
//                'fields'=> [
//                    'need' => [
//                        'type' => 'text',
//                        'label' => 'Need',
//                        'required' => true
//                    ],
//                    'image' => [
//                        'type'  => 'upload',
//                        'multiple' => true,
//                        'label' => 'Example Image'
//                    ],
//                    'fulfilled' => [
//                        'type'  => 'textarea',
//                        'quill' => true,
//                        'label' => 'How I fulfilled it'
//                    ]
//                ]
//            ],
//            'wants' => [
//                'type'  => 'repeater',
//                'label' => 'Wants',
//                'fields'=> [
//                    'need' => [
//                        'type' => 'text',
//                        'label' => 'Want',
//                        'required' => true
//                    ],
//                    'image' => [
//                        'type'  => 'upload',
//                        'multiple' => true,
//                        'label' => 'Example Image'
//                    ],
//                    'fulfilled' => [
//                        'type'  => 'textarea',
//                        'quill' => true,
//                        'label' => 'How I fulfilled it'
//                    ]
//                ]
//            ],
//        ],
//        'single_image' => false,
//        'upload_title' => 'Upload Artwork',
//    ];
//}
function ajv_render_art_content(array $block, string $content):string
{
    $out = '';
@@ -196,7 +340,7 @@
    if (array_key_exists('post_excerpt', $fields) && !empty($fields['post_excerpt'])) {
        $bits[] = sprintf(
            '<section id="excerpt"><h2>At a Glance</h2>%s</section>',
            apply_filters('the_content', $fields['post_excerpt'])
            jvb_filter_content($fields['post_excerpt'])
        );
    }
@@ -205,7 +349,7 @@
        $gallery = array_map(function ($imgID) {
            $out = '<figure>'.jvbFormatImage($imgID,'tiny','medium');
            $caption = wp_get_attachment_caption($imgID);
            $out .= ($caption && $caption !== '') ? '<figcaption>'.apply_filters('the_content', $caption).'</figcaption>' : '';
            $out .= ($caption && $caption !== '') ? '<figcaption>'.jvb_filter_content($caption).'</figcaption>' : '';
            $out .= '</figure>';
            return $out;
@@ -220,7 +364,7 @@
    if (array_key_exists('post_content', $fields) && !empty($fields['post_content'])) {
        $bits[] = sprintf(
            '<section id="content">%s</section>',
            apply_filters('the_content', $fields['post_content'])
            $fields['post_content']
        );
    }
@@ -237,4 +381,41 @@
    return $out;
}
function ajv_art_schema():array
{
    return [
        'type'              => 'JVBase\managers\SEO\render\Thing\CreativeWork\VisualArtwork\VisualArtwork',
        'name'              => '{{post_title}} | Canadian Art',
        'artist'            => '{{post_author}}',
        'description'       => '{{post_excerpt}}',
        'thumbnail'         => '{{post_thumbnail}}',
        'dateCreated'       => '{{post_date}}',
        'dateModified'      => '{{post_modified}}',
        'artform'           => '{{form.name}}',
        'artMedium'         => '{{medium.name}}',
        'keywords'          => '{{style.name}}',
    ];
}
function ajv_art_meta():array
{
    return[
        'name' => '{{post_title}} - {{form.name}} | Handmade. Human Art',
    ];
}
function ajv_art_archive(array $defaults):array
{
    return array_merge($defaults, [
        'name' => 'Canadian Art. Made in Edmonton, Alberta.',
        'description' => 'Handmade sculpture, jewellery, and more from Edmonton, Alberta.'
    ]);
}
function ajv_art_reference_schema(array $defaults):array
{
    return $defaults;
}