Jake Vanderwerf
2026-04-26 5fe601cd1962dca79c0765a54ce864af5abb7d40
content/strategy.php
@@ -1,158 +1,385 @@
<?php
// /content/strategy.php
function ajv_strategy():array
{
    return [
        'singular'       => 'Strategy',
        'plural'       => 'Strategies',
        'hide_single'  => false,
        'redirectToAuthor'=> false,
        'show_directory'=> true,
        'directory' => 'Strategy',
        'addCrumb'      => 'project',
        'show_feed'    => true,
        'favouritable' => true,
        'karma'        => false,
        'icon'         => 'brain',
        'rewrite'      => [
            'slug'       => 'strategy',
            'with_front' => false,
        ],
        'seo' => [
            'schema' => [
                'type' => 'CreativeWork',
                'name' => '{{post_title}}',
                'description' => '{{post_excerpt}}',
                'about' => ['@id' => '{{site_url}}/#strategy'],
                'associatedMedia' => '{{post_thumbnail}}',
                'dateCreated' => '{{post_date}}',
            ],
            'meta' => [
                'title' => '{{post_title}} | Brand Strategy in Canada',
                'description' => '{{post_excerpt}}',
            ],
            'archive' => [
                'type' => 'CollectionPage',
                'name' => 'Brand Strategy in Canada. Made in Edmonton, Alberta.',
            ],
        ],
        'feed'      => [
            'single'    => [
                'pre_title' => 'Brand Strategy in Canada. Made in Edmonton, Alberta.',
            ],
            'archive'   => [
use JVBase\meta\Meta;
use JVBase\registrar\Registrar;
if (!defined('ABSPATH')) {
    exit;
}
add_action('plugins_loaded', 'ajv_strategy',1);
//Add fields later so we can verify taxonomies/post types exist
add_action('plugins_loaded', 'ajv_strategy_fields', 2);
add_filter('ajv_StrategySchemaDefault', 'ajv_strategy_schema');
add_filter('ajv_StrategyMetaDefault', 'ajv_strategy_meta');
add_filter('ajv_StrategyArchiveDefault', 'ajv_strategy_archive');
function ajv_strategy(){
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $strategy = Registrar::forPost('strategy', 'Strategy', 'Strategies')
        ->setIcon('brain')
        ->make([
            'rewrite'   => [
                'slug'          => 'strategy',
                'with_front'    => false,
            ],
            'config'    => [
                'is_gallery'    => false,
                'content'       => 'strategy',
                'context'       => 'strategy',
                'id'            => [],
                'class'         => [],
            'taxonomies'    => [
                'project',
                'form',
                'target',
                'city'
            ]
        ],
        'fields'       => [
            'post_status'         => [
                'type'      => 'radio',
                'label'     => 'Status',
                'options'   => [
                    'publish'   => 'Show',
                    'draft'     => 'Hide',
                    'trash'     => 'Scrap',
                    'delete'    => 'Permanently Delete'
                ],
                'hidden'    => true,
        ])
        ->setAll([
            'show_feed',
            'show_directory',
            'favouritable'
        ]);
}
function ajv_strategy_fields():void {
    if (!class_exists('JVBase\registrar\Registrar')) {
        return;
    }
    $strategy = Registrar::getInstance('strategy');
//$directory = $strategy->getConfig('directory');
    $breadcrumbs = $strategy->config('breadcrumbs');
    $breadcrumbs->setCrumb('project');
    $fields = $strategy->fields();
    $fields->addField('project', [
        'type'      => 'selector',
        'subtype'   => 'taxonomy',
        'taxonomy'  => 'project',
        'label'     => 'Project',
    ]);
    $fields->addField('form', [
        'type'      => 'selector',
        'subtype'   => 'taxonomy',
        'taxonomy'  => 'form',
        'label'     => 'Format',
    ]);
    $fields->addField('target', [
        'type'      => 'selector',
        'subtype'   => 'taxonomy',
        'taxonomy'  => 'target',
        'label'     => 'Target Audience',
    ]);
    $fields->addField('city', [
        'type'      => 'selector',
        'subtype'   => 'taxonomy',
        'taxonomy'  => 'city',
        'label'     => 'City',
    ]);
    $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_date'  => [
                'type'      => 'date',
                'label'     => 'Date',
            ],
            'post_title'     => [
                'type'  => 'text',
                'label' => 'Title',
            ],
            'post_thumbnail' => [
            'image' => [
                'type'  => 'upload',
                'label' => 'Image',
                'multiple' => true,
                'label' => 'Example Image'
            ],
            'project'  => [
                'type'  => 'taxonomy',
                'taxonomy'  => 'project',
                'autocomplete'  => true,
                'label' => 'Project',
            ],
            'target'  => [
                'type'  => 'taxonomy',
                'taxonomy'  => 'target',
                'autocomplete'  => true,
                'label' => 'Target Audience',
            ],
            'city'  => [
                'type'  => 'taxonomy',
                'autocomplete'  => true,
                'taxonomy'  => 'city',
                'label' => 'City',
            ],
            'gallery'        => [
                'type'      => 'upload',
                'multiple'  => true,
                'label'     => 'Gallery',
            ],
            'price'          => [
                'type'  => 'number',
                'label' => 'Price',
            ],
            '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
            ],
            'image' => [
                'type'  => 'upload',
                'multiple' => true,
                'label' => 'Example Image'
            ],
            'fulfilled' => [
                'type'  => 'textarea',
                'quill' => true,
                'label' => 'How I fulfilled it'
            ]
        ]
    ]);
}
//function ajv_strategy():array
//{
//    return [
//        'singular'       => 'Strategy',
//        'plural'       => 'Strategies',
//        'hide_single'  => false,
//        'redirectToAuthor'=> false,
//        'show_directory'=> true,
//        'directory' => 'Strategy',
//        'addCrumb'      => 'project',
//        'show_feed'    => true,
//        'favouritable' => true,
//        'karma'        => false,
//        'icon'         => 'brain',
//        'rewrite'      => [
//            'slug'       => 'strategy',
//            'with_front' => false,
//        ],
//        'seo' => [
//            'schema' => [
//                'type' => 'CreativeWork',
//                'name' => '{{post_title}}',
//                'description' => '{{post_excerpt}}',
//                'about' => ['@id' => '{{site_url}}/#strategy'],
//                'associatedMedia' => '{{post_thumbnail}}',
//                'dateCreated' => '{{post_date}}',
//            ],
//            'meta' => [
//                'title' => '{{post_title}} | Brand Strategy in Canada',
//                'description' => '{{post_excerpt}}',
//            ],
//            'archive' => [
//                'type' => 'CollectionPage',
//                'name' => 'Brand Strategy in Canada. Made in Edmonton, Alberta.',
//            ],
//        ],
//        'feed'      => [
//            'single'    => [
//                'pre_title' => 'Brand Strategy in Canada. Made in Edmonton, Alberta.',
//            ],
//            'archive'   => [
//
//            ],
//            'config'    => [
//                'is_gallery'    => false,
//                'content'       => 'strategy',
//                'context'       => 'strategy',
//                'id'            => [],
//                'class'         => [],
//            ]
//        ],
//        'fields'       => [
//            'post_status'         => [
//                'type'      => 'radio',
//                'label'     => 'Status',
//                'options'   => [
//                    'publish'   => 'Show',
//                    'draft'     => 'Hide',
//                    'trash'     => 'Scrap',
//                    'delete'    => 'Permanently Delete'
//                ],
//                'hidden'    => true,
//            ],
//            'post_date'  => [
//                'type'      => 'date',
//                'label'     => 'Date',
//            ],
//            'post_title'     => [
//                'type'  => 'text',
//                'label' => 'Title',
//            ],
//            'post_thumbnail' => [
//                'type'  => 'upload',
//                'label' => 'Image',
//            ],
//            'project'  => [
//                'type'  => 'taxonomy',
//                'taxonomy'  => 'project',
//                'autocomplete'  => true,
//                'label' => 'Project',
//            ],
//
//            'form'  => [
//                'type'  => 'taxonomy',
//                'taxonomy'  => 'form',
//                'autocomplete'  => true,
//                'label' => 'Format',
//            ],
//            'target'  => [
//                'type'  => 'taxonomy',
//                'taxonomy'  => 'target',
//                'autocomplete'  => true,
//                'label' => 'Target Audience',
//            ],
//            'city'  => [
//                'type'  => 'taxonomy',
//                'autocomplete'  => true,
//                'taxonomy'  => 'city',
//                'label' => 'City',
//            ],
//            'gallery'        => [
//                'type'      => 'upload',
//                'multiple'  => true,
//                'label'     => 'Gallery',
//            ],
//            'price'          => [
//                'type'  => 'number',
//                'label' => 'Price',
//            ],
//            '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 Strategies',
//    ];
//}
            '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 Strategies',
function ajv_render_strategy_content(array $block, string $content):string
{
    $out = '';
    $ID = get_the_ID();
    $meta = Meta::forPost($ID);
    $fields = $meta->getAll();
    $bits = [];
    if (array_key_exists('post_excerpt', $fields) && !empty($fields['post_excerpt'])) {
        $bits[] = sprintf(
            '<section id="excerpt"><h2>At a Glance</h2>%s</section>',
            jvb_filter_content($fields['post_excerpt'])
        );
    }
    if (array_key_exists('gallery', $fields) && !empty($fields['gallery'])) {
        $gallery = explode(',',$fields['gallery']);
        $gallery = array_map(function ($imgID) {
            $out = '<figure>'.jvbFormatImage($imgID,'tiny','medium');
            $caption = wp_get_attachment_caption($imgID);
            $out .= ($caption && $caption !== '') ? '<figcaption>'.jvb_filter_content($caption).'</figcaption>' : '';
            $out .= '</figure>';
            return $out;
        }, $gallery);
        $gallery = implode('',$gallery);
        $bits[] = sprintf(
            '<section id="gallery"><h2>Gallery</h2><div>%s</div></section>',
            $gallery
        );
    }
    if (array_key_exists('post_content', $fields) && !empty($fields['post_content'])) {
        $bits[] = sprintf(
            '<section id="content">%s</section>',
            $fields['post_content']
        );
    }
    if (array_key_exists('needs', $fields) && !empty($fields['needs'])) {
        $bits[] = ajvb_format_needs($fields['needs']);
    }
    if (array_key_exists('wants', $fields) && !empty($fields['wants'])) {
        $bits[] = ajvb_format_wants($fields['wants']);
    }
    if (!empty($bits)) {
        $out = implode('',$bits);
    }
    return $out;
}
function ajv_strategy_schema():array
{
    return [
        'type'              => 'JVBase\managers\SEO\render\Thing\CreativeWork\CreativeWork',
        'name'              => '{{post_title}} | Brand Strategy in Canada',
        'description'       => '{{post_excerpt}}',
        'thumbnail'         => '{{post_thumbnail}}',
        'dateCreated'       => '{{post_date}}',
        'dateModified'      => '{{post_modified}}',
        'keywords'          => '{{style.name}}'
    ];
}
function ajv_strategy_meta():array
{
    return[
        'name' => '{{post_title}} | Brand Strategy in Canada',
    ];
}
function ajv_strategy_archive(array $defaults):array
{
    return array_merge($defaults, [
        'name' => 'Brand Strategy in Canada. Made in Edmonton, Alberta.',
    ]);
}
function ajv_strategy_reference_schema(array $defaults):array
{
    return $defaults;
}