/** * Renders the navigation tree, or part of it * * @return string The navigation tree */ public function getDisplay() { /* Init */ $retval = ''; if (!PMA_Response::getInstance()->isAjax()) { $header = new PMA_NavigationHeader(); $retval = $header->getDisplay(); } $tree = new PMA_NavigationTree(); if (!PMA_Response::getInstance()->isAjax() || !empty($_REQUEST['full']) || !empty($_REQUEST['reload'])) { $treeRender = $tree->renderState(); } else { $treeRender = $tree->renderPath(); } if (!$treeRender) { $retval .= PMA_Message::error(__('An error has occurred while loading the navigation tree'))->getDisplay(); } else { $retval .= $treeRender; } if (!PMA_Response::getInstance()->isAjax()) { // closes the tags that were opened by the navigation header $retval .= '</div>'; $retval .= '</div>'; $retval .= $this->_getDropHandler(); $retval .= '</div>'; } return $retval; }
/** * Displays authentication form * * @global string the font face to use in case of failure * @global string the default font size to use in case of failure * @global string the big font size to use in case of failure * * @return boolean always true (no return indeed) * * @access public */ function PMA_auth() { /* Perform logout to custom URL */ if (!empty($_REQUEST['old_usr']) && !empty($GLOBALS['cfg']['Server']['LogoutURL'])) { PMA_sendHeaderLocation($GLOBALS['cfg']['Server']['LogoutURL']); exit; } if (empty($GLOBALS['cfg']['Server']['auth_http_realm'])) { if (empty($GLOBALS['cfg']['Server']['verbose'])) { $server_message = $GLOBALS['cfg']['Server']['host']; } else { $server_message = $GLOBALS['cfg']['Server']['verbose']; } $realm_message = 'phpMyAdmin ' . $server_message; } else { $realm_message = $GLOBALS['cfg']['Server']['auth_http_realm']; } // remove non US-ASCII to respect RFC2616 $realm_message = preg_replace('/[^\\x20-\\x7e]/i', '', $realm_message); header('WWW-Authenticate: Basic realm="' . $realm_message . '"'); header('HTTP/1.0 401 Unauthorized'); if (php_sapi_name() !== 'cgi-fcgi') { header('status: 401 Unauthorized'); } // Defines the charset to be used header('Content-Type: text/html; charset=utf-8'); /* HTML header */ $page_title = __('Access denied'); include './libraries/header_meta_style.inc.php'; ?> </head> <body> <?php if (file_exists(CUSTOM_HEADER_FILE)) { include CUSTOM_HEADER_FILE; } ?> <br /><br /> <center> <h1><?php echo sprintf(__('Welcome to %s'), ' phpMyAdmin'); ?> </h1> </center> <br /> <?php PMA_Message::error(__('Wrong username/password. Access denied.'))->display(); if (file_exists(CUSTOM_FOOTER_FILE)) { include CUSTOM_FOOTER_FILE; } ?> </body> </html> <?php exit; }
/** * Handles the whole import logic * * @return void */ public function doImport() { global $finished, $import_file, $compression, $charset_conversion, $table; global $ldi_local_option, $ldi_replace, $ldi_ignore, $ldi_terminated, $ldi_enclosed, $ldi_escaped, $ldi_new_line, $skip_queries, $ldi_columns; if ($import_file == 'none' || $compression != 'none' || $charset_conversion) { // We handle only some kind of data! $GLOBALS['message'] = PMA_Message::error(__('This plugin does not support compressed imports!')); $GLOBALS['error'] = true; return; } $sql = 'LOAD DATA'; if (isset($ldi_local_option)) { $sql .= ' LOCAL'; } $sql .= ' INFILE \'' . PMA_Util::sqlAddSlashes($import_file) . '\''; if (isset($ldi_replace)) { $sql .= ' REPLACE'; } elseif (isset($ldi_ignore)) { $sql .= ' IGNORE'; } $sql .= ' INTO TABLE ' . PMA_Util::backquote($table); if (strlen($ldi_terminated) > 0) { $sql .= ' FIELDS TERMINATED BY \'' . $ldi_terminated . '\''; } if (strlen($ldi_enclosed) > 0) { $sql .= ' ENCLOSED BY \'' . PMA_Util::sqlAddSlashes($ldi_enclosed) . '\''; } if (strlen($ldi_escaped) > 0) { $sql .= ' ESCAPED BY \'' . PMA_Util::sqlAddSlashes($ldi_escaped) . '\''; } if (strlen($ldi_new_line) > 0) { if ($ldi_new_line == 'auto') { $ldi_new_line = PMA_Util::whichCrlf() == "\n" ? '\\n' : '\\r\\n'; } $sql .= ' LINES TERMINATED BY \'' . $ldi_new_line . '\''; } if ($skip_queries > 0) { $sql .= ' IGNORE ' . $skip_queries . ' LINES'; $skip_queries = 0; } if (strlen($ldi_columns) > 0) { $sql .= ' ('; $tmp = preg_split('/,( ?)/', $ldi_columns); $cnt_tmp = count($tmp); for ($i = 0; $i < $cnt_tmp; $i++) { if ($i > 0) { $sql .= ', '; } /* Trim also `, if user already included backquoted fields */ $sql .= PMA_Util::backquote(trim($tmp[$i], " \t\r\n\v`")); } // end for $sql .= ')'; } PMA_importRunQuery($sql, $sql); PMA_importRunQuery(); $finished = true; }
/** * 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 */ /* @var $export_list SchemaPlugin[] */ $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(); } return PMA\Template::get('designer/schema_export')->render(array('db' => $db, 'page' => $page, 'export_list' => $export_list)); }
/** * Displays authentication form * * @global string the font face to use in case of failure * @global string the default font size to use in case of failure * @global string the big font size to use in case of failure * * @return boolean always true (no return indeed) * * @access public */ function PMA_auth() { /* Perform logout to custom URL */ if (!empty($_REQUEST['old_usr']) && !empty($GLOBALS['cfg']['Server']['LogoutURL'])) { PMA_sendHeaderLocation($GLOBALS['cfg']['Server']['LogoutURL']); exit; } if (empty($GLOBALS['cfg']['Server']['verbose'])) { $server_message = $GLOBALS['cfg']['Server']['host']; } else { $server_message = $GLOBALS['cfg']['Server']['verbose']; } // remove non US-ASCII to respect RFC2616 $server_message = preg_replace('/[^\\x20-\\x7e]/i', '', $server_message); header('WWW-Authenticate: Basic realm="phpMyAdmin ' . $server_message . '"'); header('HTTP/1.0 401 Unauthorized'); if (php_sapi_name() !== 'cgi-fcgi') { header('status: 401 Unauthorized'); } // Defines the charset to be used header('Content-Type: text/html; charset=' . $GLOBALS['charset']); /* HTML header */ $page_title = $GLOBALS['strAccessDenied']; require './libraries/header_meta_style.inc.php'; ?> </head> <body> <?php if (file_exists('./config.header.inc.php')) { require './config.header.inc.php'; } ?> <br /><br /> <center> <h1><?php echo sprintf($GLOBALS['strWelcome'], ' phpMyAdmin'); ?> </h1> </center> <br /> <?php PMA_Message::error('strWrongUser')->display(); if (file_exists('./config.footer.inc.php')) { require './config.footer.inc.php'; } ?> </body> </html> <?php exit; }
/** * Displays authentication form * * @global string the font face to use in case of failure * @global string the default font size to use in case of failure * @global string the big font size to use in case of failure * * @return boolean always true (no return indeed) */ public function auth() { /* Perform logout to custom URL */ if (!empty($_REQUEST['old_usr']) && !empty($GLOBALS['cfg']['Server']['LogoutURL'])) { PMA_sendHeaderLocation($GLOBALS['cfg']['Server']['LogoutURL']); if (!defined('TESTSUITE')) { exit; } else { return false; } } if (empty($GLOBALS['cfg']['Server']['auth_http_realm'])) { if (empty($GLOBALS['cfg']['Server']['verbose'])) { $server_message = $GLOBALS['cfg']['Server']['host']; } else { $server_message = $GLOBALS['cfg']['Server']['verbose']; } $realm_message = 'phpMyAdmin ' . $server_message; } else { $realm_message = $GLOBALS['cfg']['Server']['auth_http_realm']; } // remove non US-ASCII to respect RFC2616 $realm_message = preg_replace('/[^\\x20-\\x7e]/i', '', $realm_message); header('WWW-Authenticate: Basic realm="' . $realm_message . '"'); header('HTTP/1.0 401 Unauthorized'); if (php_sapi_name() !== 'cgi-fcgi') { header('status: 401 Unauthorized'); } /* HTML header */ $response = PMA_Response::getInstance(); $response->getFooter()->setMinimal(); $header = $response->getHeader(); $header->setTitle(__('Access denied!')); $header->disableMenu(); $header->setBodyId('loginform'); $response->addHTML('<h1>'); $response->addHTML(sprintf(__('Welcome to %s'), ' phpMyAdmin')); $response->addHTML('</h1>'); $response->addHTML('<h3>'); $response->addHTML(PMA_Message::error(__('Wrong username/password. Access denied.'))); $response->addHTML('</h3>'); if (file_exists(CUSTOM_FOOTER_FILE)) { include CUSTOM_FOOTER_FILE; } if (!defined('TESTSUITE')) { exit; } else { return false; } }
/** * Renders the navigation tree, or part of it * * @return string The navigation tree */ public function getDisplay() { /* Init */ $retval = ''; if (!PMA_Response::getInstance()->isAjax()) { $header = new PMA_NavigationHeader(); $retval = $header->getDisplay(); } $tree = new PMA_NavigationTree(); if (!PMA_Response::getInstance()->isAjax() || !empty($_REQUEST['full']) || !empty($_REQUEST['reload'])) { if ($GLOBALS['cfg']['ShowDatabasesNavigationAsTree']) { // provide database tree in navigation $navRender = $tree->renderState(); } else { // provide legacy pre-4.0 navigation $navRender = $tree->renderDbSelect(); } } else { $navRender = $tree->renderPath(); } if (!$navRender) { $retval .= PMA_Message::error(__('An error has occurred while loading the navigation display'))->getDisplay(); } else { $retval .= $navRender; } if (!PMA_Response::getInstance()->isAjax()) { // closes the tags that were opened by the navigation header $retval .= '</div>'; // pma_navigation_tree $retval .= '<div id="pma_navi_settings_container">'; if (!defined('PMA_DISABLE_NAVI_SETTINGS')) { $retval .= PMA_PageSettings::getNaviSettings(); } $retval .= '</div>'; //pma_navi_settings_container $retval .= '</div>'; // pma_navigation_content $retval .= $this->_getDropHandler(); $retval .= '</div>'; // pma_navigation } return $retval; }
*/ list($username, $hostname, $dbname, $tablename, $db_and_table, $dbname_is_wildcard) = PMA_getDataForDBInfo(); /** * Checks if the user is allowed to do what he tries to... */ if (!$GLOBALS['is_superuser'] && !$GLOBALS['is_grantuser'] && !$GLOBALS['is_createuser']) { $response->addHTML(PMA_getHtmlForSubPageHeader('privileges', '', false)); $response->addHTML(PMA_Message::error(__('No Privileges'))->getDisplay()); exit; } /** * Checks if the user is using "Change Login Information / Copy User" dialog * only to update the password */ if (isset($_REQUEST['change_copy']) && $username == $_REQUEST['old_username'] && $hostname == $_REQUEST['old_hostname']) { $response->addHTML(PMA_Message::error(__('Username and hostname didn\'t change.'))->getDisplay()); $response->isSuccess(false); exit; } /** * Changes / copies a user, part I */ list($queries, $password) = PMA_getDataForChangeOrCopyUser(); /** * Adds a user * (Changes / copies a user, part II) */ list($ret_message, $ret_queries, $queries_for_display, $sql_query, $_add_user_error) = PMA_addUser(isset($dbname) ? $dbname : null, isset($username) ? $username : null, isset($hostname) ? $hostname : null, isset($password) ? $password : null, $cfgRelation['menuswork']); //update the old variables if (isset($ret_queries)) { $queries = $ret_queries;
if ($use_sql) { /** * Parse and analyze the query */ include_once 'libraries/parse_analyze.inc.php'; PMA_executeQueryAndSendQueryResponse($analyzed_sql_results, false, $db, $table, null, null, null, null, null, null, $goto, $pmaThemeImage, null, null, $query_type, $sql_query, $selected, null); } elseif (!$run_parts) { $GLOBALS['dbi']->selectDb($db); $result = $GLOBALS['dbi']->tryQuery($sql_query); if ($result && !empty($sql_query_views)) { $sql_query .= ' ' . $sql_query_views . ';'; $result = $GLOBALS['dbi']->tryQuery($sql_query_views); unset($sql_query_views); } if (!$result) { $message = PMA_Message::error($GLOBALS['dbi']->getError()); } } if ($query_type == 'drop_tbl' || $query_type == 'empty_tbl' || $query_type == 'row_delete') { PMA_Util::handleDisableFKCheckCleanup($default_fk_check_value); } if ($rebuild_database_list) { // avoid a problem with the database list navigator // when dropping a db from server_databases $GLOBALS['pma']->databases->build(); } } else { if (isset($submit_mult) && ($submit_mult == 'sync_unique_columns_central_list' || $submit_mult == 'delete_unique_columns_central_list' || $submit_mult == 'add_to_central_columns' || $submit_mult == 'remove_from_central_columns' || $submit_mult == 'make_consistent_with_central_list')) { if (isset($centralColsError) && $centralColsError !== true) { $message = $centralColsError; } else {
/** * Handles editor requests for adding or editing an item * * @return void */ function PMA_RTN_handleEditor() { global $_GET, $_POST, $_REQUEST, $GLOBALS, $db, $errors; if (!empty($_REQUEST['editor_process_add']) || !empty($_REQUEST['editor_process_edit'])) { /** * Handle a request to create/edit a routine */ $sql_query = ''; $routine_query = PMA_RTN_getQueryFromRequest(); if (!count($errors)) { // set by PMA_RTN_getQueryFromRequest() // Execute the created query if (!empty($_REQUEST['editor_process_edit'])) { $isProcOrFunc = in_array($_REQUEST['item_original_type'], array('PROCEDURE', 'FUNCTION')); if (!$isProcOrFunc) { $errors[] = sprintf(__('Invalid routine type: "%s"'), htmlspecialchars($_REQUEST['item_original_type'])); } else { // Backup the old routine, in case something goes wrong $create_routine = $GLOBALS['dbi']->getDefinition($db, $_REQUEST['item_original_type'], $_REQUEST['item_original_name']); if (!defined('PMA_DRIZZLE') || !PMA_DRIZZLE) { if (isset($GLOBALS['proc_priv']) && $GLOBALS['proc_priv'] && isset($GLOBALS['flush_priv']) && $GLOBALS['flush_priv']) { // Backup the Old Privileges before dropping // if $_REQUEST['item_adjust_privileges'] set $privilegesBackup = array(); if (isset($_REQUEST['item_adjust_privileges']) && !empty($_REQUEST['item_adjust_privileges'])) { $privilegesBackupQuery = 'SELECT * FROM ' . PMA_Util::backquote('mysql') . '.' . PMA_Util::backquote('procs_priv') . ' where Routine_name = "' . $_REQUEST['item_original_name'] . '" AND Routine_type = "' . $_REQUEST['item_original_type'] . '";'; $privilegesBackup = $GLOBALS['dbi']->fetchResult($privilegesBackupQuery, 0); } } } $drop_routine = "DROP {$_REQUEST['item_original_type']} " . PMA_Util::backquote($_REQUEST['item_original_name']) . ";\n"; $result = $GLOBALS['dbi']->tryQuery($drop_routine); if (!$result) { $errors[] = sprintf(__('The following query has failed: "%s"'), htmlspecialchars($drop_routine)) . '<br />' . __('MySQL said: ') . $GLOBALS['dbi']->getError(null); } else { $result = $GLOBALS['dbi']->tryQuery($routine_query); if (!$result) { $errors[] = sprintf(__('The following query has failed: "%s"'), htmlspecialchars($routine_query)) . '<br />' . __('MySQL said: ') . $GLOBALS['dbi']->getError(null); // We dropped the old routine, // but were unable to create the new one // Try to restore the backup query $result = $GLOBALS['dbi']->tryQuery($create_routine); $errors = checkResult($result, __('Sorry, we failed to restore' . ' the dropped routine.'), $create_routine, $errors); } else { // Default value $resultAdjust = false; if (!defined('PMA_DRIZZLE') || !PMA_DRIZZLE) { if (isset($GLOBALS['proc_priv']) && $GLOBALS['proc_priv'] && isset($GLOBALS['flush_priv']) && $GLOBALS['flush_priv']) { // Insert all the previous privileges // but with the new name and the new type foreach ($privilegesBackup as $priv) { $adjustProcPrivilege = 'INSERT INTO ' . PMA_Util::backquote('mysql') . '.' . PMA_Util::backquote('procs_priv') . ' VALUES("' . $priv[0] . '", "' . $priv[1] . '", "' . $priv[2] . '", "' . $_REQUEST['item_name'] . '", "' . $_REQUEST['item_type'] . '", "' . $priv[5] . '", "' . $priv[6] . '", "' . $priv[7] . '");'; $resultAdjust = $GLOBALS['dbi']->query($adjustProcPrivilege); } } } if ($resultAdjust) { // Flush the Privileges $flushPrivQuery = 'FLUSH PRIVILEGES;'; $GLOBALS['dbi']->query($flushPrivQuery); $message = PMA_Message::success(__('Routine %1$s has been modified. Privileges have been adjusted.')); } else { $message = PMA_Message::success(__('Routine %1$s has been modified.')); } $message->addParam(PMA_Util::backquote($_REQUEST['item_name'])); $sql_query = $drop_routine . $routine_query; } } } } else { // 'Add a new routine' mode $result = $GLOBALS['dbi']->tryQuery($routine_query); if (!$result) { $errors[] = sprintf(__('The following query has failed: "%s"'), htmlspecialchars($routine_query)) . '<br /><br />' . __('MySQL said: ') . $GLOBALS['dbi']->getError(null); } else { $message = PMA_Message::success(__('Routine %1$s has been created.')); $message->addParam(PMA_Util::backquote($_REQUEST['item_name'])); $sql_query = $routine_query; } } } if (count($errors)) { $message = PMA_Message::error(__('One or more errors have occurred while' . ' processing your request:')); $message->addString('<ul>'); foreach ($errors as $string) { $message->addString('<li>' . $string . '</li>'); } $message->addString('</ul>'); } $output = PMA_Util::getMessage($message, $sql_query); if ($GLOBALS['is_ajax_request']) { $response = PMA_Response::getInstance(); if ($message->isSuccess()) { $routines = $GLOBALS['dbi']->getRoutines($db, $_REQUEST['item_type'], $_REQUEST['item_name']); $routine = $routines[0]; $response->addJSON('name', htmlspecialchars(mb_strtoupper($_REQUEST['item_name']))); $response->addJSON('new_row', PMA_RTN_getRowForList($routine)); $response->addJSON('insert', !empty($routine)); $response->addJSON('message', $output); } else { $response->isSuccess(false); $response->addJSON('message', $output); } exit; } } /** * Display a form used to add/edit a routine, if necessary */ // FIXME: this must be simpler than that if (count($errors) || empty($_REQUEST['editor_process_add']) && empty($_REQUEST['editor_process_edit']) && (!empty($_REQUEST['add_item']) || !empty($_REQUEST['edit_item']) || !empty($_REQUEST['routine_addparameter']) || !empty($_REQUEST['routine_removeparameter']) || !empty($_REQUEST['routine_changetype']))) { // Handle requests to add/remove parameters and changing routine type // This is necessary when JS is disabled $operation = ''; if (!empty($_REQUEST['routine_addparameter'])) { $operation = 'add'; } else { if (!empty($_REQUEST['routine_removeparameter'])) { $operation = 'remove'; } else { if (!empty($_REQUEST['routine_changetype'])) { $operation = 'change'; } } } // Get the data for the form (if any) if (!empty($_REQUEST['add_item'])) { $title = PMA_RTE_getWord('add'); $routine = PMA_RTN_getDataFromRequest(); $mode = 'add'; } else { if (!empty($_REQUEST['edit_item'])) { $title = __("Edit routine"); if (!$operation && !empty($_REQUEST['item_name']) && empty($_REQUEST['editor_process_edit'])) { $routine = PMA_RTN_getDataFromName($_REQUEST['item_name'], $_REQUEST['item_type']); if ($routine !== false) { $routine['item_original_name'] = $routine['item_name']; $routine['item_original_type'] = $routine['item_type']; } } else { $routine = PMA_RTN_getDataFromRequest(); } $mode = 'edit'; } } if ($routine !== false) { // Show form $editor = PMA_RTN_getEditorForm($mode, $operation, $routine); if ($GLOBALS['is_ajax_request']) { $response = PMA_Response::getInstance(); $response->addJSON('message', $editor); $response->addJSON('title', $title); $response->addJSON('param_template', PMA_RTN_getParameterRow()); $response->addJSON('type', $routine['item_type']); } else { echo "\n\n<h2>{$title}</h2>\n\n{$editor}"; } exit; } else { $message = __('Error in processing request:') . ' '; $message .= sprintf(PMA_RTE_getWord('not_found'), htmlspecialchars(PMA_Util::backquote($_REQUEST['item_name'])), htmlspecialchars(PMA_Util::backquote($db))); $message = PMA_message::error($message); if ($GLOBALS['is_ajax_request']) { $response->isSuccess(false); $response->addJSON('message', $message); exit; } else { $message->display(); } } } }
} /** @var PMA_String $pmaString */ $pmaString = $GLOBALS['PMA_String']; if (empty($is_db)) { if (mb_strlen($db)) { $is_db = @$GLOBALS['dbi']->selectDb($db); } else { $is_db = false; } if (!$is_db) { // not a valid db name -> back to the welcome page if (!defined('IS_TRANSFORMATION_WRAPPER')) { $response = PMA_Response::getInstance(); if ($response->isAjax()) { $response->setRequestStatus(false); $response->addJSON('message', PMA_Message::error(__('No databases selected.'))); } else { $url_params = array('reload' => 1); if (isset($message)) { $url_params['message'] = $message; } if (!empty($sql_query)) { $url_params['sql_query'] = $sql_query; } if (isset($show_as_php)) { $url_params['show_as_php'] = $show_as_php; } PMA_sendHeaderLocation($cfg['PmaAbsoluteUri'] . 'index.php' . PMA_URL_getCommon($url_params, 'text')); } exit; }
/** * return HTML for Sql Query Form Upload * * @return string * * @usedby PMA_getHtmlForSqlQueryForm() */ function PMA_getHtmlForSqlQueryFormUpload() { global $timeout_passed, $local_import_file; $errors = array(); // we allow only SQL here $matcher = '@\\.sql(\\.(' . PMA_supportedDecompressions() . '))?$@'; if (!empty($GLOBALS['cfg']['UploadDir'])) { $files = PMA_getFileSelectOptions(PMA_Util::userDir($GLOBALS['cfg']['UploadDir']), $matcher, isset($timeout_passed) && $timeout_passed && isset($local_import_file) ? $local_import_file : ''); } else { $files = ''; } // start output $html = '<fieldset id="">'; $html .= '<legend>'; $html .= __('Browse your computer:') . '</legend>'; $html .= '<div class="formelement">'; $html .= '<input type="file" name="sql_file" class="textfield" /> '; $html .= PMA_Util::getFormattedMaximumUploadSize($GLOBALS['max_upload_size']); // some browsers should respect this :) $html .= PMA_Util::generateHiddenMaxFileSize($GLOBALS['max_upload_size']) . "\n"; $html .= '</div>'; if ($files === false) { $errors[] = PMA_Message::error(__('The directory you set for upload work cannot be reached.')); } elseif (!empty($files)) { $html .= '<div class="formelement">'; $html .= '<strong>' . __('web server upload directory:') . '</strong>'; $html .= '<select size="1" name="sql_localfile">' . "\n"; $html .= '<option value="" selected="selected"></option>' . "\n"; $html .= $files; $html .= '</select>' . "\n"; $html .= '</div>'; } $html .= '<div class="clearfloat"></div>' . "\n"; $html .= '</fieldset>'; $html .= '<fieldset id="" class="tblFooters">'; $html .= __('Character set of the file:') . "\n"; $html .= PMA_generateCharsetDropdownBox(PMA_CSDROPDOWN_CHARSET, 'charset_of_file', null, 'utf8', false); $html .= '<input type="submit" name="SQL" value="' . __('Go') . '" />' . "\n"; $html .= '<div class="clearfloat"></div>' . "\n"; $html .= '</fieldset>'; foreach ($errors as $error) { $html .= $error->getDisplay(); } return $html; }
/** * Move or copy a table * * @param string $db current database name * @param string $table current table name * * @return void */ function PMA_moveOrCopyTable($db, $table) { /** * Selects the database to work with */ $GLOBALS['dbi']->selectDb($db); /** * $_REQUEST['target_db'] could be empty in case we came from an input field * (when there are many databases, no drop-down) */ if (empty($_REQUEST['target_db'])) { $_REQUEST['target_db'] = $db; } /** * A target table name has been sent to this script -> do the work */ if (PMA_isValid($_REQUEST['new_name'])) { if ($db == $_REQUEST['target_db'] && $table == $_REQUEST['new_name']) { if (isset($_REQUEST['submit_move'])) { $message = PMA_Message::error(__('Can\'t move table to same one!')); } else { $message = PMA_Message::error(__('Can\'t copy table to same one!')); } } else { PMA_Table::moveCopy($db, $table, $_REQUEST['target_db'], $_REQUEST['new_name'], $_REQUEST['what'], isset($_REQUEST['submit_move']), 'one_table'); if (isset($_REQUEST['adjust_privileges']) && !empty($_REQUEST['adjust_privileges'])) { if (isset($_REQUEST['submit_move'])) { PMA_AdjustPrivileges_renameOrMoveTable($db, $table, $_REQUEST['target_db'], $_REQUEST['new_name']); } else { PMA_AdjustPrivileges_copyTable($db, $table, $_REQUEST['target_db'], $_REQUEST['new_name']); } if (isset($_REQUEST['submit_move'])) { $message = PMA_Message::success(__('Table %s has been moved to %s. Privileges have been ' . 'adjusted.')); } else { $message = PMA_Message::success(__('Table %s has been copied to %s. Privileges have been ' . 'adjusted.')); } } else { if (isset($_REQUEST['submit_move'])) { $message = PMA_Message::success(__('Table %s has been moved to %s.')); } else { $message = PMA_Message::success(__('Table %s has been copied to %s.')); } } $old = PMA_Util::backquote($db) . '.' . PMA_Util::backquote($table); $message->addParam($old); $new = PMA_Util::backquote($_REQUEST['target_db']) . '.' . PMA_Util::backquote($_REQUEST['new_name']); $message->addParam($new); /* Check: Work on new table or on old table? */ if (isset($_REQUEST['submit_move']) || PMA_isValid($_REQUEST['switch_to_new'])) { } } } else { /** * No new name for the table! */ $message = PMA_Message::error(__('The table name is empty!')); } if ($GLOBALS['is_ajax_request'] == true) { $response = PMA_Response::getInstance(); $response->addJSON('message', $message); if ($message->isSuccess()) { $response->addJSON('db', $GLOBALS['db']); } else { $response->isSuccess(false); } exit; } }
if (isset($_SESSION['profiling'])) { $header = $response->getHeader(); $scripts = $header->getScripts(); $scripts->addFile('jqplot/jquery.jqplot.js'); $scripts->addFile('jqplot/plugins/jqplot.pieRenderer.js'); $scripts->addFile('jqplot/plugins/jqplot.highlighter.js'); $scripts->addFile('canvg/canvg.js'); $scripts->addFile('jquery/jquery.tablesorter.js'); } /* * There is no point in even attempting to process * an ajax request if there is a token mismatch */ if (isset($response) && $response->isAjax() && $token_mismatch) { $response->isSuccess(false); $response->addJSON('message', PMA_Message::error(__('Error: Token mismatch'))); exit; } } else { // end if !defined('PMA_MINIMUM_COMMON') // load user preferences $GLOBALS['PMA_Config']->loadUserPreferences(); } // remove sensitive values from session $GLOBALS['PMA_Config']->set('blowfish_secret', ''); $GLOBALS['PMA_Config']->set('Servers', ''); $GLOBALS['PMA_Config']->set('default_server', ''); /* Tell tracker that it can actually work */ PMA_Tracker::enable(); /** * @global boolean $GLOBALS['is_ajax_request']
/** * Function to handle update for a foreign key * * @param array $multi_edit_columns_name multu edit columns name * @param string $master_field_md5 master field md5 * @param string $destination_foreign_table destination foreign table * @param string $destination_foreign_column destination foreign column * @param array $options_array options array * @param array $existrel_foreign db, table, column * @param string $table current table * @param bool &$seen_error whether seen error * @param string &$display_query display query * @param string $foreign_db foreign database * * @return string */ function PMA_handleUpdateForForeignKey($multi_edit_columns_name, $master_field_md5, $destination_foreign_table, $destination_foreign_column, $options_array, $existrel_foreign, $table, &$seen_error, &$display_query, $foreign_db) { $html_output = ''; $create = false; $drop = false; // Map the fieldname's md5 back to its real name $master_field = $multi_edit_columns_name[$master_field_md5]; $foreign_table = $destination_foreign_table[$master_field_md5]; $foreign_field = $destination_foreign_column[$master_field_md5]; if (!empty($foreign_db) && !empty($foreign_table) && !empty($foreign_field)) { if (isset($existrel_foreign[$master_field])) { $constraint_name = $existrel_foreign[$master_field]['constraint']; $on_delete = !empty($existrel_foreign[$master_field]['on_delete']) ? $existrel_foreign[$master_field]['on_delete'] : 'RESTRICT'; $on_update = !empty($existrel_foreign[$master_field]['on_update']) ? $existrel_foreign[$master_field]['on_update'] : 'RESTRICT'; } if (!isset($existrel_foreign[$master_field])) { // no key defined for this field $create = true; } elseif ($existrel_foreign[$master_field]['foreign_db'] != $foreign_db || $existrel_foreign[$master_field]['foreign_table'] != $foreign_table || $existrel_foreign[$master_field]['foreign_field'] != $foreign_field || $_REQUEST['constraint_name'][$master_field_md5] != $constraint_name || $_REQUEST['on_delete'][$master_field_md5] != $on_delete || $_REQUEST['on_update'][$master_field_md5] != $on_update) { // another foreign key is already defined for this field // or an option has been changed for ON DELETE or ON UPDATE $drop = true; $create = true; } // end if... else.... } elseif (isset($existrel_foreign[$master_field])) { $drop = true; } // end if... else.... $tmp_error_drop = false; if ($drop) { $drop_query = PMA_getSQLToDropForeignKey($table, $existrel_foreign[$master_field]['constraint']); $display_query .= $drop_query . "\n"; $GLOBALS['dbi']->tryQuery($drop_query); $tmp_error_drop = $GLOBALS['dbi']->getError(); if (!empty($tmp_error_drop)) { $seen_error = true; $html_output .= PMA_Util::mysqlDie($tmp_error_drop, $drop_query, false, '', false); return $html_output; } } $tmp_error_create = false; if ($create) { $create_query = PMA_getSQLToCreateForeignKey($table, $master_field, $foreign_db, $foreign_table, $foreign_field, $_REQUEST['constraint_name'][$master_field_md5], $options_array[$_REQUEST['on_delete'][$master_field_md5]], $options_array[$_REQUEST['on_update'][$master_field_md5]]); $display_query .= $create_query . "\n"; $GLOBALS['dbi']->tryQuery($create_query); $tmp_error_create = $GLOBALS['dbi']->getError(); if (!empty($tmp_error_create)) { $seen_error = true; if (substr($tmp_error_create, 1, 4) == '1005') { $message = PMA_Message::error(__('Error creating foreign key on %1$s (check data types)')); $message->addParam($master_field); $html_output .= $message->getDisplay(); } else { $html_output .= PMA_Util::mysqlDie($tmp_error_create, $create_query, false, '', false); } $html_output .= PMA_Util::showMySQLDocu('InnoDB_foreign_key_constraints') . "\n"; } // this is an alteration and the old constraint has been dropped // without creation of a new one if ($drop && $create && empty($tmp_error_drop) && !empty($tmp_error_create)) { // a rollback may be better here $sql_query_recreate = '# Restoring the dropped constraint...' . "\n"; $sql_query_recreate .= PMA_getSQLToCreateForeignKey($table, $master_field, $existrel_foreign[$master_field]['foreign_db'], $existrel_foreign[$master_field]['foreign_table'], $existrel_foreign[$master_field]['foreign_field'], $existrel_foreign[$master_field]['constraint'], $options_array[$existrel_foreign[$master_field]['on_delete']], $options_array[$existrel_foreign[$master_field]['on_update']]); $display_query .= $sql_query_recreate . "\n"; $GLOBALS['dbi']->tryQuery($sql_query_recreate); } } return $html_output; }
{ if (isset($GLOBALS['cfg']['Export'][$str]) && $GLOBALS['cfg']['Export'][$str]) { echo ' checked="checked"'; } } function PMA_exportIsActive($what, $val) { if (isset($GLOBALS['cfg']['Export'][$what]) && $GLOBALS['cfg']['Export'][$what] == $val) { echo ' checked="checked"'; } } /* Scan for plugins */ $export_list = PMA_getPlugins('./libraries/export/', array('export_type' => $export_type, 'single_table' => isset($single_table))); /* Fail if we didn't find any plugin */ if (empty($export_list)) { PMA_Message::error('strCanNotLoadExportPlugins')->display(); require './libraries/footer.inc.php'; } ?> <form method="post" action="export.php" name="dump"> <?php if ($export_type == 'server') { echo PMA_generate_common_hidden_inputs('', '', 1); } elseif ($export_type == 'database') { echo PMA_generate_common_hidden_inputs($db, '', 1); } else { echo PMA_generate_common_hidden_inputs($db, $table, 1); } // just to keep this value for possible next display of this form after saving on server
/** * Get HTML snippet for display user properties * * @param boolean $dbname_is_wildcard whether database name is wildcard or not * @param string $url_dbname url database name that urlencode() string * @param string $username username * @param string $hostname host name * @param string $dbname database name * @param string $tablename table name * * @return string $html_output */ function PMA_getHtmlForUserProperties($dbname_is_wildcard, $url_dbname, $username, $hostname, $dbname, $tablename) { $html_output = '<div id="edit_user_dialog">'; $html_output .= PMA_getHtmlHeaderForUserProperties($dbname_is_wildcard, $url_dbname, $dbname, $username, $hostname, $tablename); $sql = "SELECT '1' FROM `mysql`.`user`" . " WHERE `User` = '" . PMA_Util::sqlAddSlashes($username) . "'" . " AND `Host` = '" . PMA_Util::sqlAddSlashes($hostname) . "';"; $user_does_not_exists = (bool) (!$GLOBALS['dbi']->fetchValue($sql)); if ($user_does_not_exists) { $html_output .= PMA_Message::error(__('The selected user was not found in the privilege table.'))->getDisplay(); $html_output .= PMA_getHtmlForLoginInformationFields(); //exit; } $_params = array('username' => $username, 'hostname' => $hostname); if (!is_array($dbname) && mb_strlen($dbname)) { $_params['dbname'] = $dbname; if (mb_strlen($tablename)) { $_params['tablename'] = $tablename; } } else { $_params['dbname'] = $dbname; } $html_output .= '<form class="submenu-item" name="usersForm" ' . 'id="addUsersForm" action="server_privileges.php" method="post">' . "\n"; $html_output .= PMA_URL_getHiddenInputs($_params); $html_output .= PMA_getHtmlToDisplayPrivilegesTable(PMA_ifSetOr($dbname, is_array($dbname) ? $dbname[0] : '*', 'length'), PMA_ifSetOr($tablename, '*', 'length')); $html_output .= '</form>' . "\n"; if (!is_array($dbname) && !mb_strlen($tablename) && empty($dbname_is_wildcard)) { // no table name was given, display all table specific rights // but only if $dbname contains no wildcards $html_output .= '<form class="submenu-item" action="server_privileges.php" ' . 'id="db_or_table_specific_priv" method="post">' . "\n"; // unescape wildcards in dbname at table level $unescaped_db = PMA_Util::unescapeMysqlWildcards($dbname); list($html_rightsTable, $found_rows) = PMA_getHtmlForAllTableSpecificRights($username, $hostname, $unescaped_db); $html_output .= $html_rightsTable; if (!mb_strlen($dbname)) { // no database name was given, display select db $html_output .= PMA_getHtmlForSelectDbInEditPrivs($found_rows); } else { $html_output .= PMA_displayTablesInEditPrivs($dbname, $found_rows); } $html_output .= '</fieldset>' . "\n"; $html_output .= '<fieldset class="tblFooters">' . "\n" . ' <input type="submit" value="' . __('Go') . '" />' . '</fieldset>' . "\n" . '</form>' . "\n"; } // Provide a line with links to the relevant database and table if (!is_array($dbname) && mb_strlen($dbname) && empty($dbname_is_wildcard)) { $html_output .= PMA_getLinkToDbAndTable($url_dbname, $dbname, $tablename); } if (!is_array($dbname) && !mb_strlen($dbname) && !$user_does_not_exists) { //change login information $html_output .= PMA_getHtmlForChangePassword($username, $hostname); $html_output .= PMA_getChangeLoginInformationHtmlForm($username, $hostname); } $html_output .= '</div>'; return $html_output; }
$message->addParam($newname); } $reload = true; /* Change database to be used */ if (!$_error && $move) { $db = $newname; } elseif (!$_error) { if (isset($switch_to_new) && $switch_to_new == 'true') { PMA_setCookie('pma_switch_to_new', 'true'); $db = $newname; } else { PMA_setCookie('pma_switch_to_new', ''); } } if ($_error && !isset($message)) { $message = PMA_Message::error(); } } } /* * Enable/Disable/Repair BLOB Repository Monitoring for current database */ if (strlen($db) > 0 && !empty($db_blob_streaming_op)) { // load PMA_Config $PMA_Config = $_SESSION['PMA_Config']; if (!empty($PMA_Config)) { if ($PMA_Config->get('PBXT_NAME') !== strtolower($db)) { // if Blobstreaming plugins exist, begin checking for Blobstreaming tables if ($PMA_Config->get('BLOBSTREAMING_PLUGINS_EXIST')) { $bs_tables = $PMA_Config->get('BLOBSTREAMABLE_DATABASES'); $bs_tables = $bs_tables[$db];
/** * Get HTML snippet for display user properties * * @param boolean $dbname_is_wildcard whether database name is wildcard or not * @param type $url_dbname url database name that urlencode() string * @param string $username username * @param string $hostname host name * @param string $link_edit standard link to edit privileges * @param string $link_revoke standard link to revoke * @param string $dbname database name * @param string $tablename table name * * @return string $html_output */ function PMA_getHtmlForDisplayUserProperties($dbname_is_wildcard, $url_dbname, $username, $hostname, $link_edit, $link_revoke, $dbname, $tablename) { $html_output = PMA_getHtmlHeaderForDisplayUserProperties($dbname_is_wildcard, $url_dbname, $dbname, $username, $hostname, $tablename); $sql = "SELECT '1' FROM `mysql`.`user`" . " WHERE `User` = '" . PMA_Util::sqlAddSlashes($username) . "'" . " AND `Host` = '" . PMA_Util::sqlAddSlashes($hostname) . "';"; $user_does_not_exists = (bool) (!PMA_DBI_fetch_value($sql)); if ($user_does_not_exists) { $html_output .= PMA_Message::error(__('The selected user was not found in the privilege table.'))->getDisplay(); $html_output .= PMA_getHtmlForDisplayLoginInformationFields(); //exit; } $class = ' class="ajax"'; $html_output .= '<form' . $class . ' name="usersForm" id="addUsersForm"' . ' action="server_privileges.php" method="post">' . "\n"; $_params = array('username' => $username, 'hostname' => $hostname); if (strlen($dbname)) { $_params['dbname'] = $dbname; if (strlen($tablename)) { $_params['tablename'] = $tablename; } } $html_output .= PMA_generate_common_hidden_inputs($_params); $html_output .= PMA_getHtmlToDisplayPrivilegesTable(PMA_ifSetOr($dbname, '*', 'length'), PMA_ifSetOr($tablename, '*', 'length')); $html_output .= '</form>' . "\n"; if (!strlen($tablename) && empty($dbname_is_wildcard)) { // no table name was given, display all table specific rights // but only if $dbname contains no wildcards $html_output .= '<form action="server_privileges.php" ' . 'id="db_or_table_specific_priv" method="post">' . "\n"; list($html_rightsTable, $found_rows) = PMA_getTableForDisplayAllTableSpecificRights($username, $hostname, $link_edit, $link_revoke, $dbname); $html_output .= $html_rightsTable; if (!strlen($dbname)) { // no database name was given, display select db $html_output .= PMA_getHtmlForDisplaySelectDbInEditPrivs($found_rows); } else { $html_output .= PMA_displayTablesInEditPrivs($dbname, $found_rows); } $html_output .= '</fieldset>' . "\n"; $html_output .= '<fieldset class="tblFooters">' . "\n" . ' <input type="submit" value="' . __('Go') . '" />' . '</fieldset>' . "\n" . '</form>' . "\n"; } // Provide a line with links to the relevant database and table if (strlen($dbname) && empty($dbname_is_wildcard)) { $html_output .= PMA_getLinkToDbAndTable($url_dbname, $dbname, $tablename); } if (!strlen($dbname) && !$user_does_not_exists) { //change login information $html_output .= PMA_getHtmlForChangePassword($username, $hostname); $html_output .= PMA_getChangeLoginInformationHtmlForm($username, $hostname); } return $html_output; }
} else { if ($import_notice) { $message = PMA_Message::success('<em>' . __('Import has been successfully finished, %d queries executed.') . '</em>'); $message->addParam($executed_queries); $message->addString($import_notice); $message->addString('(' . $_FILES['import_file']['name'] . ')'); } else { $message = PMA_Message::success(__('Import has been successfully finished, %d queries executed.')); $message->addParam($executed_queries); $message->addString('(' . $_FILES['import_file']['name'] . ')'); } } } // Did we hit timeout? Tell it user. if ($timeout_passed) { $message = PMA_Message::error(__('Script timeout passed, if you want to finish import, please resubmit same file and import will resume.')); if ($offset == 0 || isset($original_skip) && $original_skip == $offset) { $message->addString(__('However on last run no data has been parsed, this usually means phpMyAdmin won\'t be able to finish this import unless you increase php time limits.')); } } // if there is any message, copy it into $_SESSION as well, so we can obtain it by AJAX call if (isset($message)) { $_SESSION['Import_message']['message'] = $message->getDisplay(); // $_SESSION['Import_message']['go_back_url'] = $goto.'?'. PMA_generate_common_url(); } // Parse and analyze the query, for correct db and table name // in case of a query typed in the query window // (but if the query is too large, in case of an imported file, the parser // can choke on it so avoid parsing) if (strlen($sql_query) <= $GLOBALS['cfg']['MaxCharactersInDisplayedSQL']) { require_once './libraries/parse_analyze.lib.php';
} else { echo ' <i>\'' . htmlspecialchars($username) . '\'@\'' . htmlspecialchars($hostname) . '\'</i>' . "\n"; } echo '</h2>' . "\n"; $sql = "SELECT '1' FROM `mysql`.`user`" . " WHERE `User` = '" . PMA_sqlAddSlashes($username) . "'" . " AND `Host` = '" . PMA_sqlAddSlashes($hostname) . "';"; $user_does_not_exists = (bool) ! PMA_DBI_fetch_value($sql); unset($sql); if ($user_does_not_exists) { PMA_Message::error(__('The selected user was not found in the privilege table.'))->display(); PMA_displayLoginInformationFields(); //require 'libraries/footer.inc.php'; } echo '<form name="usersForm" id="addUsersForm_' . $random_n . '" action="server_privileges.php" method="post">' . "\n"; $_params = array( 'username' => $username, 'hostname' => $hostname, ); if (isset($dbname)) { $_params['dbname'] = $dbname; if (isset($tablename)) { $_params['tablename'] = $tablename; } }
} // end if if ($reread_info) { // to avoid showing the old value (for example the AUTO_INCREMENT) after // a change, clear the cache PMA_Table::$cache = array(); $page_checksum = $checksum = $delay_key_write = 0; include 'libraries/tbl_info.inc.php'; } unset($reread_info); if (isset($result) && empty($message_to_show)) { // set to success by default, because result set could be empty // (for example, a table rename) $_type = 'success'; if (empty($_message)) { $_message = $result ? PMA_Message::success(__('Your SQL query has been executed successfully.')) : PMA_Message::error(__('Error')); // $result should exist, regardless of $_message $_type = $result ? 'success' : 'error'; if (isset($GLOBALS['ajax_request']) && $GLOBALS['ajax_request'] == true) { $response = PMA_Response::getInstance(); $response->isSuccess($_message->isSuccess()); $response->addJSON('message', $_message); $response->addJSON('sql_query', PMA_Util::getMessage(null, $sql_query)); exit; } } if (!empty($warning_messages)) { $_message = new PMA_Message(); $_message->addMessages($warning_messages); $_message->isError(true); if ($GLOBALS['ajax_request'] == true) {
/** * Handles editor requests for adding or editing an item * * @return Does not return */ function PMA_RTN_handleEditor() { global $_GET, $_POST, $_REQUEST, $GLOBALS, $db, $errors; if (!empty($_REQUEST['editor_process_add']) || !empty($_REQUEST['editor_process_edit'])) { /** * Handle a request to create/edit a routine */ $sql_query = ''; $routine_query = PMA_RTN_getQueryFromRequest(); if (!count($errors)) { // set by PMA_RTN_getQueryFromRequest() // Execute the created query if (!empty($_REQUEST['editor_process_edit'])) { if (!in_array($_REQUEST['item_original_type'], array('PROCEDURE', 'FUNCTION'))) { $errors[] = sprintf(__('Invalid routine type: "%s"'), htmlspecialchars($_REQUEST['item_original_type'])); } else { // Backup the old routine, in case something goes wrong $create_routine = PMA_DBI_get_definition($db, $_REQUEST['item_original_type'], $_REQUEST['item_original_name']); $drop_routine = "DROP {$_REQUEST['item_original_type']} " . PMA_Util::backquote($_REQUEST['item_original_name']) . ";\n"; $result = PMA_DBI_try_query($drop_routine); if (!$result) { $errors[] = sprintf(__('The following query has failed: "%s"'), htmlspecialchars($drop_routine)) . '<br />' . __('MySQL said: ') . PMA_DBI_getError(null); } else { $result = PMA_DBI_try_query($routine_query); if (!$result) { $errors[] = sprintf(__('The following query has failed: "%s"'), htmlspecialchars($routine_query)) . '<br />' . __('MySQL said: ') . PMA_DBI_getError(null); // We dropped the old routine, but were unable to create the new one // Try to restore the backup query $result = PMA_DBI_try_query($create_routine); if (!$result) { // OMG, this is really bad! We dropped the query, // failed to create a new one // and now even the backup query does not execute! // This should not happen, but we better handle // this just in case. $errors[] = __('Sorry, we failed to restore the dropped routine.') . '<br />' . __('The backed up query was:') . "\"" . htmlspecialchars($create_routine) . "\"" . '<br />' . __('MySQL said: ') . PMA_DBI_getError(null); } } else { $message = PMA_Message::success(__('Routine %1$s has been modified.')); $message->addParam(PMA_Util::backquote($_REQUEST['item_name'])); $sql_query = $drop_routine . $routine_query; } } } } else { // 'Add a new routine' mode $result = PMA_DBI_try_query($routine_query); if (!$result) { $errors[] = sprintf(__('The following query has failed: "%s"'), htmlspecialchars($routine_query)) . '<br /><br />' . __('MySQL said: ') . PMA_DBI_getError(null); } else { $message = PMA_Message::success(__('Routine %1$s has been created.')); $message->addParam(PMA_Util::backquote($_REQUEST['item_name'])); $sql_query = $routine_query; } } } if (count($errors)) { $message = PMA_Message::error(__('<b>One or more errors have occured while processing your request:</b>')); $message->addString('<ul>'); foreach ($errors as $string) { $message->addString('<li>' . $string . '</li>'); } $message->addString('</ul>'); } $output = PMA_Util::getMessage($message, $sql_query); if ($GLOBALS['is_ajax_request']) { $response = PMA_Response::getInstance(); if ($message->isSuccess()) { $columns = "`SPECIFIC_NAME`, `ROUTINE_NAME`, `ROUTINE_TYPE`, `DTD_IDENTIFIER`, `ROUTINE_DEFINITION`"; $where = "ROUTINE_SCHEMA='" . PMA_Util::sqlAddSlashes($db) . "' " . "AND ROUTINE_NAME='" . PMA_Util::sqlAddSlashes($_REQUEST['item_name']) . "'" . "AND ROUTINE_TYPE='" . PMA_Util::sqlAddSlashes($_REQUEST['item_type']) . "'"; $routine = PMA_DBI_fetch_single_row("SELECT {$columns} FROM `INFORMATION_SCHEMA`.`ROUTINES` WHERE {$where};"); $response->addJSON('name', htmlspecialchars(strtoupper($_REQUEST['item_name']))); $response->addJSON('new_row', PMA_RTN_getRowForList($routine)); $response->addJSON('insert', !empty($routine)); $response->addJSON('message', $output); } else { $response->isSuccess(false); $response->addJSON('message', $output); } exit; } } /** * Display a form used to add/edit a routine, if necessary */ if (count($errors) || empty($_REQUEST['editor_process_add']) && empty($_REQUEST['editor_process_edit']) && (!empty($_REQUEST['add_item']) || !empty($_REQUEST['edit_item']) || !empty($_REQUEST['routine_addparameter']) || !empty($_REQUEST['routine_removeparameter']) || !empty($_REQUEST['routine_changetype']))) { // Handle requests to add/remove parameters and changing routine type // This is necessary when JS is disabled $operation = ''; if (!empty($_REQUEST['routine_addparameter'])) { $operation = 'add'; } else { if (!empty($_REQUEST['routine_removeparameter'])) { $operation = 'remove'; } else { if (!empty($_REQUEST['routine_changetype'])) { $operation = 'change'; } } } // Get the data for the form (if any) if (!empty($_REQUEST['add_item'])) { $title = PMA_RTE_getWord('add'); $routine = PMA_RTN_getDataFromRequest(); $mode = 'add'; } else { if (!empty($_REQUEST['edit_item'])) { $title = __("Edit routine"); if (!$operation && !empty($_REQUEST['item_name']) && empty($_REQUEST['editor_process_edit'])) { $routine = PMA_RTN_getDataFromName($_REQUEST['item_name'], $_REQUEST['item_type']); if ($routine !== false) { $routine['item_original_name'] = $routine['item_name']; $routine['item_original_type'] = $routine['item_type']; } } else { $routine = PMA_RTN_getDataFromRequest(); } $mode = 'edit'; } } if ($routine !== false) { // Show form $editor = PMA_RTN_getEditorForm($mode, $operation, $routine); if ($GLOBALS['is_ajax_request']) { $response = PMA_Response::getInstance(); $response->addJSON('message', $editor); $response->addJSON('title', $title); $response->addJSON('param_template', PMA_RTN_getParameterRow()); $response->addJSON('type', $routine['item_type']); } else { echo "\n\n<h2>{$title}</h2>\n\n{$editor}"; } exit; } else { $message = __('Error in processing request') . ' : '; $message .= sprintf(PMA_RTE_getWord('not_found'), htmlspecialchars(PMA_Util::backquote($_REQUEST['item_name'])), htmlspecialchars(PMA_Util::backquote($db))); $message = PMA_message::error($message); if ($GLOBALS['is_ajax_request']) { $response->isSuccess(false); $response->addJSON('message', $message); exit; } else { $message->display(); } } } }
foreach ($data_row as $data_column => $data_value) { $tmp_row[htmlspecialchars($data_column)] = htmlspecialchars($data_value); } $sanitized_data[] = $tmp_row; } $response->isSuccess(true); $response->addJSON('message', null); $response->addJSON('chartData', json_encode($sanitized_data)); unset($sanitized_data); exit; } $response = PMA_Response::getInstance(); // Throw error if no sql query is set if (!isset($sql_query) || $sql_query == '') { $response->isSuccess(false); $response->addHTML(PMA_Message::error(__('No SQL query was set to fetch data.'))); exit; } $header = $response->getHeader(); $scripts = $header->getScripts(); $scripts->addFile('chart.js'); $scripts->addFile('tbl_chart.js'); $scripts->addFile('jqplot/jquery.jqplot.js'); $scripts->addFile('jqplot/plugins/jqplot.barRenderer.js'); $scripts->addFile('jqplot/plugins/jqplot.canvasAxisLabelRenderer.js'); $scripts->addFile('jqplot/plugins/jqplot.canvasTextRenderer.js'); $scripts->addFile('jqplot/plugins/jqplot.categoryAxisRenderer.js'); $scripts->addFile('jqplot/plugins/jqplot.dateAxisRenderer.js'); $scripts->addFile('jqplot/plugins/jqplot.pointLabels.js'); $scripts->addFile('jqplot/plugins/jqplot.pieRenderer.js'); $scripts->addFile('jqplot/plugins/jqplot.highlighter.js');
if ($result != FALSE && PMA_DBI_num_rows($result) > 0) { $tmp = PMA_DBI_fetch_row($result); if ($tmp[1] == 'ON') { $GLOBALS['cfg']['Import']['ldi_local_option'] = TRUE; } } PMA_DBI_free_result($result); unset($result); } $plugin_list['ldi'] = array('text' => __('CSV using LOAD DATA'), 'extension' => 'ldi', 'options' => array(array('type' => 'begin_group', 'name' => 'general_opts'), array('type' => 'bool', 'name' => 'replace', 'text' => __('Replace table data with file')), array('type' => 'bool', 'name' => 'ignore', 'text' => __('Do not abort on INSERT error')), array('type' => 'text', 'name' => 'terminated', 'text' => __('Columns terminated by'), 'size' => 2, 'len' => 2), array('type' => 'text', 'name' => 'enclosed', 'text' => __('Columns enclosed by'), 'size' => 2, 'len' => 2), array('type' => 'text', 'name' => 'escaped', 'text' => __('Columns escaped by'), 'size' => 2, 'len' => 2), array('type' => 'text', 'name' => 'new_line', 'text' => __('Lines terminated by'), 'size' => 2), array('type' => 'text', 'name' => 'columns', 'text' => __('Column names')), array('type' => 'bool', 'name' => 'local_option', 'text' => __('Use LOCAL keyword')), array('type' => 'end_group')), 'options_text' => __('Options')); /* We do not define function when plugin is just queried for information above */ return; } if ($import_file == 'none' || $compression != 'none' || $charset_conversion) { // We handle only some kind of data! $message = PMA_Message::error(__('This plugin does not support compressed imports!')); $error = TRUE; return; } $sql = 'LOAD DATA'; if (isset($ldi_local_option)) { $sql .= ' LOCAL'; } $sql .= ' INFILE \'' . PMA_sqlAddslashes($import_file) . '\''; if (isset($ldi_replace)) { $sql .= ' REPLACE'; } elseif (isset($ldi_ignore)) { $sql .= ' IGNORE'; } $sql .= ' INTO TABLE ' . PMA_backquote($table); if (strlen($ldi_terminated) > 0) {
* Disable loading of external XML entities. */ libxml_disable_entity_loader(); /** * Load the XML string * * The option LIBXML_COMPACT is specified because it can * result in increased performance without the need to * alter the code in any way. It's basically a freebee. */ $xml = simplexml_load_string($buffer, "SimpleXMLElement", LIBXML_COMPACT); unset($buffer); if ($xml === FALSE) { $sheets = array(); /* TODO: this message should be improved later, used existing because of string freeze */ $message = PMA_Message::error(__('Error in Processing Request')); $error = TRUE; } else { $sheets = $xml->children('office', true)->{'body'}->{'spreadsheet'}->children('table', true); } $tables = array(); $max_cols = 0; $row_count = 0; $col_count = 0; $col_names = array(); $tempRow = array(); $tempRows = array(); $rows = array(); /* Iterate over tables */ foreach ($sheets as $sheet) { $col_names_in_first_row = isset($_REQUEST['ods_col_names']);
/** * Save recent/favorite tables into phpMyAdmin database. * * @return true|PMA_Message */ public function saveToDb() { $username = $GLOBALS['cfg']['Server']['user']; $sql_query = " REPLACE INTO " . $this->_pmaTable . " (`username`, `tables`)" . " VALUES ('" . $username . "', '" . PMA_Util::sqlAddSlashes(json_encode($this->_tables)) . "')"; $success = $GLOBALS['dbi']->tryQuery($sql_query, $GLOBALS['controllink']); if (!$success) { $error_msg = ''; switch ($this->_tableType) { case 'recent': $error_msg = __('Could not save recent table!'); break; case 'favorite': $error_msg = __('Could not save favorite table!'); break; } $message = PMA_Message::error($error_msg); $message->addMessage('<br /><br />'); $message->addMessage(PMA_Message::rawError($GLOBALS['dbi']->getError($GLOBALS['controllink']))); return $message; } return true; }
/** * Set a property from UI preferences. * If pmadb and table_uiprefs is set, it will save the UI preferences to * phpMyAdmin database. * Available property: * - PROP_SORTED_COLUMN * - PROP_COLUMN_ORDER * - PROP_COLUMN_VISIB * * @param string $property Property * @param mixed $value Value for the property * @param string $table_create_time Needed for PROP_COLUMN_ORDER and PROP_COLUMN_VISIB * * @return boolean|PMA_Message */ public function setUiProp($property, $value, $table_create_time = null) { if (!isset($this->uiprefs)) { $this->loadUiPrefs(); } // we want to save the create time if the property is PROP_COLUMN_ORDER if (!PMA_Table::isView($this->db_name, $this->name) && ($property == self::PROP_COLUMN_ORDER || $property == self::PROP_COLUMN_VISIB)) { $curr_create_time = self::sGetStatusInfo($this->db_name, $this->name, 'CREATE_TIME'); if (isset($table_create_time) && $table_create_time == $curr_create_time) { $this->uiprefs['CREATE_TIME'] = $curr_create_time; } else { // there is no $table_create_time, or // supplied $table_create_time is older than current create time, // so don't save return PMA_Message::error(sprintf(__('Cannot save UI property "%s". The changes made will not be persistent after you refresh this page. Please check if the table structure has been changed.'), $property)); } } // save the value $this->uiprefs[$property] = $value; // check if pmadb is set if (strlen($GLOBALS['cfg']['Server']['pmadb']) && strlen($GLOBALS['cfg']['Server']['table_uiprefs'])) { return $this->saveUiprefsToDb(); } return true; }
/** * displays the given error message on phpMyAdmin error page in foreign language, * ends script execution and closes session * * loads language file if not loaded already * * @param string $error_message the error message or named error message * @param string|array $message_args arguments applied to $error_message * @param boolean $delete_session whether to delete session cookie * * @return void */ function PMA_fatalError($error_message, $message_args = null, $delete_session = true) { /* Use format string if applicable */ if (is_string($message_args)) { $error_message = sprintf($error_message, $message_args); } elseif (is_array($message_args)) { $error_message = vsprintf($error_message, $message_args); } if ($GLOBALS['is_ajax_request']) { $response = PMA_Response::getInstance(); $response->isSuccess(false); $response->addJSON('message', PMA_Message::error($error_message)); } else { $error_message = strtr($error_message, array('<br />' => '[br]')); /* Load gettext for fatal errors */ if (!function_exists('__')) { include_once './libraries/php-gettext/gettext.inc'; } // these variables are used in the included file libraries/error.inc.php $error_header = __('Error'); $lang = $GLOBALS['available_languages'][$GLOBALS['lang']][1]; $dir = $GLOBALS['text_dir']; // on fatal errors it cannot hurt to always delete the current session if ($delete_session && isset($GLOBALS['session_name']) && isset($_COOKIE[$GLOBALS['session_name']])) { $GLOBALS['PMA_Config']->removeCookie($GLOBALS['session_name']); } // Displays the error message include './libraries/error.inc.php'; } if (!defined('TESTSUITE')) { exit; } }
/** * Display the form used to select a file to import from the server upload directory * * @param array $import_list array of import types * @param string $uploaddir upload directory * * @return nothing */ function PMA_selectUploadFile($import_list, $uploaddir) { echo '<label for="radio_local_import_file">' . sprintf(__("Select from the web server upload directory <b>%s</b>:"), htmlspecialchars(PMA_userDir($uploaddir))) . '</label>'; $extensions = ''; foreach ($import_list as $key => $val) { if (!empty($extensions)) { $extensions .= '|'; } $extensions .= $val['extension']; } $matcher = '@\\.(' . $extensions . ')(\\.(' . PMA_supportedDecompressions() . '))?$@'; $active = isset($timeout_passed) && $timeout_passed && isset($local_import_file) ? $local_import_file : ''; $files = PMA_getFileSelectOptions(PMA_userDir($uploaddir), $matcher, $active); if ($files === false) { PMA_Message::error(__('The directory you set for upload work cannot be reached'))->display(); } elseif (!empty($files)) { echo "\n"; echo ' <select style="margin: 5px" size="1" name="local_import_file" id="select_local_import_file">' . "\n"; echo ' <option value=""> </option>' . "\n"; echo $files; echo ' </select>' . "\n"; } elseif (empty($files)) { echo '<i>' . __('There are no files to upload') . '</i>'; } }