| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308 | 
							- <?php
 
- /* vim: set expandtab sw=4 ts=4 sts=4: */
 
- /**
 
-  * handles miscellaneous db operations:
 
-  *  - move/rename
 
-  *  - copy
 
-  *  - changing collation
 
-  *  - changing comment
 
-  *  - adding tables
 
-  *  - viewing PDF schemas
 
-  *
 
-  * @package PhpMyAdmin
 
-  */
 
- use PhpMyAdmin\DatabaseInterface;
 
- use PhpMyAdmin\Display\CreateTable;
 
- use PhpMyAdmin\Message;
 
- use PhpMyAdmin\Operations;
 
- use PhpMyAdmin\Plugins;
 
- use PhpMyAdmin\Plugins\Export\ExportSql;
 
- use PhpMyAdmin\Relation;
 
- use PhpMyAdmin\RelationCleanup;
 
- use PhpMyAdmin\Response;
 
- use PhpMyAdmin\Util;
 
- /**
 
-  * requirements
 
-  */
 
- require_once 'libraries/common.inc.php';
 
- /**
 
-  * functions implementation for this script
 
-  */
 
- require_once 'libraries/check_user_privileges.inc.php';
 
- // add a javascript file for jQuery functions to handle Ajax actions
 
- $response = Response::getInstance();
 
- $header = $response->getHeader();
 
- $scripts = $header->getScripts();
 
- $scripts->addFile('db_operations.js');
 
- $sql_query = '';
 
- $operations = new Operations();
 
- /**
 
-  * Rename/move or copy database
 
-  */
 
