From a17c578433ef543e220697813a9367a260df83e1 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Thu, 28 May 2026 19:14:31 +0000
Subject: [PATCH] =new gitblit setup
---
content/design.php | 448 +++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 415 insertions(+), 33 deletions(-)
diff --git a/content/design.php b/content/design.php
index a4a1fb5..f2d40e4 100644
--- a/content/design.php
+++ b/content/design.php
@@ -1,44 +1,426 @@
<?php
// /content/design.php
-function ajv_design():array
+use JVBase\meta\Meta;
+use JVBase\registrar\Registrar;
+use JVBase\utility\Image;
+
+if (!defined('ABSPATH')) {
+ exit;
+}
+
+add_action('plugins_loaded', 'ajv_design',1);
+//Add fields later so we can verify taxonomies/post types exist
+add_action('plugins_loaded', 'ajv_design_fields', 2);
+
+
+add_filter('ajv_DesignSchemaDefault', 'ajv_design_schema');
+add_filter('ajv_DesignMetaDefault', 'ajv_design_meta');
+add_filter('ajv_DesignArchiveDefault', 'ajv_design_archive');
+add_filter('ajv_DesignExtras', 'ajv_design_extras');
+
+function ajv_design(){
+ if (!class_exists('JVBase\registrar\Registrar')) {
+ return;
+ }
+ $design = Registrar::forPost('design', 'Design', 'Designs')
+ ->setIcon('scribble')
+ ->make([
+ 'rewrite' => [
+ 'slug' => 'design',
+ 'with_front' => false,
+ ],
+ 'taxonomies' => [
+ 'project',
+ 'form',
+ 'city',
+ 'style',
+ 'theme',
+ ]
+ ])
+ ->setAll([
+ 'show_feed',
+ 'show_directory',
+ 'favouritable'
+ ]);
+
+}
+function ajv_design_fields():void
{
- return [
- 'singular' => 'Graphic Design',
- 'plural' => 'Designs',
- 'hide_single' => false,
- 'redirectToAuthor'=> false,
- 'show_feed' => true,
- 'favouritable' => true,
- 'karma' => false,
- 'icon' => 'artwork',
- 'rewrite' => [
- 'slug' => 'design',
- 'with_front' => false,
- ],
- 'fields' => [
- 'post_title' => [
- 'type' => 'text',
- 'label' => 'Title',
+ if (!class_exists('JVBase\registrar\Registrar')) {
+ return;
+ }
+ $design = Registrar::getInstance('design');
+//$directory = $design->getConfig('directory');
+ $breadcrumbs = $design->config('breadcrumbs');
+ $breadcrumbs->setCrumb('project');
+
+ $fields = $design->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('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
],
- 'featured_image' => [
- 'type' => 'image',
- 'label' => 'Image',
+ 'image' => [
+ 'type' => 'upload',
+ 'multiple' => true,
+ 'label' => 'Example Image'
],
- 'gallery' => [
- 'type' => 'gallery',
- '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_design_extras(array $extras):array
+{
+ return [[
+ 'type' => 'JVBase\managers\SEO\render\Thing\Intangible\Service',
+ 'id' => get_post_type_archive_link(BASE.'design').'#service',
+ 'name' => 'Custom Designs in Edmonton, Alberta',
+ 'description' => 'Design by Canadian designer Jake Vanderwerf.
+ Whether you\'re looking for design for print or digital media, let Jake help bring your idea to life.',
+ 'url' => get_post_type_archive_link(BASE.'design'),
+ 'provider' => ['id' => get_home_url(null, '#localbusiness')],
+ 'areaServed' => [
+ '@type' => 'JVBase\managers\SEO\render\Thing\Place\AdministrativeArea\Country',
+ 'name' => 'Canada'
],
- 'single_image' => false,
- 'upload_title' => 'Upload Artwork',
+ ]];
+
+}
+
+//function ajv_design():array
+//{
+// return [
+// 'singular' => 'Design',
+// 'plural' => 'Designs',
+// 'directory' => 'Design',
+// 'show_feed' => true,
+// 'show_directory'=> true,
+// 'addCrumb' => 'project',
+// 'favouritable' => true,
+// 'karma' => false,
+// 'icon' => 'scribble',
+// 'rewrite' => [
+// 'slug' => 'design',
+// 'with_front' => false,
+// ],
+// // design.php
+// 'seo' => [
+// 'schema' => [
+// 'type' => 'CreativeWork',
+// 'name' => '{{post_title}}',
+// 'description' => '{{post_excerpt}}',
+// 'about' => ['@id' => '{{site_url}}/#design'],
+// 'associatedMedia' => '{{post_thumbnail}}',
+// 'dateCreated' => '{{post_date}}',
+// 'keywords' => '{{style.name}}',
+// ],
+// 'meta' => [
+// 'title' => '{{post_title}} | Human-made Design',
+// 'description' => '{{post_excerpt}}',
+// ],
+// 'archive' => [
+// 'type' => 'CollectionPage',
+// 'name' => 'Canadian Design. Made in Edmonton, Alberta.',
+// ],
+// ],
+// 'feed' => [
+// 'single' => [
+// 'pre_title' => 'Canadian Design. Made in Edmonton, Alberta.',
+// ],
+// 'archive' => [
+//
+// ],
+// 'config' => [
+// 'is_gallery' => false,
+// 'content' => 'design',
+// 'context' => 'design',
+// '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',
+// ],
+// 'city' => [
+// 'type' => 'taxonomy',
+// 'autocomplete' => true,
+// 'taxonomy' => 'city',
+// 'label' => 'City',
+// ],
+// 'style' => [
+// 'type' => 'taxonomy',
+// 'taxonomy' => 'style',
+// 'autocomplete' => true,
+// 'label' => 'Styles',
+// ],
+// 'theme' => [
+// 'type' => 'taxonomy',
+// 'taxonomy' => 'theme',
+// 'autocomplete' => true,
+// 'label' => 'Theme',
+// ],
+// '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 Designs',
+// ];
+//}
+
+
+function ajv_prerender_design_content(array $block, ?string $content, ?WP_Block $parent):?string
+{
+ $out = '';
+ $ID = get_the_ID();
+ $meta = Meta::forPost($ID);
+
+ $fields = $meta->getAll();
+
+
+
+ $bits = [];
+ $excerpt = '';
+
+ $rows = [];
+ foreach (['project', 'form', 'city', 'style', 'theme'] as $type) {
+
+ if (!empty($fields[$type])) {
+ $rows[] = jvbMetaTermList($fields[$type], $type);
+ }
+
+ }
+ if (!empty($rows)) {
+ $excerpt .= sprintf(
+ '<ul class="summary">%s</ul>',
+ implode('', array_map(function ($row) {
+ return '<li>'.$row.'</li>';
+ }, $rows))
+ );
+ }
+
+ if (!empty($fields['post_excerpt']??'')) {
+ $excerpt .= wpautop($fields['post_excerpt']);
+ }
+ if (!empty($excerpt)) {
+ $bits[] = sprintf('<section id="summary"><h3>At a Glance</h3>%s</section>',$excerpt);
+ }
+
+ if (!empty($fields['gallery']??'')) {
+ $bits[] = sprintf(
+ '<section id="gallery"><h2>Gallery</h2>%s</section>',
+ Image::gallery($fields['gallery'])
+ );
+ }
+
+ if (!empty($fields['post_content']??'')) {
+ $bits[] = sprintf(
+ '<section id="content">%s</section>',
+ $fields['post_content']
+ );
+ }
+
+ if (!empty($fields['needs']??'')) {
+ $bits[] = ajvb_format_needs($fields['needs']);
+ }
+ if (!empty($fields['wants']??'')) {
+ $bits[] = ajvb_format_wants($fields['wants']);
+ }
+
+ if (!empty($bits)) {
+ $out = implode('',$bits);
+ }
+
+
+ return $out;
+}
+
+function ajv_design_schema():array
+{
+ return [
+ 'type' => 'JVBase\managers\SEO\render\Thing\CreativeWork\CreativeWork',
+ 'name' => '{{post_title}} | Canadian Design',
+ 'description' => '{{post_excerpt}}',
+ 'thumbnail' => '{{post_thumbnail}}',
+ 'dateCreated' => '{{post_date}}',
+ 'dateModified' => '{{post_modified}}',
+ 'keywords' => '{{style.name}}',
+ 'isPartOf' => '{{project}}'
];
}
+
+function ajv_design_meta():array
+{
+ return[
+ 'name' => '{{post_title}} | Human-made Design',
+ ];
+}
+
+function ajv_design_archive(array $defaults):array
+{
+ return array_merge($defaults, [
+ 'name' => 'Canadian Design. Made in Edmonton, Alberta.',
+ ]);
+}
+
+function ajv_design_reference_schema(array $defaults):array
+{
+ return $defaults;
+}
\ No newline at end of file
--
Gitblit v1.10.0