Index: branches/unlabeled/unlabeled-1.65.2/core/kernel/utility/unit_config_reader.php =================================================================== diff -u -r7828 -r7829 --- branches/unlabeled/unlabeled-1.65.2/core/kernel/utility/unit_config_reader.php (.../unit_config_reader.php) (revision 7828) +++ branches/unlabeled/unlabeled-1.65.2/core/kernel/utility/unit_config_reader.php (.../unit_config_reader.php) (revision 7829) @@ -350,67 +350,81 @@ $this->Application->ReplacementTemplates = array_merge_recursive2($this->Application->ReplacementTemplates, $config['ReplacementTemplates']); } - if ( $this->Application->isDebugMode() && constOn('DBG_VALIDATE_CONFIGS') && isset($config['TableName']) ) - { - global $debugger; - $tablename = $config['TableName']; + if ( $this->Application->isDebugMode(false) && constOn('DBG_VALIDATE_CONFIGS') && isset($config['TableName']) ) { + $this->ValidateConfig($prefix); + } + } - $conn =& $this->Application->GetADODBConnection(); - - $table_found = $conn->Query('SHOW TABLES LIKE "'.$tablename.'"'); - if (!$table_found) { - // config present, but table missing, strange - $debugger->appendHTML("Config Warning: Table $tablename missing, but prefix ".$config['Prefix']." requires it!"); - safeDefine('DBG_RAISE_ON_WARNINGS', 1); - return ; - } - - $res = $conn->Query("DESCRIBE $tablename"); + function ValidateConfig($prefix) + { + global $debugger; + + $config =& $this->configData[$prefix]; + + $tablename = $config['TableName']; - foreach ($res as $field) { - $f_name = $field['Field']; - if (getArrayValue($config, 'Fields')) { - if (preg_match('/l[\d]+_[\w]/', $f_name)) { - // skip multilingual fields - continue; - } - - if (!array_key_exists ($f_name, $config['Fields'])) { - $debugger->appendHTML("Config Warning: Field $f_name exists in the database, but is not defined in config file for prefix ".$config['Prefix']." !"); - safeDefine('DBG_RAISE_ON_WARNINGS', 1); - } - else { - $options = $config['Fields'][$f_name]; - if ($field['Null'] != 'YES') { - // MySQL5 for null returns "NO", but MySQL4 returns "" - if ( $f_name != $config['IDField'] && !isset($options['not_null']) && !isset($options['required']) ) { - $debugger->appendHTML("Config Error: Field $f_name in config for prefix ".$config['Prefix']." is NOT NULL in the database, but is not configured as not_null or required !"); - safeDefine('DBG_RAISE_ON_WARNINGS', 1); - } - if ( isset($options['not_null']) && !isset($options['default']) ) { - $debugger->appendHTML("Config Error: Field $f_name in config for prefix ".$config['Prefix']." is described as NOT NULL, but does not have DEFAULT value !"); - safeDefine('DBG_RAISE_ON_WARNINGS', 1); - } - - if (!isset($options['default'])) { - $debugger->appendHTML("Config Error: Default value for field $f_name in config for prefix ".$config['Prefix']." not set !"); - safeDefine('DBG_RAISE_ON_WARNINGS', 1); - } - else if ($options['default'] != '#NOW#' && $field['Default'] !== (string)$options['default']) { - $debugger->appendHTML("Config Error: Default value for field $f_name (".var_export($options['default'], true).") in config for prefix ".$config['Prefix']." differs from default value from field in database (".var_export($field['Default'], true).") !"); - $debugger->dumpVars($field['Default'], $options['default'], 'STRICT'); - safeDefine('DBG_RAISE_ON_WARNINGS', 1); - } - - // check that all idfields have default values & are not_null!!! + $conn =& $this->Application->GetADODBConnection(); + + $table_found = $conn->Query('SHOW TABLES LIKE "'.$tablename.'"'); + if (!$table_found) { + // config present, but table missing, strange + $debugger->appendHTML("Config Warning: Table $tablename missing, but prefix ".$config['Prefix']." requires it!"); + safeDefine('DBG_RAISE_ON_WARNINGS', 1); + return ; + } + + $res = $conn->Query("DESCRIBE $tablename"); + + $config_link = $debugger->getFileLink(FULL_PATH.$this->prefixFiles[$config['Prefix']], 1, $config['Prefix']); + + foreach ($res as $field) { + $f_name = $field['Field']; + if (getArrayValue($config, 'Fields')) { + if (preg_match('/l[\d]+_[\w]/', $f_name)) { + // skip multilingual fields + continue; + } + + if (!array_key_exists ($f_name, $config['Fields'])) { + $debugger->appendHTML("Config Warning: Field $f_name exists in the database, but is not defined in config file for prefix ".$config_link." !"); + safeDefine('DBG_RAISE_ON_WARNINGS', 1); + } + else { + $options = $config['Fields'][$f_name]; + if ($field['Null'] != 'YES') { + // MySQL5 for null returns "NO", but MySQL4 returns "" + if ( $f_name != $config['IDField'] && !isset($options['not_null']) && !isset($options['required']) ) { + $debugger->appendHTML("Config Error: Field $f_name in config for prefix ".$config_link." is NOT NULL in the database, but is not configured as not_null or required !"); + safeDefine('DBG_RAISE_ON_WARNINGS', 1); } - + if ( isset($options['not_null']) && !isset($options['default']) ) { + $debugger->appendHTML("Config Error: Field $f_name in config for prefix ".$config_link." is described as NOT NULL, but does not have DEFAULT value !"); + safeDefine('DBG_RAISE_ON_WARNINGS', 1); + } + + if (!isset($options['default'])) { + $debugger->appendHTML("Config Error: Default value for field $f_name in config for prefix ".$config_link." not set !"); + safeDefine('DBG_RAISE_ON_WARNINGS', 1); + } + elseif ($f_name == $config['IDField'] && $options['default'] !== 0) { + $debugger->appendHTML("Config Error: Default value for field IDField $f_name (".var_export($options['default'], true).") in config for prefix ".$config_link." differs from default value from field in database (".var_export($field['Default'], true).") !"); + safeDefine('DBG_RAISE_ON_WARNINGS', 1); + } + else if ($options['default'] != '#NOW#' && $field['Default'] !== (string)$options['default']) { + $debugger->appendHTML("Config Error: Default value for field $f_name (".var_export($options['default'], true).") in config for prefix ".$config_link." differs from default value from field in database (".var_export($field['Default'], true).") !"); +// $debugger->dumpVars($field['Default'], $options['default'], 'STRICT'); + safeDefine('DBG_RAISE_ON_WARNINGS', 1); + } + + // check that all idfields have default values & are not_null!!! } + } } } + } - + function ProcessDependencies($prefix) { $config =& $this->configData[$prefix];