- if (strlen($GLOBALS['db']) > 0
 
-     && (! empty($_POST['db_rename']) || ! empty($_POST['db_copy']))
 
- ) {
 
-     if (! empty($_POST['db_rename'])) {
 
-         $move = true;
 
-     } else {
 
-         $move = false;
 
-     }
 
-     if (! isset($_POST['newname']) || strlen($_POST['newname']) === 0) {
 
-         $message = Message::error(__('The database name is empty!'));
 
-     } else {
 
-         // lower_case_table_names=1 `DB` becomes `db`
 
-         if ($GLOBALS['dbi']->getLowerCaseNames() === '1') {
 
-             $_POST['newname'] = mb_strtolower(
 
-                 $_POST['newname']
 
-             );
 
-         }
 
-         if ($_POST['newname'] === $_REQUEST['db']) {
 
-             $message = Message::error(
 
-                 __('Cannot copy database to the same name. Change the name and try again.')
 
-             );
 
-         } else {
 
-             $_error = false;
 
-             if ($move || ! empty($_POST['create_database_before_copying'])) {
 
-                 $operations->createDbBeforeCopy();
 
-             }
 
-             // here I don't use DELIMITER because it's not part of the
 
-             // language; I have to send each statement one by one
 
-             // to avoid selecting alternatively the current and new db
 
-             // we would need to modify the CREATE definitions to qualify
 
-             // the db name
 
-             $operations->runProcedureAndFunctionDefinitions($GLOBALS['db']);
 
-             // go back to current db, just in case
 
-             $GLOBALS['dbi']->selectDb($GLOBALS['db']);
 
-             $tables_full = $GLOBALS['dbi']->getTablesFull($GLOBALS['db']);
 
-             // remove all foreign key constraints, otherwise we can get errors
 
-             /* @var $export_sql_plugin ExportSql */
 
-             $export_sql_plugin = Plugins::getPlugin(
 
-                 "export",
 
-                 "sql",
 
-                 'libraries/classes/Plugins/Export/',
 
-                 array(
 
-                     'single_table' => isset($single_table),
 
-                     'export_type'  => 'database'
 
-                 )
 
-             );
 
-             // create stand-in tables for views
 
-             $views = $operations->getViewsAndCreateSqlViewStandIn(
 
-                 $tables_full, $export_sql_plugin, $GLOBALS['db']
 
-             );
 
-             // copy tables
 
-             $sqlConstratints = $operations->copyTables(
 
-                 $tables_full, $move, $GLOBALS['db']
 
-             );
 
-             // handle the views
 
-             if (! $_error) {
 
-                 $operations->handleTheViews($views, $move, $GLOBALS['db']);
 
-             }
 
-             unset($views);
 
-             // now that all tables exist, create all the accumulated constraints
 
-             if (! $_error && count($sqlConstratints) > 0) {
 
-                 $operations->createAllAccumulatedConstraints($sqlConstratints);
 
-             }
 
-             unset($sqlConstratints);
 
-             if ($GLOBALS['dbi']->getVersion() >= 50100) {
 
-                 // here DELIMITER is not used because it's not part of the
 
-                 // language; each statement is sent one by one
 
-                 $operations->runEventDefinitionsForDb($GLOBALS['db']);
 
-             }
 
-             // go back to current db, just in case
 
-             $GLOBALS['dbi']->selectDb($GLOBALS['db']);
 
-             // Duplicate the bookmarks for this db (done once for each db)
 
-             $operations->duplicateBookmarks($_error, $GLOBALS['db']);
 
-             if (! $_error && $move) {
 
-                 if (isset($_POST['adjust_privileges'])
 
-                     && ! empty($_POST['adjust_privileges'])
 
-                 ) {
 
-                     $operations->adjustPrivilegesMoveDb($GLOBALS['db'], $_POST['newname']);
 
-                 }
 
-                 /**
 
-                  * cleanup pmadb stuff for this db
 
-                  */
 
-                 RelationCleanup::database($GLOBALS['db']);
 
-                 // if someday the RENAME DATABASE reappears, do not DROP
 
-                 $local_query = 'DROP DATABASE '
 
-                     . Util::backquote($GLOBALS['db']) . ';';
 
-                 $sql_query .= "\n" . $local_query;
 
-                 $GLOBALS['dbi']->query($local_query);
 
-                 $message = Message::success(
 
-                     __('Database %1$s has been renamed to %2$s.')
 
-                 );
 
-                 $message->addParam($GLOBALS['db']);
 
-                 $message->addParam($_POST['newname']);
 
-             } elseif (! $_error) {
 
-                 if (isset($_POST['adjust_privileges'])
 
-                     && ! empty($_POST['adjust_privileges'])
 
-                 ) {
 
-                     $operations->adjustPrivilegesCopyDb($GLOBALS['db'], $_POST['newname']);
 
-                 }
 
-                 $message = Message::success(
 
-                     __('Database %1$s has been copied to %2$s.')
 
-                 );
 
-                 $message->addParam($GLOBALS['db']);
 
-                 $message->addParam($_POST['newname']);
 
-             } else {
 
-                 $message = Message::error();
 
-             }
 
-             $reload     = true;
 
-             /* Change database to be used */
 
-             if (! $_error && $move) {
 
-                 $GLOBALS['db'] = $_POST['newname'];
 
-             } elseif (! $_error) {
 
-                 if (isset($_POST['switch_to_new'])
 
-                     && $_POST['switch_to_new'] == 'true'
 
-                 ) {
 
-                     $_SESSION['pma_switch_to_new'] = true;
 
-                     $GLOBALS['db'] = $_POST['newname'];
 
-                 } else {
 
-                     $_SESSION['pma_switch_to_new'] = false;
 
-                 }
 
-             }
 
-         }
 
-     }
 
-     /**
 
-      * Database has been successfully renamed/moved.  If in an Ajax request,
 
-      * generate the output with {@link PhpMyAdmin\Response} and exit
 
-      */
 
-     if ($response->isAjax()) {
 
-         $response->setRequestStatus($message->isSuccess());
 
-         $response->addJSON('message', $message);
 
-         $response->addJSON('newname', $_POST['newname']);
 
-         $response->addJSON(
 
-             'sql_query',
 
-             Util::getMessage(null, $sql_query)
 
-         );
 
-         $response->addJSON('db', $GLOBALS['db']);
 
-         exit;
 
-     }
 
- }
 
