Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 514 lines (479 sloc) 15.987 kb
667bfec Decomposition
jakubvrana authored
1 <?php
9a176b0 Comments
jakubvrana authored
2 /** Get database connection
3 * @return Min_DB
4 */
64d616c Rename get_dbh to connection
jakubvrana authored
5 function connection() {
6 // can be used in customization, $connection is minified
7 global $connection;
8 return $connection;
c64c4fd Adminer class
jakubvrana authored
9 }
10
9a176b0 Comments
jakubvrana authored
11 /** Escape database identifier
12 * @param string
13 * @return string
14 */
667bfec Decomposition
jakubvrana authored
15 function idf_escape($idf) {
16 return "`" . str_replace("`", "``", $idf) . "`";
17 }
18
9a176b0 Comments
jakubvrana authored
19 /** Unescape database identifier
20 * @param string text inside ``
21 * @return string
22 */
667bfec Decomposition
jakubvrana authored
23 function idf_unescape($idf) {
24 return str_replace("``", "`", $idf);
25 }
26
9a176b0 Comments
jakubvrana authored
27 /** Escape or unescape string to use inside form []
28 * @param string
29 * @param bool
30 * @return string
31 */
667bfec Decomposition
jakubvrana authored
32 function bracket_escape($idf, $back = false) {
64ba924 Comments
jakubvrana authored
33 // escape brackets inside name="x[]"
73e8631 Move stuff to functions.inc.php
jakubvrana authored
34 static $trans = array(':' => ':1', ']' => ':2', '[' => ':3');
667bfec Decomposition
jakubvrana authored
35 return strtr($idf, ($back ? array_flip($trans) : $trans));
36 }
37
9a176b0 Comments
jakubvrana authored
38 /** Escape for HTML
39 * @param string
40 * @return string
41 */
689699a Shortcut for htmlspecialchars
jakubvrana authored
42 function h($string) {
43 return htmlspecialchars($string, ENT_QUOTES);
44 }
45
24801a0 Display whitespace in texts (bug #2858042)
jakubvrana authored
46 /** Convert text whitespace to HTML
47 * @param string
48 * @return string
49 */
50 function whitespace($string) {
51 return nl2br(preg_replace('~(^| ) ~m', '\\1&nbsp;', str_replace("\t", " ", $string)));
52 }
53
9a176b0 Comments
jakubvrana authored
54 /** Escape for TD
55 * @param string
56 * @return string
57 */
c196985 Function nbsp
jakubvrana authored
58 function nbsp($string) {
59 return (strlen(trim($string)) ? h($string) : "&nbsp;");
60 }
61
6b30cfa Separate checkbox
jakubvrana authored
62 /** Generate HTML checkbox
63 * @param string
64 * @param string
65 * @param bool
66 * @param string
67 * @param string
68 * @return string
69 */
70 function checkbox($name, $value, $checked, $label = "", $onclick = "") {
71 $return = "<input type='checkbox' name='$name' value='" . h($value) . "'" . ($checked ? " checked" : "") . ($onclick ? " onclick=\"$onclick\"" : "") . ">";
72 return (strlen($label) ? "<label>$return" . h($label) . "</label>" : $return);
73 }
74
9a176b0 Comments
jakubvrana authored
75 /** Generate list of HTML options
76 * @param array array of strings or arrays (creates optgroup)
77 * @param mixed
78 * @param bool always use array keys for value="", otherwise only string keys are used
79 * @return string
80 */
1e4d11e Select from foreign keys in Editor
jakubvrana authored
81 function optionlist($options, $selected = null, $use_keys = false) {
667bfec Decomposition
jakubvrana authored
82 $return = "";
83 foreach ($options as $k => $v) {
84 if (is_array($v)) {
689699a Shortcut for htmlspecialchars
jakubvrana authored
85 $return .= '<optgroup label="' . h($k) . '">';
667bfec Decomposition
jakubvrana authored
86 }
ced9de9 Create single column foreign key in table structure
jakubvrana authored
87 foreach ((is_array($v) ? $v : array($k => $v)) as $key => $val) {
cb6d36c HTML instead of XHTML
jakubvrana authored
88 $return .= '<option' . ($use_keys || is_string($key) ? ' value="' . h($key) . '"' : '') . (($use_keys || is_string($key) ? (string) $key : $val) === $selected ? ' selected' : '') . '>' . h($val);
667bfec Decomposition
jakubvrana authored
89 }
90 if (is_array($v)) {
91 $return .= '</optgroup>';
92 }
93 }
94 return $return;
95 }
96
9a176b0 Comments
jakubvrana authored
97 /** Get list of values from database
98 * @param string
99 * @param mixed
100 * @return array
101 */
0bd864e Allow specifying column in get_vals
jakubvrana authored
102 function get_vals($query, $column = 0) {
64d616c Rename get_dbh to connection
jakubvrana authored
103 global $connection;
7769f2c Separate get_vals
jakubvrana authored
104 $return = array();
64d616c Rename get_dbh to connection
jakubvrana authored
105 $result = $connection->query($query);
49f7886 SHOW DATABASES can be revoked
jakubvrana authored
106 if ($result) {
107 while ($row = $result->fetch_row()) {
0bd864e Allow specifying column in get_vals
jakubvrana authored
108 $return[] = $row[$column];
49f7886 SHOW DATABASES can be revoked
jakubvrana authored
109 }
7769f2c Separate get_vals
jakubvrana authored
110 }
111 return $return;
112 }
113
9a176b0 Comments
jakubvrana authored
114 /** Find unique identifier of a row
115 * @param array
116 * @param array result of indexes()
117 * @return string query string
118 */
667bfec Decomposition
jakubvrana authored
119 function unique_idf($row, $indexes) {
720f5fc Restructure indexes
jakubvrana authored
120 foreach ($indexes as $index) {
121 if ($index["type"] == "PRIMARY" || $index["type"] == "UNIQUE") {
122 $return = array();
123 foreach ($index["columns"] as $key) {
64ba924 Comments
jakubvrana authored
124 if (!isset($row[$key])) { // NULL is ambiguous
720f5fc Restructure indexes
jakubvrana authored
125 continue 2;
667bfec Decomposition
jakubvrana authored
126 }
430034c Cottage homework
jakubvrana authored
127 $return[] = urlencode("where[" . bracket_escape($key) . "]") . "=" . urlencode($row[$key]);
667bfec Decomposition
jakubvrana authored
128 }
720f5fc Restructure indexes
jakubvrana authored
129 return $return;
667bfec Decomposition
jakubvrana authored
130 }
131 }
132 $return = array();
133 foreach ($row as $key => $val) {
26c9d64 Fix long SQL query crash (bug #2839231)
jakubvrana authored
134 if (!preg_match('~^(COUNT\\((\\*|(DISTINCT )?`(?:[^`]|``)+`)\\)|(AVG|GROUP_CONCAT|MAX|MIN|SUM)\\(`(?:[^`]|``)+`\\))$~', $key)) { //! columns looking like functions
988a29f Don't use aggregation functions in unique_idf
jakubvrana authored
135 $return[] = (isset($val) ? urlencode("where[" . bracket_escape($key) . "]") . "=" . urlencode($val) : "null%5B%5D=" . urlencode($key));
136 }
430034c Cottage homework
jakubvrana authored
137 }
138 return $return;
139 }
140
9a176b0 Comments
jakubvrana authored
141 /** Create SQL condition from parsed query string
142 * @param array parsed query string
143 * @return string
144 */
9ea3112 Mandatory $where in where()
jakubvrana authored
145 function where($where) {
64d616c Rename get_dbh to connection
jakubvrana authored
146 global $connection;
430034c Cottage homework
jakubvrana authored
147 $return = array();
116faf2 Mass delete
jakubvrana authored
148 foreach ((array) $where["where"] as $key => $val) {
581bd35 Respect function results in where()
jakubvrana authored
149 $key = bracket_escape($key, "back");
64d616c Rename get_dbh to connection
jakubvrana authored
150 $return[] = (preg_match('~^[A-Z0-9_]+\\(`(?:[^`]|``)+`\\)$~', $key) ? $key : idf_escape($key)) . " = BINARY " . $connection->quote($val); //! enum and set, columns looking like functions
430034c Cottage homework
jakubvrana authored
151 }
116faf2 Mass delete
jakubvrana authored
152 foreach ((array) $where["null"] as $key) {
581bd35 Respect function results in where()
jakubvrana authored
153 $key = bracket_escape($key, "back");
26c9d64 Fix long SQL query crash (bug #2839231)
jakubvrana authored
154 $return[] = (preg_match('~^[A-Z0-9_]+\\(`(?:[^`]|``)+`\\)$~', $key) ? $key : idf_escape($key)) . " IS NULL";
667bfec Decomposition
jakubvrana authored
155 }
c16c57b E-mail sending
jakubvrana authored
156 return implode(" AND ", $return);
667bfec Decomposition
jakubvrana authored
157 }
158
9a176b0 Comments
jakubvrana authored
159 /** Create SQL condition from query string
160 * @param string
161 * @return string
162 */
0cd2afb Remove single item clone
jakubvrana authored
163 function where_check($val) {
164 parse_str($val, $check);
165 return where($check);
166 }
167
9a176b0 Comments
jakubvrana authored
168 /** Create query string where condition from value
169 * @param int condition order
170 * @param string column identifier
171 * @param string
172 * @return string
173 */
c42c46a Table relations
jakubvrana authored
174 function where_link($i, $column, $value) {
db46fc2 Maintain insert prefill value
jakubvrana authored
175 return "&where%5B$i%5D%5Bcol%5D=" . urlencode($column) . "&where%5B$i%5D%5Bop%5D=%3D&where%5B$i%5D%5Bval%5D=" . urlencode($value);
c42c46a Table relations
jakubvrana authored
176 }
177
319cba4 Save e-mail from to cookie
jakubvrana authored
178 /** Set cookie valid for 1 month
179 * @param string
180 * @param string
181 * @return bool
182 */
183 function cookie($name, $value) {
3675fe6 Simplify cookie expiration
jakubvrana authored
184 return setcookie($name, $value, time() + 2592000, preg_replace('~\\?.*~', '', $_SERVER["REQUEST_URI"])); // 2592000 = 30 * 24 * 60 * 60
319cba4 Save e-mail from to cookie
jakubvrana authored
185 }
186
9a176b0 Comments
jakubvrana authored
187 /** Send Location header and exit
188 * @param string
189 * @param string
190 * @return null
191 */
430034c Cottage homework
jakubvrana authored
192 function redirect($location, $message = null) {
193 if (isset($message)) {
ff74bf0 Allow multiple messages
jakubvrana authored
194 $_SESSION["messages"][] = $message;
430034c Cottage homework
jakubvrana authored
195 }
196 header("Location: " . (strlen($location) ? $location : "."));
197 exit;
198 }
199
9a176b0 Comments
jakubvrana authored
200 /** Execute query and redirect if successful
201 * @param string
202 * @param string
203 * @param string
204 * @param bool
205 * @param bool
206 * @param bool
207 * @return bool
208 */
748ee83 Print SQL command with multiple queries
jakubvrana authored
209 function query_redirect($query, $location, $message, $redirect = true, $execute = true, $failed = false) {
64d616c Rename get_dbh to connection
jakubvrana authored
210 global $connection, $error, $adminer;
10bdbed Save queries to history
jakubvrana authored
211 $sql = "";
212 if ($query) {
c64c4fd Adminer class
jakubvrana authored
213 $sql = $adminer->messageQuery($query);
10bdbed Save queries to history
jakubvrana authored
214 }
748ee83 Print SQL command with multiple queries
jakubvrana authored
215 if ($execute) {
64d616c Rename get_dbh to connection
jakubvrana authored
216 $failed = !$connection->query($query);
748ee83 Print SQL command with multiple queries
jakubvrana authored
217 }
218 if ($failed) {
64d616c Rename get_dbh to connection
jakubvrana authored
219 $error = h($connection->error) . $sql;
c48a017 Print SQL query by error
jakubvrana authored
220 return false;
f91b2c4 Print SQL query by message
jakubvrana authored
221 }
c48a017 Print SQL query by error
jakubvrana authored
222 if ($redirect) {
223 redirect($location, $message . $sql);
224 }
225 return true;
f91b2c4 Print SQL query by message
jakubvrana authored
226 }
227
9a176b0 Comments
jakubvrana authored
228 /** Execute and remember query
229 * @param string null to return remembered queries
230 * @return Min_Result
231 */
748ee83 Print SQL command with multiple queries
jakubvrana authored
232 function queries($query = null) {
64d616c Rename get_dbh to connection
jakubvrana authored
233 global $connection;
748ee83 Print SQL command with multiple queries
jakubvrana authored
234 static $queries = array();
235 if (!isset($query)) {
64ba924 Comments
jakubvrana authored
236 // return executed queries without parameter
36950eb Tables and views
jakubvrana authored
237 return implode(";\n", $queries);
748ee83 Print SQL command with multiple queries
jakubvrana authored
238 }
239 $queries[] = $query;
64d616c Rename get_dbh to connection
jakubvrana authored
240 return $connection->query($query);
748ee83 Print SQL command with multiple queries
jakubvrana authored
241 }
242
9a176b0 Comments
jakubvrana authored
243 /** Remove parameter from query string
244 * @param string
245 * @return string
246 */
d41d446 remove_from_uri()
jakubvrana authored
247 function remove_from_uri($param = "") {
6272cae Unconditionally remove session_name() in remove_from_uri()
jakubvrana authored
248 $param = "($param|" . session_name() . ")";
d41d446 remove_from_uri()
jakubvrana authored
249 return preg_replace("~\\?$param=[^&]*&~", '?', preg_replace("~\\?$param=[^&]*\$|&$param=[^&]*~", '', $_SERVER["REQUEST_URI"]));
250 }
251
9a176b0 Comments
jakubvrana authored
252 /** Generate page number for pagination
253 * @param int
254 * @return string
255 */
c565c54 Let pagination function return
jakubvrana authored
256 function pagination($page) {
689699a Shortcut for htmlspecialchars
jakubvrana authored
257 return " " . ($page == $_GET["page"] ? $page + 1 : '<a href="' . h(remove_from_uri("page") . ($page ? "&page=$page" : "")) . '">' . ($page + 1) . "</a>");
1456283 Pages on last page
jakubvrana authored
258 }
259
9a176b0 Comments
jakubvrana authored
260 /** Get file contents from $_FILES or $_POST["files"]
261 * @param string
262 * @param bool
263 * @return string
264 */
25f01d3 Compress export and import
jakubvrana authored
265 function get_file($key, $decompress = false) {
64ba924 Comments
jakubvrana authored
266 // returns int for error, string otherwise
25f01d3 Compress export and import
jakubvrana authored
267 $file = $_POST["files"][$key];
268 if (isset($file)) {
64ba924 Comments
jakubvrana authored
269 // get the file from hidden field if the user was logged out
25f01d3 Compress export and import
jakubvrana authored
270 $length = strlen($file);
271 if ($length && $length < 4) {
272 return intval($file);
273 }
274 return base64_decode($file);
275 }
276 $file = $_FILES[$key];
277 if (!$file || $file["error"]) {
278 return $file["error"];
430034c Cottage homework
jakubvrana authored
279 }
0a2d81d Bzip2 import
jakubvrana authored
280 return file_get_contents($decompress && ereg('\\.gz$', $file["name"]) ? "compress.zlib://$file[tmp_name]"
281 : ($decompress && ereg('\\.bz2$', $file["name"]) ? "compress.bzip2://$file[tmp_name]"
282 : $file["tmp_name"]
283 )); //! may not be reachable because of open_basedir
430034c Cottage homework
jakubvrana authored
284 }
285
9a176b0 Comments
jakubvrana authored
286 /** Determine upload error
287 * @param int
288 * @return string
289 */
e2a03c0 Show upload_max_filesize
jakubvrana authored
290 function upload_error($error) {
291 $max_size = ($error == UPLOAD_ERR_INI_SIZE ? ini_get("upload_max_filesize") : null); // post_max_size is checked in index.php
b2a7c7a Execute SQL file stored on server disk
jakubvrana authored
292 return ($error ? lang('Unable to upload a file.') . ($max_size ? " " . lang('Maximum allowed file size is %sB.', $max_size) : "") : lang('File does not exist.'));
e2a03c0 Show upload_max_filesize
jakubvrana authored
293 }
294
9a176b0 Comments
jakubvrana authored
295 /** Generate class for odd rows
296 * @param string return this for odd rows, empty to reset counter
297 * @return string
298 */
299 function odd($return = ' class="odd"') {
4e5b126 Highlight odd and hover rows
jakubvrana authored
300 static $i = 0;
9a176b0 Comments
jakubvrana authored
301 if (!$return) { // reset counter
1b97f48 Reset odd() for each result
jakubvrana authored
302 $i = -1;
4e5b126 Highlight odd and hover rows
jakubvrana authored
303 }
9a176b0 Comments
jakubvrana authored
304 return ($i++ % 2 ? $return : '');
4e5b126 Highlight odd and hover rows
jakubvrana authored
305 }
306
9a176b0 Comments
jakubvrana authored
307 /** Check whether the string is in UTF-8
308 * @param string
309 * @return bool
310 */
017ffb5 Better UTF-8 detection
jakubvrana authored
311 function is_utf8($val) {
64ba924 Comments
jakubvrana authored
312 // don't print control chars except \t\r\n
017ffb5 Better UTF-8 detection
jakubvrana authored
313 return (preg_match('~~u', $val) && !preg_match('~[\\0-\\x8\\xB\\xC\\xE-\\x1F]~', $val));
314 }
315
9a176b0 Comments
jakubvrana authored
316 /** Shorten UTF-8 string
317 * @param string
318 * @param int
319 * @param string
320 * @return string escaped string with appended ...
321 */
cd07584 Save SQL query to history
jakubvrana authored
322 function shorten_utf8($string, $length = 80, $suffix = "") {
11982f1 Shorten printed SQL query
jakubvrana authored
323 if (!preg_match("(^([\t\r\n -\x{FFFF}]{0,$length})($)?)u", $string, $match)) { // ~s causes trash in $match[2] under some PHP versions, (.|\n) is slow
324 preg_match("(^([\t\r\n -~]{0,$length})($)?)", $string, $match);
95764b0 Shorten binary strings
jakubvrana authored
325 }
11982f1 Shorten printed SQL query
jakubvrana authored
326 return h($match[1]) . $suffix . (isset($match[2]) ? "" : "<em>...</em>");
02a851c Shorten texts in PHP
jakubvrana authored
327 }
3920ebb Remove InnoDB table comment in Tables and views
jakubvrana authored
328
9a176b0 Comments
jakubvrana authored
329 /** Generate friendly URL
330 * @param string
331 * @return string
332 */
8251896 Downloaded file name
jakubvrana authored
333 function friendly_url($val) {
64ba924 Comments
jakubvrana authored
334 // used for blobs and export
8251896 Downloaded file name
jakubvrana authored
335 return preg_replace('~[^a-z0-9_]~i', '-', $val);
336 }
337
9a176b0 Comments
jakubvrana authored
338 /** Print hidden fields
339 * @param array
340 * @param array
341 * @return null
342 */
820c882 Bulk clone
jakubvrana authored
343 function hidden_fields($process, $ignore = array()) {
5d7071a Choose language through option-list
jakubvrana authored
344 while (list($key, $val) = each($process)) {
345 if (is_array($val)) {
346 foreach ($val as $k => $v) {
347 $process[$key . "[$k]"] = $v;
348 }
349 } elseif (!in_array($key, $ignore)) {
689699a Shortcut for htmlspecialchars
jakubvrana authored
350 echo '<input type="hidden" name="' . h($key) . '" value="' . h($val) . '">';
5d7071a Choose language through option-list
jakubvrana authored
351 }
352 }
353 }
61640ee Move common functions
jakubvrana authored
354
9a176b0 Comments
jakubvrana authored
355 /** Find out foreign keys for each column
356 * @param string
357 * @return array array($col => array())
358 */
1e4d11e Select from foreign keys in Editor
jakubvrana authored
359 function column_foreign_keys($table) {
360 $return = array();
361 foreach (foreign_keys($table) as $foreign_key) {
362 foreach ($foreign_key["source"] as $val) {
363 $return[$val][] = $foreign_key;
364 }
365 }
366 return $return;
367 }
368
9a176b0 Comments
jakubvrana authored
369 /** Print edit input field
370 * @param array one field from fields()
371 * @param mixed
372 * @param string
373 * @return null
374 */
1e4d11e Select from foreign keys in Editor
jakubvrana authored
375 function input($field, $value, $function) {
c64c4fd Adminer class
jakubvrana authored
376 global $types, $adminer;
689699a Shortcut for htmlspecialchars
jakubvrana authored
377 $name = h(bracket_escape($field["field"]));
61640ee Move common functions
jakubvrana authored
378 echo "<td class='function'>";
379 if ($field["type"] == "enum") {
cb6d36c HTML instead of XHTML
jakubvrana authored
380 echo "&nbsp;<td>" . (isset($_GET["select"]) ? " <label><input type='radio' name='fields[$name]' value='-1' checked><em>" . lang('original') . "</em></label>" : "");
4cead56 Edit default values directly in table creation
jakubvrana authored
381 if ($field["null"]) {
cb6d36c HTML instead of XHTML
jakubvrana authored
382 echo " <label><input type='radio' name='fields[$name]' value=''" . (($field["null"] ? isset($value) : strlen($value)) || isset($_GET["select"]) ? '' : ' checked') . '>' . ($field["null"] ? '<em>NULL</em>' : '') . '</label>';
61640ee Move common functions
jakubvrana authored
383 }
4cead56 Edit default values directly in table creation
jakubvrana authored
384 echo "<input type='radio' name='fields[$name]' value='0'" . ($value === 0 ? ' checked' : '') . '>';
26c9d64 Fix long SQL query crash (bug #2839231)
jakubvrana authored
385 preg_match_all("~'((?:[^']|'')*)'~", $field["length"], $matches);
61640ee Move common functions
jakubvrana authored
386 foreach ($matches[1] as $i => $val) {
387 $val = stripcslashes(str_replace("''", "'", $val));
388 $checked = (is_int($value) ? $value == $i+1 : $value === $val);
4cead56 Edit default values directly in table creation
jakubvrana authored
389 echo " <label><input type='radio' name='fields[$name]' value='" . ($i+1) . "'" . ($checked ? ' checked' : '') . '>' . h($val) . '</label>';
61640ee Move common functions
jakubvrana authored
390 }
391 } else {
9fc052b Unselect original after value input
jakubvrana authored
392 $functions = (isset($_GET["select"]) ? array("orig" => lang('original')) : array()) + $adminer->editFunctions($field);
9903946 Use original values in Editor multi edit
jakubvrana authored
393 $first = 0;
394 foreach ($functions as $key => $val) {
395 if ($key === "" || !$val) {
396 break;
397 }
398 $first++;
399 }
689699a Shortcut for htmlspecialchars
jakubvrana authored
400 $onchange = ($first ? " onchange=\"var f = this.form['function[" . addcslashes($name, "\r\n'\\") . "]']; if ($first > f.selectedIndex) f.selectedIndex = $first;\"" : "");
b74dfdc Print first function if only one
jakubvrana authored
401 echo (count($functions) > 1 ? "<select name='function[$name]'>" . optionlist($functions, !isset($function) || in_array($function, $functions) ? $function : "") . "</select>" : nbsp(reset($functions))) . '<td>';
689699a Shortcut for htmlspecialchars
jakubvrana authored
402 $input = $adminer->editInput($_GET["edit"], $field, " name='fields[$name]'$onchange", $value); // usage in call is without a table
e1abcda Treat tinyint(1) as boolean
jakubvrana authored
403 if (strlen($input)) {
404 echo $input;
1e4d11e Select from foreign keys in Editor
jakubvrana authored
405 } elseif ($field["type"] == "set") { //! 64 bits
26c9d64 Fix long SQL query crash (bug #2839231)
jakubvrana authored
406 preg_match_all("~'((?:[^']|'')*)'~", $field["length"], $matches);
61640ee Move common functions
jakubvrana authored
407 foreach ($matches[1] as $i => $val) {
408 $val = stripcslashes(str_replace("''", "'", $val));
409 $checked = (is_int($value) ? ($value >> $i) & 1 : in_array($val, explode(",", $value), true));
4cead56 Edit default values directly in table creation
jakubvrana authored
410 echo " <label><input type='checkbox' name='fields[$name][$i]' value='" . (1 << $i) . "'" . ($checked ? ' checked' : '') . "$onchange>" . h($val) . '</label>';
61640ee Move common functions
jakubvrana authored
411 }
412 } elseif (strpos($field["type"], "text") !== false) {
689699a Shortcut for htmlspecialchars
jakubvrana authored
413 echo "<textarea name='fields[$name]' cols='50' rows='12'$onchange>" . h($value) . '</textarea>';
5abd943 Change simple preg_match to ereg
jakubvrana authored
414 } elseif (ereg('binary|blob', $field["type"])) {
689699a Shortcut for htmlspecialchars
jakubvrana authored
415 echo (ini_get("file_uploads") ? "<input type='file' name='$name'$onchange>" : lang('File uploads are disabled.'));
61640ee Move common functions
jakubvrana authored
416 } else {
417 // int(3) is only a display hint
418 $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));
689699a Shortcut for htmlspecialchars
jakubvrana authored
419 echo "<input name='fields[$name]' value='" . h($value) . "'" . ($maxlength ? " maxlength='$maxlength'" : "") . "$onchange>";
61640ee Move common functions
jakubvrana authored
420 }
421 }
422 }
423
9a176b0 Comments
jakubvrana authored
424 /** Process edit input field
425 * @param one field from fields()
426 * @return string
427 */
a0def47 Date localization
jakubvrana authored
428 function process_input($field) {
64d616c Rename get_dbh to connection
jakubvrana authored
429 global $connection, $adminer;
a0def47 Date localization
jakubvrana authored
430 $idf = bracket_escape($field["field"]);
61640ee Move common functions
jakubvrana authored
431 $function = $_POST["function"][$idf];
432 $value = $_POST["fields"][$idf];
433 if ($field["type"] == "enum" ? $value == -1 : $function == "orig") {
434 return false;
435 } elseif ($field["type"] == "enum" || $field["auto_increment"] ? !strlen($value) : $function == "NULL") {
436 return "NULL";
437 } elseif ($field["type"] == "enum") {
4cead56 Edit default values directly in table creation
jakubvrana authored
438 return intval($value);
61640ee Move common functions
jakubvrana authored
439 } elseif ($field["type"] == "set") {
4cead56 Edit default values directly in table creation
jakubvrana authored
440 return array_sum((array) $value);
5abd943 Change simple preg_match to ereg
jakubvrana authored
441 } elseif (ereg('binary|blob', $field["type"])) {
61640ee Move common functions
jakubvrana authored
442 $file = get_file($idf);
443 if (!is_string($file)) {
444 return false; //! report errors
445 }
64d616c Rename get_dbh to connection
jakubvrana authored
446 return "_binary" . $connection->quote($file);
61640ee Move common functions
jakubvrana authored
447 } else {
a0def47 Date localization
jakubvrana authored
448 return $adminer->processInput($field, $value, $function);
61640ee Move common functions
jakubvrana authored
449 }
450 }
451
9a176b0 Comments
jakubvrana authored
452 /** Print data with optional compression
453 * @param string null to force output
454 * @return null
455 */
702e949 Bzip2 compression
jakubvrana authored
456 function dump($string = null) { // null $string forces sending of buffer
457 static $buffer = ""; // used to improve compression and to allow GZ archives unpackable in Total Commander
458 if ($_POST["compress"]) {
459 $buffer .= $string;
460 if (!isset($string) || strlen($buffer) > 1e6) {
461 if ($_POST["compress"] == "bz2") {
462 echo bzcompress($buffer); // should not be called repeatedly but it would require whole buffer in memory or temporary file
463 } else {
464 echo gzencode($buffer);
465 }
466 $buffer = "";
467 }
25f01d3 Compress export and import
jakubvrana authored
468 } else {
469 echo $string;
470 }
471 }
472
9a176b0 Comments
jakubvrana authored
473 /** Print CSV row
474 * @param array
475 * @return null
476 */
61640ee Move common functions
jakubvrana authored
477 function dump_csv($row) {
478 foreach ($row as $key => $val) {
479 if (preg_match("~[\"\n,]~", $val) || (isset($val) && !strlen($val))) {
480 $row[$key] = '"' . str_replace('"', '""', $val) . '"';
481 }
482 }
25f01d3 Compress export and import
jakubvrana authored
483 dump(implode(",", $row) . "\n");
61640ee Move common functions
jakubvrana authored
484 }
c16c57b E-mail sending
jakubvrana authored
485
9a176b0 Comments
jakubvrana authored
486 /** Apply SQL function
487 * @param string
488 * @param string escaped column identifier
489 * @return string
490 */
e331067 Move apply_sql_function
jakubvrana authored
491 function apply_sql_function($function, $column) {
492 return ($function ? ($function == "count distinct" ? "COUNT(DISTINCT " : strtoupper("$function(")) . "$column)" : $column);
493 }
494
9a176b0 Comments
jakubvrana authored
495 /** Check whether the string is e-mail address
496 * @param string
497 * @return bool
498 */
c16c57b E-mail sending
jakubvrana authored
499 function is_email($email) {
500 $atom = '[-a-z0-9!#$%&\'*+/=?^_`{|}~]'; // characters of local-name
501 $domain = '[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])'; // one domain component
502 return eregi("^$atom+(\\.$atom+)*@($domain?\\.)+$domain\$", $email);
503 }
dc667ea Hide select export and import
jakubvrana authored
504
505 /** Print header for hidden fieldset (close by </div></fieldset>)
506 * @param string
507 * @param string
508 * @param bool
509 * @return null
510 */
511 function print_fieldset($id, $legend, $visible = false) {
512 echo "<fieldset><legend><a href='#fieldset-$id' onclick=\"return !toggle('fieldset-$id');\">$legend</a></legend><div id='fieldset-$id'" . ($visible ? "" : " class='hidden'") . ">\n";
513 }
Something went wrong with that request. Please try again.