From aa974bf5954d0cca2506003a3cd9ec4eb89ed0bc Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Mon, 11 May 2026 18:35:55 +0000
Subject: [PATCH] =Transfer to new Registrar system

---
 content/faq.php |  397 ++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 244 insertions(+), 153 deletions(-)

diff --git a/content/faq.php b/content/faq.php
index 8b3d067..222f605 100644
--- a/content/faq.php
+++ b/content/faq.php
@@ -1,161 +1,252 @@
 <?php
 // /content/faq.php
-function altr_faq():array
+
+use JVBase\registrar\Registrar;
+if (!defined('ABSPATH')) {
+    exit;
+}
+
+
+add_action('jvbDefineRegistrar', 'altr_faq');
+add_action('jvbDefineRegistrarFields', 'altr_faq_fields');
+
+add_action('plugins_loaded', 'altr_faq',1);
+//Add fields later so we can verify taxonomies/post types exist
+add_action('plugins_loaded', 'altr_faq_fields', 2);
+
+add_filter('altr_FaqSchemaDefault', 'altr_faq_schema');
+add_filter('altr_FaqMetaDefault', 'altr_faq_meta');
+add_filter('altr_FaqArchiveDefault', 'altr_faq_archive');
+
+function altr_faq(){
+    if (!class_exists('JVBase\registrar\Registrar')) {
+        return;
+    }
+    $faq = Registrar::forPost('faq', 'FAQ', 'FAQs')
+        ->setIcon('question')
+        ->make([
+            'rewrite'   => [
+                'slug'          => 'faq',
+                'with_front'    => false,
+            ],
+            'taxonomies'    => [
+                'section',
+            ],
+            'rewrite_taxonomy' => 'section'
+        ])
+        ->setAll([
+            'show_directory',
+            'is_faq'
+        ]);
+
+//$directory = $faq->getConfig('directory');
+
+}
+
+function altr_faq_fields():void
+{
+    if (!class_exists('JVBase\registrar\Registrar')) {
+        return;
+    }
+    $faq = Registrar::getInstance('faq');
+    $breadcrumbs = $faq->config('breadcrumbs');
+    $breadcrumbs->setCrumb('section');
+
+
+    $fields = $faq->fields();
+    $fields->addField('section', [
+        'type'      => 'selector',
+        'subtype'   => 'taxonomy',
+        'taxonomy'  => 'section',
+        'label'     => 'FAQ Section',
+    ]);
+}
+
+function altr_faq_schema():array
 {
     return [
-        'singular'       => 'FAQ',
-        'plural'       => 'FAQs',
-        'dash_description' => 'Manage your answers',
-        'capability_type' => ['faq', 'faqs'],
-        'breadcrumb'    => 'FAQ',
-        'addCrumb'      => 'section',
-        'show_directory'=> true,
-        'directory_extra'=> ['section'],
-        'dash_title'    => 'FAQs',
-        'icon'         => 'question',
-        'rewrite_taxonomy' => 'section',
-        'rewrite'      => [
-            'slug'       => 'faq',
-            'with_front' => false,
-        ],
-        'fields'       => [
-            'post_title'     => [
-                'type'  => 'text',
-                'label' => 'Question',
-            ],
-            'post_status'         => [
-                'type'      => 'radio',
-                'label'     => 'Status',
-                'hidden'    => true,
-                'options'   => [
-                    'publish'   => 'Show',
-                    'draft'     => 'Hide',
-                    'trash'     => 'Scrap',
-                    'delete'    => 'Permanently Delete'
-                ]
-            ],
-            'post_content'        => [
-                'type'  => 'textarea',
-                'label' => 'Answer',
-                'quill' => true,
-            ],
-        ],
-        'single_image' => false,
-        'upload_title' => 'Upload Before & Afters',
-        'seo'   => [
-            'meta'  => [
-                'title'         => '{{post_title}} | FAQ',
-                'description'   => '{{post_excerpt}}'
-            ],
-            'schema' => [
-                'type'      => 'FAQPage',
-                'question'   => '{{post_title}}',
-                'answer'    => '{{post_excerpt}}',
-            ],
-            'archive' => [
-                'type'  => 'FAQPage',
-                'name'  => 'Common Questions about Laser Tattoo Removal',
-            ],
-        ]
+        'type'              => 'JVBase\managers\SEO\render\Thing\CreativeWork\WebPage\QAPage',
+        'name'              => '{{post_title}} | FAQs on {{section.name}}',
     ];
 }
 
