/**
 * Get the HTML elements for value column in insert form
 * (here, "column" is used in the sense of HTML column in HTML table)
 *
 * @param array   $column                description of column in given table
 * @param string  $backup_field          hidden input field
 * @param string  $column_name_appendix  the name attribute
 * @param string  $onChangeClause        onchange clause for fields
 * @param integer $tabindex              tab index
 * @param integer $tabindex_for_value    offset for the values tabindex
 * @param integer $idindex               id index
 * @param string  $data                  description of the column field
 * @param string  $special_chars         special characters
 * @param array   $foreignData           data about the foreign keys
 * @param boolean $odd_row               whether row is odd
 * @param array   $paramTableDbArray     array containing $table and $db
 * @param integer $rownumber             the row number
 * @param array   $titles                An HTML IMG tag for a particular icon from
 *                                       a theme, which may be an actual file or
 *                                       an icon from a sprite
 * @param string  $text_dir              text direction
 * @param string  $special_chars_encoded replaced char if the string starts
 *                                       with a \r\n pair (0x0d0a) add an extra \n
 * @param string  $vkey                  [multi_edit]['row_id']
 * @param boolean $is_upload             is upload or not
 * @param integer $biggest_max_file_size 0 integer
 * @param string  $default_char_editing  default char editing mode which is stored
 *                                       in the config.inc.php script
 * @param array   $no_support_types      list of datatypes that are not (yet)
 *                                       handled by PMA
 * @param array   $gis_data_types        list of GIS data types
 * @param array   $extracted_columnspec  associative array containing type,
 *                                       spec_in_brackets and possibly
 *                                       enum_set_values (another array)
 *
 * @return string an html snippet
 */
