From cc05f48f3c97507a9be778d411844bad83d21d0b Mon Sep 17 00:00:00 2001 From: Madhura Jayaratne Date: Mon, 11 Apr 2011 10:55:58 +0530 Subject: [PATCH] Bug #3207730 [AJAX] Inline edit and Relational display column --- js/sql.js | 7 ++++++- sql.php | 41 +++++++++++++++++++++++++++++++++++++++-- 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/js/sql.js b/js/sql.js index 3f7bc654f..28c7287e5 100644 --- a/js/sql.js +++ b/js/sql.js @@ -784,6 +784,10 @@ $(document).ready(function() { * @var relation_fields Array containing the name/value pairs of relational fields */ var relation_fields = {}; + /** + * @var relational_display string 'K' if relational key, 'D' if relational display column + */ + var relational_display = $("#relational_display_K").attr('checked') ? 'K' : 'D'; /** * @var transform_fields Array containing the name/value pairs for transformed fields */ @@ -910,6 +914,7 @@ $(document).ready(function() { 'rel_fields_list' : rel_fields_list, 'do_transformations' : transformation_fields, 'transform_fields_list' : transform_fields_list, + 'relational_display' : relational_display, 'goto' : 'sql.php', 'submit_type' : 'save' }; @@ -1027,7 +1032,7 @@ function PMA_unInlineEditRow($del_hide, $chg_submit, $this_td, $input_siblings, if (typeof data.relations != 'undefined') { $.each(data.relations, function(key, value) { if(key == field_name) { - new_html = $(value).append(new_value); + new_html = $(value); return false; } }) diff --git a/sql.php b/sql.php index ce2f65fbd..e9373f2e3 100644 --- a/sql.php +++ b/sql.php @@ -654,6 +654,34 @@ if (0 == $num_rows || $is_affected) { foreach( $rel_fields as $rel_field => $rel_field_value) { $where_comparison = "='" . $rel_field_value . "'"; + $display_field = PMA_getDisplayField($map[$rel_field]['foreign_db'], $map[$rel_field]['foreign_table']); + + // Field to display from the foreign table? + if (isset($display_field) && strlen($display_field)) { + $dispsql = 'SELECT ' . PMA_backquote($display_field) + . ' FROM ' . PMA_backquote($map[$rel_field]['foreign_db']) + . '.' . PMA_backquote($map[$rel_field]['foreign_table']) + . ' WHERE ' . PMA_backquote($map[$rel_field]['foreign_field']) + . $where_comparison; + $dispresult = PMA_DBI_try_query($dispsql, null, PMA_DBI_QUERY_STORE); + if ($dispresult && PMA_DBI_num_rows($dispresult) > 0) { + list($dispval) = PMA_DBI_fetch_row($dispresult, 0); + } else { + //$dispval = __('Link not found'); + } + @PMA_DBI_free_result($dispresult); + } else { + $dispval = ''; + } // end if... else... + + if ('K' == $_SESSION['tmp_user_values']['relational_display']) { + // user chose "relational key" in the display options, so + // the title contains the display field + $title = (! empty($dispval))? ' title="' . htmlspecialchars($dispval) . '"' : ''; + } else { + $title = ' title="' . htmlspecialchars($rel_field_value) . '"'; + } + $_url_params = array( 'db' => $map[$rel_field]['foreign_db'], 'table' => $map[$rel_field]['foreign_table'], @@ -663,9 +691,18 @@ if (0 == $num_rows || $is_affected) { . ' WHERE ' . PMA_backquote($map[$rel_field]['foreign_field']) . $where_comparison ); + $output = ''; - $extra_data['relations'][$rel_field] = ''; - $extra_data['relations'][$rel_field] .= ''; + if ('D' == $_SESSION['tmp_user_values']['relational_display']) { + // user chose "relational display field" in the + // display options, so show display field in the cell + $output .= (!empty($dispval)) ? htmlspecialchars($dispval) : ''; + } else { + // otherwise display data in the cell + $output .= htmlspecialchars($rel_field_value); + } + $output .= ''; + $extra_data['relations'][$rel_field] = $output; } }