-
-add_action('wp_enqueue_scripts', 'nebDashScripts', 9999);
-function nebDashScripts() {
-    global $wp;
-    $page = str_replace('dash/', '', $wp->request);
-    if ($page === 'settings') {
-        wp_enqueue_script('jvb-form');
-        wp_enqueue_script('jvb-tabs');
-        wp_enqueue_script('jvb-populate-form');
-        wp_enqueue_script('jvb-copy-hours');
-        wp_enqueue_script('jvb-quill');
-        wp_enqueue_script('jvb-store');
-        $script = 'function loadSettingsPage() {
-            let tabs = new window.jvbTabs(document.querySelector(".replace"));
-						let store = new window.jvbStore({
-							name: "options",
-							endpoint: "options",
-							headers: {
-				                "action_nonce": jvbSettings.dash,
-                            }
-						});
-						
-						let form = new window.jvbForm(store);
-						let forms = [ "#hours", "#menu-sections"];
-						let setForms = {};
-						forms.forEach(f => {
-						    let gotF = document.querySelector(`form${f}`);
-						    setForms[f] = form.registerForm(gotF);
-						    
-						});						
-						
-						form.subscribe((event, data) => {
-                            switch (event) {
-                                case "form-submit":
-                                case "form-autosave":
-                                    window.jvbQueue.addToQueue({
-                                        endpoint: "options",
-                                        headers: {
-                                            "action_nonce": jvbSettings.dash,
-                                        },
-                                        data: data.changes,
-                                        popup: `Saving options...`,
-                                        title: "Saving Options"
-                                    });
-                                    break;
-                            }
-                        });
-					}
-					document.addEventListener("DOMContentLoaded", ()=>{
-                       loadSettingsPage()
-                    });
-					';
-        $output = wp_add_inline_script('jvb-form', $script, 'after');
-    } elseif ($page === 'dash') {
-        wp_enqueue_script('jvb-form');
-        wp_enqueue_script('jvb-store');
-        $script = 'function loadDashPage() {
-            
-                let store = new window.jvbStore({
-                    name: "options",
-                    endpoint: "options",
-                    headers: {
-                        "action_nonce": jvbSettings.dash,
-                    }
-                });
-                
-                let form = new window.jvbForm(store);
-                let forms = [ "#options"];
-                let setForms = {};
-                forms.forEach(f => {
-                    let gotF = document.querySelector(`form${f}`);
-                    setForms[f] = form.registerForm(gotF);
-                    
-                });						
-                
-                form.subscribe((event, data) => {
-                    switch (event) {
-                        case "form-submit":
-                        case "form-autosave":
-                            window.jvbQueue.addToQueue({
-                                endpoint: "options",
-                                headers: {
-                                    "action_nonce": jvbSettings.dash,
-                                },
-                                data: data.changes,
-                                popup: `Saving options...`,
-                                title: "Saving Options"
-                            });
-                            break;
-                    }
-                });
-            }
-            document.addEventListener("DOMContentLoaded", ()=>{
-               loadDashPage()
-            });
-            ';
-//        $output = wp_add_inline_script('jvb-form', $script, 'after');
-    }
+function altr_faq_meta():array
+{
+    return[
+        'name' => '{{post_title}} | FAQs {{section.name}}',
+    ];
 }
