Move common functions
git-svn-id: https://adminer.svn.sourceforge.net/svnroot/adminer/trunk@789 7c3ca157-0c34-0410-bff1-cbf682f78f5c
This commit is contained in:
parent
0f850a658f
commit
61640ee6d7
|
@ -1,104 +1,4 @@
|
||||||
<?php
|
<?php
|
||||||
function input($name, $field, $value) {
|
|
||||||
global $types;
|
|
||||||
$name = htmlspecialchars(bracket_escape($name));
|
|
||||||
echo "<td class='function'>";
|
|
||||||
if ($field["type"] == "enum") {
|
|
||||||
echo " </td><td>" . (isset($_GET["select"]) ? ' <label><input type="radio" name="fields[' . $name . ']" value="-1" checked="checked" /><em>' . lang('original') . '</em></label>' : "");
|
|
||||||
if ($field["null"] || isset($_GET["default"])) {
|
|
||||||
echo ' <label><input type="radio" name="fields[' . $name . ']" value=""' . (($field["null"] ? isset($value) : strlen($value)) || isset($_GET["select"]) ? '' : ' checked="checked"') . ' />' . ($field["null"] ? '<em>NULL</em>' : '') . '</label>';
|
|
||||||
}
|
|
||||||
if (!isset($_GET["default"])) {
|
|
||||||
echo '<input type="radio" name="fields[' . $name . ']" value="0"' . ($value === 0 ? ' checked="checked"' : '') . ' />';
|
|
||||||
}
|
|
||||||
preg_match_all("~'((?:[^']+|'')*)'~", $field["length"], $matches);
|
|
||||||
foreach ($matches[1] as $i => $val) {
|
|
||||||
$val = stripcslashes(str_replace("''", "'", $val));
|
|
||||||
$checked = (is_int($value) ? $value == $i+1 : $value === $val);
|
|
||||||
echo ' <label><input type="radio" name="fields[' . $name . ']" value="' . (isset($_GET["default"]) ? (strlen($val) ? htmlspecialchars($val) : " ") : $i+1) . '"' . ($checked ? ' checked="checked"' : '') . ' />' . htmlspecialchars($val) . '</label>';
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$first = ($field["null"] || isset($_GET["default"])) + isset($_GET["select"]);
|
|
||||||
$onchange = ($first ? ' onchange="var f = this.form[\'function[' . addcslashes($name, "\r\n'\\") . ']\']; if (' . $first . ' > f.selectedIndex) f.selectedIndex = ' . $first . ';"' : '');
|
|
||||||
$options = array("");
|
|
||||||
if (!isset($_GET["default"])) {
|
|
||||||
if (preg_match('~char|date|time~', $field["type"])) {
|
|
||||||
$options = (preg_match('~char~', $field["type"]) ? array("", "md5", "sha1", "password", "uuid") : array("", "now")); //! JavaScript for disabling maxlength
|
|
||||||
}
|
|
||||||
if (!isset($_GET["call"]) && (isset($_GET["select"]) || where($_GET))) {
|
|
||||||
// relative functions
|
|
||||||
if (preg_match('~int|float|double|decimal~', $field["type"])) {
|
|
||||||
$options = array("", "+", "-");
|
|
||||||
}
|
|
||||||
if (preg_match('~date~', $field["type"])) {
|
|
||||||
$options[] = "+ interval";
|
|
||||||
$options[] = "- interval";
|
|
||||||
}
|
|
||||||
if (preg_match('~time~', $field["type"])) {
|
|
||||||
$options[] = "addtime";
|
|
||||||
$options[] = "subtime";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($field["null"] || isset($_GET["default"])) {
|
|
||||||
array_unshift($options, "NULL");
|
|
||||||
}
|
|
||||||
echo (count($options) > 1 || isset($_GET["select"]) ? '<select name="function[' . $name . ']">' . (isset($_GET["select"]) ? '<option value="orig">' . lang('original') . '</option>' : '') . optionlist($options, ($value === false ? null : (isset($value) ? (string) $_POST["function"][$name] : 'NULL'))) . '</select>' : " ") . '</td><td>';
|
|
||||||
if ($field["type"] == "set") { //! 64 bits
|
|
||||||
preg_match_all("~'((?:[^']+|'')*)'~", $field["length"], $matches);
|
|
||||||
foreach ($matches[1] as $i => $val) {
|
|
||||||
$val = stripcslashes(str_replace("''", "'", $val));
|
|
||||||
$checked = (is_int($value) ? ($value >> $i) & 1 : in_array($val, explode(",", $value), true));
|
|
||||||
echo ' <label><input type="checkbox" name="fields[' . $name . '][' . $i . ']" value="' . (isset($_GET["default"]) ? htmlspecialchars($val) : 1 << $i) . '"' . ($checked ? ' checked="checked"' : '') . $onchange . ' />' . htmlspecialchars($val) . '</label>';
|
|
||||||
}
|
|
||||||
} elseif (strpos($field["type"], "text") !== false) {
|
|
||||||
echo '<textarea name="fields[' . $name . ']" cols="50" rows="12"' . $onchange . '>' . htmlspecialchars($value) . '</textarea>';
|
|
||||||
} elseif (preg_match('~binary|blob~', $field["type"])) {
|
|
||||||
echo (ini_get("file_uploads") ? '<input type="file" name="' . $name . '"' . $onchange . ' />' : lang('File uploads are disabled.') . ' ');
|
|
||||||
} else {
|
|
||||||
// int(3) is only a display hint
|
|
||||||
$maxlength = (!ereg('int', $field["type"]) && preg_match('~^([0-9]+)(,([0-9]+))?$~', $field["length"], $match) ? ($match[1] + ($match[3] ? 1 : 0) + ($match[2] && !$field["unsigned"] ? 1 : 0)) : ($types[$field["type"]] ? $types[$field["type"]] + ($field["unsigned"] ? 0 : 1) : 0));
|
|
||||||
echo '<input name="fields[' . $name . ']" value="' . htmlspecialchars($value) . '"' . ($maxlength ? " maxlength='$maxlength'" : "") . $onchange . ' />';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function process_input($name, $field) {
|
|
||||||
global $dbh;
|
|
||||||
$idf = bracket_escape($name);
|
|
||||||
$function = $_POST["function"][$idf];
|
|
||||||
$value = $_POST["fields"][$idf];
|
|
||||||
if ($field["type"] == "enum" ? $value == -1 : $function == "orig") {
|
|
||||||
return false;
|
|
||||||
} elseif ($field["type"] == "enum" || $field["auto_increment"] ? !strlen($value) : $function == "NULL") {
|
|
||||||
return "NULL";
|
|
||||||
} elseif ($field["type"] == "enum") {
|
|
||||||
return (isset($_GET["default"]) ? $dbh->quote($value) : intval($value));
|
|
||||||
} elseif ($field["type"] == "set") {
|
|
||||||
return (isset($_GET["default"]) ? "'" . implode(",", array_map('escape_string', (array) $value)) . "'" : array_sum((array) $value));
|
|
||||||
} elseif (preg_match('~binary|blob~', $field["type"])) {
|
|
||||||
$file = get_file($idf);
|
|
||||||
if (!is_string($file)) {
|
|
||||||
return false; //! report errors
|
|
||||||
}
|
|
||||||
return "_binary" . (is_string($file) ? $dbh->quote($file) : "");
|
|
||||||
} elseif ($field["type"] == "timestamp" && $value == "CURRENT_TIMESTAMP") {
|
|
||||||
return $value;
|
|
||||||
} elseif (preg_match('~^(now|uuid)$~', $function)) {
|
|
||||||
return "$function()";
|
|
||||||
} elseif (preg_match('~^[+-]$~', $function)) {
|
|
||||||
return idf_escape($name) . " $function " . $dbh->quote($value);
|
|
||||||
} elseif (preg_match('~^[+-] interval$~', $function)) {
|
|
||||||
return idf_escape($name) . " $function " . (preg_match("~^([0-9]+|'[0-9.: -]') [A-Z_]+$~i", $value) ? $value : $dbh->quote($value));
|
|
||||||
} elseif (preg_match('~^(addtime|subtime)$~', $function)) {
|
|
||||||
return "$function(" . idf_escape($name) . ", " . $dbh->quote($value) . ")";
|
|
||||||
} elseif (preg_match('~^(md5|sha1|password)$~', $function)) {
|
|
||||||
return "$function(" . $dbh->quote($value) . ")";
|
|
||||||
} else {
|
|
||||||
return $dbh->quote($value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function referencable_primary($self) {
|
function referencable_primary($self) {
|
||||||
$return = array(); // table_name => field
|
$return = array(); // table_name => field
|
||||||
foreach (table_status_referencable() as $table_name => $table) {
|
foreach (table_status_referencable() as $table_name => $table) {
|
||||||
|
|
|
@ -1,13 +1,4 @@
|
||||||
<?php
|
<?php
|
||||||
function dump_csv($row) {
|
|
||||||
foreach ($row as $key => $val) {
|
|
||||||
if (preg_match("~[\"\n,]~", $val) || (isset($val) && !strlen($val))) {
|
|
||||||
$row[$key] = '"' . str_replace('"', '""', $val) . '"';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
echo implode(",", $row) . "\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
function dump_table($table, $style, $is_view = false) {
|
function dump_table($table, $style, $is_view = false) {
|
||||||
global $dbh;
|
global $dbh;
|
||||||
if ($_POST["format"] == "csv") {
|
if ($_POST["format"] == "csv") {
|
||||||
|
|
|
@ -258,3 +258,112 @@ function hidden_fields($process, $ignore = array()) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function input($name, $field, $value) {
|
||||||
|
global $types;
|
||||||
|
$name = htmlspecialchars(bracket_escape($name));
|
||||||
|
echo "<td class='function'>";
|
||||||
|
if ($field["type"] == "enum") {
|
||||||
|
echo " </td><td>" . (isset($_GET["select"]) ? ' <label><input type="radio" name="fields[' . $name . ']" value="-1" checked="checked" /><em>' . lang('original') . '</em></label>' : "");
|
||||||
|
if ($field["null"] || isset($_GET["default"])) {
|
||||||
|
echo ' <label><input type="radio" name="fields[' . $name . ']" value=""' . (($field["null"] ? isset($value) : strlen($value)) || isset($_GET["select"]) ? '' : ' checked="checked"') . ' />' . ($field["null"] ? '<em>NULL</em>' : '') . '</label>';
|
||||||
|
}
|
||||||
|
if (!isset($_GET["default"])) {
|
||||||
|
echo '<input type="radio" name="fields[' . $name . ']" value="0"' . ($value === 0 ? ' checked="checked"' : '') . ' />';
|
||||||
|
}
|
||||||
|
preg_match_all("~'((?:[^']+|'')*)'~", $field["length"], $matches);
|
||||||
|
foreach ($matches[1] as $i => $val) {
|
||||||
|
$val = stripcslashes(str_replace("''", "'", $val));
|
||||||
|
$checked = (is_int($value) ? $value == $i+1 : $value === $val);
|
||||||
|
echo ' <label><input type="radio" name="fields[' . $name . ']" value="' . (isset($_GET["default"]) ? (strlen($val) ? htmlspecialchars($val) : " ") : $i+1) . '"' . ($checked ? ' checked="checked"' : '') . ' />' . htmlspecialchars($val) . '</label>';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$first = ($field["null"] || isset($_GET["default"])) + isset($_GET["select"]);
|
||||||
|
$onchange = ($first ? ' onchange="var f = this.form[\'function[' . addcslashes($name, "\r\n'\\") . ']\']; if (' . $first . ' > f.selectedIndex) f.selectedIndex = ' . $first . ';"' : '');
|
||||||
|
$options = array("");
|
||||||
|
if (!isset($_GET["default"])) {
|
||||||
|
if (preg_match('~char|date|time~', $field["type"])) {
|
||||||
|
$options = (preg_match('~char~', $field["type"]) ? array("", "md5", "sha1", "password", "uuid") : array("", "now")); //! JavaScript for disabling maxlength
|
||||||
|
}
|
||||||
|
if (!isset($_GET["call"]) && (isset($_GET["select"]) || where($_GET))) {
|
||||||
|
// relative functions
|
||||||
|
if (preg_match('~int|float|double|decimal~', $field["type"])) {
|
||||||
|
$options = array("", "+", "-");
|
||||||
|
}
|
||||||
|
if (preg_match('~date~', $field["type"])) {
|
||||||
|
$options[] = "+ interval";
|
||||||
|
$options[] = "- interval";
|
||||||
|
}
|
||||||
|
if (preg_match('~time~', $field["type"])) {
|
||||||
|
$options[] = "addtime";
|
||||||
|
$options[] = "subtime";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($field["null"] || isset($_GET["default"])) {
|
||||||
|
array_unshift($options, "NULL");
|
||||||
|
}
|
||||||
|
echo (count($options) > 1 || isset($_GET["select"]) ? '<select name="function[' . $name . ']">' . (isset($_GET["select"]) ? '<option value="orig">' . lang('original') . '</option>' : '') . optionlist($options, ($value === false ? null : (isset($value) ? (string) $_POST["function"][$name] : 'NULL'))) . '</select>' : " ") . '</td><td>';
|
||||||
|
if ($field["type"] == "set") { //! 64 bits
|
||||||
|
preg_match_all("~'((?:[^']+|'')*)'~", $field["length"], $matches);
|
||||||
|
foreach ($matches[1] as $i => $val) {
|
||||||
|
$val = stripcslashes(str_replace("''", "'", $val));
|
||||||
|
$checked = (is_int($value) ? ($value >> $i) & 1 : in_array($val, explode(",", $value), true));
|
||||||
|
echo ' <label><input type="checkbox" name="fields[' . $name . '][' . $i . ']" value="' . (isset($_GET["default"]) ? htmlspecialchars($val) : 1 << $i) . '"' . ($checked ? ' checked="checked"' : '') . $onchange . ' />' . htmlspecialchars($val) . '</label>';
|
||||||
|
}
|
||||||
|
} elseif (strpos($field["type"], "text") !== false) {
|
||||||
|
echo '<textarea name="fields[' . $name . ']" cols="50" rows="12"' . $onchange . '>' . htmlspecialchars($value) . '</textarea>';
|
||||||
|
} elseif (preg_match('~binary|blob~', $field["type"])) {
|
||||||
|
echo (ini_get("file_uploads") ? '<input type="file" name="' . $name . '"' . $onchange . ' />' : lang('File uploads are disabled.') . ' ');
|
||||||
|
} else {
|
||||||
|
// int(3) is only a display hint
|
||||||
|
$maxlength = (!ereg('int', $field["type"]) && preg_match('~^([0-9]+)(,([0-9]+))?$~', $field["length"], $match) ? ($match[1] + ($match[3] ? 1 : 0) + ($match[2] && !$field["unsigned"] ? 1 : 0)) : ($types[$field["type"]] ? $types[$field["type"]] + ($field["unsigned"] ? 0 : 1) : 0));
|
||||||
|
echo '<input name="fields[' . $name . ']" value="' . htmlspecialchars($value) . '"' . ($maxlength ? " maxlength='$maxlength'" : "") . $onchange . ' />';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function process_input($name, $field) {
|
||||||
|
global $dbh;
|
||||||
|
$idf = bracket_escape($name);
|
||||||
|
$function = $_POST["function"][$idf];
|
||||||
|
$value = $_POST["fields"][$idf];
|
||||||
|
if ($field["type"] == "enum" ? $value == -1 : $function == "orig") {
|
||||||
|
return false;
|
||||||
|
} elseif ($field["type"] == "enum" || $field["auto_increment"] ? !strlen($value) : $function == "NULL") {
|
||||||
|
return "NULL";
|
||||||
|
} elseif ($field["type"] == "enum") {
|
||||||
|
return (isset($_GET["default"]) ? $dbh->quote($value) : intval($value));
|
||||||
|
} elseif ($field["type"] == "set") {
|
||||||
|
return (isset($_GET["default"]) ? "'" . implode(",", array_map('escape_string', (array) $value)) . "'" : array_sum((array) $value));
|
||||||
|
} elseif (preg_match('~binary|blob~', $field["type"])) {
|
||||||
|
$file = get_file($idf);
|
||||||
|
if (!is_string($file)) {
|
||||||
|
return false; //! report errors
|
||||||
|
}
|
||||||
|
return "_binary" . (is_string($file) ? $dbh->quote($file) : "");
|
||||||
|
} elseif ($field["type"] == "timestamp" && $value == "CURRENT_TIMESTAMP") {
|
||||||
|
return $value;
|
||||||
|
} elseif (preg_match('~^(now|uuid)$~', $function)) {
|
||||||
|
return "$function()";
|
||||||
|
} elseif (preg_match('~^[+-]$~', $function)) {
|
||||||
|
return idf_escape($name) . " $function " . $dbh->quote($value);
|
||||||
|
} elseif (preg_match('~^[+-] interval$~', $function)) {
|
||||||
|
return idf_escape($name) . " $function " . (preg_match("~^([0-9]+|'[0-9.: -]') [A-Z_]+$~i", $value) ? $value : $dbh->quote($value));
|
||||||
|
} elseif (preg_match('~^(addtime|subtime)$~', $function)) {
|
||||||
|
return "$function(" . idf_escape($name) . ", " . $dbh->quote($value) . ")";
|
||||||
|
} elseif (preg_match('~^(md5|sha1|password)$~', $function)) {
|
||||||
|
return "$function(" . $dbh->quote($value) . ")";
|
||||||
|
} else {
|
||||||
|
return $dbh->quote($value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function dump_csv($row) {
|
||||||
|
foreach ($row as $key => $val) {
|
||||||
|
if (preg_match("~[\"\n,]~", $val) || (isset($val) && !strlen($val))) {
|
||||||
|
$row[$key] = '"' . str_replace('"', '""', $val) . '"';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
echo implode(",", $row) . "\n";
|
||||||
|
}
|
||||||
|
|
27
editor/include/export.inc.php
Normal file
27
editor/include/export.inc.php
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
<?php
|
||||||
|
function dump_table($table, $style, $is_view = false) {
|
||||||
|
echo "\xef\xbb\xbf"; // UTF-8 byte order mark
|
||||||
|
dump_csv(array_keys(fields($table)));
|
||||||
|
}
|
||||||
|
|
||||||
|
function dump_data($table, $style, $select = "") {
|
||||||
|
global $dbh;
|
||||||
|
$result = $dbh->query(($select ? $select : "SELECT * FROM " . idf_escape($table)));
|
||||||
|
if ($result) {
|
||||||
|
while ($row = $result->fetch_assoc()) {
|
||||||
|
dump_csv($row);
|
||||||
|
}
|
||||||
|
$result->free();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function dump_headers($identifier, $multi_table = false) {
|
||||||
|
$filename = (strlen($identifier) ? friendly_url($identifier) : "dump");
|
||||||
|
$ext = "csv";
|
||||||
|
header("Content-Type: text/csv; charset=utf-8");
|
||||||
|
header("Content-Disposition: attachment; filename=$filename.$ext");
|
||||||
|
return $ext;
|
||||||
|
}
|
||||||
|
|
||||||
|
$dump_output = "";
|
||||||
|
$dump_format = "";
|
|
@ -20,8 +20,7 @@ include "../adminer/include/pdo.inc.php";
|
||||||
include "../adminer/include/mysql.inc.php";
|
include "../adminer/include/mysql.inc.php";
|
||||||
include "./include/auth.inc.php";
|
include "./include/auth.inc.php";
|
||||||
include "./include/connect.inc.php";
|
include "./include/connect.inc.php";
|
||||||
include "../adminer/include/editing.inc.php";
|
include "./include/export.inc.php";
|
||||||
include "../adminer/include/export.inc.php";
|
|
||||||
|
|
||||||
$confirm = " onclick=\"return confirm('" . lang('Are you sure?') . "');\"";
|
$confirm = " onclick=\"return confirm('" . lang('Are you sure?') . "');\"";
|
||||||
$error = "";
|
$error = "";
|
||||||
|
|
Loading…
Reference in a new issue