<?php
/* $Id: sql_query_form.lib.php,v 1.29.2.1 2006/02/18 13:54:37 cybot_tm Exp $ */
// vim: expandtab sw=4 ts=4 sts=4:
/**
* functions for displaying the sql query form
*
* @usedby server_sql.php
* @usedby db_details.php
* @usedby tbl_properties.php
* @usedby tbl_properties_structure.php
* @usedby querywindow.php
*/
require_once './libraries/file_listing.php'; // used for file listing
require_once './libraries/bookmark.lib.php'; // used for file listing
/**
* prints the sql query boxes
*
* @usedby server_sql.php
* @usedby db_details.php
* @usedby tbl_properties.php
* @usedby tbl_properties_structure.php
* @usedby querywindow.php
* @uses $GLOBALS['table']
* @uses $GLOBALS['db']
* @uses $GLOBALS['server']
* @uses $GLOBALS['goto']
* @uses $GLOBALS['is_upload'] from common.lib.php
* @uses $GLOBALS['sql_query'] from grab_globals.lib.php
* @uses $GLOBALS['cfg']['DefaultQueryTable']
* @uses $GLOBALS['cfg']['DefaultQueryDatabase']
* @uses $GLOBALS['cfg']['Servers']
* @uses $GLOBALS['cfg']['DefaultTabDatabase']
* @uses $GLOBALS['cfg']['DefaultQueryDatabase']
* @uses $GLOBALS['cfg']['DefaultQueryTable']
* @uses $GLOBALS['cfg']['Bookmark']['db']
* @uses $GLOBALS['cfg']['Bookmark']['table']
* @uses $GLOBALS['strSuccess']
* @uses PMA_generate_common_url()
* @uses PMA_backquote()
* @uses PMA_DBI_fetch_result()
* @uses PMA_showMySQLDocu()
* @uses PMA_generate_common_hidden_inputs()
* @uses PMA_sqlQueryFormBookmark()
* @uses PMA_sqlQueryFormInsert()
* @uses PMA_sqlQueryFormUpload()
* @uses PMA_DBI_QUERY_STORE
* @uses PMA_set_enc_form()
* @uses sprintf()
* @uses htmlspecialchars()
* @uses str_replace()
* @uses md5()
* @uses function_exists()
* @param boolean|string $query query to display in the textarea
* or true to display last executed
* @param boolean|string $display_tab sql|files|history|full|FALSE
* what part to display
* false if not inside querywindow
*/
function PMA_sqlQueryForm($query = true, $display_tab = false)
{
// check tab to display if inside querywindow
if (! $display_tab) {
$display_tab = 'full';
$is_querywindow = false;
} else {
$is_querywindow = true;
}
// query to show
if (true === $query) {
$query = empty($GLOBALS['sql_query']) ? '' : $GLOBALS['sql_query'];
}
// set enctype to multipart for file uploads
if ($GLOBALS['is_upload']) {
$enctype = ' enctype="multipart/form-data"';
} else {
$enctype = '';
}
$table = '';
$db = '';
if (! isset($GLOBALS['db']) || ! strlen($GLOBALS['db'])) {
// prepare for server related
$goto = empty($GLOBALS['goto']) ?
'server_sql.php' : $GLOBALS['goto'];
} elseif (! isset($GLOBALS['table']) || ! strlen($GLOBALS['table'])) {
// prepare for db related
$db = $GLOBALS['db'];
$goto = empty($GLOBALS['goto']) ?
'db_details.php' : $GLOBALS['goto'];
} else {
$table = $GLOBALS['table'];
$db = $GLOBALS['db'];
$goto = empty($GLOBALS['goto']) ?
'tbl_properties.php' : $GLOBALS['goto'];
}
// start output
if ($is_querywindow) {
?>
<form method="post" id="sqlqueryform" target="frame_content"
action="import.php"<?php echo $enctype; ?> name="sqlform"
onsubmit="var save_name = window.opener.parent.frames[1].name;
window.opener.parent.frames[1].name = save_name + '<?php echo time(); ?>';
this.target = window.opener.parent.frames[1].name;
return checkSqlQuery( this );" >
<?php
} else {
echo '<form method="post" action="import.php" ' . $enctype . ' id="sqlqueryform"'
.' onsubmit="return checkSqlQuery(this)" name="sqlform">' . "\n";
}
if ($is_querywindow) {
echo '<input type="hidden" name="focus_querywindow" value="true" />'
."\n";
if ($display_tab != 'sql' && $display_tab != 'full') {
echo '<input type="hidden" name="sql_query" value="" />' . "\n";
echo '<input type="hidden" name="show_query" value="1" />' . "\n";
}
}
echo '<input type="hidden" name="is_js_confirmed" value="0" />' . "\n"
.PMA_generate_common_hidden_inputs($db, $table) . "\n"
.'<input type="hidden" name="pos" value="0" />' . "\n"
.'<input type="hidden" name="goto" value="'
.htmlspecialchars($goto) . '" />' . "\n"
.'<input type="hidden" name="zero_rows" value="'
. htmlspecialchars($GLOBALS['strSuccess']) . '" />' . "\n"
.'<input type="hidden" name="prev_sql_query" value="'
. htmlspecialchars($query) . '" />' . "\n";
// display querybox
if ($display_tab === 'full' || $display_tab === 'sql') {
PMA_sqlQueryFormInsert($query, $is_querywindow);
}
// display uploads
if ($display_tab === 'files' && $GLOBALS['is_upload']) {
PMA_sqlQueryFormUpload();
}
// Bookmark Support
if ($display_tab === 'full' || $display_tab === 'history') {
if (! empty( $GLOBALS['cfg']['Bookmark'])
&& $GLOBALS['cfg']['Bookmark']['db']
&& $GLOBALS['cfg']['Bookmark']['table']) {
PMA_sqlQueryFormBookmark();
}
}
// Encoding setting form appended by Y.Kawada
if (function_exists('PMA_set_enc_form')) {
echo PMA_set_enc_form(' ');
}
echo '</form>' . "\n";
}
/**
* prints querybox fieldset
*
* @usedby PMA_sqlQueryForm()
* @uses $GLOBALS['text_dir']
* @uses $GLOBALS['cfg']['TextareaAutoSelect']
* @uses $GLOBALS['cfg']['TextareaCols']
* @uses $GLOBALS['cfg']['TextareaRows']
* @uses $GLOBALS['strShowThisQuery']
* @uses $GLOBALS['strGo']
* @uses PMA_availableDatabases()
* @uses PMA_USR_OS
* @uses PMA_USR_BROWSER_AGENT
* @uses PMA_USR_BROWSER_VER
* @uses PMA_availableDatabases()
* @uses htmlspecialchars()
* @param string $query query to display in the textarea
* @param boolean $is_querywindow if inside querywindow or not
*/
function PMA_sqlQueryFormInsert($query = '', $is_querywindow = false)
{
// enable auto select text in textarea
if ($GLOBALS['cfg']['TextareaAutoSelect']) {
$auto_sel = ' onfocus="selectContent( this, sql_box_locked, true )"';
} else {
$auto_sel = '';
}
// enable locking if inside query window
if ($is_querywindow) {
$locking = ' onkeypress="document.sqlform.elements[\'LockFromUpdate\'].'
.'checked = true;"';
} else {
$locking = '';
}
$table = '';
$db = '';
$fields_list = array();
if (! isset($GLOBALS['db']) || ! strlen($GLOBALS['db'])) {
// prepare for server related
$legend = sprintf($GLOBALS['strRunSQLQueryOnServer'],
htmlspecialchars(
$GLOBALS['cfg']['Servers'][$GLOBALS['server']]['host']));
} elseif (! isset($GLOBALS['table']) || ! strlen($GLOBALS['table'])) {
// prepare for db related
$db = $GLOBALS['db'];
// if you want navigation:
$strDBLink = '<a href="' . $GLOBALS['cfg']['DefaultTabDatabase']
. '?' . PMA_generate_common_url($db) . '"';
if ($is_querywindow) {
$strDBLink .= ' target="_self"'
. ' onclick="this.target=window.opener.frames[1].name"';
}
$strDBLink .= '>'
. htmlspecialchars($db) . '</a>';
// else use
// $strDBLink = htmlspecialchars($db);
$legend = sprintf($GLOBALS['strRunSQLQuery'], $strDBLink);
if (empty($query)) {
$query = str_replace('%d',
PMA_backquote($db), $GLOBALS['cfg']['DefaultQueryDatabase']);
}
} else {
$table = $GLOBALS['table'];
$db = $GLOBALS['db'];
// Get the list and number of fields
// we do a try_query here, because we could be in the query window,
// trying to synchonize and the table has not yet been created
$fields_list = PMA_DBI_fetch_result(
'SHOW FULL COLUMNS FROM ' . PMA_backquote($db)
. '.' . PMA_backquote($GLOBALS['table']));
$strDBLink = '<a href="' . $GLOBALS['cfg']['DefaultTabDatabase']
. '?' . PMA_generate_common_url($db) . '"';
if ($is_querywindow) {
$strDBLink .= ' target="_self"'
. ' onclick="this.target=window.opener.frames[1].name"';
}
$strDBLink .= '>'
. htmlspecialchars($db) . '</a>';
// else use
// $strDBLink = htmlspecialchars($db);
$legend = sprintf($GLOBALS['strRunSQLQuery'], $strDBLink);
if (empty($query) && count($fields_list)) {
$field_names = array();
foreach ($fields_list as $field) {
$field_names[] = PMA_backquote($field['Field']);
}
$query =
str_replace('%d', PMA_backquote($db),
str_replace('%t', PMA_backquote($table),
str_replace('%f',
implode(', ', $field_names ),
$GLOBALS['cfg']['DefaultQueryTable'])));
unset($field_names);
}
}
$legend .= ': ' . PMA_showMySQLDocu('SQL-Syntax', 'SELECT');
if (count($fields_list)) {
$sqlquerycontainer_id = 'sqlquerycontainer';
} else {
$sqlquerycontainer_id = 'sqlquerycontainerfull';
}
echo '<a name="querybox"></a>' . "\n"
.'<div id="queryboxcontainer">' . "\n"
.'<fieldset id="querybox">' . "\n";
echo '<legend>' . $legend . '</legend>' . "\n";
echo '<div id="queryfieldscontainer">' . "\n";
echo '<div id="' . $sqlquerycontainer_id . '">' . "\n"
.'<textarea name="sql_query" id="sqlquery"'
.' cols="' . $GLOBALS['cfg']['TextareaCols'] . '"'
.' rows="' . $GLOBALS['cfg']['TextareaRows'] . '"'
.' dir="' . $GLOBALS['text_dir'] . '"'
.$auto_sel . $locking . '>' . htmlspecialchars($query) . '</textarea>' . "\n";
echo '</div>' . "\n";
if (count($fields_list)) {
echo '<div id="tablefieldscontainer">' . "\n"
.'<label>' . $GLOBALS['strFields'] . '</label>' . "\n"
.'<select id="tablefields" name="dummy" '
.'size="' . ($GLOBALS['cfg']['TextareaRows'] - 2) . '" '
.'multiple="multiple" ondblclick="insertValueQuery()">' . "\n";
foreach ($fields_list as $field) {
echo '<option value="'
.PMA_backquote(htmlspecialchars($field['Field'])) . '"';
if (isset($field['Field']) && strlen($field['Field']) && isset($field['Comment'])) {
echo ' title="' . htmlspecialchars($field['Comment']) . '"';
}
echo '>' . htmlspecialchars( $field['Field'] ) . '</option>' . "\n";
}
echo '</select>' . "\n"
.'<div id="tablefieldinsertbuttoncontainer">' . "\n";
if ( $GLOBALS['cfg']['PropertiesIconic'] ) {
echo '<input type="button" name="insert" value="<<"'
.' onclick="insertValueQuery()"'
.' title="' . $GLOBALS['strInsert'] . '" />' . "\n";
} else {
echo '<input type="button" name="insert"'
.' value="' . $GLOBALS['strInsert'] . '"'
.' onclick="insertValueQuery()" />' . "\n";
}
echo '</div>' . "\n"
.'</div>' . "\n";
}
echo '<div class="clearfloat"></div>' . "\n";
echo '</div>' . "\n";
if (! empty($GLOBALS['cfg']['Bookmark'])
&& $GLOBALS['cfg']['Bookmark']['db']
&& $GLOBALS['cfg']['Bookmark']['table']) {
?>
<div id="bookmarkoptions">
<div class="formelement">
<label for="bkm_label">
<?php echo $GLOBALS['strBookmarkThis']; ?>:</label>
<input type="text" name="bkm_label" id="bkm_label" value="" />
</div>
<div class="formelement">
<input type="checkbox" name="bkm_all_users" id="id_bkm_all_users"
value="true" />
<label for="id_bkm_all_users">
<?php echo $GLOBALS['strBookmarkAllUsers']; ?></label>
</div>
<div class="formelement">
<input type="checkbox" name="bkm_replace" id="id_bkm_replace"
value="true" />
<label for="id_bkm_replace">
<?php echo $GLOBALS['strBookmarkReplace']; ?></label>
</div>
</div>
<?php
}
echo '<div class="clearfloat"></div>' . "\n";
echo '</fieldset>' . "\n"
.'</div>' . "\n";
echo '<fieldset id="queryboxfooter" class="tblFooters">' . "\n";
echo '<div class="formelement">' . "\n";
if ($is_querywindow) {
?>
<script type="text/javascript" language="javascript">
//<![CDATA[
document.writeln(' <input type="checkbox" name="LockFromUpdate" value="1" id="checkbox_lock" /> <label for="checkbox_lock"><?php echo $GLOBALS['strQueryWindowLock']; ?></label> ');
//]]>
</script>
<?php
}
echo '</div>' . "\n";
echo '<div class="formelement">' . "\n";
echo '<input type="checkbox" name="show_query" value="1" '
.'id="checkbox_show_query" checked="checked" />' . "\n"
.'<label for="checkbox_show_query">' . $GLOBALS['strShowThisQuery']
.'</label>' . "\n";
echo '</div>' . "\n";
echo '<input type="submit" name="SQL" value="' . $GLOBALS['strGo'] . '" />'
."\n";
echo '<div class="clearfloat"></div>' . "\n";
echo '</fieldset>' . "\n";
}
/**
* prints bookmark fieldset
*
* @usedby PMA_sqlQueryForm()
* @uses PMA_listBookmarks()
* @uses $GLOBALS['db']
* @uses $GLOBALS['pmaThemeImage']
* @uses $GLOBALS['cfg']['Bookmark']
* @uses $GLOBALS['cfg']['ReplaceHelpImg']
* @uses $GLOBALS['strBookmarkQuery']
* @uses $GLOBALS['strBookmarkView']
* @uses $GLOBALS['strDelete']
* @uses $GLOBALS['strDocu']
* @uses $GLOBALS['strGo']
* @uses $GLOBALS['strSubmit']
* @uses $GLOBALS['strVar']
* @uses count()
* @uses htmlspecialchars()
*/
function PMA_sqlQueryFormBookmark()
{
$bookmark_list = PMA_listBookmarks(isset($GLOBALS['db']) ? $GLOBALS['db'] : '', $GLOBALS['cfg']['Bookmark'] );
if (! $bookmark_list || count($bookmark_list) < 1) {
return;
}
echo '<fieldset id="bookmarkoptions">';
echo '<legend>';
echo $GLOBALS['strBookmarkQuery'] . '</legend>' . "\n";
echo '<div class="formelement">';
echo '<select name="id_bookmark">' . "\n";
echo '<option value=""></option>' . "\n";
foreach ($bookmark_list as $key => $value) {
echo '<option value="' . htmlspecialchars($key) . '">'
.htmlspecialchars($value) . '</option>' . "\n";
}
// is required for correct display with styles/line height
echo '</select> ' . "\n";
echo '</div>' . "\n";
echo '<div class="formelement">' . "\n";
echo $GLOBALS['strVar'];
if ($GLOBALS['cfg']['ReplaceHelpImg']) {
echo ' <a href="./Documentation.html#faqbookmark"'
.' target="documentation">'
.'<img class="icon" src="' . $GLOBALS['pmaThemeImage'] . 'b_help.png"'
.' border="0" width="11" height="11" align="middle"'
.' alt="' . $GLOBALS['strDocu'] . '" /></a> ';
} else {
echo ' (<a href="./Documentation.html#faqbookmark"'
.' target="documentation">' . $GLOBALS['strDocu'] . '</a>): ';
}
echo '<input type="text" name="bookmark_variable" class="textfield"'
.' size="10" />' . "\n";
echo '</div>' . "\n";
echo '<div class="formelement">' . "\n";
echo '<input type="radio" name="action_bookmark" value="0"'
.' id="radio_bookmark_exe" checked="checked" />'
.'<label for="radio_bookmark_exe">' . $GLOBALS['strSubmit']
.'</label>' . "\n";
echo '<input type="radio" name="action_bookmark" value="1"'
.' id="radio_bookmark_view" />'
.'<label for="radio_bookmark_view">' . $GLOBALS['strBookmarkView']
.'</label>' . "\n";
echo '<input type="radio" name="action_bookmark" value="2"'
.' id="radio_bookmark_del" />'
.'<label for="radio_bookmark_del">' . $GLOBALS['strDelete']
.'</label>' . "\n";
echo '</div>' . "\n";
echo '<div class="clearfloat"></div>' . "\n";
echo '</fieldset>' . "\n";
echo '<fieldset id="bookmarkoptionsfooter" class="tblFooters">' . "\n";
echo '<input type="submit" name="SQL" value="' . $GLOBALS['strGo'] . '" />';
echo '<div class="clearfloat"></div>' . "\n";
echo '</fieldset>' . "\n";
}
/**
* prints bookmark fieldset
*
* @usedby PMA_sqlQueryForm()
* @uses $GLOBALS['cfg']['GZipDump']
* @uses $GLOBALS['cfg']['BZipDump']
* @uses $GLOBALS['cfg']['UploadDir']
* @uses $GLOBALS['cfg']['AvailableCharsets']
* @uses $GLOBALS['cfg']['AllowAnywhereRecoding']
* @uses $GLOBALS['strAutodetect']
* @uses $GLOBALS['strBzip']
* @uses $GLOBALS['strCharsetOfFile']
* @uses $GLOBALS['strCompression']
* @uses $GLOBALS['strError']
* @uses $GLOBALS['strGo']
* @uses $GLOBALS['strGzip']
* @uses $GLOBALS['strLocationTextfile']
* @uses $GLOBALS['strWebServerUploadDirectory']
* @uses $GLOBALS['strWebServerUploadDirectoryError']
* @uses $GLOBALS['allow_recoding']
* @uses $GLOBALS['charset']
* @uses $GLOBALS['max_upload_size']
* @uses PMA_supportedDecompressions()
* @uses PMA_getFileSelectOptions()
* @uses PMA_displayMaximumUploadSize()
* @uses PMA_generateCharsetDropdownBox()
* @uses PMA_generateHiddenMaxFileSize()
* @uses PMA_MYSQL_INT_VERSION
* @uses PMA_CSDROPDOWN_CHARSET
* @uses empty()
*/
function PMA_sqlQueryFormUpload(){
$errors = array ();
$matcher = '@\.sql(\.(' . PMA_supportedDecompressions() . '))?$@'; // we allow only SQL here
if (!empty($GLOBALS['cfg']['UploadDir'])) {
$files = PMA_getFileSelectOptions(PMA_userDir($GLOBALS['cfg']['UploadDir']), $matcher, (isset($timeout_passed) && $timeout_passed && isset($local_import_file)) ? $local_import_file : '');
} else {
$files = '';
}
// start output
echo '<fieldset id="">';
echo '<legend>';
echo $GLOBALS['strLocationTextfile'] . '</legend>';
echo '<div class="formelement">';
echo '<input type="file" name="sql_file" class="textfield" /> ';
echo PMA_displayMaximumUploadSize($GLOBALS['max_upload_size']);
// some browsers should respect this :)
echo PMA_generateHiddenMaxFileSize($GLOBALS['max_upload_size']) . "\n";
echo '</div>';
if ($files === FALSE) {
$errors[$GLOBALS['strError']] = $GLOBALS['strWebServerUploadDirectoryError'];
} elseif (!empty($files)) {
echo '<div class="formelement">';
echo '<strong>' . $GLOBALS['strWebServerUploadDirectory'] .':</strong>' . "\n";
echo '<select size="1" name="sql_localfile">' . "\n";
echo '<option value="" selected="selected"></option>' . "\n";
echo $files;
echo '</select>' . "\n";
echo '</div>';
}
echo '<div class="clearfloat"></div>' . "\n";
echo '</fieldset>';
echo '<fieldset id="" class="tblFooters">';
if ( PMA_MYSQL_INT_VERSION < 40100
&& $GLOBALS['cfg']['AllowAnywhereRecoding']
&& $GLOBALS['allow_recoding'] ) {
echo $GLOBALS['strCharsetOfFile'] . "\n"
. '<select name="charset_of_file" size="1">' . "\n";
foreach ($GLOBALS['cfg']['AvailableCharsets'] as $temp_charset) {
echo '<option value="' . $temp_charset . '"';
if ($temp_charset == $GLOBALS['charset']) {
echo ' selected="selected"';
}
echo '>' . $temp_charset . '</option>' . "\n";
}
echo '</select>' . "\n";
} elseif (PMA_MYSQL_INT_VERSION >= 40100) {
echo $GLOBALS['strCharsetOfFile'] . "\n";
echo PMA_generateCharsetDropdownBox(PMA_CSDROPDOWN_CHARSET,
'charset_of_file', null, 'utf8', FALSE);
} // end if (recoding)
echo '<input type="submit" name="SQL" value="' . $GLOBALS['strGo']
.'" />' . "\n";
echo '<div class="clearfloat"></div>' . "\n";
echo '</fieldset>';
foreach ( $errors as $error => $message ) {
echo '<div>' . $error . '</div>';
echo '<div>' . $message . '</div>';
}
}
?>