From e9967fa22781d922ba4eb8fb44fe72d200ac4b14 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Mon, 10 Nov 2025 21:04:10 +0000
Subject: [PATCH] =IconsManager.php update

---
 inc/managers/CRUDManager.php |  128 +++++++++++++++++++++++++-----------------
 1 files changed, 76 insertions(+), 52 deletions(-)

diff --git a/inc/managers/CRUDManager.php b/inc/managers/CRUDManager.php
index 37b3a59..aa4293d 100644
--- a/inc/managers/CRUDManager.php
+++ b/inc/managers/CRUDManager.php
@@ -28,6 +28,13 @@
 	protected array $sections;
 	protected array $stuck;
 
+
+	//For Timeline-specific posts
+	protected bool $isTimeline = false;
+	protected array $nonTimelineFields = [];
+	protected array $timelineSharedFields = [];
+	protected array $timelineUniqueFields = [];
+
 	protected bool $userCanPublish = false;
 
 	public function __construct(string $content)
@@ -43,6 +50,7 @@
 		$this->plural = $this->config['plural'];
 		$this->content = $content;
 		$this->fields = jvbGetFields($this->content, 'post');
+		$this->maybeSetupTimeline();
 		$this->sections = jvbGetSections($this->content, 'post');
 		$this->stuck = [
 			'post_title',
@@ -67,6 +75,34 @@
 
 	}
 
+	protected function maybeSetupTimeline():void {
+		$this->isTimeline = Features::forContent($this->content)->has('is_timeline');
+
+		if (!$this->isTimeline) {
+			return;
+		}
+		$this->timelineSharedFields = array_keys(array_filter($this->fields, function ($field) {
+			if (!array_key_exists('for_all', $field) || $field['for_all'] === false){
+				return true;
+			}
+			return false;
+		}));
+		array_unshift($this->timelineSharedFields, 'post_thumbnail');
+		array_unshift($this->timelineSharedFields, 'post_title');
+
+		$this->timelineUniqueFields = array_keys(array_filter($this->fields, function ($field) {
+			if (array_key_exists('for_all', $field) && $field['for_all'] === true) {
+				return true;
+			}
+			return false;
+		}));
+
+		$all = array_merge($this->timelineUniqueFields, $this->timelineSharedFields);
+		$this->nonTimelineFields = array_filter($this->fields, function ($field) use ($all) {
+			return !in_array($field, $all);
+		}, ARRAY_FILTER_USE_KEY);
+	}
+
 	protected function initTaxonomies():void
 	{
 		$this->taxonomies = array_filter(JVB_TAXONOMY, function ($config) {
@@ -84,41 +120,41 @@
 				],
 				'future'=> [
 					'label'	=> 'Upcoming',
-					'icon'	=> 'future',
+					'icon'	=> 'clock-clockwise',
 				],
 				'past'	=> [
 					'label'	=> 'Past',
-					'icon'	=> 'past',
+					'icon'	=> 'clock-counter-clockwise',
 				],
 				'repeat'=> [
 					'label'	=> 'Recurring',
 					'icon'	=> 'repeat',
 				],
 				'draft'	=> [
-					'icon'	=> 'hide',
+					'icon'	=> 'eye-closed',
 					'label'	=> 'Hidden',
 				],
 				'trash'	=> [
 					'label'	=> 'Scrapped',
-					'icon'	=> 'delete',
+					'icon'	=> 'trash',
 				],
 			] :
 			[
 				'all'	=> [
-					'icon'  => 'all',
+					'icon'  => 'infinity',
 					'label' => 'Everything',
 				],
 				'publish'=> [
-					'icon'	=> 'publish',
+					'icon'	=> 'eye',
 					'label'	=> 'Live',
 				],
 				'draft'	=> [
-					'icon'	=> 'hide',
+					'icon'	=> 'eye-closed',
 					'label'	=> 'Hidden',
 				],
 				'trash'	=> [
 					'label'	=> 'Scrapped',
-					'icon'	=> 'delete',
+					'icon'	=> 'trash',
 				],
 			];
 	}
