/** * Test for Form::getOptionType * * @return void */ public function testGetOptionType() { $attrFieldsTypes = new \ReflectionProperty('Form', '_fieldsTypes'); $attrFieldsTypes->setAccessible(true); $attrFieldsTypes->setValue($this->object, array("7" => "Seven")); $this->assertNull($this->object->getOptionType("123/4/5/6")); $this->assertEquals("Seven", $this->object->getOptionType("123/4/5/7")); }
/** * Prepares data for input field display and outputs HTML code * * @uses ConfigFile::get() * @uses ConfigFile::getDefault() * @uses ConfigFile::getInstance() * @uses display_group_footer() * @uses display_group_header() * @uses display_input() * @uses Form::getOptionType() * @uses Form::getOptionValueList() * @uses PMA_escapeJsString() * @uses PMA_lang_desc() * @uses PMA_lang_name() * @param Form $form * @param string $field field name as it appears in $form * @param string $system_path field path, eg. Servers/1/verbose * @param string $work_path work path, eg. Servers/4/verbose * @param string $translated_path work path changed so that it can be used as XHTML id * @param bool $show_restore_default whether show "restore default" button besides the input field * @param mixed $userprefs_allow whether user preferences are enabled for this field * (null - no support, true/false - enabled/disabled) * @param array &$js_default array which stores JavaScript code to be displayed */ private function _displayFieldInput(Form $form, $field, $system_path, $work_path, $translated_path, $show_restore_default, $userprefs_allow, array &$js_default) { $name = PMA_lang_name($system_path); $description = PMA_lang_name($system_path, 'desc', ''); $cf = ConfigFile::getInstance(); $value = $cf->get($work_path); $value_default = $cf->getDefault($system_path); $value_is_default = false; if ($value === null || $value === $value_default) { $value = $value_default; $value_is_default = true; } $opts = array('doc' => $this->getDocLink($system_path), 'wiki' => $this->getWikiLink($system_path), 'show_restore_default' => $show_restore_default, 'userprefs_allow' => $userprefs_allow, 'userprefs_comment' => PMA_lang_name($system_path, 'cmt', '')); if (isset($form->default[$system_path])) { $opts['setvalue'] = $form->default[$system_path]; } if (isset($this->errors[$work_path])) { $opts['errors'] = $this->errors[$work_path]; } switch ($form->getOptionType($field)) { case 'string': $type = 'text'; break; case 'short_string': $type = 'short_text'; break; case 'double': case 'integer': $type = 'number_text'; break; case 'boolean': $type = 'checkbox'; break; case 'select': $type = 'select'; $opts['values'] = $form->getOptionValueList($form->fields[$field]); break; case 'array': $type = 'list'; $value = (array) $value; $value_default = (array) $value_default; break; case 'group': if (substr($field, 7, 4) != 'end:') { // :group:end is changed to :group:end:{unique id} in Form class display_group_header(substr($field, 7)); } else { display_group_footer(); } return; case 'NULL': trigger_error("Field {$system_path} has no type", E_USER_WARNING); return; } // TrustedProxies requires changes before displaying if ($system_path == 'TrustedProxies') { foreach ($value as $ip => &$v) { if (!preg_match('/^-\\d+$/', $ip)) { $v = $ip . ': ' . $v; } } } $this->_setComments($system_path, $opts); // send default value to form's JS $js_line = '\'' . $translated_path . '\': '; switch ($type) { case 'text': case 'short_text': case 'number_text': $js_line .= '\'' . PMA_escapeJsString($value_default) . '\''; break; case 'checkbox': $js_line .= $value_default ? 'true' : 'false'; break; case 'select': $value_default_js = is_bool($value_default) ? (int) $value_default : $value_default; $js_line .= '[\'' . PMA_escapeJsString($value_default_js) . '\']'; break; case 'list': $js_line .= '\'' . PMA_escapeJsString(implode("\n", $value_default)) . '\''; break; } $js_default[] = $js_line; display_input($translated_path, $name, $description, $type, $value, $value_is_default, $opts); }
/** * Prepares data for input field display and outputs HTML code * * @param Form $form * @param string $field field name as it appears in $form * @param string $system_path field path, eg. Servers/1/verbose * @param string $work_path work path, eg. Servers/4/verbose * @param string $translated_path work path changed so that it can be used as XHTML id * @param bool $show_restore_default whether show "restore default" button besides the input field * @param array &$js_default array which stores JavaScript code to be displayed */ private function _displayFieldInput(Form $form, $field, $system_path, $work_path, $translated_path, $show_restore_default, array &$js_default) { $name = PMA_lang_name($system_path); $description = PMA_lang_desc($system_path); $cf = ConfigFile::getInstance(); $value = $cf->get($work_path); $value_default = $cf->getDefault($system_path); $value_is_default = false; if ($value === null || $value === $value_default) { $value = $value_default; $value_is_default = true; } $opts = array('doc' => $this->getDocLink($system_path), 'wiki' => $this->getWikiLink($system_path), 'show_restore_default' => $show_restore_default); if (isset($form->default[$system_path])) { $opts['setvalue'] = $form->default[$system_path]; } if (isset($this->errors[$work_path])) { $opts['errors'] = $this->errors[$work_path]; } switch ($form->getOptionType($field)) { case 'string': $type = 'text'; break; case 'double': $type = 'text'; break; case 'integer': $type = 'text'; break; case 'boolean': $type = 'checkbox'; break; case 'select': $type = 'select'; $opts['values'] = array(); $values = $form->getOptionValueList($form->fields[$field]); foreach ($values as $v) { $opts['values'][$v] = $v; } break; case 'array': $type = 'list'; $value = (array) $value; $value_default = (array) $value_default; break; case 'NULL': trigger_error("Field {$system_path} has no type", E_USER_WARNING); return; } // TrustedProxies requires changes before displaying if ($system_path == 'TrustedProxies') { foreach ($value as $ip => &$v) { if (!preg_match('/^-\\d+$/', $ip)) { $v = $ip . ': ' . $v; } } } // send default value to form's JS $js_line = '\'' . $translated_path . '\': '; switch ($type) { case 'text': $js_line .= '\'' . PMA_escapeJsString($value_default) . '\''; break; case 'checkbox': $js_line .= $value_default ? 'true' : 'false'; break; case 'select': $value_default_js = is_bool($value_default) ? (int) $value_default : $value_default; $js_line .= '[\'' . PMA_escapeJsString($value_default_js) . '\']'; break; case 'list': $js_line .= '\'' . PMA_escapeJsString(implode("\n", $value_default)) . '\''; break; } $js_default[] = $js_line; display_input($translated_path, $name, $description, $type, $value, $value_is_default, $opts); }