function PMA_getValueColumn($column, $backup_field, $column_name_appendix, $onChangeClause, $tabindex, $tabindex_for_value, $idindex, $data, $special_chars, $foreignData, $odd_row, $paramTableDbArray, $rownumber, $titles, $text_dir, $special_chars_encoded, $vkey, $is_upload, $biggest_max_file_size, $default_char_editing, $no_support_types, $gis_data_types, $extracted_columnspec)
{
    // HTML5 data-* attribute data-type
    $data_type = $GLOBALS['PMA_Types']->getTypeClass($column['True_Type']);
    $html_output = '';
    if ($foreignData['foreign_link'] == true) {
        $html_output .= PMA_getForeignLink($column, $backup_field, $column_name_appendix, $onChangeClause, $tabindex, $tabindex_for_value, $idindex, $data, $paramTableDbArray, $rownumber, $titles);
    } elseif (is_array($foreignData['disp_row'])) {
        $html_output .= PMA_dispRowForeignData($backup_field, $column_name_appendix, $onChangeClause, $tabindex, $tabindex_for_value, $idindex, $data, $foreignData);
    } elseif ($GLOBALS['cfg']['LongtextDoubleTextarea'] && mb_strstr($column['pma_type'], 'longtext')) {
        $html_output = '&nbsp;</td>';
        $html_output .= '</tr>';
        $html_output .= '<tr class="' . ($odd_row ? 'odd' : 'even') . '">' . '<td colspan="5" class="right">';
        $html_output .= PMA_getTextarea($column, $backup_field, $column_name_appendix, $onChangeClause, $tabindex, $tabindex_for_value, $idindex, $text_dir, $special_chars_encoded, $data_type);
    } elseif (mb_strstr($column['pma_type'], 'text')) {
        $html_output .= PMA_getTextarea($column, $backup_field, $column_name_appendix, $onChangeClause, $tabindex, $tabindex_for_value, $idindex, $text_dir, $special_chars_encoded, $data_type);
        $html_output .= "\n";
        if (mb_strlen($special_chars) > 32000) {
            $html_output .= "</td>\n";
            $html_output .= '<td>' . __('Because of its length,<br /> this column might not be editable.');
        }
    } elseif ($column['pma_type'] == 'enum') {
        $html_output .= PMA_getPmaTypeEnum($column, $backup_field, $column_name_appendix, $extracted_columnspec, $onChangeClause, $tabindex, $tabindex_for_value, $idindex, $data);
    } elseif ($column['pma_type'] == 'set') {
        $html_output .= PMA_getPmaTypeSet($column, $extracted_columnspec, $backup_field, $column_name_appendix, $onChangeClause, $tabindex, $tabindex_for_value, $idindex, $data);
    } elseif ($column['is_binary'] || $column['is_blob']) {
        $html_output .= PMA_getBinaryAndBlobColumn($column, $data, $special_chars, $biggest_max_file_size, $backup_field, $column_name_appendix, $onChangeClause, $tabindex, $tabindex_for_value, $idindex, $text_dir, $special_chars_encoded, $vkey, $is_upload);
    } elseif (!in_array($column['pma_type'], $no_support_types)) {
        $html_output .= PMA_getValueColumnForOtherDatatypes($column, $default_char_editing, $backup_field, $column_name_appendix, $onChangeClause, $tabindex, $special_chars, $tabindex_for_value, $idindex, $text_dir, $special_chars_encoded, $data, $extracted_columnspec);
    }
    if (in_array($column['pma_type'], $gis_data_types)) {
        $html_output .= PMA_getHTMLforGisDataTypes();
    }
    return $html_output;
}
 /**
  * Test for PMA_getValueColumnForOtherDatatypes
  *
  * @return void
  */
 public function testGetValueColumnForOtherDatatypes()
 {
     $column = array();
     $column['len'] = 20;
     $column['is_char'] = true;
     $column['Type'] = 'char(25)';
     $GLOBALS['cfg']['CharEditing'] = '';
     $GLOBALS['cfg']['MaxSizeForInputField'] = 30;
     $GLOBALS['cfg']['MinSizeForInputField'] = 10;
     $GLOBALS['cfg']['TextareaRows'] = 20;
     $GLOBALS['cfg']['TextareaCols'] = 10;
     $GLOBALS['cfg']['CharTextareaRows'] = 5;
     $GLOBALS['cfg']['CharTextareaCols'] = 1;
     $GLOBALS['cfg']['LimitChars'] = 50;
     $extracted_columnspec = array();
     $extracted_columnspec['spec_in_brackets'] = 25;
     $result = PMA_getValueColumnForOtherDatatypes($column, 'defchar', 'a', 'b', 'c', 22, '&lt;', 12, 1, "/", "&lt;", "foo\nbar", $extracted_columnspec);
     $this->assertEquals("a\n\na\n" . '<textarea name="fieldsb" class="char" maxlength="25" rows="5" cols="1" dir="/" ' . 'id="field_1_3" c tabindex="34">&lt;</textarea>', $result);
     // case 2: (else)
     $column['is_char'] = false;
     $column['Extra'] = 'auto_increment';
     $column['pma_type'] = 'timestamp';
     $column['True_Type'] = 'timestamp';
     $result = PMA_getValueColumnForOtherDatatypes($column, 'defchar', 'a', 'b', 'c', 22, '&lt;', 12, 1, "/", "&lt;", "foo\nbar", $extracted_columnspec);
     $this->assertEquals("a\n" . '<input type="text" name="fieldsb" value="&lt;" size="20" class="text' . 'field datetimefield" c tabindex="34" id="field_1_3" /><input type=' . '"hidden" name="auto_incrementb" value="1" /><input type="hidden" name' . '="fields_typeb" value="timestamp" />', $result);
     // case 3: (else -> datetime)
     $column['pma_type'] = 'datetime';
     $result = PMA_getValueColumnForOtherDatatypes($column, 'defchar', 'a', 'b', 'c', 22, '&lt;', 12, 1, "/", "&lt;", "foo\nbar", $extracted_columnspec);
     $this->assertContains('<input type="hidden" name="fields_typeb" value="datetime" />', $result);
 }