From 474109a5df0a06f5343ab184838fe2d80e3872a8 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Sun, 11 Jan 2026 19:23:20 +0000
Subject: [PATCH] =Fixed timeline CRUD.js issue where this.activeItem was set null when we still needed it

---
 inc/helpers/breadcrumbs.php |  261 +++++++++++++++++-----------------------------------
 1 files changed, 86 insertions(+), 175 deletions(-)

diff --git a/inc/helpers/breadcrumbs.php b/inc/helpers/breadcrumbs.php
index 5085d50..6c6e1f9 100644
--- a/inc/helpers/breadcrumbs.php
+++ b/inc/helpers/breadcrumbs.php
@@ -1,216 +1,127 @@
 <?php
+/**
+ * Breadcrumb Helper Functions
+ *
+ * These are backwards-compatible wrappers around BreadcrumbManager
+ * Use BreadcrumbManager directly for new code
+ */
 
-use JVBase\managers\CacheManager;
+use JVBase\managers\SEO\BreadcrumbManager;
 
 if (!defined('ABSPATH')) {
 	exit;
 }
 
 /**
- * Outputs the breadcrumb list as an array
+ * Get breadcrumb array for current page
+ *
+ * @deprecated Use BreadcrumbManager::getInstance()->getCrumbs() instead
  * @return array
  */
-function jvbGetCrumbs():array
+function jvbGetCrumbs(): array
 {
-    $cache = CacheManager::for('breadcrumbs', MONTH_IN_SECONDS);
-    $key = get_queried_object_id();
-    $crumbs = $cache->get($key);
-	$crumbs = false;
-    if ($crumbs) {
-        return $crumbs;
-    }
-
-    $crumbs = [];
-    $crumbs[] = [
-        'name'  => 'Home',
-        'icon'  => jvbIcon('home'),
-        'url'   => get_home_url(),
-    ];
-
-    $obj = get_queried_object();
-
-    //taxonomies extra
-    if (is_tax()) {
-        switch ($obj->taxonomy) {
-            case BASE.'type':
-                $type = 'artist';
-                break;
-            default:
-                $type = jvbNoBase($obj->taxonomy);
-                break;
-        }
-        $directory = jvbDirectories($type);
-        $crumbs[] = [
-            'name'  => $directory['title'],
-            'url'   => $directory['url']
-        ];
-        $crumbs = array_merge($crumbs, jvbGetBreadcrumbTermHierarchy($obj));
-
-    }
-    if (is_singular()) {
-        $directory = jvbDirectories(jvbNoBase($obj->post_type));
-        if (!empty($directory)) {
-            $crumbs[] = [
-                'name'  => $directory['title'],
-                'url'   => $directory['url']
-            ];
-        }
-
-        if (jvbIsDirectory()) {
-            $pos = jvbGetDirectoryInfo();
-            if (!empty($pos)) {
-                $name = $pos['title'];
-
-
-                if ($name == 'Map') {
-                    $crumbs[] = array(
-                        'name'  => 'Tattoo Shops',
-                        'url'   => jvbDirectories(BASE.'shop')['url']
-                    );
-                }
-
-                $crumbs[] = array(
-                    'name'  => $name,
-                    'url'   => $pos['url']
-                );
-            }
-        } else {
-//
-//            $crumbs[] = array(
-//                'name'  => get_the_title(),
-//                'url'   => false,
-//            );
-            $crumbs = array_merge($crumbs, jvbGetBreadcrumbPostHierarchy($obj));
-        }
-
-    } elseif (is_post_type_archive() && !is_post_type_archive(BASE.'dash')) {
-		$name = jvbNoBase($obj->name);
-		$crumbs[] = array(
-			'name'	=> JVB_CONTENT[$name]['breadcrumb']??JVB_CONTENT[$name]['plural'],
-			'url'	=> false,
-		);
-	}
-    $cache->set($key, $crumbs);
-    return $crumbs;
+	return BreadcrumbManager::getInstance()->getCrumbs();
 }
 
-
 /**
+ * Build and return breadcrumb navigation HTML
+ *
+ * @deprecated Use BreadcrumbManager::getInstance()->renderNavigation() instead
  * @return string
  */
-function jvbBuildBreadcrumbs():string
+function jvbBuildBreadcrumbs(): string
 {
-    if (is_front_page()) {
-        return '';
-    }
-    $crumbs = jvbGetCrumbs();
-
-    $out = '<nav id="breadcrumbs">';
-    $out .= '<ol itemscope itemtype="https://schema.org/BreadcrumbList">';
-
-    if (!empty($crumbs)) {
-        $i = 1;
-        foreach ($crumbs as $crumb) {
-            $label = '<span itemprop="name">'.strtolower($crumb['name']).'</span>';
-            if (array_key_exists('icon', $crumb)) {
-                $label = $crumb['icon'].'<span class="screen-reader-text" itemprop="name">'.$crumb['name'].'</span>';
-            }
-            $aOpen = $aClose = '';
-            if ($crumb['url'] !== false) {
-				if (array_key_exists('id', $crumb) && $crumb['id'] === get_queried_object_id()){
-
-				} else {
-					$aOpen = '<a itemprop="item" href="'.$crumb['url'].'" title="'.$crumb['name'].'">';
-					$aClose = '</a>';
-				}
-            }
-            $out .= '<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">'.$aOpen.$label.$aClose.'<meta itemprop="position" content="'.$i.'" /></li>';
-            $i++;
-        }
-    }
-
-    $out .= '</ol>';
-    $out .= '</nav>';
-
-    return $out;
+	return BreadcrumbManager::getInstance()->renderNavigation();
 }
 
