Browse Source

Merge pull request #1186 from Oldiesmann/release-2.1

Proper fix of saveSettings
Michael Eshom 10 years ago
parent
commit
bb130330d5
1 changed files with 31 additions and 28 deletions
  1. 31 28
      Sources/ManageServer.php

+ 31 - 28
Sources/ManageServer.php

@@ -177,9 +177,6 @@ function ModifyGeneralSettings($return_config = false)
 	{
 		call_integration_hook('integrate_save_general_settings');
 
-		// Don't overwrite the two boolean DB-related settings
-		$context['area'] = 'server';
-
 		saveSettings($config_vars);
 		$_SESSION['adm-save'] = true;
 		redirectexit('action=admin;area=serversettings;sa=general;' . $context['session_var'] . '=' . $context['session_id']);
@@ -237,9 +234,6 @@ function ModifyDatabaseSettings($return_config = false)
 	{
 		call_integration_hook('integrate_save_database_settings');
 
-		// Don't accidentally disable maintenance mode..
-		$context['area'] = 'db';
-
 		saveSettings($config_vars);
 		$_SESSION['adm-save'] = true;
 		redirectexit('action=admin;area=serversettings;sa=database;' . $context['session_var'] . '=' . $context['session_id'] );
@@ -929,35 +923,44 @@ function saveSettings(&$config_vars)
 		'cache_enable',
 	);
 
-	// All the checkboxes - this varies depending on where we're coming from
-	if ($context['area'] == 'db')
-		$config_bools = array('db_persist', 'db_error_send');
-	elseif ($context['area'] == 'server')
-		$config_bools = array('maintenance');
+	// All the checkboxes
+	$config_bools = array('db_persist', 'db_error_send', 'maintenance');
 
 	// Now sort everything into a big array, and figure out arrays and etc.
 	$new_settings = array();
-	foreach ($config_passwords as $config_var)
-	{
-		if (isset($_POST[$config_var][1]) && $_POST[$config_var][0] == $_POST[$config_var][1])
-			$new_settings[$config_var] = '\'' . addcslashes($_POST[$config_var][0], '\'\\') . '\'';
-	}
-	foreach ($config_strs as $config_var)
+	// Figure out which config vars we're saving here...
+	foreach ($config_vars as $var)
 	{
-		if (isset($_POST[$config_var]))
+		if (!is_array($var) || $var[2] != 'file')
+			continue;
+		
+		$config_var = $var[0];
+		
+		if (in_array($config_var, $config_passwords))
+		{
+			if (isset($_POST[$config_var][1]) && $_POST[$config_var][0] == $_POST[$config_var][1])
+				$new_settings[$config_var] = '\'' . addcslashes($_POST[$config_var][0], '\'\\') . '\'';
+		}
+		elseif (in_array($config_var, $config_strs))
+		{
 			$new_settings[$config_var] = '\'' . addcslashes($_POST[$config_var], '\'\\') . '\'';
-	}
-	foreach ($config_ints as $config_var)
-	{
-		if (isset($_POST[$config_var]))
+		}
+		elseif (in_array($config_var, $config_ints))
+		{
 			$new_settings[$config_var] = (int) $_POST[$config_var];
-	}
-	foreach ($config_bools as $key)
-	{
-		if (!empty($_POST[$key]))
-			$new_settings[$key] = '1';
+		}
+		elseif (in_array($config_var, $config_bools))
+		{
+			if (!empty($_POST[$config_var]))
+				$new_settings[$config_var] = '1';
+			else
+				$new_settings[$config_var] = '0';
+		}
 		else
-			$new_settings[$key] = '0';
+		{
+			// This shouldn't happen, but it might...
+			fatal_error('Unknown config_var \'' . $config_var . '\'');
+		}
 	}
 
 	// Save the relevant settings in the Settings.php file.