@@ -147,7 +183,7 @@
 		foreach ($this->taxonomies as $taxonomy=> $config) {
 			$this->filters['taxonomy'][$taxonomy] = [
 				'label'	=> $config['singular'],
-				'icon'	=> $taxonomy
+				'icon'	=> $config['icon']??'folder'
 			];
 		}
 	}
@@ -248,9 +284,9 @@
 		ob_start();
 		?>
 		<div class="empty-state">
-			<h3><?=jvbIcon($this->content)?>Nothing here<?=jvbIcon($this->content)?></h3>
+			<h3><?=jvbIcon($this->config['icon'])?>Nothing here<?=jvbIcon($this->config['icon'])?></h3>
 			<p>It doesn't look like you have any <?=$this->config['plural'] ?> yet.</p>
-			<p><small><i>Add many by uploading images above.</i>, or click the "<?=jvbIcon('add')?>" button to add one at a time.</small></p>
+			<p><small><i>Add many by uploading images above.</i>, or click the "<?=jvbIcon('plus-square')?>" button to add one at a time.</small></p>
 		</div>
 		<?php
 		return ob_get_clean();
@@ -278,7 +314,7 @@
 					$this->renderDateFilters();
 				?>
 				<button type="button" class="clear-filters row" hidden>
-					<?= jvbIcon('close', ['title'    => 'Clear']); ?>
+					<?= jvbIcon('x', ['title'    => 'Clear']); ?>
 					Clear All Filters
 				</button>
 			</div>
@@ -295,12 +331,12 @@
 			<?php
 				$order = [
 					'orderby' => [
-						'date' => 'Order by date created',
+						'calendar' => 'Order by date created',
 						'alphabetical' => 'Order alphabetically'
 					],
 					'order' => [
-						'asc' => 'In ascending order (Z-A, oldest to newest)',
-						'desc' => 'In descending order (A-Z, newest to oldest)'
+						'sort-ascending' => 'In ascending order (Z-A, oldest to newest)',
+						'sort-descending' => 'In descending order (A-Z, newest to oldest)'
 					]
 				];
 
@@ -360,8 +396,8 @@
 
 			<?php
 			$views = [
-				'grid' => ['icon' => 'grid', 'label' => 'Grid View'],
-				'list' => ['icon' => 'list', 'label' => 'List View'],
+				'grid' => ['icon' => 'squares-four', 'label' => 'Grid View'],
+				'list' => ['icon' => 'rows', 'label' => 'List View'],
 				'table' => ['icon' => 'table', 'label' => 'Table View']
 			];
 
@@ -605,7 +641,7 @@
 	{
 		ob_start();
 		?>
-		<form class="edit-form" data-save="content" data-form-id="edit-<?=$this->content?>">
+		<form class="edit-form" data-save="content" data-form-id="edit-<?=$this->content?>" data-autosave<?= ($this->isTimeline) ? ' data-timeline' : ''?>>
 			<?= jvbFormStatus() ?>
 			<input type="hidden" name="form-id" value="<?=uniqid('new-')?>" />
 			<input type="hidden" name="content" value="<?=$this->content?>" />
@@ -637,11 +673,9 @@
 					$tabs = false;
 				}
 
-				$isTimeline = Features::forContent($this->content)->has('is_timeline');
-
 
 				$fields = $this->fields;
