From c16a4d78d07e81ecdd2ff9b1b9090560ab2fe488 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Fri, 04 Sep 2026 22:25:09 +0000
Subject: [PATCH] =Got the panel loading up the fields, organized by section! Now to ensure it saves properly. Still need to add: upload fields, selector fields, repeater/taglist/group fields

---
 inc/managers/CustomTable.php |   50 ++++++++++++++++++++++++++++----------------------
 1 files changed, 28 insertions(+), 22 deletions(-)

diff --git a/inc/managers/CustomTable.php b/inc/managers/CustomTable.php
index f6eec24..d86a631 100644
--- a/inc/managers/CustomTable.php
+++ b/inc/managers/CustomTable.php
@@ -24,6 +24,7 @@
 	private static ?wpdb $wpdb = null;
 	private static string $prefix;
 	protected string $tableName;
+	protected bool $table_exists = false;
 	protected string $definition;
 	protected string $fullTableName;
 	protected bool $useTransactions;
@@ -48,21 +49,27 @@
 
 	/**
 	 * Fluent factory method
-	 *
-	 * @param string $tableName Table name without prefix/BASE
+	 * @param string $tableName
+	 * @param bool $user
+	 * @param bool $auth
+	 * @param bool $useTransactions
 	 * @return self
-	 *
 	 * @example CustomTable::for('favourites')->insert($data);
 	 */
 	public static function for(string $tableName, bool $user = false, bool $auth = false, bool $useTransactions = false): self
 	{
 		if (!isset(self::$instances[$tableName])) {
 			self::$instances[$tableName] = new self($tableName, $user, $auth, $useTransactions);
+			self::$instances[$tableName]->setFlags();
 		}
 
 
 		return self::$instances[$tableName];
 	}
+		protected function setFlags():void
+		{
+			$this->table_exists = !is_null(self::$wpdb->get_var("SHOW TABLES LIKE '{$this->fullTableName}'"));
+		}
 
 	public static function destroyInstance(string $tableName):void
 	{
@@ -229,7 +236,7 @@
 		require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
 
 		foreach (self::$instances as $instance) {
-			if (!$instance->wpdb->get_var("SHOW TABLES LIKE '{$instance->fullTableName}'")) {
+			if (!$instance->table_exists) {
 				$instance->createTable();
 			}
 		}
@@ -241,7 +248,7 @@
 			error_log('[CustomTable]No definition set for '.$this->tableName);
 			return;
 		}
-		if (self::$wpdb->get_var("SHOW TABLES LIKE '{$this->fullTableName}'")) {
+		if ($this->table_exists) {
 			return;
 		}
 		require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
@@ -263,7 +270,7 @@
 			$error_msg = "SQL Error creating table {$this->tableName}: " . self::$wpdb->last_error;
 			error_log($error_msg);
 			error_log("Failed SQL Query: " . $schema);
-		} elseif (self::$wpdb->get_var("SHOW TABLES LIKE '{$this->fullTableName}'")) {
+		} else {
 			error_log("Successfully created table: {$this->fullTableName}");
 		}
 	}
@@ -524,17 +531,15 @@
 
 	/**
 	 * Find or create a record
-	 *
 	 * @param array $searchData Data to search for
 	 * @param array $createData Optional additional data for creation
-	 * @return array ['id' => int, 'created' => bool, 'record' => object]
+	 * @return int|false The ID of the created record, or false
 	 *
 	 * @example
-	 * $result = CustomTable::for('favourites')->findOrCreate(
-	 *     ['user_id' => 1, 'target_id' => 123],
-	 *     ['type' => 'tattoo']
-	 * );
-	 * // Returns: ['id' => 456, 'created' => false, 'record' => object]
+	 *  $result = CustomTable::for('favourites')->findOrCreate(
+	 *      ['user_id' => 1, 'target_id' => 123],
+	 *      ['type' => 'tattoo']
+	 *  );
 	 */
 	public function findOrCreate(array $searchData, array $createData = []):int|false
 	{
@@ -641,18 +646,17 @@
 
 	/**
 	 * Get multiple records
-	 *
 	 * @param array $args Query arguments: where, orderby, order, limit, offset
+	 * @param bool $itemsOnly
 	 * @param string $output OBJECT, ARRAY_A, or ARRAY_N
 	 * @return array
-	 *
 	 * @example
-	 * $favs = $table->getMany([
-	 *     'where' => ['user_id' => 1],
-	 *     'orderby' => 'date_added',
-	 *     'order' => 'DESC',
-	 *     'per_page' => 20
-	 * ]);
+	 *  $favs = $table->getMany([
+	 *      'where' => ['user_id' => 1],
+	 *      'orderby' => 'date_added',
+	 *      'order' => 'DESC',
+	 *      'per_page' => 20
+	 *  ]);
 	 */
 	public function getMany(array $args = [], bool $itemsOnly = true, string $output = OBJECT): array
 	{
@@ -734,11 +738,13 @@
 		return sanitize_sql_orderby($orderby);
 	}
 
-
 	/**
 	 * Get a specific column value from all matches
 	 * @param string $column
 	 * @param array $where
+	 * @param string|null $orderby
+	 * @param string|null $order
+	 * @param int|null $limit
 	 * @return array
 	 */
 	public function pluck(string $column, array $where = [], ?string $orderby = null, ?string $order = null, ?int $limit = null): array

--
Gitblit v1.10.0