tbl_columns_definition_form.inc.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  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
  6. *
  7. * @package PhpMyAdmin
  8. */
  9. if (! defined('PHPMYADMIN')) {
  10. exit;
  11. }
  12. /**
  13. * Check parameters
  14. */
  15. require_once './libraries/Util.class.php';
  16. PMA_Util::checkParameters(array('db', 'table', 'action', 'num_fields'));
  17. // Get available character sets and storage engines
  18. require_once './libraries/mysql_charsets.inc.php';
  19. require_once './libraries/StorageEngine.class.php';
  20. /**
  21. * Class for partition management
  22. */
  23. require_once './libraries/Partition.class.php';
  24. require_once './libraries/tbl_columns_definition_form.lib.php';
  25. /**
  26. * We are in transition between old-style echo and new-style PMA_Response
  27. * so this script generates $html and at the bottom, either echos it
  28. * or uses addHTML on it.
  29. *
  30. * Initialize $html in case this variable was used by a caller
  31. * (yes, this script should be refactored into functions)
  32. */
  33. $length_values_input_size = 8;
  34. $_form_params = PMA_getFormsParameters(
  35. $db, $table, $action, isset($num_fields) ? $num_fields : null,
  36. isset($selected) ? $selected : null
  37. );
  38. $is_backup = ($action != 'tbl_create.php' && $action != 'tbl_addfield.php');
  39. require_once './libraries/transformations.lib.php';
  40. $cfgRelation = PMA_getRelationsParam();
  41. $comments_map = PMA_getComments($db, $table);
  42. if (isset($fields_meta)) {
  43. $move_columns = PMA_getMoveColumns($db, $table);
  44. }
  45. if ($cfgRelation['mimework'] && $GLOBALS['cfg']['BrowseMIME']) {
  46. $mime_map = PMA_getMIME($db, $table);
  47. $available_mime = PMA_getAvailableMIMEtypes();
  48. }
  49. $header_cells = PMA_getHeaderCells(
  50. $is_backup, isset($fields_meta) ? $fields_meta : null,
  51. $cfgRelation['mimework'], $db, $table
  52. );
  53. // workaround for field_fulltext, because its submitted indices contain
  54. // the index as a value, not a key. Inserted here for easier maintaineance
  55. // and less code to change in existing files.
  56. if (isset($field_fulltext) && is_array($field_fulltext)) {
  57. foreach ($field_fulltext as $fulltext_nr => $fulltext_indexkey) {
  58. $submit_fulltext[$fulltext_indexkey] = $fulltext_indexkey;
  59. }
  60. }
  61. if (isset($_REQUEST['submit_num_fields'])) {
  62. //if adding new fields, set regenerate to keep the original values
  63. $regenerate = 1;
  64. }
  65. for ($columnNumber = 0; $columnNumber < $num_fields; $columnNumber++) {
  66. if (! empty($regenerate)) {
  67. list($columnMeta, $submit_length, $submit_attribute,
  68. $submit_default_current_timestamp, $comments_map, $mime_map)
  69. = PMA_handleRegeneration(
  70. $columnNumber,
  71. isset($available_mime) ? $mime_map : null,
  72. $comments_map, $mime_map
  73. );
  74. } elseif (isset($fields_meta[$columnNumber])) {
  75. $columnMeta = PMA_getColumnMetaForDefault(
  76. $fields_meta[$columnNumber],
  77. isset($analyzed_sql[0]['create_table_fields']
  78. [$fields_meta[$columnNumber]['Field']]['default_value'])
  79. );
  80. }
  81. if (isset($columnMeta['Type'])) {
  82. $extracted_columnspec = PMA_Util::extractColumnSpec($columnMeta['Type']);
  83. if ($extracted_columnspec['type'] == 'bit') {
  84. $columnMeta['Default']
  85. = PMA_Util::convertBitDefaultValue($columnMeta['Default']);
  86. }
  87. $type = $extracted_columnspec['type'];
  88. $length = $extracted_columnspec['spec_in_brackets'];
  89. } else {
  90. // creating a column
  91. $columnMeta['Type'] = '';
  92. $type = '';
  93. $length = '';
  94. $extracted_columnspec = array();
  95. }
  96. // some types, for example longtext, are reported as
  97. // "longtext character set latin7" when their charset and / or collation
  98. // differs from the ones of the corresponding database.
  99. $tmp = strpos($type, 'character set');
  100. if ($tmp) {
  101. $type = substr($type, 0, $tmp - 1);
  102. }
  103. // rtrim the type, for cases like "float unsigned"
  104. $type = rtrim($type);
  105. if (isset($submit_length) && $submit_length != false) {
  106. $length = $submit_length;
  107. }
  108. // Variable tell if current column is bound in a foreign key constraint or not.
  109. if (isset($columnMeta['Field']) && isset($_form_params['table'])) {
  110. $columnMeta['column_status'] = PMA_checkChildForeignReferences(
  111. $_form_params['db'],
  112. $_form_params['table'],
  113. $columnMeta['Field']
  114. );
  115. }
  116. // old column attributes
  117. if ($is_backup) {
  118. $_form_params = PMA_getFormParamsForOldColumn(
  119. $columnMeta, $length, $_form_params, $columnNumber, $type,
  120. $extracted_columnspec
  121. );
  122. }
  123. $content_cells[$columnNumber] = PMA_getHtmlForColumnAttributes(
  124. $columnNumber, isset($columnMeta) ? $columnMeta : null, strtoupper($type),
  125. $length_values_input_size, $length,
  126. isset($default_current_timestamp) ? $default_current_timestamp : null,
  127. isset($extracted_columnspec) ? $extracted_columnspec : null,
  128. isset($submit_attribute) ? $submit_attribute : null,
  129. isset($analyzed_sql) ? $analyzed_sql : null,
  130. isset($submit_default_current_timestamp)
  131. ? $submit_default_current_timestamp : null,
  132. $comments_map, isset($fields_meta) ? $fields_meta : null, $is_backup,
  133. isset($move_columns) ? $move_columns : null, $cfgRelation,
  134. isset($available_mime) ? $available_mime : null,
  135. isset($mime_map) ? $mime_map : null
  136. );
  137. } // end for
  138. $html = PMA_getHtmlForTableCreateOrAddField(
  139. $action, $_form_params, $content_cells, $header_cells
  140. );
  141. unset($_form_params);
  142. PMA_Response::getInstance()->addHTML($html);
  143. ?>