1
0
mirror of https://github.com/phpmyadmin/phpmyadmin.git synced 2026-10-28 07:41:55 +03:00

pick a column from central list

Signed-off-by: Smita Kumari <kumarismita62@gmail.com>

small bug fix

Signed-off-by: Smita Kumari <kumarismita62@gmail.com>

added own style

Signed-off-by: Smita Kumari <kumarismita62@gmail.com>

not display column name that already exist in tabl

Signed-off-by: Smita Kumari <kumarismita62@gmail.com>

added search to the pick column dialog

Signed-off-by: Smita Kumari <kumarismita62@gmail.com>

Fix coding style

Signed-off-by: Smita Kumari <kumarismita62@gmail.com>

check for central columns configuration relation

Signed-off-by: Smita Kumari <kumarismita62@gmail.com>

pagination in pick coulumn dialog

Signed-off-by: Smita Kumari <kumarismita62@gmail.com>

code cleanup

Signed-off-by: Smita Kumari <kumarismita62@gmail.com>

Fix coding style

Signed-off-by: Smita Kumari <kumarismita62@gmail.com>
This commit is contained in:
Smita Kumari
2014-06-05 18:21:48 +05:30
parent c2b4c5e7c7
commit 294e36bdb6
8 changed files with 242 additions and 20 deletions

View File

