From 385fca43c6b5ac83bccbc5a17b9be8bbc83e9fa9 Mon Sep 17 00:00:00 2001 From: Ivan Bochkarev Date: Thu, 26 Feb 2026 22:15:47 +0600 Subject: [PATCH] fix(setup): add idempotent upgrade for missing content_type.icon and dashboard.customizable Add 3.2.1-pl upgrade script that checks for and adds missing columns when upgrading from broken or partial 3.0.0 upgrades. Fixes 500 errors and empty web context (Unknown column modContentType.icon / modDashboard.customizable). Resolves #15504 --- .../upgrades/common/3.2.1-missing-columns.php | 35 +++++++++++++++++++ setup/includes/upgrades/mysql/3.2.1-pl.php | 10 ++++++ 2 files changed, 45 insertions(+) create mode 100644 setup/includes/upgrades/common/3.2.1-missing-columns.php create mode 100644 setup/includes/upgrades/mysql/3.2.1-pl.php diff --git a/setup/includes/upgrades/common/3.2.1-missing-columns.php b/setup/includes/upgrades/common/3.2.1-missing-columns.php new file mode 100644 index 00000000000..90217985547 --- /dev/null +++ b/setup/includes/upgrades/common/3.2.1-missing-columns.php @@ -0,0 +1,35 @@ +getTableName($class); +$stmt = $modx->query('SHOW COLUMNS FROM ' . $modx->escape($table) . ' LIKE ' . $modx->quote($column)); +$iconExists = $stmt && $stmt->fetch() !== false; + +if (!$iconExists) { + $description = $this->install->lexicon('add_column', ['column' => $column, 'table' => $table]); + $this->processResults($class, $description, [$modx->manager, 'addField'], [$class, $column]); +} + +$class = modDashboard::class; +$column = 'customizable'; +$table = $modx->getTableName($class); +$stmt = $modx->query('SHOW COLUMNS FROM ' . $modx->escape($table) . ' LIKE ' . $modx->quote($column)); +$customizableExists = $stmt && $stmt->fetch() !== false; + +if (!$customizableExists) { + $description = $this->install->lexicon('add_column', ['column' => $column, 'table' => $table]); + $this->processResults($class, $description, [$modx->manager, 'addField'], [$class, $column]); +} diff --git a/setup/includes/upgrades/mysql/3.2.1-pl.php b/setup/includes/upgrades/mysql/3.2.1-pl.php new file mode 100644 index 00000000000..59de6b6ac47 --- /dev/null +++ b/setup/includes/upgrades/mysql/3.2.1-pl.php @@ -0,0 +1,10 @@ +