-
 /**
- * Builds a breadcrumb list of post parents, if available
+ * Build post hierarchy for breadcrumbs
+ *
+ * @deprecated Use BreadcrumbManager directly - this is now a private method
  * @param WP_Post $post
  * @param array $crumbs
- *
  * @return array
  */
-function jvbGetBreadcrumbPostHierarchy(WP_Post $post, array $crumbs = []):array
+function jvbGetBreadcrumbPostHierarchy(WP_Post $post, array $crumbs = []): array
 {
+	// This functionality is now private in BreadcrumbManager
+	// If you need this, use the full getCrumbs() method instead
+	trigger_error('jvbGetBreadcrumbPostHierarchy is deprecated. Use BreadcrumbManager::getInstance()->getCrumbs()', E_USER_DEPRECATED);
 
-    array_unshift($crumbs, [
-        'name'  => $post->post_title,
-        'url'   => get_the_permalink($post->ID),
-		'id'	=> $post->ID,
-    ]);
+	array_unshift($crumbs, [
+		'name' => $post->post_title,
+		'url'  => get_the_permalink($post->ID),
+		'id'   => $post->ID,
+	]);
 
-    if ($post->post_parent !== 0) {
-        $parent = get_post($post->post_parent);
-        if ($parent) {
-            $crumbs = jvbGetBreadcrumbPostHierarchy($parent, $crumbs);
-        }
-    }
+	if ($post->post_parent !== 0) {
+		$parent = get_post($post->post_parent);
+		if ($parent) {
+			$crumbs = jvbGetBreadcrumbPostHierarchy($parent, $crumbs);
+		}
+	}
 
-    return $crumbs;
+	return $crumbs;
 }
 
-
 /**
- * Builds a breadcrumb list of parent terms, if available
+ * Build term hierarchy for breadcrumbs
+ *
+ * @deprecated Use BreadcrumbManager directly - this is now a private method
  * @param WP_Term $term
  * @param array $crumbs
+ * @return array
+ */
+function jvbGetBreadcrumbTermHierarchy(WP_Term $term, array $crumbs = []): array
+{
+	// This functionality is now private in BreadcrumbManager
+	trigger_error('jvbGetBreadcrumbTermHierarchy is deprecated. Use BreadcrumbManager::getInstance()->getCrumbs()', E_USER_DEPRECATED);
+
+	$url = get_term_link($term->term_id);
+	array_unshift($crumbs, [
+		'name' => $term->name,
+		'url'  => $url,
+		'id'   => $term->term_id,
+	]);
+
+	if ($term->parent !== 0) {
+		$parent = get_term($term->parent, $term->taxonomy);
+		if ($parent && !is_wp_error($parent)) {
+			$crumbs = jvbGetBreadcrumbTermHierarchy($parent, $crumbs);
+		}
+	}
+
+	return $crumbs;
+}
+
+/**
+ * Get directory info (kept for now as it's not breadcrumb-specific)
  *
  * @return array
  */
-function jvbGetBreadcrumbTermHierarchy(WP_Term $term, array $crumbs=[]):array
+function jvbGetDirectoryInfo(): array
 {
-    $url = get_term_link($term->term_id);
-    array_unshift($crumbs, [
-        'name'  => $term->name,
-        'url'   => $url,
-		'id'	=> $term->term_id,
-    ]);
+	if (is_post_type_archive(BASE.'directory')) {
+		return [
+			'title' => 'Directory of Directories',
+			'url'   => get_post_type_archive_link(BASE.'directory'),
+			'slug'  => 'directory',
+			'type'  => 'directory'
+		];
+	}
 
-    if ($term->parent !== 0) {
-        $parent = get_term($term->parent, $term->taxonomy);
-        if ($parent) {
-            $crumbs = jvbGetBreadcrumbTermHierarchy($parent, $crumbs);
-        }
-    }
-    return $crumbs;
-}
+	if (is_singular(BASE.'directory')) {
+		$type = get_post_meta(get_the_ID(), BASE.'for_type_slug', true);
+		return JVB()->directories()?->getDirectoryList()[$type] ?? [];
+	}
 
-function jvbGetDirectoryInfo():array
-{
-    if (is_post_type_archive(BASE.'directory')) {
-        return [
-            'title' => 'Directory of Directories',
-            'url'   => get_post_type_archive_link(BASE.'directory'),
-            'slug'  => 'directory',
-            'type'  => 'directory'
-        ];
-    }
-    if (is_singular(BASE.'directory')) {
-        $type = get_post_meta(get_the_ID(), BASE.'for_type_slug', true);
+	$obj = get_queried_object();
+	$directories = JVB()->directories()?->directories();
+	if (is_tax()) {
+		$tax = jvbNoBase($obj->taxonomy);
+		return array_key_exists($tax, $directories) ? $directories[$tax] : [];
+	}
 
-        return jvbDirectories()[$type]??[];
-    }
-    $obj = get_queried_object();
-
-    $directories = jvbDirectories();
-    if (is_tax()) {
-        $tax = jvbNoBase($obj->taxonomy);
-        return (array_key_exists($tax, $directories)) ? $directories[$tax] : [];
-    }
-
-    $type = jvbNoBase($obj->post_type);
-    return (array_key_exists($type, $directories)) ? $directories[$type] : [];
+	$type = jvbNoBase($obj->post_type);
+	return array_key_exists($type, $directories) ? $directories[$type] : [];
 }

--
Gitblit v1.10.0