diff --git a/src/Extension/FluentExtension.php b/src/Extension/FluentExtension.php index 06ab9507..6980ee57 100644 --- a/src/Extension/FluentExtension.php +++ b/src/Extension/FluentExtension.php @@ -3,6 +3,7 @@ namespace TractorCow\Fluent\Extension; use LogicException; +use SilverStripe\i18n\i18n; use SilverStripe\Core\ClassInfo; use SilverStripe\Core\Config\Config; use SilverStripe\Core\Convert; @@ -1055,6 +1056,15 @@ public function LocaleInformation($locale = null) $localeObj = Locale::getDefault(); } + if (!$localeObj) { + // There is no default locale, this can happen if no locales have been setup + // This will happen when doing integration unit testing, though can also happen during regular + // website operation + // This temporary Locale is created to prevent a invalid argument exception in + // RecordLocale::__construct() + $localeObj = Locale::create(['Locale' => i18n::get_locale()]); + } + return RecordLocale::create($this->owner, $localeObj); } diff --git a/src/Extension/FluentVersionedExtension.php b/src/Extension/FluentVersionedExtension.php index 65ca59fa..a8306aba 100644 --- a/src/Extension/FluentVersionedExtension.php +++ b/src/Extension/FluentVersionedExtension.php @@ -1044,8 +1044,11 @@ public function onAfterDuplicate($original, $doWrite, $relations): void // Remove existing versions from duplicated object, created by onBeforeWrite DB::prepared_query("DELETE FROM \"$versionsTableName\" WHERE \"RecordID\" = ?", [$toID]); + // Dynamicaly select the current database, which will be a temporary database in case of unit tests + $currentDB = DB::query('SELECT DATABASE() as DB')->column('DB')[0]; + // Copy all versions of base record, todo: optimize to only copy needed versions - $fields = DB::query("SELECT \"COLUMN_NAME\" FROM \"INFORMATION_SCHEMA\".\"COLUMNS\" WHERE \"TABLE_NAME\" = '$versionsTableName' AND \"COLUMN_NAME\" NOT IN('ID','RecordID')"); + $fields = DB::query("SELECT \"COLUMN_NAME\" FROM \"INFORMATION_SCHEMA\".\"COLUMNS\" WHERE \"TABLE_SCHEMA\" = '$currentDB' AND \"TABLE_NAME\" = '$versionsTableName' AND \"COLUMN_NAME\" NOT IN('ID','RecordID')"); $fields_str = '"' . implode('","', $fields->column()) . '"'; DB::prepared_query("INSERT INTO \"$versionsTableName\" ( \"RecordID\", $fields_str) SELECT ? AS \"RecordID\", $fields_str