+
+function altr_faq_archive(array $defaults):array
+{
+    return array_merge($defaults, [
+        'name' => 'Frequently Asked Questions',
+        'description' => 'Common Questions about Laser Tattoo Removal.'
+    ]);
+}
+
+function altr_faq_reference_schema(array $defaults):array
+{
+    return $defaults;
+}
+
+
+//function altr_faq():array
+//{
+//    return [
+//        'singular'       => 'FAQ',
+//        'plural'       => 'FAQs',
+//        'dash_description' => 'Manage your answers',
+//        'capability_type' => ['faq', 'faqs'],
+//        'breadcrumb'    => 'FAQ',
+//        'addCrumb'      => 'section',
+//        'show_directory'=> true,
+//        'directory_extra'=> ['section'],
+//        'dash_title'    => 'FAQs',
+//        'icon'         => 'question',
+//        'rewrite_taxonomy' => 'section',
+//        'rewrite'      => [
+//            'slug'       => 'faq',
+//            'with_front' => false,
+//        ],
+//        'fields'       => [
+//            'post_title'     => [
+//                'type'  => 'text',
+//                'label' => 'Question',
+//            ],
+//            'post_status'         => [
+//                'type'      => 'radio',
+//                'label'     => 'Status',
+//                'hidden'    => true,
+//                'options'   => [
+//                    'publish'   => 'Show',
+//                    'draft'     => 'Hide',
+//                    'trash'     => 'Scrap',
+//                    'delete'    => 'Permanently Delete'
+//                ]
+//            ],
+//            'post_content'        => [
+//                'type'  => 'textarea',
+//                'label' => 'Answer',
+//                'quill' => true,
+//            ],
+//        ],
+//        'single_image' => false,
+//        'upload_title' => 'Upload Before & Afters',
+//        'seo'   => [
+//            'meta'  => [
+//                'title'         => '{{post_title}} | FAQ',
+//                'description'   => '{{post_excerpt}}'
+//            ],
+//            'schema' => [
+//                'type'      => 'FAQPage',
+//                'question'   => '{{post_title}}',
+//                'answer'    => '{{post_excerpt}}',
+//            ],
+//            'archive' => [
+//                'type'  => 'FAQPage',
+//                'name'  => 'Common Questions about Laser Tattoo Removal',
+//            ],
+//        ]
+//    ];
+//}
+//
+//
+//add_action('wp_enqueue_scripts', 'nebDashScripts', 9999);
+//function nebDashScripts() {
+//    global $wp;
+//    $page = str_replace('dash/', '', $wp->request);
+//    if ($page === 'settings') {
+//        wp_enqueue_script('jvb-form');
+//        wp_enqueue_script('jvb-tabs');
+//        wp_enqueue_script('jvb-populate-form');
+//        wp_enqueue_script('jvb-copy-hours');
+//        wp_enqueue_script('jvb-quill');
+//        wp_enqueue_script('jvb-store');
+//        $script = 'function loadSettingsPage() {
+//            let tabs = new window.jvbTabs(document.querySelector(".replace"));
+//						let store = new window.jvbStore({
+//							name: "options",
+//							endpoint: "options",
+//							headers: {
+//				                "action_nonce": jvbSettings.dash,
+//                            }
+//						});
+//						
+//						let form = new window.jvbForm(store);
+//						let forms = [ "#hours", "#menu-sections"];
+//						let setForms = {};
+//						forms.forEach(f => {
+//						    let gotF = document.querySelector(`form${f}`);
+//						    setForms[f] = form.registerForm(gotF);
+//						    
+//						});						
+//						
+//						form.subscribe((event, data) => {
+//                            switch (event) {
+//                                case "form-submit":
+//                                case "form-autosave":
+//                                    window.jvbQueue.addToQueue({
+//                                        endpoint: "options",
+//                                        headers: {
+//                                            "action_nonce": jvbSettings.dash,
+//                                        },
+//                                        data: data.changes,
+//                                        popup: `Saving options...`,
+//                                        title: "Saving Options"
+//                                    });
+//                                    break;
+//                            }
+//                        });
+//					}
+//					document.addEventListener("DOMContentLoaded", ()=>{
+//                       loadSettingsPage()
+//                    });
+//					';
+//        $output = wp_add_inline_script('jvb-form', $script, 'after');
+//    } elseif ($page === 'dash') {
+//        wp_enqueue_script('jvb-form');
+//        wp_enqueue_script('jvb-store');
+//        $script = 'function loadDashPage() {
+//            
+//                let store = new window.jvbStore({
+//                    name: "options",
+//                    endpoint: "options",
+//                    headers: {
+//                        "action_nonce": jvbSettings.dash,
+//                    }
+//                });
+//                
+//                let form = new window.jvbForm(store);
+//                let forms = [ "#options"];
+//                let setForms = {};
+//                forms.forEach(f => {
+//                    let gotF = document.querySelector(`form${f}`);
+//                    setForms[f] = form.registerForm(gotF);
+//                    
+//                });						
+//                
+//                form.subscribe((event, data) => {
+//                    switch (event) {
+//                        case "form-submit":
+//                        case "form-autosave":
+//                            window.jvbQueue.addToQueue({
+//                                endpoint: "options",
+//                                headers: {
+//                                    "action_nonce": jvbSettings.dash,
+//                                },
+//                                data: data.changes,
+//                                popup: `Saving options...`,
+//                                title: "Saving Options"
+//                            });
+//                            break;
+//                    }
+//                });
+//            }
+//            document.addEventListener("DOMContentLoaded", ()=>{
+//               loadDashPage()
+//            });
+//            ';
+////        $output = wp_add_inline_script('jvb-form', $script, 'after');
+//    }
+//}

--
Gitblit v1.10.0