- /**
 
-  * Settings for relations stuff
 
-  */
 
- $relation = new Relation();
 
- $cfgRelation = $relation->getRelationsParam();
 
- /**
 
-  * Check if comments were updated
 
-  * (must be done before displaying the menu tabs)
 
-  */
 
- if (isset($_POST['comment'])) {
 
-     $relation->setDbComment($GLOBALS['db'], $_POST['comment']);
 
- }
 
- require 'libraries/db_common.inc.php';
 
- $url_query .= '&goto=db_operations.php';
 
- // Gets the database structure
 
- $sub_part = '_structure';
 
- list(
 
-     $tables,
 
-     $num_tables,
 
-     $total_num_tables,
 
-     $sub_part,
 
-     $is_show_stats,
 
-     $db_is_system_schema,
 
-     $tooltip_truename,
 
-     $tooltip_aliasname,
 
-     $pos
 
- ) = Util::getDbInfo($db, isset($sub_part) ? $sub_part : '');
 
- echo "\n";
 
- if (isset($message)) {
 
-     echo Util::getMessage($message, $sql_query);
 
-     unset($message);
 
- }
 
- $db_collation = $GLOBALS['dbi']->getDbCollation($GLOBALS['db']);
 
- $is_information_schema = $GLOBALS['dbi']->isSystemSchema($GLOBALS['db']);
 
- if (!$is_information_schema) {
 
-     if ($cfgRelation['commwork']) {
 
-         /**
 
-          * database comment
 
-          */
 
-         $response->addHTML($operations->getHtmlForDatabaseComment($GLOBALS['db']));
 
-     }
 
-     $response->addHTML('<div>');
 
-     $response->addHTML(CreateTable::getHtml($db));
 
-     $response->addHTML('</div>');
 
-     /**
 
-      * rename database
 
-      */
 
-     if ($GLOBALS['db'] != 'mysql') {
 
-         $response->addHTML($operations->getHtmlForRenameDatabase($GLOBALS['db'], $db_collation));
 
-     }
 
-     // Drop link if allowed
 
-     // Don't even try to drop information_schema.
 
-     // You won't be able to. Believe me. You won't.
 
-     // Don't allow to easily drop mysql database, RFE #1327514.
 
-     if (($GLOBALS['dbi']->isSuperuser() || $GLOBALS['cfg']['AllowUserDropDatabase'])
 
-         && ! $db_is_system_schema
 
-         && $GLOBALS['db'] != 'mysql'
 
-     ) {
 
-         $response->addHTML($operations->getHtmlForDropDatabaseLink($GLOBALS['db']));
 
-     }
 
-     /**
 
-      * Copy database
 
-      */
 
-     $response->addHTML($operations->getHtmlForCopyDatabase($GLOBALS['db'], $db_collation));
 
-     /**
 
-      * Change database charset
 
-      */
 
-     $response->addHTML($operations->getHtmlForChangeDatabaseCharset($GLOBALS['db'], $db_collation));
 
-     if (! $cfgRelation['allworks']
 
-         && $cfg['PmaNoRelation_DisableWarning'] == false
 
-     ) {
 
-         $message = Message::notice(
 
-             __(
 
-                 'The phpMyAdmin configuration storage has been deactivated. ' .
 
-                 '%sFind out why%s.'
 
-             )
 
-         );
 
-         $message->addParamHtml('<a href="./chk_rel.php" data-post="' . $url_query . '">');
 
-         $message->addParamHtml('</a>');
 
-         /* Show error if user has configured something, notice elsewhere */
 
-         if (!empty($cfg['Servers'][$server]['pmadb'])) {
 
-             $message->isError(true);
 
-         }
 
-     } // end if
 
- } // end if (!$is_information_schema)
 
 
  |