-				if (!$isTimeline) {
+				if (!$this->isTimeline) {
 					$first = ['post_thumbnail', 'post_title', 'price'];
 
 					foreach ($first as $f) {
@@ -657,13 +691,11 @@
 					}
 				}
 
-				if ($isTimeline) {
+				if ($this->isTimeline) {
 					$temp = array_filter($fields, function ($field) {
-						if (array_key_exists('for_all', $field) && $field['for_all'] === true) {
-							return true;
-						}
-						return false;
-					});
+						return in_array($field, $this->timelineUniqueFields);
+					}, ARRAY_FILTER_USE_KEY);
+
 					$config = [
 						'type'		=> 'gallery',
 						'subtype'	=> 'timeline',
@@ -673,21 +705,16 @@
 					];
 					$content = '';
 					foreach ($fields as $slug=> $field) {
-						if (!array_key_exists('for_all', $field) || $field['for_all'] === false) {
+						if (in_array($slug, $this->timelineSharedFields)) {
 							$content .= $this->form->render($slug, null, $field, false, true);
 						}
 					}
 
+
 					$content .= $this->meta->render('form', 'timeline', $config, false,true);
 
 					$tabs['progression']['content'] = $content;
-					$this->fields = array_filter($fields, function ($field) {
-						if (array_key_exists('for_all', $field) && $field['for_all'] === true) {
-							return false;
-						}
-						return true;
-					});
-					$fields = $this->fields;
+					$fields = $this->nonTimelineFields;
 				}
 				foreach ($fields as $n => $config) {
 					if ($tabs) {
@@ -731,7 +758,7 @@
 			</div>
 
 			<button type="button" class="add-repeater-row btn secondary">
-				<?= jvbIcon('add') ?>
+				<?= jvbIcon('plus-square') ?>
 				<span>Add Progress Step</span>
 			</button>
 		</div>
@@ -769,7 +796,7 @@
 				if ($status === 'future') {
 					$status = 'publish';
 					$config = [
-						'icon'	=> 'publish',
+						'icon'	=> 'eye',
 						'label'	=> 'Live',
 					];
 				} else {
@@ -870,16 +897,13 @@
 		$this->renderGridView();
 		$this->renderTableView();
 		$this->renderTableRow();
-		if (Features::forContent($this->content)->has('is_timeline')) {
+		if ($this->isTimeline) {
 			$temp = array_filter($this->fields, function ($field) {
-				if (array_key_exists('for_all', $field) && $field['for_all'] === true) {
-					return true;
-				}
-				return false;
-			});
+				return in_array($field, $this->timelineUniqueFields);
+			}, ARRAY_FILTER_USE_KEY);
 			$form = new MetaForm();
-			echo '<template class="uploadTimeline">';
-			$form->renderImagePreview(null,$temp);
+			echo '<template class="timelineItem">';
+			$form->renderImagePreview(null,['fields' => $temp]);
 			echo '</template>';
 		}
 		echo jvbGetEmptyStateTemplate();
@@ -917,11 +941,11 @@
 		?>
 		<div class="item-actions">
 			<button type="button" class="action" data-action="edit" title="Edit <?= $this->singular ?>">
-				<?=jvbIcon('edit')?>
+				<?=jvbIcon('pencil-simple')?>
 				<span class="screen-reader-text">Edit <?= $this->singular ?></span>
 			</button>
 			<button type="button" class="action" data-action="trash" title="Scrap <?= $this->singular ?>">
-				<?=jvbIcon('delete')?>
+				<?=jvbIcon('trash')?>
 				<span class="screen-reader-text">Scrap <?= $this->singular ?></span>
 			</button>
 <!--			<button type="button" class="action" data-action="toggle-status">-->
@@ -1060,7 +1084,7 @@
 				if ($status === 'future') {
 					$status = 'publish';
 					$config = [
-						'icon' => 'publish',
+						'icon' => 'eye',
 						'label' => 'Live'
 					];
 				} elseif ($status === 'past') {
@@ -1118,12 +1142,12 @@
 				'vertical',
 				'TAB NAV:',
 				'',
-				jvbIcon('down'),
-				jvbIcon('right')
+				jvbIcon('caret-double-down'),
+				jvbIcon('caret-double-right')
 			) ?>
 
 			<button type="button" class="add-row" title="Add new row">
-				<?= jvbIcon('add') ?>
+				<?= jvbIcon('plus-square') ?>
 				<span>Add Row</span>
 			</button>
 		</div>
@@ -1137,7 +1161,7 @@
 		$this->renderCreateModal();
 		$content = ob_get_clean();
 		$create = [
-			'button'	=> '<button type="button" class="create-item row" title="Create New '.$this->singular.'">'.jvbIcon('add').'<span class="screen-reader-text">Create New '.$this->singular.'</span></button>',
+			'button'	=> '<button type="button" class="create-item row" title="Create New '.$this->singular.'">'.jvbIcon('plus-square').'<span class="screen-reader-text">Create New '.$this->singular.'</span></button>',
 			'content'	=> $content,
 		];
 		$actions[] = $create;

--
Gitblit v1.10.0