Permalink
Browse files

Treat tinyint(1) as boolean

Use $SELF and ENT_QUOTES for compiled images

git-svn-id: https://adminer.svn.sourceforge.net/svnroot/adminer/trunk@922 7c3ca157-0c34-0410-bff1-cbf682f78f5c
  • Loading branch information...
jakubvrana
jakubvrana committed Jul 28, 2009
1 parent 2011428 commit e1abcda063bcb5ef704db6151ea72c783129929a
@@ -382,10 +382,12 @@ function editFunctions($field) {
/** Get options to display edit field
* @param string table name
* @param array single field from fields()
- * @return array options for <select> or empty to display <input>
+ * @param string attributes to use inside the tag
+ * @param string
+ * @return string custom input field or empty string for default
*/
- function editInput($table, $field) {
- return false;
+ function editInput($table, $field, $attrs, $value) {
+ return '';
}
/** Process sent input
@@ -56,7 +56,7 @@ function type_class($type) {
}
function edit_fields($fields, $collations, $type = "TABLE", $allowed = 0, $foreign_keys = array()) {
- global $inout;
+ global $inout, $SELF; // $SELF is used by compiled images
$column_comments = false;
foreach ($fields as $field) {
if (strlen($field["comment"])) {
@@ -305,9 +305,9 @@ function input($field, $value, $function) {
$first = array_search("", $functions);
$onchange = ($first ? ' onchange="var f = this.form[\'function[' . addcslashes($name, "\r\n'\\") . ']\']; if (' . $first . ' > f.selectedIndex) f.selectedIndex = ' . $first . ';"' : '');
echo (count($functions) > 1 ? '<select name="function[' . $name . ']">' . optionlist($functions, $function) . '</select>' : "&nbsp;") . '<td>';
- $options = $adminer->editInput($_GET["edit"], $field); // usage in call is without a table
- if (is_array($options)) {
- echo '<select name="fields[' . $name . ']"' . $onchange . '>' . optionlist(($options ? $options : array("" => "")), $value, true) . '</select>';
+ $input = $adminer->editInput($_GET["edit"], $field, ' name="fields[' . $name . ']"' . $onchange, $value); // usage in call is without a table
+ if (strlen($input)) {
+ echo $input;
} elseif ($field["type"] == "set") { //! 64 bits
preg_match_all("~'((?:[^']+|'')*)'~", $field["length"], $matches);
foreach ($matches[1] as $i => $val) {
View
@@ -14,6 +14,7 @@ Remove Delete button from Edit page - use mass operation for it
Faster multiple update, clone and delete
Faster table list in navigation
Use HTML Strict instead of XHTML
+Remove function minification for performance and customization
Fix grant ALL PRIVILEGES with GRANT OPTION
Fix CSV import
Fix work with default values (thanks to Jiri Pospisil)
View
@@ -177,8 +177,8 @@ function compile_file($match) {
}
$file = str_replace('<script type="text/javascript" src="editing.js"></script>' . "\n", "", $file);
$file = preg_replace_callback("~compile_file\\('([^']+)', '([^']+)'\\);~", 'compile_file', $file); // integrate static files
-$replace = 'htmlspecialchars(preg_replace("~\\\\\\\\?.*~", "", $_SERVER["REQUEST_URI"])) . "?file=\\1&amp;version=' . $VERSION;
-$file = preg_replace('~(?:\\.\\./adminer/|\\./)(default\\.css|functions\\.js|favicon\\.ico)~', '<?php echo ' . $replace . '"; ?>', $file);
+$replace = 'htmlspecialchars(preg_replace("~\\\\\\\\?.*~", "", $SELF), ENT_QUOTES) . "?file=\\1&amp;version=' . $VERSION;
+$file = preg_replace('~\\.\\./adminer/(default\\.css|functions\\.js|favicon\\.ico)~', '<?php echo ' . $replace . '"; ?>', $file);
$file = preg_replace('~\\.\\./adminer/((plus|cross|up|down|arrow)\\.gif)~', '" . ' . $replace, $file);
$file = str_replace("../externals/jush/", "http://jush.sourceforge.net/", $file);
$file = preg_replace("~<\\?php\\s*\\?>\n?|\\?>\n?<\\?php~", '', $file);
@@ -108,13 +108,17 @@ function rowDescriptions($rows, $foreignKeys) {
}
function selectVal($val, $link, $field) {
+ global $SELF; // used by compiled images
$return = ($val == "<i>NULL</i>" ? "&nbsp;" : $val);
if (ereg('blob|binary', $field["type"]) && !is_utf8($val)) {
$return = lang('%d byte(s)', strlen($val));
if (ereg("^(GIF|\xFF\xD8\xFF|\x89\x50\x4E\x47\x0D\x0A\x1A\x0A)", $val)) { // GIF|JPG|PNG, getimagetype() works with filename
$return = "<img src=\"$link\" alt='$return'>";
}
}
+ if ($field["full_type"] == "tinyint(1)" && $return != "&nbsp;") { // bool
+ $return = '<img src="' . ($val ? "../adminer/plus.gif" : "../adminer/cross.gif") . '" alt="' . htmlspecialchars($val) . '">';
+ }
return ($link ? "<a href=\"$link\">$return</a>" : $return);
}
@@ -268,34 +272,37 @@ function editFunctions($field) {
return (isset($_GET["select"]) ? array("orig" => lang('original')) : array()) + array("");
}
- function editInput($table, $field) {
+ function editInput($table, $field, $attrs, $value) {
global $dbh;
- $return = null;
$foreign_keys = column_foreign_keys($table);
foreach ((array) $foreign_keys[$field["field"]] as $foreign_key) {
if (count($foreign_key["source"]) == 1) {
$id = idf_escape($foreign_key["target"][0]);
$name = $this->rowDescription($foreign_key["table"]);
if (strlen($name) && $dbh->result($dbh->query("SELECT COUNT(*) FROM " . idf_escape($foreign_key["table"]))) <= 1000) { // optionlist with more than 1000 options would be too big
- if ($field["null"]) {
+ $return = array();
+ $result = $dbh->query("SELECT $id, $name FROM " . idf_escape($foreign_key["table"]) . " ORDER BY 2");
+ if ($field["null"] || !$result->num_rows) { // empty <select> is not HTML-valid
$return[""] = "";
}
- $result = $dbh->query("SELECT $id, $name FROM " . idf_escape($foreign_key["table"]) . " ORDER BY 2");
while ($row = $result->fetch_row()) {
$return[$row[0]] = $row[1];
}
$result->free();
- break;
+ return "<select$attrs>" . optionlist($return, $value, true) . "</select>";
}
}
}
- return $return;
+ if ($field["full_type"] == "tinyint(1)") { // bool
+ return '<input type="checkbox" value="' . htmlspecialchars($value ? $value : 1) . '"' . ($value ? ' checked="checked"' : '') . "$attrs>";
+ }
+ return '';
}
function processInput($field, $value, $function = "") {
global $dbh;
$return = $dbh->quote(ereg('date|timestamp', $field["type"]) ? preg_replace_callback('(' . preg_replace('~(\\\\\\$([0-9]))~', '(?P<p\\2>[0-9]+)', preg_quote(lang('$1-$3-$5'))) . ')', 'conversion_date', $value) : $value);
- if (!ereg('varchar|text', $field["type"]) && !strlen($value)) {
+ if (!ereg('varchar|text', $field["type"]) && $field["full_type"] != "tinyint(1)" && !strlen($value)) {
$return = "NULL";
} elseif (ereg('date|time', $field["type"]) && $value == "CURRENT_TIMESTAMP") {
$return = $value;
View
@@ -22,7 +22,6 @@ Download external files (version checker and JUSH) from trusted HTTPS if Adminer
? AJAX editing - select page has all data to display edit form
Editor:
-JavaScript data validation
+JavaScript data validation - columns containing word email, url, md5, sha1, ...
Joining tables - PRIMARY KEY (table, joining)
Rank, Tree structure
-Treat tinyint(1) as bool

0 comments on commit e1abcda

Please sign in to comment.