From c02420796d0582272b65787d02c14feb0f21b8b3 Mon Sep 17 00:00:00 2001 From: Ryan Cramer Date: Mon, 1 Jul 2019 06:42:02 -0400 Subject: [PATCH] Improvements to LanguageSupportPageNames::languageAdded hook to to avoid potential of unnecessary error message appearing when adding language --- .../LanguageSupportPageNames.module | 35 +++++++++++++------ 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/wire/modules/LanguageSupport/LanguageSupportPageNames.module b/wire/modules/LanguageSupport/LanguageSupportPageNames.module index e551a8e9..01fca6f4 100644 --- a/wire/modules/LanguageSupport/LanguageSupportPageNames.module +++ b/wire/modules/LanguageSupport/LanguageSupportPageNames.module @@ -794,18 +794,33 @@ class LanguageSupportPageNames extends WireData implements Module, ConfigurableM * */ public function languageAdded(Page $language) { + + static $languagesAdded = array(); + if(!$language->id || $language->name == 'default') return; - try { - $name = "name" . (int) $language->id; - $status = "status" . (int) $language->id; - $database = $this->wire('database'); - $database->exec("ALTER TABLE pages ADD $name VARCHAR(" . Pages::nameMaxLength . ") CHARACTER SET ascii"); - $database->exec("ALTER TABLE pages ADD UNIQUE {$name}_parent_id ($name, parent_id)"); - $database->exec("ALTER TABLE pages ADD $status INT UNSIGNED NOT NULL DEFAULT " . Page::statusOn); - - } catch(\Exception $e) { - $this->error($e->getMessage(), Notice::log); + if($language instanceof Language && $language->isDefault()) return; + if(isset($languagesAdded[$language->id])) return; + + $name = "name" . (int) $language->id; + $status = "status" . (int) $language->id; + $database = $this->wire('database'); + $errors = 0; + $sqls = array( + "Add column $name" => "ALTER TABLE pages ADD $name VARCHAR(" . Pages::nameMaxLength . ") CHARACTER SET ascii", + "Add index for $name" => "ALTER TABLE pages ADD UNIQUE {$name}_parent_id ($name, parent_id)", + "Add column $status" => "ALTER TABLE pages ADD $status INT UNSIGNED NOT NULL DEFAULT " . Page::statusOn, + ); + + foreach($sqls as $label => $sql) { + try { + $database->exec($sql); + } catch(\Exception $e) { + $this->error("$label: " . $e->getMessage(), Notice::log); + $errors++; + } } + + if(!$errors) $languagesAdded[$language->id] = $language->id; } /**