@@ -32,6 +32,10 @@ if (isset($_POST['populateColumns'])) {
echo PMA_getHTMLforColumnDropdown($db, $selected_tbl);
exit;
}
if (isset($_POST['getColumnList'])) {
echo PMA_getCentralColumnsListRaw($db, $_POST['cur_table']);
exit;
}
if (isset($_POST['add_column'])) {
$selected_col = array();
$selected_tbl = htmlspecialchars($_POST['table-select']);

View File

@@ -115,7 +115,7 @@ AJAX.registerOnload('db_central_columns.js', function () {
});
$('#table-select').change(function(e) {
var selectvalue = $(this).val();
var default_column_select = '<option value="" selected>Select a column</option>';
var default_column_select = $('#column-select').html();
var href = "db_central_columns.php";
var params = {
'ajax_request' : true,
@@ -124,8 +124,7 @@ AJAX.registerOnload('db_central_columns.js', function () {
'selectedTable' : selectvalue,
'populateColumns' : true
};
$('#column-select').html('<option value="">Loading...</option>');
$('#column-select').html('<option value="">'+PMA_messages.strLoading+'</option>');
if (selectvalue !== "") {
$.post(href, params, function (data) {
$('#column-select').html(default_column_select);

View File

@@ -39,6 +39,10 @@ var codemirror_inline_editor = false;
*/
var chart_activeTimeouts = {};
/**
* @var central_column_list array to hold the columns in central list per db.
*/
var central_column_list = [];
/**
* Make sure that ajax requests will not be cached
* by appending a random variable to their parameters
@@ -53,7 +57,7 @@ $.ajaxPrefilter(function (options, originalOptions, jqXHR) {
});
/**
* Show notices for ENUM columns; add/hide the default value
* Show notices for ENUM columns; add/hide the default value
*
*/
function PMA_verifyColumnsProperties()
@@ -2664,6 +2668,48 @@ function PMA_validateDefaultValue($null_checkbox)
}
}
/**
* function to populate the input fields on picking a coulmn from central list
*
* @param string input_id input id of the name field for the column to be populated
* @param integer offset of the selected column in central list of columns
*/
function autoPopulate(input_id, offset)
{
var db = PMA_commonParams.get('db');
var table = PMA_commonParams.get('table');
input_id = input_id.substring(0, input_id.length - 1);
$('#'+input_id+'1').val(central_column_list[db+'_'+table][offset].col_name);
var col_type = central_column_list[db+'_'+table][offset].col_type.toUpperCase();
$('#'+input_id+'2').val(col_type);
$('#'+input_id+'3').val(central_column_list[db+'_'+table][offset].col_length);
if(col_type === 'ENUM' || col_type === 'SET') {
$('#'+input_id+'3').next().show();
} else {
$('#'+input_id+'3').next().hide();
}
var col_default = central_column_list[db+'_'+table][offset].col_default.toUpperCase();
if (col_default !== '' && col_default !== 'NULL' && col_default !== 'CURRENT_TIMESTAMP') {
$('#'+input_id+'4').val("USER_DEFINED");
$('#'+input_id+'4').next().next().show();
$('#'+input_id+'4').next().next().val(central_column_list[db+'_'+table][offset].col_default);
} else {
$('#'+input_id+'4').val(central_column_list[db+'_'+table][offset].col_default);
$('#'+input_id+'4').next().next().hide();
}
$('#'+input_id+'5').val(central_column_list[db+'_'+table][offset].col_collation);
$('#'+input_id+'6').val(central_column_list[db+'_'+table][offset].col_extra);
if(central_column_list[db+'_'+table][offset].col_extra.toUpperCase() === 'AUTO_INCREMENT') {
$('#'+input_id+'9').attr("checked","checked");
} else {
$('#'+input_id+'9').removeAttr("checked");
}
if(central_column_list[db+'_'+table][offset].col_isNull !== '0') {
$('#'+input_id+'7').attr("checked","checked");
} else {
$('#'+input_id+'7').removeAttr("checked");
}
}
/**
* Unbind all event handlers before tearing down a page
@@ -2672,6 +2718,7 @@ AJAX.registerTeardown('functions.js', function () {
$("a.open_enum_editor").die('click');
$("input.add_value").die('click');
$("#enum_editor td.drop").die('click');
$('a.central_columns_dialog').die('click');
});
/**
* @var $enum_editor_dialog An object that points to the jQuery
@@ -2830,6 +2877,112 @@ AJAX.registerOnload('functions.js', function () {
return false;
});
$('a.central_columns_dialog').live('click',function(e) {
var href = "db_central_columns.php";
var db = PMA_commonParams.get('db');
var table = PMA_commonParams.get('table');
var maxRows = $(this).data('maxrows');
var params = {
'ajax_request' : true,
'token' : PMA_commonParams.get('token'),
'db' : PMA_commonParams.get('db'),
'cur_table' : PMA_commonParams.get('table'),
'getColumnList':true
};
var colid = $(this).closest('td').find("input").attr("id");
var fields = '';
if (! (db+'_'+table in central_column_list)) {
central_column_list.push(db+'_'+table);
$.ajax({
type: 'POST',
url: href,
data: params,
success: function (data) {
central_column_list[db+'_'+table] = $.parseJSON(data.message);
},
async:false
});
}
var i = 0;
var list_size = central_column_list[db+'_'+table].length;
var min = (list_size<=maxRows)?list_size:maxRows;
for (i = 0; i<min; i++) {
fields += '<tr><td><div><span style="font-size:14px; font-weight:bold">'+central_column_list[db+'_'+table][i].col_name+
'</span><br><span style="color:gray">'+central_column_list[db+'_'+table][i].col_type;
if(central_column_list[db+'_'+table][i].col_length !== '') {
fields += '('+central_column_list[db+'_'+table][i].col_length+') ';
}
fields += central_column_list[db+'_'+table][i].col_extra+'</span>'+
'</div></td><td><input class="pick" style="width:100%" type="submit" value="'+PMA_messages.pickColumn+'" onclick="autoPopulate(\''+colid+'\','+i+')"/></td></tr>';
}
var result_pointer = i;
var search_in = '<input type="text" class="filter_rows" placeholder="'+PMA_messages.searchList+'">';
if (fields === '') {
fields = $.sprintf(PMA_messages.strEmptyCentralList, "'"+db+"'");
search_in = '';
}
var seeMore = '';
if (list_size > maxRows) {
seeMore = "<fieldset class='tblFooters' style='text-align:center;font-weight:bold'><a href='#' id='seeMore'>"+PMA_messages.seeMore+"</a></fieldset>";
}
var central_columns_dialog = "<div style='max-height:400px'>" +
"<fieldset>" +
search_in+
"<table id='col_list' style='width:100%' class='values'>" + fields + "</table>" +
"</fieldset>"+
seeMore+
"</div>";
var width = parseInt(
(parseInt($('html').css('font-size'), 10) / 13) * 500,
10
);
if (! width) {
width = 500;
}
var buttonOptions = {};
var $central_columns_dialog = $(central_columns_dialog).dialog({
minWidth: width,
modal: true,
title: PMA_messages.pickColumnTitle,
buttons: buttonOptions,
open: function () {
$('#col_list').on("click",".pick", function(){
$central_columns_dialog.remove();
});
$(".filter_rows").on("keyup", function () {
$.uiTableFilter($("#col_list"), $(this).val());
});
$("#seeMore").click(function() {
fields = '';
min = (list_size<=maxRows+result_pointer)?list_size:maxRows+result_pointer;
for (i = result_pointer; i < min; i++) {
fields += '<tr><td><div><span style="font-size:14px; font-weight:bold">'+central_column_list[db+'_'+table][i].col_name+
'</span><br><span style="color:gray">'+central_column_list[db+'_'+table][i].col_type;
if(central_column_list[db+'_'+table][i].col_length !== '') {
fields += '('+central_column_list[db+'_'+table][i].col_length+') ';
}
fields += central_column_list[db+'_'+table][i].col_extra+'</span>'+
'</div></td><td><input class="pick" style="width:100%" type="submit" value="'+PMA_messages.pickColumn+'" onclick="autoPopulate(\''+colid+'\','+i+')"/></td></tr>';
}
$("#col_list").append(fields);
result_pointer = i;
if (result_pointer === list_size) {
$('.tblFooters').hide();
}
return false;
});
$(this).closest('.ui-dialog').find('.ui-dialog-buttonpane button:first').focus();
},
close: function () {
$('#col_list').off("click",".pick");
$(".filter_rows").off("keyup");
$(this).remove();
}
});
return false;
});
// When "add a new value" is clicked, append an empty text field
$("input.add_value").live('click', function (e) {
e.preventDefault();

View File

@@ -275,6 +275,12 @@ $js_messages['strEdit'] = __('Edit');
$js_messages['strNotValidRowNumber'] = __('%d is not valid row number.');
$js_messages['strBrowseForeignValues'] = __('Browse foreign values');
/* For Central list of columns */
$js_messages['pickColumn'] = __('Pick');
$js_messages['pickColumnTitle'] = __('Column selector');
$js_messages['searchList'] = __('Search this list');
$js_messages['strEmptyCentralList'] = __('No columns in the central list. Make sure Central columns list for database %s has columns that is not present in current table.');
$js_messages['seeMore'] = __('See more');
/* For server_variables.js */
$js_messages['strSave'] = __('Save');

View File

@@ -71,6 +71,17 @@ function PMA_getColumnsList($db, $from=0, $num=25)
return $has_list;
}
/* to do block, need to complete
function PMA_getCentralColumnsCount($db)
{
$pmadb = $GLOBALS['cfg']['Server']['pmadb'];
$GLOBALS['dbi']->selectDb($pmadb);
$central_list_table = $GLOBALS['cfg']['Server']['central_columns'];
$query = 'SELECT count(db_name) FROM ' .
* PMA_Util::backquote($central_list_table) . ' '
. 'WHERE db_name = \'' . $db . '\';';
return $GLOBALS['dbi']->fetchResult($query);
}*/
/**
* return the existing columns in central list among the given list of columns
*
@@ -523,7 +534,7 @@ function PMA_getHTMLforTableDropdown($db)
$tables = $GLOBALS['dbi']->getTables($db);
$selectHtml = '<select name="table-select" id="table-select">'
. '<option value="" disabled="disabled" selected="selected">'
. 'Select a table</option>';
. __('Select a table') . '</option>';
foreach ($tables as $table) {
$selectHtml .= '<option value="' . $table . '">' . $table . '</option>';
}
@@ -584,8 +595,8 @@ function PMA_getHTMLforAddCentralColumn($total_rows, $pos, $db)
. '<input type="hidden" name="total_rows" value="' . $total_rows . '"/>'
. PMA_getHTMLforTableDropdown($db)
. '<select name="column-select" id="column-select">'
. '<option value="" disabled="disabled" selected="selected">'
. 'Select a column</option>'
. '<option value="" selected="selected">'
. __('Select a column.') . '</option>'
. '</select></form>'
. '</td>'
. '<td class="navigation_separator"></td>'
@@ -672,4 +683,34 @@ function PMA_getHTMLforCentralColumnsTableRow($row, $odd_row, $row_num, $db)
$tableHtml .= '</tr>';
return $tableHtml;
}
/**
* get the list of columns in given database excluding
* the columns present in current table
*
* @param string $db selected database
* @param string $table current table name
*
* @return encoded list of columns present in central list for the given database
*/
function PMA_getCentralColumnsListRaw($db, $table)
{
$cfgCentralColumns = PMA_centralColumnsGetParams();
$centralTable = $cfgCentralColumns['table'];
$GLOBALS['dbi']->selectDb($cfgCentralColumns['db']);
if (empty($table) || $table == '') {
$query = 'SELECT * FROM ' . PMA_Util::backquote($centralTable) . ' '
. 'WHERE db_name = \'' . $db . '\';';
} else {
$columns = (array) $GLOBALS['dbi']->getColumnNames($db, $table);
$columns = implode("','", $columns);
$columns = "'" . $columns . "'";
$query = 'SELECT * FROM ' . PMA_Util::backquote($centralTable) . ' '
. 'WHERE db_name = \'' . $db . '\' '
. 'AND col_name NOT IN (' . $columns . ');';
}
$columns_list = (array)$GLOBALS['dbi']->fetchResult($query);
return json_encode($columns_list);
}
?>

View File

@@ -164,6 +164,9 @@ $html = PMA_getHtmlForTableCreateOrAddField(
);
unset($_form_params);
PMA_Response::getInstance()->addHTML($html);
$response = PMA_Response::getInstance();
$header = $response->getHeader();
$scripts = $header->getScripts();
$scripts->addFile('jquery/jquery.uitablefilter.js');
$response->addHTML($html);
?>

View File

@@ -512,7 +512,7 @@ function PMA_handleRegeneration($columnNumber, $submit_fulltext, $comments_map,
}
/**
* Function to update default value info in $columnMeta and get this array
* Function to update default value info in $columnMeta and get this array
*
* @param array $columnMeta column meta
* @param bool $isDefault whether the row value is default
@@ -557,11 +557,13 @@ function PMA_getColumnMetaForDefault($columnMeta, $isDefault)
* @param int $ci cell index
* @param int $ci_offset cell index offset
* @param array $columnMeta column meta
* @param array $cfgRelation configuration relation
*
* @return string
*/
function PMA_getHtmlForColumnName($columnNumber, $ci, $ci_offset, $columnMeta)
{
function PMA_getHtmlForColumnName(
$columnNumber, $ci, $ci_offset, $columnMeta, $cfgRelation
) {
$title = '';
if (isset($columnMeta['column_status'])) {
if ($columnMeta['column_status']['isReferenced']) {
@@ -590,7 +592,18 @@ function PMA_getHtmlForColumnName($columnNumber, $ci, $ci_offset, $columnMeta)
. (isset($columnMeta['Field'])
? htmlspecialchars($columnMeta['Field']) : '')
. '"' . ' />';
if ($cfgRelation['central_columnswork'] && !(isset($columnMeta['column_status'])
&& !$columnMeta['column_status']['isEditable'])
) {
$html .= '<p style="font-size:80%;margin:5px 2px" '
. 'id="central_columns_' . $columnNumber . '_'
. ($ci - $ci_offset)
. '">';
$html .= '<a data-maxrows="' . $GLOBALS['cfg']['MaxRows'] . '" '
. 'href="#" class="central_columns_dialog"> '
. __('Pick from Central Columns') . '</a>'
. '</p>';
}
return $html;
}
@@ -1183,13 +1196,15 @@ function PMA_getHtmlForColumnAttributes($columnNumber, $columnMeta, $type_upper,
// column name
$content_cell[$ci] = PMA_getHtmlForColumnName(
$columnNumber, $ci, $ci_offset, isset($columnMeta) ? $columnMeta : null
$columnNumber, $ci, $ci_offset, isset($columnMeta) ? $columnMeta : null,
$cfgRelation
);
$ci++;
// column type
$content_cell[$ci] = PMA_getHtmlForColumnType(
$columnNumber, $ci, $ci_offset, $type_upper, isset($columnMeta) ? $columnMeta : null
$columnNumber, $ci, $ci_offset, $type_upper,
isset($columnMeta) ? $columnMeta : null
);
$ci++;
@@ -1296,7 +1311,7 @@ function PMA_getHtmlForColumnAttributes($columnNumber, $columnMeta, $type_upper,
* @param array $form_params form parameters
* @param int $columnNumber column/field number
* @param string $type type in lowercase without the length
* @param array $extracted_columnspec details about the column spec
* @param array $extracted_columnspec details about the column spec
*
* @return array
*/
@@ -1345,7 +1360,7 @@ function PMA_getFormParamsForOldColumn(
$form_params['field_attribute_orig[' . $columnNumber . ']'] = '';
}
// old column null
// old column null
if (isset($columnMeta['Null'])) {
$form_params['field_null_orig[' . $columnNumber . ']']
= $columnMeta['Null'];
@@ -1353,7 +1368,7 @@ function PMA_getFormParamsForOldColumn(
$form_params['field_null_orig[' . $columnNumber . ']'] = '';
}
// old column extra (for auto_increment)
// old column extra (for auto_increment)
if (isset($columnMeta['Extra'])) {
$form_params['field_extra_orig[' . $columnNumber . ']']
= $columnMeta['Extra'];
@@ -1361,7 +1376,7 @@ function PMA_getFormParamsForOldColumn(
$form_params['field_extra_orig[' . $columnNumber . ']'] = '';
}
// old column comment
// old column comment
if (isset($columnMeta['Comment'])) {
$form_params['field_comments_orig[' . $columnNumber . ']']
= $columnMeta['Comment'];

View File

@@ -616,10 +616,11 @@ class PMA_TblColumnsDefinitionFormTest extends PHPUnit_Framework_TestCase
*/
public function testGetHtmlForColumnName()
{
$cfgRelation = array('central_columnswork' => true);
$result = PMA_getHtmlForColumnName(
2, 4, 4, array('Field' => "fieldname",
'column_status' => array('isReferenced' => false,
'isForeignKey' => false, 'isEditable' => true))
'isForeignKey' => false, 'isEditable' => true)), $cfgRelation
);
$this->assertTag(