From 37b86913bd1ed0e5a141bf899fbc272eb205da2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20de=20la=20Pen=CC=83a?= Date: Fri, 30 Oct 2026 19:18:22 +0000 Subject: [PATCH 1/2] feat: Hide sensitive columns from find and replace Ports this package's find-replace exclusion and its test from develop. The tables and columns it names exist on this branch too. Requires nails/module-find-replace dev-feature/pre-new-admin for the exclusion interface in tests and static analysis. Co-Authored-By: Claude Opus 5.5 --- composer.json | 1 + src/FindReplace/Exclusion/Package.php | 31 ++++++++++++++ tests/FindReplace/Exclusion/PackageTest.php | 45 +++++++++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 src/FindReplace/Exclusion/Package.php create mode 100644 tests/FindReplace/Exclusion/PackageTest.php diff --git a/composer.json b/composer.json index 287df5f..8cce577 100644 --- a/composer.json +++ b/composer.json @@ -35,6 +35,7 @@ "nails/module-redirect": "dev-feature/pre-new-admin" }, "require-dev": { + "nails/module-find-replace": "dev-feature/pre-new-admin", "phpunit/phpunit": "^12.0", "phpstan/phpstan": "^2.0" }, diff --git a/src/FindReplace/Exclusion/Package.php b/src/FindReplace/Exclusion/Package.php new file mode 100644 index 0000000..01570ef --- /dev/null +++ b/src/FindReplace/Exclusion/Package.php @@ -0,0 +1,31 @@ +hidden() + ); + } + + public function testReadOnly(): void + { + self::assertSame( + [ + NAILS_DB_PREFIX . 'cms_page.draft_slug', + NAILS_DB_PREFIX . 'cms_page.draft_slug_end', + NAILS_DB_PREFIX . 'cms_page.published_slug', + NAILS_DB_PREFIX . 'cms_page.published_slug_end', + NAILS_DB_PREFIX . 'cms_page.draft_template', + NAILS_DB_PREFIX . 'cms_page.published_template', + NAILS_DB_PREFIX . 'cms_menu_item.url', + ], + (new Package())->readOnly() + ); + } +} From 787fc10b5976ca0c47c02591a75ed1a221f628c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20de=20la=20Pen=CC=83a?= Date: Fri, 30 Oct 2026 15:18:33 +0000 Subject: [PATCH 2/2] fix: Tighten CMS find-replace exclusions - Remove cms_menu_item.url from readOnly() so menu URLs can be updated when moving a domain or path. - Add cms_page.draft_breadcrumbs and cms_page.published_breadcrumbs to readOnly(); both are generated from parent page titles, so a direct edit is overwritten or goes stale. Co-Authored-By: Claude Sonnet 5 (cherry picked from commit 7ecfde56b5d78354a77c5e400ca607d448c788ee) --- src/FindReplace/Exclusion/Package.php | 4 +++- tests/FindReplace/Exclusion/PackageTest.php | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/FindReplace/Exclusion/Package.php b/src/FindReplace/Exclusion/Package.php index 01570ef..a7f1ff6 100644 --- a/src/FindReplace/Exclusion/Package.php +++ b/src/FindReplace/Exclusion/Package.php @@ -25,7 +25,9 @@ public function readOnly(): array NAILS_DB_PREFIX . 'cms_page.published_slug_end', NAILS_DB_PREFIX . 'cms_page.draft_template', NAILS_DB_PREFIX . 'cms_page.published_template', - NAILS_DB_PREFIX . 'cms_menu_item.url', + // Built from parent page titles; a direct edit is overwritten or goes stale. + NAILS_DB_PREFIX . 'cms_page.draft_breadcrumbs', + NAILS_DB_PREFIX . 'cms_page.published_breadcrumbs', ]; } } diff --git a/tests/FindReplace/Exclusion/PackageTest.php b/tests/FindReplace/Exclusion/PackageTest.php index 4255e0e..bce3513 100644 --- a/tests/FindReplace/Exclusion/PackageTest.php +++ b/tests/FindReplace/Exclusion/PackageTest.php @@ -37,7 +37,8 @@ public function testReadOnly(): void NAILS_DB_PREFIX . 'cms_page.published_slug_end', NAILS_DB_PREFIX . 'cms_page.draft_template', NAILS_DB_PREFIX . 'cms_page.published_template', - NAILS_DB_PREFIX . 'cms_menu_item.url', + NAILS_DB_PREFIX . 'cms_page.draft_breadcrumbs', + NAILS_DB_PREFIX . 'cms_page.published_breadcrumbs', ], (new Package())->readOnly() );