From 0e4b986e81f8132a44e61fa8df18860301cc3468 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Thu, 01 Jan 2026 20:31:10 +0000
Subject: [PATCH] =JakeVan preliminary additions

---
 inc/helpers/renderFields.php |  178 ++++++++++++++++++++++++++++++++++-------------------------
 1 files changed, 102 insertions(+), 76 deletions(-)

diff --git a/inc/helpers/renderFields.php b/inc/helpers/renderFields.php
index 16bb348..3f83bff 100644
--- a/inc/helpers/renderFields.php
+++ b/inc/helpers/renderFields.php
@@ -25,12 +25,16 @@
     string $labelAfter,
     string $on,
     string $off,
-    bool $hidden = false
+    bool $hidden = false,
+	array $data = []
 ):string {
     $hidden = ($hidden) ? ' hidden' : '';
+	$dataset = (!empty($data)) ? implode('', array_map(function ($key, $value) {
+		return ' data-'.$key.'="'.$value.'"';
+	}, array_keys($data), array_values($data))) : '';
     return sprintf(
-        '<div class="toggle-text" %s>
-            <input value="all" name="%s" id="%s" type="checkbox">
+        '<div class="toggle-text"%s>
+            <input value="all" name="%s" id="%s" type="checkbox"%s>
             <label for="%s" class="row">
                        %s
                 <span class="text row">
@@ -43,6 +47,7 @@
         $hidden,
         $name,
         $name,
+		$dataset,
         $name,
         $labelBefore,
         $off,
@@ -59,9 +64,8 @@
  */
 function jvbRenderLinks(int $ID, MetaManager|null $meta = null):string
 {
-    $cache = CacheManager::for('bio-'.$ID, WEEK_IN_SECONDS);
-    $key = 'links';
-    $cached = $cache->get($key);
+    $cache = CacheManager::for('user_links', WEEK_IN_SECONDS)->connectTo('post')->connectTo('taxonomy');
+    $cached = $cache->get($ID);
     if ($cached) {
         return $cached;
     }
@@ -79,41 +83,41 @@
             $url = $link['url'];
             switch (true) {
                 case strpos($url, 'facebook'):
-                    $i = jvbIcon('facebook');
+                    $i = jvbIcon('facebook-logo');
                     break;
                 case strpos($url, 'instagram'):
-                    $i = jvbIcon('instagram');
+                    $i = jvbIcon('instagram-logo');
                     break;
                 case strpos($url, 'tiktok'):
-                    $i = jvbIcon('tiktok');
+                    $i = jvbIcon('tiktok-logo');
                     break;
                 case strpos($url, 'x.com'):
                     $i = jvbIcon('x');
                     break;
                 case strpos($url, 'youtube'):
-                    $i = jvbIcon('youtube');
+                    $i = jvbIcon('youtube-logo');
                     break;
                 case strpos($url, 'mastadon'):
-                    $i = jvbIcon('mastadon');
+                    $i = jvbIcon('mastadon-logo');
                     break;
                 case strpos($url, 'fediverse'):
                 case strpos($url, 'bluesky'):
-                    $i = jvbIcon('fediverse');
+                    $i = jvbIcon('fediverse-logo');
                     break;
                 case strpos($url, 'linktree'):
-                    $i = jvbIcon('linktree');
+                    $i = jvbIcon('linktree-logo');
                     break;
                 case strpos($url, 'snapchat'):
-                    $i = jvbIcon('snapchat');
+                    $i = jvbIcon('snapchat-logo');
                     break;
                 case strpos($url, 'twitch'):
-                    $i = jvbIcon('twitch');
+                    $i = jvbIcon('twitch-logo');
                     break;
                 case strpos($url, 'threads'):
-                    $i = jvbIcon('threads');
+                    $i = jvbIcon('threads-logo');
                     break;
                 case strpos($url, 'twitter'):
-                    $i = jvbIcon('twitter');
+                    $i = jvbIcon('twitter-logo');
                     break;
                 default:
                     $i = jvbIcon('link');
@@ -124,7 +128,7 @@
         }
         $out .= '</ul>';
     }
-    $cache->set($key, $out);
+    $cache->set($ID, $out);
     return $out;
 }
 
@@ -136,9 +140,9 @@
  */
 function jvbRenderContactInfo(int $ID, MetaManager|null $meta = null):string
 {
-    $cache = CacheManager::for('bio-'.$ID, WEEK_IN_SECONDS);
-    $key = 'contact';
-    $cached = $cache->get($key);
+    $cache = CacheManager::for('contact', WEEK_IN_SECONDS)->connectTo('post')->connectTo('taxonomy');
+
+    $cached = $cache->get($ID);
     if($cached){
         return $cached;
     }
@@ -158,7 +162,7 @@
             switch ($p) {
                 case 'text':
                     $link = 'sms:+1'.$phone.';?body='.rawurlencode('Hey! I found you on edmonton.ink, and I wanted to reach out.');
-                    $label = jvbIcon('text').'<span>Text</span>';
+                    $label = jvbIcon('chat').'<span>Text</span>';
                     break;
                 case 'call':
                     $link = 'tel:+1'.$phone;
@@ -167,7 +171,7 @@
                 case 'email':
                     $link = 'mailto:'.$meta->getValue('email').'?subject='.rawurlencode('Contact from edmonton.ink').'&body='.rawurlencode('Hey,
         I found you on edmonton.ink, and I wanted to reach out!');
-                    $label = jvbIcon('email').'<span>Email</span>';
+                    $label = jvbIcon('envelope').'<span>Email</span>';
                     break;
             }
             if ($link) {
@@ -178,7 +182,7 @@
         $out .= '</ul>';
     }
 
-    $cache->set($key, $out);
+    $cache->set($ID, $out);
 
     return $out;
 }
@@ -312,17 +316,34 @@
     $out = ($label === '') ? '' : '<h2 class="inline">'.$label.'</h2>';
     $out .= '<ul class="term-list '.jvbNoBase($terms[array_key_first($terms)]->taxonomy).'">';
     foreach ($terms as $term) {
-        $out .= '<li>
-            <a href="'.get_term_link($term->term_id, $term->taxonomy).'" title="'.$term->name.'">'.
-                $term->name.
-            '</a>
-        </li>';
+        $out .= '<li>'.jvbGetTermLink($term).'</li>';
     }
     $out .= '</ul>';
 
     return $out;
 }
 
+function jvbGetTermLink(int|WP_Term $term, string $taxonomy = ''):string
+{
+	if (is_int($term)){
+		$term = get_term($term, jvbCheckBase($taxonomy));
+		if (is_wp_error($term)) {
+			return '';
+		}
+	}
+	$cache = CacheManager::for($term->taxonomy);
+	$key = $term->term_id.'-link';
+	return $cache->remember(
+		$key,
+		function() use ($term) {
+			return '<a href="'.get_term_link($term->term_id, $term->taxonomy).'" title="'.$term->name.'">'.
+			$term->name.
+			'</a>';
+		}
+	);
+}
+
+
 add_action('wp_footer', 'jvbOutputImageTemplates');
 
 function jvbOutputImageTemplates() {
@@ -340,7 +361,7 @@
 				</div>
 				<div class="summary">
 					<div class="result">
-						<h4></h4>
+						<h3></h3>
 						<p></p>
 					</div>
 				</div>
@@ -363,21 +384,21 @@
 				<div class="group-header">
 					<div class="selected">
 						<div class="field">
-							<input type="checkbox" id="select-all-group" name="select-all-group">
-							<label for="select-all-group">
-								Select All
+							<input type="checkbox" id="select-all" name="select-all" data-selects="item-grid" data-select-all>
+							<label for="select-all">
+								Select All In Group
 							</label>
 						</div>
 						<div class="info" hidden>
 						</div>
 					</div>
-					<div class="group-actions">
+					<div class="selection-actions">
 						<button type="button" data-action="add-to-group" title="Add selected uploads to this group">
-							<?= jvbIcon('add') ?>
+							<?= jvbIcon('plus-square') ?>
 							Add Here
 						</button>
 						<button type="button" data-action="delete-group" title="Delete group">
-							<?= jvbIcon('delete') ?>
+							<?= jvbIcon('trash') ?>
 							Delete Group
 						</button>
 					</div>
@@ -389,8 +410,8 @@
 					<div class="fields"></div>
 				</details>
 				<div class="group-content col">
+					<p class="hint count"></p>
 					<div class="item-grid group"></div>
-					<p class="hint group-count"></p>
 				</div>
 			</div>
 
@@ -407,7 +428,7 @@
 				</div>
 
 				<button type="button" data-action="remove-from-group" title="Remove from Group">
-					<?=jvbIcon('delete')?>
+					<?=jvbIcon('trash')?>
 				</button>
 			</div>
 		</template>
@@ -418,7 +439,7 @@
 				</div>
 				<div class="selection-controls">
 					<button type="button" data-action="add-to-group">
-						<?= jvbIcon('add') ?>
+						<?= jvbIcon('plus-square') ?>
 						New Group
 					</button>
 				</div>
@@ -456,10 +477,10 @@
 				<div class="wrap">
 					<div class="restore-message">
 						<h4>Looks like we left things hanging</h4>
-						<p class="restore-details"></p>
+						<p class="details"></p>
 						<p class="hint">If you'd rather start over, you can clear this information.</p>
 					</div>
-					<div class="restore-actions">
+					<div class="selection-actions">
 						<div class="selected">
 							<div class="field">
 								<input type="checkbox" id="select-all-restore" name="select-all-restore">
@@ -471,12 +492,16 @@
 							</div>
 						</div>
 						<div class="m-actions row nowrap">
+							<button type="button" data-action="restore-all">
+								<?= jvbIcon('infinity') ?>
+								Restore All
+							</button>
 							<button type="button" data-action="restore">
-								<?= jvbIcon('restore') ?>
+								<?= jvbIcon('arrow-counter-clockwise') ?>
 								Restore Selected
 							</button>
 							<button type="button" data-action="clear-cache" title="Clear cache and close window">
-								<?= jvbIcon('close') ?>
+								<?= jvbIcon('x') ?>
 								Clear Cache
 							</button>
 						</div>
@@ -485,10 +510,10 @@
 			</dialog>
 		</template>
 		<template class="restoreField">
-			<div class="restore-field">
-				<h3></h3>
+			<details class="restore-field">
+				<summary><h3><a></a></h3></summary>
 				<div class="item-grid restore"></div>
-			</div>
+			</details>
 		</template>
 
 		<template class="startOverConfirmation">
@@ -532,38 +557,39 @@
 	$dataID = ($ID) ? ['image-id' => $ID] : false;
 	$addID = ($ID) ? '-'.$ID : '';
 
-	$fields = array_merge([
-		'image_data'	=> [
-			'type'	=> 'group',
-			'wrap'	=> 'details',
-			'label'	=> 'Image Info',
-			'hint'	=> 'These will be automatically generated if left blank.',
-			'fields'	=> [
-				'image-title'.$addID => [
-					'type'	=> 'text',
-					'label'	=> 'Image Title',
-					'value'	=> $title,
-					'data'	=> $dataID
-				],
-				'image-alt-text'.$addID => [
-					'type'	=> 'text',
-					'label'	=> 'Alt Text',
-					'value'	=> $alt,
-					'hint'	=> 'Alt text helps the visually impaired, as well as some benefits for SEO.',
-					'data'	=> $dataID
-				],
-				'image-caption'.$addID => [
-					'type'	=> 'textarea',
-					'value'	=> $caption,
-					'label'	=> 'Image Caption',
-					'data'	=> $dataID
-				]
-			]
+
+	$defaultFields = [
+		'image-title'.$addID => [
+			'type'	=> 'text',
+			'label'	=> 'Image Title',
+			'value'	=> $title,
+			'data'	=> $dataID
+		],
+		'image-alt-text'.$addID => [
+			'type'	=> 'text',
+			'label'	=> 'Alt Text',
+			'value'	=> $alt,
+			'hint'	=> 'Alt text helps the visually impaired, as well as some benefits for SEO.',
+			'data'	=> $dataID
+		],
+		'image-caption'.$addID => [
+			'type'	=> 'textarea',
+			'value'	=> $caption,
+			'label'	=> 'Image Caption',
+			'data'	=> $dataID
 		]
-	], $fields);
+	];
+	$fields = array_merge($defaultFields, $fields);
 
+	$config = [
+		'type'	=> 'group',
+		'wrap'	=> 'details',
+		'label'	=> 'Image Info',
+		'hint'	=> 'These will be automatically generated if left blank.',
+		'fields'	=> $fields
+	];
 
-	return $form->render('image_data',null, $fields,false, true);
+	return $form->render('image_data',null, $config,false, true);
 }
 
 
@@ -573,7 +599,7 @@
 		return '';
 	}
 
-	$cache = CacheManager::for('locations');
+	$cache = CacheManager::for('locations')->connectTo('taxonomy');
 	$key = $cache->generateKey($location);
 
 	$cached = false;

--
Gitblit v1.10.0