<?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 listingrequire_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 querywindowif (! $display_tab) {$display_tab = 'full';$is_querywindow = false;} else {$is_querywindow = true;}// query to showif (true === $query) {$query = empty($GLOBALS['sql_query']) ? '' : $GLOBALS['sql_query'];}// set enctype to multipart for file uploadsif ($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 outputif ($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 queryboxif ($display_tab === 'full' || $display_tab === 'sql') {PMA_sqlQueryFormInsert($query, $is_querywindow);}// display uploadsif ($display_tab === 'files' && $GLOBALS['is_upload']) {PMA_sqlQueryFormUpload();}// Bookmark Supportif ($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.Kawadaif (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 textareaif ($GLOBALS['cfg']['TextareaAutoSelect']) {$auto_sel = ' onfocus="selectContent( this, sql_box_locked, true )"';} else {$auto_sel = '';}// enable locking if inside query windowif ($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 heightecho '</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 hereif (!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 outputecho '<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>';}}?>