The branch, master has been updated via cc05f48f3c97507a9be778d411844bad83d21d0b (commit) via 63dd25baac73cafd55e8c44ab49ab50d22443461 (commit) from 5d147c25affd72bba06b86d131c272bceb361f4d (commit)
- Log ----------------------------------------------------------------- commit cc05f48f3c97507a9be778d411844bad83d21d0b Author: Madhura Jayaratne madhura.cj@gmail.com Date: Mon Apr 11 10:55:58 2011 +0530
Bug #3207730 [AJAX] Inline edit and Relational display column
commit 63dd25baac73cafd55e8c44ab49ab50d22443461 Author: Madhura Jayaratne madhura.cj@gmail.com Date: Sun Apr 10 20:33:17 2011 +0530
Code formatting to improve readability.
-----------------------------------------------------------------------
Summary of changes: js/sql.js | 28 +++++++++++++++++----------- sql.php | 43 ++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 57 insertions(+), 14 deletions(-)
diff --git a/js/sql.js b/js/sql.js index 1444b15..28c7287 100644 --- a/js/sql.js +++ b/js/sql.js @@ -785,6 +785,10 @@ $(document).ready(function() { */ 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 */ var transform_fields = {}; @@ -800,15 +804,16 @@ $(document).ready(function() {
var need_to_post = false;
- var new_clause=''; - var prev_index=-1; + var new_clause = ''; + var prev_index = -1;
$input_siblings.each(function() { /** @lends jQuery */ /** * @var this_field Object referring to this field (<td>) */ - var $this_field = $(this); + var $this_field = $(this); + /** * @var field_name String containing the name of this field. * @see getFieldName() @@ -861,7 +866,7 @@ $(document).ready(function() { } } if(where_clause.indexOf(field_name) > prev_index){ - new_clause += '`'+window.parent.table+'`.'+'`' + field_name + "` = '"+this_field_params[field_name].replace(/'/g,"''")+"'"+' AND '; + new_clause += '`' + window.parent.table + '`.' + '`' + field_name + "` = '" + this_field_params[field_name].replace(/'/g,"''") + "'" + ' AND '; } if (this_field_params[field_name] != $this_field.data('original_data')) { sql_query += ' `' + field_name + "`='" + this_field_params[field_name].replace(/'/g, "''") + "' , "; @@ -876,8 +881,8 @@ $(document).ready(function() {
//Remove the last ',' appended in the above loop sql_query = sql_query.replace(/,\s$/, ''); - new_clause=new_clause.substring(0,new_clause.length-5); - new_clause=PMA_urlencode(new_clause); + new_clause = new_clause.substring(0, new_clause.length-5); + new_clause = PMA_urlencode(new_clause); sql_query += ' WHERE ' + PMA_urldecode(where_clause); /** * @var rel_fields_list String, url encoded representation of {@link relations_fields} @@ -890,8 +895,8 @@ $(document).ready(function() { var transform_fields_list = $.param(transform_fields);
// if inline_edit is successful, we need to go back to default view - var $del_hide=$(this).parent(); - var $chg_submit=$(this); + var $del_hide = $(this).parent(); + var $chg_submit = $(this);
if (need_to_post) { // Make the Ajax post after setting all parameters @@ -909,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' }; @@ -917,10 +923,10 @@ $(document).ready(function() { if(data.success == true) { PMA_ajaxShowMessage(data.message); if(disp_mode == 'vertical') { - $this_td.parents('tbody').find('tr').find('.where_clause:nth('+this_td_index+')').attr('value',new_clause); + $this_td.parents('tbody').find('tr').find('.where_clause:nth(' + this_td_index + ')').attr('value', new_clause); } else { - $this_td.parent('tr').find('.where_clause').attr('value',new_clause); + $this_td.parent('tr').find('.where_clause').attr('value', new_clause); } // remove possible previous feedback message $('#result_query').remove(); @@ -1026,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 ce2f65f..e9373f2 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 ); - - $extra_data['relations'][$rel_field] = '<a href="sql.php' . PMA_generate_common_url($_url_params) . '">'; - $extra_data['relations'][$rel_field] .= '</a>'; + $output = '<a href="sql.php' . PMA_generate_common_url($_url_params) . '"' . $title . '>'; + + 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 .= '</a>'; + $extra_data['relations'][$rel_field] = $output; } }
hooks/post-receive