diff --git a/libraries/relation.lib.php b/libraries/relation.lib.php
index 4f8efb13d5..2ad83906b6 100644
--- a/libraries/relation.lib.php
+++ b/libraries/relation.lib.php
@@ -1530,4 +1530,76 @@ function PMA_REL_createPage($newpage, $cfgRelation, $db)
isset($GLOBALS['controllink']) ? $GLOBALS['controllink'] : ''
);
}
+
+/**
+ * Get child table references for a table column.
+ *
+ * @param string $db name of master table db.
+ * @param string $table name of master table.
+ * @param string $column name of master table column.
+ *
+ * @return array $child_references
+ */
+function PMA_getChildReferences($db, $table, $column)
+{
+ $child_references = array();
+ $i=0;
+ $rel_query = 'SELECT `column_name`,'
+ . ' `table_name`,'
+ . '`table_schema`'
+ . ' FROM `information_schema`.`key_column_usage`'
+ . ' WHERE `referenced_column_name` = \''
+ . PMA_Util::sqlAddSlashes($column) . '\''
+ . ' AND `referenced_table_name` = \''
+ . PMA_Util::sqlAddSlashes($table) . '\''
+ . ' AND `referenced_table_schema` = \''
+ . PMA_Util::sqlAddSlashes($db) . '\'';
+
+ $result = $GLOBALS['dbi']->tryQuery($rel_query, $GLOBALS['controllink']);
+ if ($result == true) {
+ while(($row = $GLOBALS['dbi']->fetchAssoc($result))) {
+ $child_references[$i++] = $row;
+ }
+ }
+ return $child_references;
+}
+
+/**
+ * Check child table references and foreign key for a table column.
+ *
+ * @param string $db name of master table db.
+ * @param string $table name of master table.
+ * @param string $column name of master table column.
+ *
+ * @return array $column_status telling about references if foreign key.
+ */
+function PMA_checkChildForeignReferences($db, $table, $column)
+{
+ $column_status = array();
+ $column_status['isEditable'] = false;
+ $column_status['isReferenced'] = false;
+ $column_status['isForeignKey'] = false;
+ $column_status['references'] = array();
+ $foreigners = PMA_getForeigners($db, $table, $column);
+ $child_references = PMA_getChildReferences($db, $table, $column);
+
+ if (sizeof($child_references, 0) > 0 || sizeof($foreigners[$column], 0) > 0) {
+ if (sizeof($child_references, 0) > 0) {
+ $column_status['isReferenced'] = true;
+ foreach ($child_references as $row => $columns) {
+ array_push($column_status['references'],
+ PMA_Util::backquote($columns['table_schema'])
+ . '.' . PMA_Util::backquote($columns['table_name']));
+ }
+ }
+
+ if (sizeof($foreigners[$column], 0) > 0) {
+ $column_status['isForeignKey'] = true;
+ }
+ } else {
+ $column_status['isEditable'] = true;
+ }
+
+ return $column_status;
+}
?>
diff --git a/libraries/tbl_columns_definition_form.inc.php b/libraries/tbl_columns_definition_form.inc.php
index a911ca6dba..c92341d25f 100644
--- a/libraries/tbl_columns_definition_form.inc.php
+++ b/libraries/tbl_columns_definition_form.inc.php
@@ -79,6 +79,7 @@ if (isset($_REQUEST['submit_num_fields'])) {
//if adding new fields, set regenerate to keep the original values
$regenerate = 1;
}
+
for ($columnNumber = 0; $columnNumber < $num_fields; $columnNumber++) {
if (! empty($regenerate)) {
list($columnMeta, $submit_length, $submit_attribute,
@@ -133,6 +134,10 @@ for ($columnNumber = 0; $columnNumber < $num_fields; $columnNumber++) {
$columnMeta, $length, $_form_params, $columnNumber
);
}
+ // Variable tell if current column is bound in a foreign key constraint or not.
+ $columnMeta['column_status'] = PMA_checkChildForeignReferences($_form_params['db'],
+ $_form_params['table'],
+ isset($columnMeta) ? $columnMeta['Field'] : null);
$content_cells[$columnNumber] = PMA_getHtmlForColumnAttributes(
$columnNumber, isset($columnMeta) ? $columnMeta : null, strtoupper($type),
@@ -148,7 +153,6 @@ for ($columnNumber = 0; $columnNumber < $num_fields; $columnNumber++) {
$mime_map
);
} // end for
-
$html = PMA_getHtmlForTableCreateOrAddField(
$action, $_form_params, $content_cells, $header_cells
);
diff --git a/libraries/tbl_columns_definition_form.lib.php b/libraries/tbl_columns_definition_form.lib.php
index f0889bb56d..21e3832a88 100644
--- a/libraries/tbl_columns_definition_form.lib.php
+++ b/libraries/tbl_columns_definition_form.lib.php
@@ -562,9 +562,20 @@ function PMA_getColumnMetaForDefault($columnMeta, $isDefault)
*/
function PMA_getHtmlForColumnName($columnNumber, $ci, $ci_offset, $columnMeta)
{
- $html = '';
+ $html = '';
@@ -1165,7 +1179,7 @@ function PMA_getHtmlForColumnAttributes($columnNumber, $columnMeta, $type_upper,
// column type
$content_cell[$ci] = PMA_getHtmlForColumnType(
- $columnNumber, $ci, $ci_offset, $type_upper
+ $columnNumber, $ci, $ci_offset, $type_upper, isset($columnMeta) ? $columnMeta : null
);
$ci++;
diff --git a/test/libraries/PMA_tbl_columns_definition_form_test.php b/test/libraries/PMA_tbl_columns_definition_form_test.php
index 35c1b2ce77..686b57b93b 100644
--- a/test/libraries/PMA_tbl_columns_definition_form_test.php
+++ b/test/libraries/PMA_tbl_columns_definition_form_test.php
@@ -617,7 +617,9 @@ class PMA_TblColumnsDefinitionFormTest extends PHPUnit_Framework_TestCase
public function testGetHtmlForColumnName()
{
$result = PMA_getHtmlForColumnName(
- 2, 4, 4, array('Field' => "fieldname")
+ 2, 4, 4, array('Field' => "fieldname",
+ 'column_status' => array('isReferenced' => false,
+ 'isForeignKey' => false, 'isEditable' => true))
);
$this->assertTag(
@@ -639,7 +641,8 @@ class PMA_TblColumnsDefinitionFormTest extends PHPUnit_Framework_TestCase
{
$GLOBALS['PMA_Types'] = new PMA_Types;
$result = PMA_getHtmlForColumnType(
- 1, 4, 3, false
+ 1, 4, 3, false, array('column_status' => array('isReferenced' => false,
+ 'isForeignKey' => false, 'isEditable' => true))
);
$this->assertTag(