diff --git a/inc/Classes/MasterForm.php b/inc/Classes/MasterForm.php index cac6a28d1..0b8538eaf 100644 --- a/inc/Classes/MasterForm.php +++ b/inc/Classes/MasterForm.php @@ -1175,7 +1175,7 @@ public function SendForm($BaseURL, $table, $idname = '', $id = 0) $postFieldValue = $_POST[$val] ?? ''; if (($SQLFieldTypes[$val] == 'datetime' or $SQLFieldTypes[$val] == 'date') and $_POST[$val] == 'NOW()') { $db_query .= "$val = NOW(), "; - } elseif ($SQLFieldTypes[$val] == 'tinyint(1)') { + } elseif ($this->is_field_int($SQLFieldTypes[$val])) { $intValue = $_POST[$val] ?? 0; $db_query .= $val .' = '. (int) $intValue .', '; } elseif ($SQLFieldTypes[$val] == 'varbinary(16)' and $val == 'ip') { @@ -1184,6 +1184,10 @@ public function SendForm($BaseURL, $table, $idname = '', $id = 0) $db_query .= "$val = $val + 1, "; } elseif ($postFieldValue == '--' and str_contains($SQLFieldTypes[$val], 'int')) { $db_query .= "$val = $val - 1, "; + } elseif ($this->is_field_enum($SQLFieldTypes[$val])) { + if ($_POST[$val] != '') { + $db_query .= "$val = '{$_POST[$val]}', "; + } // otherwise ignore value; default has to be defined } else { $db_query .= "$val = '{$postFieldValue}', "; } @@ -1266,4 +1270,18 @@ private function get_fieldlength($string) return 0; } + + private function is_field_enum($field_type) + { + return str_starts_with($field_type, 'enum'); + } + + private function is_field_int($field_type) + { + return str_starts_with($field_type, 'tinyint') + || str_starts_with($field_type, 'smallint') + || str_starts_with($field_type, 'mediumint') + || str_starts_with($field_type, 'int') + || str_starts_with($field_type, 'bigint'); + } } diff --git a/modules/install/Classes/Import.php b/modules/install/Classes/Import.php index 027c7ece9..4045e7818 100644 --- a/modules/install/Classes/Import.php +++ b/modules/install/Classes/Import.php @@ -170,10 +170,12 @@ public function ImportXML($rewrite = null) $default = 'default CURRENT_TIMESTAMP'; $default_xml = 'CURRENT_TIMESTAMP'; $extra = 'on update CURRENT_TIMESTAMP'; - } elseif ($type == 'datetime' or $type == 'date' or $type == 'time' or $type == 'blob') { + } elseif ($type == 'datetime' or $type == 'date' or $type == 'time') { $default = ''; - } elseif ($type == 'text' or $type == 'tinytext' or $type == 'mediumtext' or $type == 'longtext') { - // Text fields can't have a default in MySQL + if ($default_xml != '') { + $default = "default '$default_xml'"; + } + } elseif ($type == 'text' or $type == 'tinytext' or $type == 'mediumtext' or $type == 'longtext' or $type == 'blob') { $default = ''; } else { // E.g. fields with type varchar will land here @@ -222,7 +224,7 @@ public function ImportXML($rewrite = null) // Handle structure changes in general } elseif ($db_field["Type"] != $type or (!($db_field["Null"] == $null or ($db_field["Null"] == 'YES' and $null == 'NULL'))) - or ($db_field["Default"] != $default_xml and !($db_field["Default"] == 0 and $default_xml == '') and !($db_field["Default"] == '' and $default_xml == 0)) + or ($db_field["Default"] != $default_xml and !($db_field["Default"] == 0 and $default_xml == '') and !($db_field["Default"] == '' and $default_xml === 0)) or $db_field["Extra"] != $extra) { $db->qry("ALTER TABLE %prefix%%plain% CHANGE %plain% %plain% %plain% %plain% %plain% %plain%", $table_name, $name, $name, $type, $null, $default, $extra); } diff --git a/modules/install/mod_settings/db.xml b/modules/install/mod_settings/db.xml index 9fe6f222b..bff080406 100644 --- a/modules/install/mod_settings/db.xml +++ b/modules/install/mod_settings/db.xml @@ -116,7 +116,7 @@ datetime - 0 + @@ -451,7 +451,7 @@ datetime - 0 + @@ -1159,7 +1159,7 @@ module - char(20) + char(255) IND @@ -1483,7 +1483,7 @@ datetime - 0 + diff --git a/modules/mail/mod_settings/db.xml b/modules/mail/mod_settings/db.xml index 050f26e41..3716d6ecd 100644 --- a/modules/mail/mod_settings/db.xml +++ b/modules/mail/mod_settings/db.xml @@ -152,7 +152,7 @@ datetime - 0 + @@ -160,7 +160,7 @@ datetime - 0 + @@ -168,7 +168,7 @@ tinyint(1) IND - 0 + @@ -176,7 +176,7 @@ tinyint(1) IND - 0 + diff --git a/modules/party/mod_settings/db.xml b/modules/party/mod_settings/db.xml index 76b8ad584..2a524cab1 100644 --- a/modules/party/mod_settings/db.xml +++ b/modules/party/mod_settings/db.xml @@ -98,7 +98,7 @@ datetime - + 0000-00-00 00:00:00 diff --git a/modules/partylist/mod_settings/db.xml b/modules/partylist/mod_settings/db.xml index fd40cf916..4191392ec 100644 --- a/modules/partylist/mod_settings/db.xml +++ b/modules/partylist/mod_settings/db.xml @@ -49,7 +49,7 @@ datetime - 0 + diff --git a/modules/poll/mod_settings/db.xml b/modules/poll/mod_settings/db.xml index 0c95039b8..d1579283f 100644 --- a/modules/poll/mod_settings/db.xml +++ b/modules/poll/mod_settings/db.xml @@ -57,7 +57,7 @@ datetime - 0 + diff --git a/modules/tournament2/mod_settings/db.xml b/modules/tournament2/mod_settings/db.xml index 31284cd57..f273dd70b 100644 --- a/modules/tournament2/mod_settings/db.xml +++ b/modules/tournament2/mod_settings/db.xml @@ -303,7 +303,7 @@ datetime - + 0000-00-00 00:00:00 @@ -333,7 +333,7 @@ rules text - + YES