UPDATE 4.4.0.0
[phpmyadmin.git] / libraries / tbl_columns_definition_form.inc.php
blob8f3cafb4e417502b41a155933c35ad414c7ca46e
1 <?php
2 /* vim: set expandtab sw=4 ts=4 sts=4: */
3 /**
4 * Display form for changing/adding table fields/columns.
5 * Included by tbl_addfield.php and tbl_create.php
7 * @package PhpMyAdmin
8 */
9 if (! defined('PHPMYADMIN')) {
10 exit;
13 /**
14 * Check parameters
16 require_once './libraries/Util.class.php';
18 PMA_Util::checkParameters(array('server', 'db', 'table', 'action', 'num_fields'));
20 /**
21 * Initialize to avoid code execution path warnings
24 if (! isset($num_fields)) {
25 $num_fields = 0;
27 if (! isset($mime_map)) {
28 $mime_map = null;
30 if (! isset($columnMeta)) {
31 $columnMeta = array();
33 if (! isset($content_cells)) {
34 $content_cells = array();
38 // Get available character sets and storage engines
39 require_once './libraries/mysql_charsets.inc.php';
40 require_once './libraries/StorageEngine.class.php';
42 /**
43 * Class for partition management
45 require_once './libraries/Partition.class.php';
47 require_once './libraries/tbl_columns_definition_form.lib.php';
49 /** @var PMA_String $pmaString */
50 $pmaString = $GLOBALS['PMA_String'];
52 $length_values_input_size = 8;
54 $_form_params = PMA_getFormsParameters(
55 $db, $table, $action, isset($num_fields) ? $num_fields : null,
56 isset($selected) ? $selected : null
59 $is_backup = ($action != 'tbl_create.php' && $action != 'tbl_addfield.php');
61 require_once './libraries/transformations.lib.php';
62 $cfgRelation = PMA_getRelationsParam();
65 $comments_map = PMA_getComments($db, $table);
67 if (isset($fields_meta)) {
68 $move_columns = PMA_getMoveColumns($db, $table);
71 if ($cfgRelation['mimework'] && $GLOBALS['cfg']['BrowseMIME']) {
72 $mime_map = PMA_getMIME($db, $table);
73 $available_mime = PMA_getAvailableMIMEtypes();
76 $header_cells = PMA_getHeaderCells(
77 $is_backup, isset($fields_meta) ? $fields_meta : null,
78 $cfgRelation['mimework'], $db, $table
81 // workaround for field_fulltext, because its submitted indices contain
82 // the index as a value, not a key. Inserted here for easier maintenance
83 // and less code to change in existing files.
84 if (isset($field_fulltext) && is_array($field_fulltext)) {
85 foreach ($field_fulltext as $fulltext_nr => $fulltext_indexkey) {
86 $submit_fulltext[$fulltext_indexkey] = $fulltext_indexkey;
89 if (isset($_REQUEST['submit_num_fields'])) {
90 //if adding new fields, set regenerate to keep the original values
91 $regenerate = 1;
94 $foreigners = PMA_getForeigners($db, $table, '', 'foreign');
95 $child_references = null;
96 // From MySQL 5.6.6 onwards columns with foreign keys can be renamed.
97 // Hence, no need to get child references
98 if (PMA_MYSQL_INT_VERSION < 50606) {
99 $child_references = PMA_getChildReferences($db, $table);
101 for ($columnNumber = 0; $columnNumber < $num_fields; $columnNumber++) {
102 if (! empty($regenerate)) {
103 list($columnMeta, $submit_length, $submit_attribute,
104 $submit_default_current_timestamp, $comments_map, $mime_map)
105 = PMA_handleRegeneration(
106 $columnNumber,
107 isset($available_mime) ? $mime_map : null,
108 $comments_map, $mime_map
110 } elseif (isset($fields_meta[$columnNumber])) {
111 $columnMeta = PMA_getColumnMetaForDefault(
112 $fields_meta[$columnNumber],
113 isset($analyzed_sql[0]['create_table_fields']
114 [$fields_meta[$columnNumber]['Field']]['default_value'])
118 if (isset($columnMeta['Type'])) {
119 $extracted_columnspec = PMA_Util::extractColumnSpec($columnMeta['Type']);
120 if ($extracted_columnspec['type'] == 'bit') {
121 $columnMeta['Default']
122 = PMA_Util::convertBitDefaultValue($columnMeta['Default']);
124 $type = $extracted_columnspec['type'];
125 $length = $extracted_columnspec['spec_in_brackets'];
126 } else {
127 // creating a column
128 $columnMeta['Type'] = '';
129 $type = '';
130 $length = '';
131 $extracted_columnspec = array();
134 // some types, for example longtext, are reported as
135 // "longtext character set latin7" when their charset and / or collation
136 // differs from the ones of the corresponding database.
137 $tmp = /*overload*/mb_strpos($type, 'character set');
138 if ($tmp) {
139 $type = /*overload*/mb_substr($type, 0, $tmp - 1);
141 // rtrim the type, for cases like "float unsigned"
142 $type = rtrim($type);
145 if (isset($submit_length) && $submit_length != false) {
146 $length = $submit_length;
149 // Variable tell if current column is bound in a foreign key constraint or not.
150 // MySQL version from 5.6.6 allow renaming columns with foreign keys
151 if (isset($columnMeta['Field'])
152 && isset($_form_params['table'])
153 && PMA_MYSQL_INT_VERSION < 50606
155 $columnMeta['column_status'] = PMA_checkChildForeignReferences(
156 $_form_params['db'],
157 $_form_params['table'],
158 $columnMeta['Field'],
159 $foreigners,
160 $child_references
163 // old column attributes
164 if ($is_backup) {
165 $_form_params = PMA_getFormParamsForOldColumn(
166 $columnMeta, $length, $_form_params, $columnNumber, $type,
167 $extracted_columnspec
171 $content_cells[$columnNumber] = PMA_getHtmlForColumnAttributes(
172 $columnNumber, isset($columnMeta) ? $columnMeta : array(),
173 /*overload*/mb_strtoupper($type), $length_values_input_size, $length,
174 isset($default_current_timestamp) ? $default_current_timestamp : null,
175 isset($extracted_columnspec) ? $extracted_columnspec : null,
176 isset($submit_attribute) ? $submit_attribute : null,
177 isset($analyzed_sql) ? $analyzed_sql : null,
178 $comments_map, isset($fields_meta) ? $fields_meta : null, $is_backup,
179 isset($move_columns) ? $move_columns : array(), $cfgRelation,
180 isset($available_mime) ? $available_mime : array(),
181 isset($mime_map) ? $mime_map : array()
183 } // end for
184 $html = PMA_getHtmlForTableCreateOrAddField(
185 $action, $_form_params, $content_cells, $header_cells
188 unset($_form_params);
189 $response = PMA_Response::getInstance();
190 $header = $response->getHeader();
191 $scripts = $header->getScripts();
192 $scripts->addFile('jquery/jquery.uitablefilter.js');
193 $scripts->addFile('indexes.js');
194 $response->addHTML($html);