123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- <?php
- /* vim: set expandtab sw=4 ts=4 sts=4: */
- /**
- * Display table relations for viewing and editing
- *
- * includes phpMyAdmin relations and InnoDB relations
- *
- * @todo fix name handling: currently names with dots (.) are not properly handled
- * for internal relations (but foreign keys relations are correct)
- * @todo foreign key constraints require both fields being of equal type and size
- * @todo check foreign fields to be from same type and size, all other makes no sense
- * @todo if above todos are fullfilled we can add all fields meet requirements
- * in the select dropdown
- * @package PhpMyAdmin
- */
- /**
- * Gets some core libraries
- */
- require_once 'libraries/common.inc.php';
- require_once 'libraries/index.lib.php';
- require_once 'libraries/tbl_relation.lib.php';
- $response = PMA_Response::getInstance();
- // Send table of column names to populate corresponding dropdowns depending
- // on the current selection
- if (isset($_REQUEST['getDropdownValues'])
- && $_REQUEST['getDropdownValues'] === 'true'
- ) {
- PMA_sendHtmlForTableOrColumnDropdownList();
- }
- $header = $response->getHeader();
- $scripts = $header->getScripts();
- $scripts->addFile('tbl_relation.js');
- $scripts->addFile('indexes.js');
- /**
- * Sets globals from $_POST
- */
- $post_params = array(
- 'destination_foreign_db',
- 'destination_foreign_table',
- 'destination_foreign_column',
- 'display_field',
- 'fields_name',
- 'on_delete',
- 'on_update'
- );
- foreach ($post_params as $one_post_param) {
- if (isset($_POST[$one_post_param])) {
- $GLOBALS[$one_post_param] = $_POST[$one_post_param];
- }
- }
- /**
- * Gets tables informations
- */
- require_once 'libraries/tbl_info.inc.php';
- $options_array = array(
- 'CASCADE' => 'CASCADE',
- 'SET_NULL' => 'SET NULL',
- 'NO_ACTION' => 'NO ACTION',
- 'RESTRICT' => 'RESTRICT',
- );
- /**
- * Gets the relation settings
- */
- $cfgRelation = PMA_getRelationsParam();
- /**
- * Updates
- */
- if ($cfgRelation['relwork']) {
- $existrel = PMA_getForeigners($db, $table, '', 'internal');
- }
- if (PMA_Util::isForeignKeySupported($tbl_storage_engine)) {
- $existrel_foreign = PMA_getForeigners($db, $table, '', 'foreign');
- }
- if ($cfgRelation['displaywork']) {
- $disp = PMA_getDisplayField($db, $table);
- }
- // will be used in the logic for internal relations and foreign keys:
- $multi_edit_columns_name = isset($_REQUEST['fields_name'])
- ? $_REQUEST['fields_name']
- : null;
- // u p d a t e s f o r I n t e r n a l r e l a t i o n s
- if (isset($_POST['destination_db']) && $cfgRelation['relwork']) {
- PMA_handleUpdatesForInternalRelations(
- $_POST['destination_db'], $multi_edit_columns_name,
- $_POST['destination_table'],
- $_POST['destination_column'], $cfgRelation, $db, $table,
- isset($existrel) ? $existrel : null
- );
- } // end if (updates for internal relations)
- $html_output = '';
- // u p d a t e s f o r f o r e i g n k e y s
- // (for now, one index name only; we keep the definitions if the
- // foreign db is not the same)
- if (isset($destination_foreign_db)) {
- $html_output .= PMA_handleUpdatesForForeignKeys(
- $destination_foreign_db,
- $multi_edit_columns_name, $destination_foreign_table,
- $destination_foreign_column, $options_array, $table,
- isset($existrel_foreign) ? $existrel_foreign : null
- );
- } // end if isset($destination_foreign)
- // U p d a t e s f o r d i s p l a y f i e l d
- if ($cfgRelation['displaywork'] && isset($display_field)) {
- PMA_handleUpdateForDisplayField(
- $disp, $display_field, $db, $table, $cfgRelation
- );
- } // end if
- // If we did an update, refresh our data
- if (isset($_POST['destination_db']) && $cfgRelation['relwork']) {
- $existrel = PMA_getForeigners($db, $table, '', 'internal');
- }
- if (isset($destination_foreign_db)
- && PMA_Util::isForeignKeySupported($tbl_storage_engine)
- ) {
- $existrel_foreign = PMA_getForeigners($db, $table, '', 'foreign');
- }
- if ($cfgRelation['displaywork']) {
- $disp = PMA_getDisplayField($db, $table);
- }
- /**
- * Dialog
- */
- // Now find out the columns of our $table
- // need to use PMA_DatabaseInterface::QUERY_STORE with $GLOBALS['dbi']->numRows()
- // in mysqli
- $columns = $GLOBALS['dbi']->getColumns($db, $table);
- // common form
- $html_output .= PMA_getHtmlForCommonForm(
- $db, $table, $columns, $cfgRelation, $tbl_storage_engine, $existrel,
- isset($existrel_foreign) ? $existrel_foreign : null, $options_array
- );
- if (PMA_Util::isForeignKeySupported($tbl_storage_engine)) {
- $html_output .= PMA_getHtmlForDisplayIndexes();
- }
- // Render HTML output
- PMA_Response::getInstance()->addHTML($html_output);
- ?>
|