You've already forked phpmyadmin
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:
@@ -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']);
|
||||
|
||||
@@ -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);
|
||||
|
||||
155
js/functions.js
155
js/functions.js
@@ -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();
|
||||
|
||||
@@ -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');
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
@@ -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);
|
||||
?>
|
||||
|
||||
@@ -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'];
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user