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