Use db_desginer.php as a route for all designer operation. Combine pmd_general.lib.php and designer.lib.php into db_designer.lib.php

Signed-off-by: Bimal Yashodha <kb.yashodha@gmail.com>
This commit is contained in:
Bimal Yashodha 2014-08-14 07:22:32 +05:30
parent 7e1f1d21ef
commit 285c18acdd
15 changed files with 461 additions and 629 deletions

View File

@ -6,12 +6,9 @@
* @package PhpMyAdmin-Designer
*/
/**
*
*/
require_once 'libraries/common.inc.php';
require_once 'libraries/pmd_common.php';
require_once 'libraries/pmd_general.lib.php';
require_once 'libraries/db_designer.lib.php';
$script_display_field = PMA_getTablesInfo();
$tab_column = PMA_getColumnsInfo();
@ -24,11 +21,10 @@ $response = PMA_Response::getInstance();
if (isset($_REQUEST['dialog'])) {
include_once 'libraries/designer.lib.php';
if ($_REQUEST['dialog'] == 'edit') {
$html = PMA_getHtmlForEditOrDeletePages($GLOBALS['db'], 'edit');
$html = PMA_getHtmlForEditOrDeletePages($GLOBALS['db'], 'editPage');
} else if ($_REQUEST['dialog'] == 'delete') {
$html = PMA_getHtmlForEditOrDeletePages($GLOBALS['db'], 'delete');
$html = PMA_getHtmlForEditOrDeletePages($GLOBALS['db'], 'deletePage');
} else if ($_REQUEST['dialog'] == 'save_as') {
$html = PMA_getHtmlForPageSaveAs($GLOBALS['db']);
} else if ($_REQUEST['dialog'] == 'export') {
@ -44,14 +40,14 @@ if (isset($_REQUEST['dialog'])) {
if (isset($_REQUEST['operation'])) {
if ($_REQUEST['operation'] == 'delete') {
if ($_REQUEST['operation'] == 'deletePage') {
$result = PMA_deletePage($_REQUEST['selected_page']);
if ($result) {
$response->isSuccess(true);
} else {
$response->isSuccess(false);
}
} elseif ($_REQUEST['operation'] == 'save') {
} elseif ($_REQUEST['operation'] == 'savePage') {
if ($_REQUEST['save_page'] == 'same') {
$page = $_REQUEST['selected_page'];
} elseif ($_REQUEST['save_page'] == 'new') {
@ -63,6 +59,31 @@ if (isset($_REQUEST['operation'])) {
} else {
$response->isSuccess(false);
}
} elseif ($_REQUEST['operation'] == 'setDisplayField') {
PMA_saveDisplayField(
$_REQUEST['db'], $_REQUEST['table'], $_REQUEST['field']
);
$response->isSuccess(true);
} elseif ($_REQUEST['operation'] == 'addNewRelation') {
list($success, $message) = PMA_addNewRelation(
$_REQUEST['db'],
$_REQUEST['T1'],
$_REQUEST['F1'],
$_REQUEST['T2'],
$_REQUEST['F2'],
$_REQUEST['on_delete'],
$_REQUEST['on_update']
);
$response->isSuccess($success);
$response->addJSON($success ? 'message' : 'error', $message);
} elseif ($_REQUEST['operation'] == 'removeRelation') {
PMA_removeRelation(
$_REQUEST['T1'],
$_REQUEST['F1'],
$_REQUEST['T2'],
$_REQUEST['F2']
);
$response->isSuccess(true);
}
return;
} else {
@ -86,12 +107,12 @@ $response = PMA_Response::getInstance();
$response->getFooter()->setMinimal();
$header = $response->getHeader();
$header->setBodyId('pmd_body');
$scripts = $header->getScripts();
$scripts->addFile('jquery/jquery.fullscreen.js');
$scripts->addFile('pmd/designer_db.js');
$scripts->addFile('pmd/designer_objects.js');
$scripts->addFile('pmd/designer_page.js');
$scripts->addFile('pmd/ajax.js');
$scripts->addFile('pmd/history.js');
$scripts->addFile('pmd/move.js');
$scripts->addFile('pmd/iecanvas.js', true);

View File

@ -112,7 +112,7 @@ $db_qbe = new PMA_DBQbe($GLOBALS['db'], $savedSearchList, $savedSearch);
* Displays the Query by example form
*/
if ($cfgRelation['pdfwork']) {
$url = 'pmd_general.php' . PMA_URL_getCommon(
$url = 'db_designer.php' . PMA_URL_getCommon(
array_merge(
$url_params,
array('query' => 1)

View File

@ -405,6 +405,7 @@ $js_messages['strEnterValidPageName'] = __('Please enter a valid page name');
$js_messages['strLeavingPage'] = __('Do you want to save the changes to the current page?');
$js_messages['strSuccessfulPageDelete'] = __('Successfully deleted the page');
$js_messages['strExportRelationalSchema'] = __('Export relational schema');
$js_messages['strModificationSaved'] = __('Modifications have been saved');
/* Visual query builder (js/pmd/move.js) */
$js_messages['strAddOption'] = __('Add an option for column "%s".');

View File

@ -1,60 +0,0 @@
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* @package PhpMyAdmin-Designer
*/
/**
*
*/
function PrintXML(data)
{
var $root = $(data).find('root');
if ($root.length === 0) {
// error
var myWin = window.open('', 'Report', 'width=400, height=250, resizable=1, scrollbars=1, status=1');
var tmp = myWin.document;
tmp.write(data);
tmp.close();
} else {
// success
if ($root.attr('act') == 'save_pos') {
PMA_ajaxShowMessage($root.attr('return'));
} else if ($root.attr('act') == 'relation_upd') {
PMA_ajaxShowMessage($root.attr('return'));
if ($root.attr('b') == '1') {
contr.splice($root.attr('K'), 1);
Re_load();
}
} else if ($root.attr('act') == 'relation_new') {
PMA_ajaxShowMessage($root.attr('return'));
if ($root.attr('b') == '1') {
var i = contr.length;
var t1 = $root.attr('DB1') + '.' + $root.attr('T1');
var f1 = $root.attr('F1');
var t2 = $root.attr('DB2') + '.' + $root.attr('T2');
var f2 = $root.attr('F2');
contr[i] = [];
contr[i][''] = [];
contr[i][''][t2] = [];
contr[i][''][t2][f2] = [];
contr[i][''][t2][f2][0] = t1;
contr[i][''][t2][f2][1] = f1;
Re_load();
}
}
}
}
/**
*
*/
function makeRequest(url, parameters)
{
var $msg = PMA_ajaxShowMessage();
$.post(url, parameters, function (data) {
PMA_ajaxRemoveMessage($msg);
PrintXML(data);
});
return true;
}

View File

@ -566,14 +566,24 @@ function Get_url_pos()
function Save2(callback)
{
_change = 0;
if (pmd_tables_enabled) {
var poststr = 'IS_AJAX=1&server=' + server + '&db=' + db + '&token=' + token + '&die_save_pos=1&selected_page=' + selected_page;
var poststr = '&operation=savePage&save_page=same&ajax_request=true';
poststr += '&server=' + server + '&db=' + db + '&token=' + token + '&selected_page=' + selected_page;
poststr += Get_url_pos();
makeRequest('pmd_save_pos.php', poststr);
if (typeof callback !== 'undefined') {
callback();
}
var $msgbox = PMA_ajaxShowMessage(PMA_messages.strProcessingRequest);
$.post('db_designer.php', poststr, function (data) {
if (data.success === false) {
PMA_ajaxShowMessage(data.error, false);
} else {
PMA_ajaxRemoveMessage($msgbox);
PMA_ajaxShowMessage(PMA_messages.strModificationSaved);
_change = 0;
if (typeof callback !== 'undefined') {
callback();
}
}
});
} else {
var name = $("#page_name").html().trim();
Save_to_selected_page(db, selected_page, name, Get_url_pos(), function (page){
@ -634,10 +644,10 @@ function Save3(callback)
$(this).dialog('close');
};
var $form = $('<form action="pmd_general.php" method="post" name="save_page" id="save_page" class="ajax"></form>')
var $form = $('<form action="db_designer.php" method="post" name="save_page" id="save_page" class="ajax"></form>')
.append('<input type="hidden" name="db" value="' + db + '" />')
.append('<input type="hidden" name="token" value="' + token + '" />')
.append('<input type="hidden" name="operation" value="save" />')
.append('<input type="hidden" name="operation" value="savePage" />')
.append('<input type="hidden" name="save_page" value="new" />')
.append('<label for="selected_value">' + PMA_messages.strPageName
+ '</label>:<input type="text" name="selected_value" />');
@ -677,7 +687,7 @@ function Edit_pages()
var $msgbox = PMA_ajaxShowMessage();
var params = 'ajax_request=true&dialog=edit&token=' + token + '&db=' + db;
$.get("pmd_general.php", params, function (data) {
$.get("db_designer.php", params, function (data) {
if (data.success === false) {
PMA_ajaxShowMessage(data.error, false);
} else {
@ -703,6 +713,7 @@ function Edit_pages()
}); // end $.get()
});
}
// ----------------------------- DELETE PAGES ---------------------------------------
function Delete_pages()
{
@ -755,7 +766,7 @@ function Delete_pages()
var $msgbox = PMA_ajaxShowMessage();
var params = 'ajax_request=true&dialog=delete&token=' + token + '&db=' + db;
$.get("pmd_general.php", params, function (data) {
$.get("db_designer.php", params, function (data) {
if (data.success === false) {
PMA_ajaxShowMessage(data.error, false);
} else {
@ -853,7 +864,7 @@ function Save_as()
var $msgbox = PMA_ajaxShowMessage();
var params = 'ajax_request=true&dialog=save_as&token=' + token + '&db=' + db;
$.get("pmd_general.php", params, function (data) {
$.get("db_designer.php", params, function (data) {
if (data.success === false) {
PMA_ajaxShowMessage(data.error, false);
} else {
@ -931,7 +942,7 @@ function Export_pages()
};
var $msgbox = PMA_ajaxShowMessage();
var params = 'ajax_request=true&dialog=export&token=' + token + '&db=' + db + '&selected_page=' + selected_page;
$.get("pmd_general.php", params, function (data) {
$.get("db_designer.php", params, function (data) {
if (data.success === false) {
PMA_ajaxShowMessage(data.error, false);
} else {
@ -980,7 +991,7 @@ function Load_page(page) {
if (page !== null) {
param_page = '&page=' + page;
}
$('<a href="pmd_general.php?db=' + db + '&token=' + token + param_page + '"></a>')
$('<a href="db_designer.php?db=' + db + '&token=' + token + param_page + '"></a>')
.appendTo($('#page_content'))
.click();
} else {
@ -1091,19 +1102,37 @@ function Click_field(T, f, PK) // table field
document.getElementById('pmd_hint').innerHTML = "";
document.getElementById('pmd_hint').style.display = 'none';
document.getElementById('display_field_button').className = 'M_butt';
makeRequest('pmd_display_field.php', 'T=' + T + '&F=' + f + '&server=' + server + '&db=' + db + '&token=' + token);
var $msgbox = PMA_ajaxShowMessage(PMA_messages.strProcessingRequest);
$.post('db_designer.php',
{operation: 'setDisplayField', ajax_request: true, server: server, token: token, db: db, table: T, field: f},
function (data) {
if (data.success === false) {
PMA_ajaxShowMessage(data.error, false);
} else {
PMA_ajaxRemoveMessage($msgbox);
PMA_ajaxShowMessage(PMA_messages.strModificationSaved);
}
});
}
}
function New_relation()
{
document.getElementById('layer_new_relation').style.display = 'none';
link_relation += '&server=' + server + '&db=' + db + '&token=' + token + '&die_save_pos=0';
link_relation += '&server=' + server + '&db=' + db + '&token=' + token;
link_relation += '&on_delete=' + document.getElementById('on_delete').value + '&on_update=' + document.getElementById('on_update').value;
link_relation += Get_url_pos();
link_relation += '&operation=addNewRelation&ajax_request=true';
//alert(link_relation);
makeRequest('pmd_relation_new.php', link_relation);
var $msgbox = PMA_ajaxShowMessage(PMA_messages.strProcessingRequest);
$.post('db_designer.php', link_relation, function (data) {
if (data.success === false) {
PMA_ajaxShowMessage(data.error, false);
} else {
PMA_ajaxRemoveMessage($msgbox);
Load_page(selected_page);
}
}); // end $.post()
}
//-------------------------- create tables -------------------------------------
@ -1305,9 +1334,18 @@ function Canvas_click(id)
function Upd_relation()
{
document.getElementById('layer_upd_relation').style.display = 'none';
link_relation += '&server=' + server + '&db=' + db + '&token=' + token + '&die_save_pos=0';
link_relation += Get_url_pos();
makeRequest('pmd_relation_upd.php', link_relation);
link_relation += '&server=' + server + '&db=' + db + '&token=' + token;
link_relation += '&operation=removeRelation&ajax_request=true';
var $msgbox = PMA_ajaxShowMessage(PMA_messages.strProcessingRequest);
$.post('db_designer.php', link_relation, function (data) {
if (data.success === false) {
PMA_ajaxShowMessage(data.error, false);
} else {
PMA_ajaxRemoveMessage($msgbox);
Load_page(selected_page);
}
}); // end $.post()
}
function VisibleTab(id, t_n)

View File

@ -480,7 +480,7 @@ class PMA_Menu
if (! $db_is_system_schema) {
$tabs['designer']['text'] = __('Designer');
$tabs['designer']['icon'] = 'b_relations.png';
$tabs['designer']['link'] = 'pmd_general.php';
$tabs['designer']['link'] = 'db_designer.php';
$tabs['designer']['id'] = 'designer_tab';
}

View File

@ -1,15 +1,181 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* phpMyAdmin designer general code
* Set of functions related to designer
*
* @package PhpMyAdmin-Designer
* @package PhpMyAdmin
*/
if (! defined('PHPMYADMIN')) {
exit;
}
require_once 'libraries/relation.lib.php';
/**
* Function to get html for displaying the page edit/delete form
*
* @param string $db databasae name
* @param string $operation 'edit' or 'delete' depending on the operation
*
* @return string html content
*/
function PMA_getHtmlForEditOrDeletePages($db, $operation)
{
$cfgRelation = PMA_getRelationsParam();
$html = '<form action="db_designer.php" method="post"'
. ' name="edit_delete_pages" id="edit_delete_pages" class="ajax">';
$html .= PMA_URL_getHiddenInputs($db);
$html .= '<fieldset id="page_edit_delete_options">';
$html .= '<input type="hidden" name="operation" value="' . $operation . '" />';
$html .= '<label for="selected_page">';
if ($operation == 'edit') {
$html .= __("Page to open");
} else {
$html .= __("Page to delete");
}
$html .= ': </label>';
$html .= '<select name="selected_page" id="selected_page">';
$html .= '<option value="0">-- ' . __('Select page') . ' --</option>';
if ($cfgRelation['pdfwork']) {
$pages = PMA_getPageIdsAndNames($db);
foreach ($pages as $nr => $desc) {
$html .= '<option value="' . $nr . '">';
$html .= htmlspecialchars($desc) . '</option>';
}
}
$html .= '</select>';
$html .= '</fieldset>';
$html .= '</form>';
return $html;
}
/**
* Function to get html for displaying the page save as form
*
* @param string $db databasae name
*
* @return string html content
*/
function PMA_getHtmlForPageSaveAs($db)
{
$cfgRelation = PMA_getRelationsParam();
$choices = array(
'same' => __('Save to selected page'),
'new' => __('Create a page and save to it')
);
$html = '<form action="db_designer.php" method="post"'
. ' name="save_as_pages" id="save_as_pages" class="ajax">';
$html .= PMA_URL_getHiddenInputs($db);
$html .= '<fieldset id="page_save_as_options">';
$html .= '<table><tbody>';
$html .= '<tr>';
$html .= '<td>';
$html .= '<input type="hidden" name="operation" value="savePage" />';
$html .= '<select name="selected_page" id="selected_page">';
$html .= '<option value="0">-- ' . __('Select page') . ' --</option>';
if ($cfgRelation['pdfwork']) {
$pages = PMA_getPageIdsAndNames($db);
foreach ($pages as $nr => $desc) {
$html .= '<option value="' . $nr . '">';
$html .= htmlspecialchars($desc) . '</option>';
}
}
$html .= '</select>';
$html .= '</td>';
$html .= '</tr>';
$html .= '<tr>';
$html .= '<td>';
$html .= PMA_Util::getRadioFields('save_page', $choices, 'same', true);
$html .= '</td>';
$html .= '</tr>';
$html .= '<tr>';
$html .= '<td>';
$html .= '<label for="selected_value">' . __('New page name') . '</label>';
$html .= '<input type="text" name="selected_value" id="selected_value" />';
$html .= '</td>';
$html .= '</tr>';
$html .= '</tbody></table>';
$html .= '</fieldset>';
$html .= '</form>';
return $html;
}
/**
* Retrieve IDs and names of schema pages
*
* @param string $db database name
*
* @return array array of schema page id and names
*/
function PMA_getPageIdsAndNames($db)
{
$cfgRelation = PMA_getRelationsParam();
$page_query = "SELECT `page_nr`, `page_descr` FROM "
. PMA_Util::backquote($cfgRelation['db']) . "."
. PMA_Util::backquote($cfgRelation['pdf_pages'])
. " WHERE db_name = '" . PMA_Util::sqlAddSlashes($db) . "'"
. " ORDER BY `page_nr`";
$page_rs = PMA_queryAsControlUser(
$page_query, false, PMA_DatabaseInterface::QUERY_STORE
);
$result = array();
while ($curr_page = $GLOBALS['dbi']->fetchAssoc($page_rs)) {
$result[$curr_page['page_nr']] = $curr_page['page_descr'];
}
return $result;
}
/**
* Function to get html for displaying the schema export
*
* @param string $db database name
* @param int $page the page to be exported
*
* @return string
*/
function PMA_getHtmlForSchemaExport($db, $page)
{
/* Scan for schema plugins */
$export_list = PMA_getPlugins(
"schema",
'libraries/plugins/schema/',
null
);
/* Fail if we didn't find any schema plugin */
if (empty($export_list)) {
return PMA_Message::error(
__('Could not load schema plugins, please check your installation!')
)->getDisplay();
}
$htmlString = '<form method="post" action="schema_export.php"'
. ' class="disableAjax" id="id_export_pages">';
$htmlString .= '<fieldset>';
$htmlString .= PMA_URL_getHiddenInputs($db);
$htmlString .= '<label>' . __('Select Export Relational Type')
. '</label><br />';
$htmlString .= PMA_pluginGetChoice(
'Schema', 'export_type', $export_list, 'format'
);
$htmlString .= '<input type="hidden" name="chpage"'
. ' value="' . htmlspecialchars($page) . '" />';
$htmlString .= PMA_pluginGetOptions('Schema', $export_list);
$htmlString .= '</fieldset>';
$htmlString .= '</form>';
return $htmlString;
}
/**
* Returns HTML for including some variable to be accessed by JavaScript
*
@ -86,7 +252,7 @@ function PMA_getDesignerPageTopMenu($selected_page)
$html .= 'class="M_butt hide" target="_self">';
$html .= '<img title="' . __('Exit fullscreen') . '" alt="" ';
$html .= 'src="' . $_SESSION['PMA_Theme']->getImgPath('pmd/exitFullscreen.png')
. '" />';
. '" />';
$html .= '</a>';
$html .= '<img class="M_bord" alt="" ';
@ -275,7 +441,7 @@ function PMA_getHTMLTableList($tab_pos, $display_page)
$html .= 'return false">';
$html .= '<img title="' . __('Hide/Show all') . '" alt="v" id="key_HS_all" ';
$html .= 'src="' . $_SESSION['PMA_Theme']->getImgPath('pmd/downarrow1.png')
. '" />';
. '" />';
$html .= '</a>';
$html .= '<a href="#" class="M_butt" target="_self" ';
@ -284,7 +450,7 @@ function PMA_getHTMLTableList($tab_pos, $display_page)
$html .= '<img alt="v" id="key_HS" ';
$html .= 'title="' . __('Hide/Show Tables with no relation') . '"';
$html .= 'src="' . $_SESSION['PMA_Theme']->getImgPath('pmd/downarrow2.png')
. '" />';
. '" />';
$html .= '</a>';
$html .= '</div>';
@ -464,8 +630,8 @@ function PMA_getDatabaseTables(
);
for (
$j = 0, $id_cnt = count($tab_column[$t_n]["COLUMN_ID"]);
$j < $id_cnt;
$j++
$j < $id_cnt;
$j++
) {
$html .= '<tr id="id_tr_'
. $GLOBALS['PMD_URL']["TABLE_NAME_SMALL"][$i] . '.'
@ -1192,4 +1358,4 @@ function PMA_getCacheImages()
return $html;
}
?>
?>

View File

@ -1,178 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Set of functions related to designer
*
* @package PhpMyAdmin
*/
if (! defined('PHPMYADMIN')) {
exit;
}
require_once 'libraries/relation.lib.php';
/**
* Function to get html for displaying the page edit/delete form
*
* @param string $db databasae name
* @param string $operation 'edit' or 'delete' depending on the operation
*
* @return string html content
*/
function PMA_getHtmlForEditOrDeletePages($db, $operation)
{
$cfgRelation = PMA_getRelationsParam();
$html = '<form action="pmd_general.php" method="post"'
. ' name="edit_delete_pages" id="edit_delete_pages" class="ajax">';
$html .= PMA_URL_getHiddenInputs($db);
$html .= '<fieldset id="page_edit_delete_options">';
$html .= '<input type="hidden" name="operation" value="' . $operation . '" />';
$html .= '<label for="selected_page">';
if ($operation == 'edit') {
$html .= __("Page to open");
} else {
$html .= __("Page to delete");
}
$html .= ': </label>';
$html .= '<select name="selected_page" id="selected_page">';
$html .= '<option value="0">-- ' . __('Select page') . ' --</option>';
if ($cfgRelation['pdfwork']) {
$pages = PMA_getPageIdsAndNames($db);
foreach ($pages as $nr => $desc) {
$html .= '<option value="' . $nr . '">';
$html .= htmlspecialchars($desc) . '</option>';
}
}
$html .= '</select>';
$html .= '</fieldset>';
$html .= '</form>';
return $html;
}
/**
* Function to get html for displaying the page save as form
*
* @param string $db databasae name
*
* @return string html content
*/
function PMA_getHtmlForPageSaveAs($db)
{
$cfgRelation = PMA_getRelationsParam();
$choices = array(
'same' => __('Save to selected page'),
'new' => __('Create a page and save to it')
);
$html = '<form action="pmd_general.php" method="post"'
. ' name="save_as_pages" id="save_as_pages" class="ajax">';
$html .= PMA_URL_getHiddenInputs($db);
$html .= '<fieldset id="page_save_as_options">';
$html .= '<table><tbody>';
$html .= '<tr>';
$html .= '<td>';
$html .= '<input type="hidden" name="operation" value="save" />';
$html .= '<select name="selected_page" id="selected_page">';
$html .= '<option value="0">-- ' . __('Select page') . ' --</option>';
if ($cfgRelation['pdfwork']) {
$pages = PMA_getPageIdsAndNames($db);
foreach ($pages as $nr => $desc) {
$html .= '<option value="' . $nr . '">';
$html .= htmlspecialchars($desc) . '</option>';
}
}
$html .= '</select>';
$html .= '</td>';
$html .= '</tr>';
$html .= '<tr>';
$html .= '<td>';
$html .= PMA_Util::getRadioFields('save_page', $choices, 'same', true);
$html .= '</td>';
$html .= '</tr>';
$html .= '<tr>';
$html .= '<td>';
$html .= '<label for="selected_value">' . __('New page name') . '</label>';
$html .= '<input type="text" name="selected_value" id="selected_value" />';
$html .= '</td>';
$html .= '</tr>';
$html .= '</tbody></table>';
$html .= '</fieldset>';
$html .= '</form>';
return $html;
}
/**
* Retrieve IDs and names of schema pages
*
* @param string $db database name
*
* @return array array of schema page id and names
*/
function PMA_getPageIdsAndNames($db)
{
$cfgRelation = PMA_getRelationsParam();
$page_query = "SELECT `page_nr`, `page_descr` FROM "
. PMA_Util::backquote($cfgRelation['db']) . "."
. PMA_Util::backquote($cfgRelation['pdf_pages'])
. " WHERE db_name = '" . PMA_Util::sqlAddSlashes($db) . "'"
. " ORDER BY `page_nr`";
$page_rs = PMA_queryAsControlUser(
$page_query, false, PMA_DatabaseInterface::QUERY_STORE
);
$result = array();
while ($curr_page = $GLOBALS['dbi']->fetchAssoc($page_rs)) {
$result[$curr_page['page_nr']] = $curr_page['page_descr'];
}
return $result;
}
/**
* Function to get html for displaying the schema export
*
* @param string $db database name
* @param int $page the page to be exported
*
* @return string
*/
function PMA_getHtmlForSchemaExport($db, $page)
{
/* Scan for schema plugins */
$export_list = PMA_getPlugins(
"schema",
'libraries/plugins/schema/',
null
);
/* Fail if we didn't find any schema plugin */
if (empty($export_list)) {
return PMA_Message::error(
__('Could not load schema plugins, please check your installation!')
)->getDisplay();
}
$htmlString = '<form method="post" action="schema_export.php"'
. ' class="disableAjax" id="id_export_pages">';
$htmlString .= '<fieldset>';
$htmlString .= PMA_URL_getHiddenInputs($db);
$htmlString .= '<label>' . __('Select Export Relational Type')
. '</label><br />';
$htmlString .= PMA_pluginGetChoice(
'Schema', 'export_type', $export_list, 'format'
);
$htmlString .= '<input type="hidden" name="chpage"'
. ' value="' . htmlspecialchars($page) . '" />';
$htmlString .= PMA_pluginGetOptions('Schema', $export_list);
$htmlString .= '</fieldset>';
$htmlString .= '</form>';
return $htmlString;
}
?>

View File

@ -429,25 +429,199 @@ function PMA_saveTablePositions($pg)
return $res;
}
/**
* Prepares XML output for js/pmd/ajax.js to display a message
* Saves the display field for a table.
*
* @param string $b b attribute value
* @param string $ret Return attribute value
* @param string $db database name
* @param string $table table name
* @param string $field display field name
*
* @return void
*/
function PMA_returnUpd($b, $ret)
function PMA_saveDisplayField($db, $table, $field)
{
// not sure where this was defined...
global $K;
$cfgRelation = PMA_getRelationsParam();
if (!$cfgRelation['displaywork']) {
return false;
}
header("Content-Type: text/xml; charset=utf-8");
header("Cache-Control: no-cache");
die(
'<root act="relation_upd" return="' . $ret . '" b="'
. $b . '" K="' . $K . '"></root>'
);
$disp = PMA_getDisplayField($db, $table);
if ($disp && $disp === $field) {
$field = '';
}
include_once 'libraries/tbl_relation.lib.php';
PMA_handleUpdateForDisplayField($disp, $field, $db, $table, $cfgRelation);
}
/**
* Adds a new foreign relation
*
* @param string $db database name
* @param string $T1 foreign table
* @param string $F1 foreign field
* @param string $T2 master table
* @param string $F2 master field
* @param string $on_delete on delete action
* @param string $on_update on updaet action
*
* @return array array of success/failure and message
*/
function PMA_addNewRelation($db, $T1, $F1, $T2, $F2, $on_delete, $on_update)
{
$tables = $GLOBALS['dbi']->getTablesFull($db, $T1);
$type_T1 = strtoupper($tables[$T1]['ENGINE']);
$tables = $GLOBALS['dbi']->getTablesFull($db, $T2);
$type_T2 = strtoupper($tables[$T2]['ENGINE']);
// native foreign key
if (PMA_Util::isForeignKeySupported($type_T1)
&& PMA_Util::isForeignKeySupported($type_T2)
&& $type_T1 == $type_T2
) {
// relation exists?
$existrel_foreign = PMA_getForeigners($db, $T2, '', 'foreign');
$foreigner = PMA_searchColumnInForeigners($existrel_foreign, $F2);
if ($foreigner
&& isset($foreigner['constraint'])
) {
return array(false, __('Error: relation already exists.'));
}
// note: in InnoDB, the index does not requires to be on a PRIMARY
// or UNIQUE key
// improve: check all other requirements for InnoDB relations
$result = $GLOBALS['dbi']->query(
'SHOW INDEX FROM ' . PMA_Util::backquote($db)
. '.' . PMA_Util::backquote($T1) . ';'
);
// will be use to emphasis prim. keys in the table view
$index_array1 = array();
while ($row = $GLOBALS['dbi']->fetchAssoc($result)) {
$index_array1[$row['Column_name']] = 1;
}
$GLOBALS['dbi']->freeResult($result);
$result = $GLOBALS['dbi']->query(
'SHOW INDEX FROM ' . PMA_Util::backquote($db)
. '.' . PMA_Util::backquote($T2) . ';'
);
// will be used to emphasis prim. keys in the table view
$index_array2 = array();
while ($row = $GLOBALS['dbi']->fetchAssoc($result)) {
$index_array2[$row['Column_name']] = 1;
}
$GLOBALS['dbi']->freeResult($result);
if (! empty($index_array1[$F1]) && ! empty($index_array2[$F2])) {
$upd_query = 'ALTER TABLE ' . PMA_Util::backquote($db)
. '.' . PMA_Util::backquote($T2)
. ' ADD FOREIGN KEY ('
. PMA_Util::backquote($F2) . ')'
. ' REFERENCES '
. PMA_Util::backquote($db) . '.'
. PMA_Util::backquote($T1) . '('
. PMA_Util::backquote($F1) . ')';
if ($on_delete != 'nix') {
$upd_query .= ' ON DELETE ' . $on_delete;
}
if ($on_update != 'nix') {
$upd_query .= ' ON UPDATE ' . $on_update;
}
$upd_query .= ';';
if ($GLOBALS['dbi']->tryQuery($upd_query)) {
return array(true, __('FOREIGN KEY relation has been added.'));
}
return array(false, __('Error: Relation could not be added!'));
}
} else { // internal (pmadb) relation
if ($GLOBALS['cfgRelation']['relwork'] == false) {
return array(false, __('Error: Relational features are disabled!'));
} else {
// no need to recheck if the keys are primary or unique at this point,
// this was checked on the interface part
$q = 'INSERT INTO '
. PMA_Util::backquote($GLOBALS['cfgRelation']['db'])
. '.' . PMA_Util::backquote($GLOBALS['cfgRelation']['relation'])
. '(master_db, master_table, master_field,'
. 'foreign_db, foreign_table, foreign_field)'
. ' values('
. '\'' . PMA_Util::sqlAddSlashes($db) . '\', '
. '\'' . PMA_Util::sqlAddSlashes($T2) . '\', '
. '\'' . PMA_Util::sqlAddSlashes($F2) . '\', '
. '\'' . PMA_Util::sqlAddSlashes($db) . '\', '
. '\'' . PMA_Util::sqlAddSlashes($T1) . '\','
. '\'' . PMA_Util::sqlAddSlashes($F1) . '\')';
if (PMA_queryAsControlUser($q, false, PMA_DatabaseInterface::QUERY_STORE)) {
return array(true, __('Internal relation has been added.'));
} else {
return array(false, __('Error: Relation could not be added!'));
}
}
}
}
/**
* Removes a foreign relation
*
* @param string $T1 foreign db.table
* @param string $F1 foreign field
* @param string $T2 master db.table
* @param string $F2 master field
*
* @return void
*/
function PMA_removeRelation($T1, $F1, $T2, $F2)
{
list($DB1, $T1) = explode(".", $T1);
list($DB2, $T2) = explode(".", $T2);
$tables = $GLOBALS['dbi']->getTablesFull($DB1, $T1);
$type_T1 = strtoupper($tables[$T1]['ENGINE']);
$tables = $GLOBALS['dbi']->getTablesFull($DB2, $T2);
$type_T2 = strtoupper($tables[$T2]['ENGINE']);
$try_to_delete_internal_relation = false;
if (PMA_Util::isForeignKeySupported($type_T1)
&& PMA_Util::isForeignKeySupported($type_T2)
&& $type_T1 == $type_T2
) {
// InnoDB
$existrel_foreign = PMA_getForeigners($DB2, $T2, '', 'foreign');
$foreigner = PMA_searchColumnInForeigners($existrel_foreign, $F2);
if (isset($foreigner['constraint'])) {
$upd_query = 'ALTER TABLE ' . PMA_Util::backquote($DB2)
. '.' . PMA_Util::backquote($T2) . ' DROP FOREIGN KEY '
. PMA_Util::backquote($foreigner['constraint'])
. ';';
$upd_rs = $GLOBALS['dbi']->query($upd_query);
} else {
// there can be an internal relation even if InnoDB
$try_to_delete_internal_relation = true;
}
} else {
$try_to_delete_internal_relation = true;
}
if ($try_to_delete_internal_relation) {
// internal relations
PMA_queryAsControlUser(
'DELETE FROM '
. PMA_Util::backquote($GLOBALS['cfgRelation']['db']) . '.'
. $GLOBALS['cfgRelation']['relation'] . ' WHERE '
. 'master_db = \'' . PMA_Util::sqlAddSlashes($DB2) . '\''
. ' AND master_table = \'' . PMA_Util::sqlAddSlashes($T2) . '\''
. ' AND master_field = \'' . PMA_Util::sqlAddSlashes($F2) . '\''
. ' AND foreign_db = \'' . PMA_Util::sqlAddSlashes($DB1) . '\''
. ' AND foreign_table = \'' . PMA_Util::sqlAddSlashes($T1) . '\''
. ' AND foreign_field = \'' . PMA_Util::sqlAddSlashes($F1) . '\'',
false,
PMA_DatabaseInterface::QUERY_STORE
);
}
}
?>

View File

@ -767,7 +767,7 @@ function PMA_sendHtmlForTableDropdownList()
/**
* Function to handle update for display field
*
* @param string $disp field name
* @param string $disp current display field
* @param string $display_field display field
* @param string $db current database
* @param string $table current table
@ -789,7 +789,7 @@ function PMA_handleUpdateForDisplayField($disp, $display_field, $db, $table,
/**
* Function to get display query for handlingdisplay update
*
* @param string $disp field name
* @param string $disp current display field
* @param string $display_field display field
* @param string $db current database
* @param string $table current table

View File

@ -1,63 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Handles the display field
*
* @package PhpMyAdmin-Designer
*/
/**
*
*/
require_once './libraries/common.inc.php';
PMA_Response::getInstance()->disable();
require_once 'libraries/pmd_common.php';
$table = $_POST['T'];
$display_field = $_POST['F'];
if ($cfgRelation['displaywork']) {
$disp = PMA_getDisplayField($db, $table);
if ($disp) {
if ($display_field != $disp) {
$upd_query = 'UPDATE '
. PMA_Util::backquote($GLOBALS['cfgRelation']['db'])
. '.'
. PMA_Util::backquote($cfgRelation['table_info'])
. ' SET display_field = \''
. PMA_Util::sqlAddSlashes($display_field) . '\''
. ' WHERE db_name = \'' . PMA_Util::sqlAddSlashes($db) . '\''
. ' AND table_name = \'' . PMA_Util::sqlAddSlashes($table) . '\'';
} else {
$upd_query = 'DELETE FROM '
. PMA_Util::backquote($GLOBALS['cfgRelation']['db'])
. '.'
. PMA_Util::backquote($cfgRelation['table_info'])
. ' WHERE db_name = \'' . PMA_Util::sqlAddSlashes($db) . '\''
. ' AND table_name = \'' . PMA_Util::sqlAddSlashes($table) . '\'';
}
} elseif ($display_field != '') {
$upd_query = 'INSERT INTO '
. PMA_Util::backquote($GLOBALS['cfgRelation']['db'])
. '.'
. PMA_Util::backquote($cfgRelation['table_info'])
. '(db_name, table_name, display_field) '
. ' VALUES('
. '\'' . PMA_Util::sqlAddSlashes($db) . '\','
. '\'' . PMA_Util::sqlAddSlashes($table) . '\','
. '\'' . PMA_Util::sqlAddSlashes($display_field) . '\')';
}
if (isset($upd_query)) {
$upd_rs = PMA_queryAsControlUser($upd_query);
}
} // end if
header("Content-Type: text/xml; charset=utf-8");
header("Cache-Control: no-cache");
die("<root act='save_pos' return='"
. __('Modifications have been saved') . "'></root>");
?>

View File

@ -1,134 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* PMD handler for creating new relation
*
* @package PhpMyAdmin-Designer
*/
/**
*
*/
require_once './libraries/common.inc.php';
PMA_Response::getInstance()->disable();
require_once 'libraries/pmd_common.php';
$die_save_pos = 0;
require_once 'pmd_save_pos.php';
extract($_POST, EXTR_SKIP);
$tables = $GLOBALS['dbi']->getTablesFull($db, $T1);
$type_T1 = strtoupper($tables[$T1]['ENGINE']);
$tables = $GLOBALS['dbi']->getTablesFull($db, $T2);
$type_T2 = strtoupper($tables[$T2]['ENGINE']);
// native foreign key
if (PMA_Util::isForeignKeySupported($type_T1)
&& PMA_Util::isForeignKeySupported($type_T2)
&& $type_T1 == $type_T2
) {
// relation exists?
$existrel_foreign = PMA_getForeigners($db, $T2, '', 'foreign');
$foreigner = PMA_searchColumnInForeigners($existrel_foreign, $F2);
if ($foreigner
&& isset($foreigner['constraint'])
) {
PMD_Return_new(0, __('Error: relation already exists.'));
}
// note: in InnoDB, the index does not requires to be on a PRIMARY
// or UNIQUE key
// improve: check all other requirements for InnoDB relations
$result = $GLOBALS['dbi']->query(
'SHOW INDEX FROM ' . PMA_Util::backquote($db)
. '.' . PMA_Util::backquote($T1) . ';'
);
$index_array1 = array(); // will be use to emphasis prim. keys in the table view
while ($row = $GLOBALS['dbi']->fetchAssoc($result)) {
$index_array1[$row['Column_name']] = 1;
}
$GLOBALS['dbi']->freeResult($result);
$result = $GLOBALS['dbi']->query(
'SHOW INDEX FROM ' . PMA_Util::backquote($db)
. '.' . PMA_Util::backquote($T2) . ';'
);
// will be used to emphasis prim. keys in the table view
$index_array2 = array();
while ($row = $GLOBALS['dbi']->fetchAssoc($result)) {
$index_array2[$row['Column_name']] = 1;
}
$GLOBALS['dbi']->freeResult($result);
if (! empty($index_array1[$F1]) && ! empty($index_array2[$F2])) {
$upd_query = 'ALTER TABLE ' . PMA_Util::backquote($db)
. '.' . PMA_Util::backquote($T2)
. ' ADD FOREIGN KEY ('
. PMA_Util::backquote($F2) . ')'
. ' REFERENCES '
. PMA_Util::backquote($db) . '.'
. PMA_Util::backquote($T1) . '('
. PMA_Util::backquote($F1) . ')';
if ($on_delete != 'nix') {
$upd_query .= ' ON DELETE ' . $on_delete;
}
if ($on_update != 'nix') {
$upd_query .= ' ON UPDATE ' . $on_update;
}
$upd_query .= ';';
$GLOBALS['dbi']->tryQuery($upd_query)
|| PMD_Return_new(0, __('Error: Relation could not be added!'));
PMD_Return_new(1, __('FOREIGN KEY relation has been added.'));
}
} else { // internal (pmadb) relation
if ($GLOBALS['cfgRelation']['relwork'] == false) {
PMD_Return_new(0, __('Error: Relational features are disabled!'));
} else {
// no need to recheck if the keys are primary or unique at this point,
// this was checked on the interface part
$q = 'INSERT INTO '
. PMA_Util::backquote($GLOBALS['cfgRelation']['db'])
. '.' . PMA_Util::backquote($cfgRelation['relation'])
. '(master_db, master_table, master_field,'
. 'foreign_db, foreign_table, foreign_field)'
. ' values('
. '\'' . PMA_Util::sqlAddSlashes($db) . '\', '
. '\'' . PMA_Util::sqlAddSlashes($T2) . '\', '
. '\'' . PMA_Util::sqlAddSlashes($F2) . '\', '
. '\'' . PMA_Util::sqlAddSlashes($db) . '\', '
. '\'' . PMA_Util::sqlAddSlashes($T1) . '\','
. '\'' . PMA_Util::sqlAddSlashes($F1) . '\')';
if (PMA_queryAsControlUser($q, false, PMA_DatabaseInterface::QUERY_STORE)) {
PMD_Return_new(1, __('Internal relation has been added.'));
} else {
PMD_Return_new(0, __('Error: Relation could not be added!'));
}
}
}
/**
* Send xml
*
* @param string $b Value of attribute "b"
* @param string $ret Value of attribute "return"
*
* @return void
*/
function PMD_Return_new($b,$ret)
{
global $db,$T1,$F1,$T2,$F2;
header("Content-Type: text/xml; charset=utf-8");
header("Cache-Control: no-cache");
die('<root act="relation_new" return="' . $ret . '" b="' . $b .
'" DB1="' . urlencode($db) .
'" T1="' . urlencode($T1) .
'" F1="' . urlencode($F1) .
'" DB2="' . urlencode($db) .
'" T2="' . urlencode($T2) .
'" F2="' . urlencode($F2) .
'"></root>');
}
?>

View File

@ -1,70 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* PMD relation update handler
*
* @package PhpMyAdmin-Designer
*/
/**
*
*/
require_once './libraries/common.inc.php';
PMA_Response::getInstance()->disable();
require_once 'libraries/pmd_common.php';
extract($_POST, EXTR_SKIP);
extract($_GET, EXTR_SKIP);
$die_save_pos = 0;
require_once 'pmd_save_pos.php';
list($DB1, $T1) = explode(".", $T1);
list($DB2, $T2) = explode(".", $T2);
$tables = $GLOBALS['dbi']->getTablesFull($db, $T1);
$type_T1 = strtoupper($tables[$T1]['ENGINE']);
$tables = $GLOBALS['dbi']->getTablesFull($db, $T2);
$type_T2 = strtoupper($tables[$T2]['ENGINE']);
$try_to_delete_internal_relation = false;
if (PMA_Util::isForeignKeySupported($type_T1)
&& PMA_Util::isForeignKeySupported($type_T2)
&& $type_T1 == $type_T2
) {
// InnoDB
$existrel_foreign = PMA_getForeigners($DB2, $T2, '', 'foreign');
$foreigner = PMA_searchColumnInForeigners($existrel_foreign, $F2);
if (isset($foreigner['constraint'])) {
$upd_query = 'ALTER TABLE ' . PMA_Util::backquote($DB2)
. '.' . PMA_Util::backquote($T2) . ' DROP FOREIGN KEY '
. PMA_Util::backquote($foreigner['constraint'])
. ';';
$upd_rs = $GLOBALS['dbi']->query($upd_query);
} else {
// there can be an internal relation even if InnoDB
$try_to_delete_internal_relation = true;
}
} else {
$try_to_delete_internal_relation = true;
}
if ($try_to_delete_internal_relation) {
// internal relations
PMA_queryAsControlUser(
'DELETE FROM '
. PMA_Util::backquote($GLOBALS['cfgRelation']['db']) . '.'
. $cfg['Server']['relation'] . ' WHERE '
. 'master_db = \'' . PMA_Util::sqlAddSlashes($DB2) . '\''
. ' AND master_table = \'' . PMA_Util::sqlAddSlashes($T2) . '\''
. ' AND master_field = \'' . PMA_Util::sqlAddSlashes($F2) . '\''
. ' AND foreign_db = \'' . PMA_Util::sqlAddSlashes($DB1) . '\''
. ' AND foreign_table = \'' . PMA_Util::sqlAddSlashes($T1) . '\''
. ' AND foreign_field = \'' . PMA_Util::sqlAddSlashes($F1) . '\'',
false,
PMA_DatabaseInterface::QUERY_STORE
);
}
PMA_returnUpd(1, __('Relation deleted'));
?>

View File

@ -1,63 +0,0 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Save handler for PMD
*
* @package PhpMyAdmin-Designer
*/
/**
*
*/
require_once './libraries/common.inc.php';
require_once 'libraries/pmd_common.php';
$cfgRelation = PMA_getRelationsParam();
if (! $cfgRelation['pdfwork']) {
PMD_errorSave();
}
/**
* Sets globals from $_POST
*/
$post_params = array(
'die_save_pos',
);
foreach ($post_params as $one_post_param) {
if (isset($_POST[$one_post_param])) {
$GLOBALS[$one_post_param] = $_POST[$one_post_param];
}
}
if (isset($_REQUEST['selected_page'])) {
PMA_saveTablePositions($_REQUEST['selected_page']);
}
/**
* Error handler
*
* @return void
*/
function PMD_errorSave()
{
global $die_save_pos; // if this file included
if (! empty($die_save_pos)) {
header("Content-Type: text/xml; charset=utf-8");
header("Cache-Control: no-cache");
die(
'<root act="save_pos" return="'
. __('Error saving coordinates for Designer.')
. '"></root>'
);
}
}
if (! empty($die_save_pos)) {
header("Content-Type: text/xml; charset=utf-8");
header("Cache-Control: no-cache");
echo '<root act="save_pos" return="'
. __('Modifications have been saved') . '"></root>';
}
?>

View File

@ -1,13 +1,13 @@
<?php
/**
* Tests for libraries/designer.lib.php
* Tests for libraries/db_designer.lib.php
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/designer.lib.php';
require_once 'libraries/db_designer.lib.php';
require_once 'libraries/database_interface.inc.php';
require_once 'libraries/Util.class.php';
@ -16,7 +16,7 @@ require_once 'libraries/url_generating.lib.php';
require_once 'libraries/relation.lib.php';
/**
* Tests for libraries/designer.lib.php
* Tests for libraries/db_designer.lib.php
*
* @package PhpMyAdmin-test
*/
@ -151,7 +151,7 @@ class PMA_DesginerTest extends PHPUnit_Framework_TestCase
$result = PMA_getHtmlForPageSaveAs($db);
$this->assertContains(
'<input type="hidden" name="operation" value="save" />',
'<input type="hidden" name="operation" value="savePage" />',
$result
);
$this->assertContains(