/** * Test for ConfigFile::getConfigArray * * @return void * @test */ public function testGetConfigArray() { $this->object->setPersistKeys(array(self::SIMPLE_KEY_WITH_DEFAULT_VALUE)); $this->object->set('Array/test', array('x', 'y')); $default_value = $this->object->getDefault(self::SIMPLE_KEY_WITH_DEFAULT_VALUE); $this->assertEquals(array(self::SIMPLE_KEY_WITH_DEFAULT_VALUE => $default_value, 'Array/test' => array('x', 'y')), $this->object->getConfigArray()); }
/** * Validates and saves form data to session * * @param array|string $forms array of form names * @param bool $allow_partial_save allows for partial form saving on * failed validation * * @return boolean true on success (no errors and all saved) */ public function save($forms, $allow_partial_save = true) { $result = true; $forms = (array) $forms; $values = array(); $to_save = array(); $is_setup_script = defined('PMA_SETUP'); if ($is_setup_script) { $this->_loadUserprefsInfo(); } $this->_errors = array(); foreach ($forms as $form_name) { /* @var $form Form */ if (isset($this->_forms[$form_name])) { $form = $this->_forms[$form_name]; } else { continue; } // get current server id $change_index = $form->index === 0 ? $this->_configFile->getServerCount() + 1 : false; // grab POST values foreach ($form->fields as $field => $system_path) { $work_path = array_search($system_path, $this->_systemPaths); $key = $this->_translatedPaths[$work_path]; $type = $form->getOptionType($field); // skip groups if ($type == 'group') { continue; } // ensure the value is set if (!isset($_POST[$key])) { // checkboxes aren't set by browsers if they're off if ($type == 'boolean') { $_POST[$key] = false; } else { $this->_errors[$form->name][] = sprintf(__('Missing data for %s'), '<i>' . PMA_langName($system_path) . '</i>'); $result = false; continue; } } // user preferences allow/disallow if ($is_setup_script && isset($this->_userprefsKeys[$system_path])) { if (isset($this->_userprefsDisallow[$system_path]) && isset($_POST[$key . '-userprefs-allow'])) { unset($this->_userprefsDisallow[$system_path]); } else { if (!isset($_POST[$key . '-userprefs-allow'])) { $this->_userprefsDisallow[$system_path] = true; } } } // cast variables to correct type switch ($type) { case 'double': settype($_POST[$key], 'float'); break; case 'boolean': case 'integer': if ($_POST[$key] !== '') { settype($_POST[$key], $type); } break; case 'select': $successfully_validated = $this->_validateSelect($_POST[$key], $form->getOptionValueList($system_path)); if (!$successfully_validated) { $this->_errors[$work_path][] = __('Incorrect value!'); $result = false; continue; } break; case 'string': case 'short_string': $_POST[$key] = trim($_POST[$key]); break; case 'array': // eliminate empty values and ensure we have an array $post_values = is_array($_POST[$key]) ? $_POST[$key] : explode("\n", $_POST[$key]); $_POST[$key] = array(); $this->_fillPostArrayParameters($post_values, $key); break; } // now we have value with proper type $values[$system_path] = $_POST[$key]; if ($change_index !== false) { $work_path = str_replace("Servers/{$form->index}/", "Servers/{$change_index}/", $work_path); } $to_save[$work_path] = $system_path; } } // save forms if (!$allow_partial_save && !empty($this->_errors)) { // don't look for non-critical errors $this->_validate(); return $result; } foreach ($to_save as $work_path => $path) { // TrustedProxies requires changes before saving if ($path == 'TrustedProxies') { $proxies = array(); $i = 0; foreach ($values[$path] as $value) { $matches = array(); $match = preg_match("/^(.+):(?:[ ]?)(\\w+)\$/", $value, $matches); if ($match) { // correct 'IP: HTTP header' pair $ip = trim($matches[1]); $proxies[$ip] = trim($matches[2]); } else { // save also incorrect values $proxies["-{$i}"] = $value; $i++; } } $values[$path] = $proxies; } $this->_configFile->set($work_path, $values[$path], $path); } if ($is_setup_script) { $this->_configFile->set('UserprefsDisallow', array_keys($this->_userprefsDisallow)); } // don't look for non-critical errors $this->_validate(); return $result; }