Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 280 lines (264 sloc) 12.961 kb
667bfec Decomposition
jakubvrana authored
1 <?php
79d1902 Substitute table name to $TABLE
jakubvrana authored
2 $TABLE = $_GET["select"];
3 $table_status = table_status($TABLE);
4 $indexes = indexes($TABLE);
5 $fields = fields($TABLE);
dea345c Substitute foreign keys in e-mail fields
jakubvrana authored
6 $foreign_keys = column_foreign_keys($TABLE);
7
64ba924 Comments
jakubvrana authored
8 $rights = array(); // privilege => 0
9 $columns = array(); // selectable columns
02a851c Shorten texts in PHP
jakubvrana authored
10 unset($text_length);
ffcea8b Rights
jakubvrana authored
11 foreach ($fields as $key => $field) {
c64c4fd Adminer class
jakubvrana authored
12 $name = $adminer->fieldName($field);
116c873 Ignore tables and fields with empty name
jakubvrana authored
13 if (isset($field["privileges"]["select"]) && strlen($name)) {
1e4d11e Select from foreign keys in Editor
jakubvrana authored
14 $columns[$key] = html_entity_decode(strip_tags($name));
5abd943 Change simple preg_match to ereg
jakubvrana authored
15 if (ereg('text|blob', $field["type"])) {
d24ad78 Select boxes customization
jakubvrana authored
16 $text_length = $adminer->selectLengthProcess();
16c4ddb Single faster POST query with primary key
jakubvrana authored
17 }
ffcea8b Rights
jakubvrana authored
18 }
430034c Cottage homework
jakubvrana authored
19 $rights += $field["privileges"];
20 }
21
d24ad78 Select boxes customization
jakubvrana authored
22 list($select, $group) = $adminer->selectColumnsProcess($columns, $indexes);
07e1ae1 FOUND_ROWS only with GROUP BY
jakubvrana authored
23 $where = $adminer->selectSearchProcess($fields, $indexes);
24 $order = $adminer->selectOrderProcess($fields, $indexes);
d24ad78 Select boxes customization
jakubvrana authored
25 $limit = $adminer->selectLimitProcess();
79d1902 Substitute table name to $TABLE
jakubvrana authored
26 $from = ($select ? implode(", ", $select) : "*") . " FROM " . idf_escape($TABLE) . ($where ? " WHERE " . implode(" AND ", $where) : "");
4c736a0 Use group by in export
jakubvrana authored
27 $group_by = ($group && count($group) < count($select) ? " GROUP BY " . implode(", ", $group) : "") . ($order ? " ORDER BY " . implode(", ", $order) : "");
116faf2 Mass delete
jakubvrana authored
28
29 if ($_POST && !$error) {
56948c9 $_POST[check] may be empty
jakubvrana authored
30 $where_check = "(" . implode(") OR (", array_map('where_check', (array) $_POST["check"])) . ")";
a3d2266 Order by first index in Editor by default
jakubvrana authored
31 $primary = ($indexes["PRIMARY"] ? ($select ? array_flip($indexes["PRIMARY"]["columns"]) : array()) : null); // empty array means that all primary fields are selected
d24ad78 Select boxes customization
jakubvrana authored
32 foreach ($select as $key => $val) {
33 $val = $_GET["columns"][$key];
34 if (!$val["fun"]) {
35 unset($primary[$val["col"]]);
36 }
37 }
78639a9 Function results in edit
jakubvrana authored
38 if ($_POST["export"]) {
79d1902 Substitute table name to $TABLE
jakubvrana authored
39 dump_headers($TABLE);
40 dump_table($TABLE, "");
e4f5d17 Dump column names in CSV select export
jakubvrana authored
41 if ($_POST["format"] != "sql") { // Editor doesn't send format
42 dump_csv($select ? $select : array_keys($fields));
43 }
16c4ddb Single faster POST query with primary key
jakubvrana authored
44 if (!is_array($_POST["check"]) || $primary === array()) {
79d1902 Substitute table name to $TABLE
jakubvrana authored
45 dump_data($TABLE, "INSERT", "SELECT $from" . (is_array($_POST["check"]) ? ($where ? " AND " : " WHERE ") . "($where_check)" : "") . $group_by);
16c4ddb Single faster POST query with primary key
jakubvrana authored
46 } else {
fa5c952 Use extended INSERT in select export
jakubvrana authored
47 $union = array();
f7452ad Import and export
jakubvrana authored
48 foreach ($_POST["check"] as $val) {
16c4ddb Single faster POST query with primary key
jakubvrana authored
49 // where is not unique so OR can't be used
c16c57b E-mail sending
jakubvrana authored
50 $union[] = "(SELECT $from " . ($where ? "AND " : "WHERE ") . where_check($val) . $group_by . " LIMIT 1)";
116faf2 Mass delete
jakubvrana authored
51 }
79d1902 Substitute table name to $TABLE
jakubvrana authored
52 dump_data($TABLE, "INSERT", implode(" UNION ALL ", $union));
116faf2 Mass delete
jakubvrana authored
53 }
78639a9 Function results in edit
jakubvrana authored
54 exit;
55 }
dea345c Substitute foreign keys in e-mail fields
jakubvrana authored
56 if (!$adminer->selectEmailProcess($where, $foreign_keys)) {
00d9b36 E-mail sending only in Editor
jakubvrana authored
57 if (!$_POST["import"]) { // edit
58 $result = true;
59 $affected = 0;
79d1902 Substitute table name to $TABLE
jakubvrana authored
60 $command = ($_POST["delete"] ? ($_POST["all"] && !$where ? "TRUNCATE " : "DELETE FROM ") : ($_POST["clone"] ? "INSERT INTO " : "UPDATE ")) . idf_escape($TABLE);
28b2b8d Readable variable initialization
jakubvrana authored
61 $set = array();
00d9b36 E-mail sending only in Editor
jakubvrana authored
62 if (!$_POST["delete"]) {
63 foreach ($columns as $name => $val) { //! should check also for edit or insert privileges
a0def47 Date localization
jakubvrana authored
64 $val = process_input($fields[$name]);
00d9b36 E-mail sending only in Editor
jakubvrana authored
65 if ($_POST["clone"]) {
45e0de7 Include columns list in clone
jakubvrana authored
66 $set[idf_escape($name)] = ($val !== false ? $val : idf_escape($name));
00d9b36 E-mail sending only in Editor
jakubvrana authored
67 } elseif ($val !== false) {
68 $set[] = idf_escape($name) . " = $val";
69 }
e7eb28d CSV import
jakubvrana authored
70 }
45e0de7 Include columns list in clone
jakubvrana authored
71 $command .= ($_POST["clone"] ? " (" . implode(", ", array_keys($set)) . ")\nSELECT " . implode(", ", $set) . "\nFROM " . idf_escape($TABLE) : " SET\n" . implode(",\n", $set));
e7eb28d CSV import
jakubvrana authored
72 }
00d9b36 E-mail sending only in Editor
jakubvrana authored
73 if ($_POST["delete"] || $set) {
74 if ($_POST["all"] || ($primary === array() && $_POST["check"])) {
75 $result = queries($command . ($_POST["all"] ? ($where ? "\nWHERE " . implode(" AND ", $where) : "") : "\nWHERE $where_check"));
64d616c Rename get_dbh to connection
jakubvrana authored
76 $affected = $connection->affected_rows;
00d9b36 E-mail sending only in Editor
jakubvrana authored
77 } else {
78 foreach ((array) $_POST["check"] as $val) {
79 // where is not unique so OR can't be used
988a29f Don't use aggregation functions in unique_idf
jakubvrana authored
80 $result = queries($command . "\nWHERE " . where_check($val) . (count($group) < count($select) ? "" : "\nLIMIT 1"));
00d9b36 E-mail sending only in Editor
jakubvrana authored
81 if (!$result) {
82 break;
83 }
64d616c Rename get_dbh to connection
jakubvrana authored
84 $affected += $connection->affected_rows;
38059b6 Remove empty if
jakubvrana authored
85 }
e7eb28d CSV import
jakubvrana authored
86 }
78639a9 Function results in edit
jakubvrana authored
87 }
00d9b36 E-mail sending only in Editor
jakubvrana authored
88 query_redirect(queries(), remove_from_uri("page"), lang('%d item(s) have been affected.', $affected), $result, false, !$result);
89 //! display edit page in case of an error
25f01d3 Compress export and import
jakubvrana authored
90 } elseif (is_string($file = get_file("csv_file", true))) {
00d9b36 E-mail sending only in Editor
jakubvrana authored
91 $file = preg_replace("~^\xEF\xBB\xBF~", '', $file); //! character set
cb370a8 Respect max_allowed_packet in CSV import
jakubvrana authored
92 $result = true;
e895368 Use ON DUPLICATE KEY UPDATE for CSV import
jakubvrana authored
93 $cols = array_keys($fields);
17a3c5b NULL and \r in CSV import
jakubvrana authored
94 preg_match_all('~("[^"]*"|[^"\\r\\n])+~', $file, $matches);
e895368 Use ON DUPLICATE KEY UPDATE for CSV import
jakubvrana authored
95 $affected = count($matches[0]);
00d9b36 E-mail sending only in Editor
jakubvrana authored
96 foreach ($matches[0] as $key => $val) {
cb370a8 Respect max_allowed_packet in CSV import
jakubvrana authored
97 preg_match_all('~(("[^"]*")+|[^,]*),~', "$val,", $matches2);
e895368 Use ON DUPLICATE KEY UPDATE for CSV import
jakubvrana authored
98 if (!$key && !array_diff($matches2[1], $cols)) { //! doesn't work with column names containing ",\n
00d9b36 E-mail sending only in Editor
jakubvrana authored
99 // first row corresponds to column names - use it for table structure
e895368 Use ON DUPLICATE KEY UPDATE for CSV import
jakubvrana authored
100 $cols = $matches2[1];
101 $affected--;
00d9b36 E-mail sending only in Editor
jakubvrana authored
102 } else {
e895368 Use ON DUPLICATE KEY UPDATE for CSV import
jakubvrana authored
103 $set = "";
104 foreach ($matches2[1] as $i => $col) {
64d616c Rename get_dbh to connection
jakubvrana authored
105 $set .= ", " . idf_escape($cols[$i]) . " = " . (!strlen($col) && $fields[$cols[$i]]["null"] ? "NULL" : $connection->quote(str_replace('""', '"', preg_replace('~^"|"$~', '', $col))));
00d9b36 E-mail sending only in Editor
jakubvrana authored
106 }
2c76578 Reduce size
jakubvrana authored
107 $set = substr($set, 1);
108 $result = queries("INSERT INTO " . idf_escape($_GET["select"]) . " SET$set ON DUPLICATE KEY UPDATE$set");
e895368 Use ON DUPLICATE KEY UPDATE for CSV import
jakubvrana authored
109 if (!$result) {
110 break;
cb370a8 Respect max_allowed_packet in CSV import
jakubvrana authored
111 }
112 }
113 }
114 query_redirect(queries(), remove_from_uri("page"), lang('%d row(s) have been imported.', $affected), $result, false, !$result);
00d9b36 E-mail sending only in Editor
jakubvrana authored
115 } else {
116 $error = upload_error($file);
d83b654 Detect import errors
jakubvrana authored
117 }
ec23248 Exportable select
jakubvrana authored
118 }
116faf2 Mass delete
jakubvrana authored
119 }
c16c57b E-mail sending
jakubvrana authored
120
b9ffd64 Remove common prefix in backward key
jakubvrana authored
121 $table_name = $adminer->tableName($table_status);
122 page_header(lang('Select') . ": $table_name", $error);
116faf2 Mass delete
jakubvrana authored
123
f2ed237 Display table links above table structure
jakubvrana authored
124 $set = null;
430034c Cottage homework
jakubvrana authored
125 if (isset($rights["insert"])) {
98507da Function verify_version doesn't use version parameter
jakubvrana authored
126 $set = "";
127 foreach ((array) $_GET["where"] as $val) {
128 if (count($foreign_keys[$val["col"]]) == 1 && ($val["op"] == "="
a1609c7 Align numbers to right in select
jakubvrana authored
129 || (!$val["op"] && !ereg('[_%]', $val["val"])) // LIKE in Editor
98507da Function verify_version doesn't use version parameter
jakubvrana authored
130 )) {
131 $set .= "&set" . urlencode("[" . bracket_escape($val["col"]) . "]") . "=" . urlencode($val["val"]);
132 }
133 }
667bfec Decomposition
jakubvrana authored
134 }
f2ed237 Display table links above table structure
jakubvrana authored
135 $adminer->selectLinks($table_status, $set);
667bfec Decomposition
jakubvrana authored
136
ffcea8b Rights
jakubvrana authored
137 if (!$columns) {
64d616c Rename get_dbh to connection
jakubvrana authored
138 echo "<p class='error'>" . lang('Unable to select the table') . ($fields ? "" : ": " . h($connection->error)) . ".\n";
ffcea8b Rights
jakubvrana authored
139 } else {
5ee29cb Select columns, aggregation
jakubvrana authored
140 echo "<form action='' id='form'>\n";
d24ad78 Select boxes customization
jakubvrana authored
141 echo "<div style='display: none;'>";
689699a Shortcut for htmlspecialchars
jakubvrana authored
142 echo (strlen($_GET["server"]) ? '<input type="hidden" name="server" value="' . h($_GET["server"]) . '">' : "");
3022dcb Define DB
jakubvrana authored
143 echo (strlen(DB) ? '<input type="hidden" name="db" value="' . h(DB) . '">' : ""); // not used in Editor
79d1902 Substitute table name to $TABLE
jakubvrana authored
144 echo '<input type="hidden" name="select" value="' . h($TABLE) . '">';
d24ad78 Select boxes customization
jakubvrana authored
145 echo "</div>\n";
146 $adminer->selectColumnsPrint($select, $columns);
147 $adminer->selectSearchPrint($where, $columns, $indexes);
148 $adminer->selectOrderPrint($order, $columns, $indexes);
149 $adminer->selectLimitPrint($limit);
150 $adminer->selectLengthPrint($text_length);
151 $adminer->selectActionPrint($text_length);
ffcea8b Rights
jakubvrana authored
152 echo "</form>\n";
153
07e1ae1 FOUND_ROWS only with GROUP BY
jakubvrana authored
154 $query = "SELECT " . (intval($limit) && $group && count($group) < count($select) ? "SQL_CALC_FOUND_ROWS " : "") . $from . $group_by . (strlen($limit) ? " LIMIT " . intval($limit) . (intval($_GET["page"]) ? " OFFSET " . ($limit * $_GET["page"]) : "") : "");
c64c4fd Adminer class
jakubvrana authored
155 echo $adminer->selectQuery($query);
8b74511 Print SQL query (fixes #2082448)
jakubvrana authored
156
64d616c Rename get_dbh to connection
jakubvrana authored
157 $result = $connection->query($query);
21ea4ae Check errors
jakubvrana authored
158 if (!$result) {
64d616c Rename get_dbh to connection
jakubvrana authored
159 echo "<p class='error'>" . h($connection->error) . "\n";
ffcea8b Rights
jakubvrana authored
160 } else {
f2365d0 Typo
jakubvrana authored
161 $email_fields = array();
e7eb28d CSV import
jakubvrana authored
162 echo "<form action='' method='post' enctype='multipart/form-data'>\n";
21ea4ae Check errors
jakubvrana authored
163 if (!$result->num_rows) {
ace55ed HTML instead of XHTML
jakubvrana authored
164 echo "<p class='message'>" . lang('No rows.') . "\n";
21ea4ae Check errors
jakubvrana authored
165 } else {
ba90d60 Introduce adminer_select_val
jakubvrana authored
166 $rows = array();
167 while ($row = $result->fetch_assoc()) {
168 $rows[] = $row;
169 }
4cdc459 FOUND_ROWS works with last SELECT
jakubvrana authored
170 // use count($rows) without LIMIT, COUNT(*) without grouping, FOUND_ROWS otherwise (slowest)
07e1ae1 FOUND_ROWS only with GROUP BY
jakubvrana authored
171 $found_rows = (intval($limit) && $group && count($group) < count($select)
64d616c Rename get_dbh to connection
jakubvrana authored
172 ? $connection->result($connection->query(" SELECT FOUND_ROWS()")) // space to allow mysql.trace_mode
4cdc459 FOUND_ROWS works with last SELECT
jakubvrana authored
173 : count($rows)
174 );
ba90d60 Introduce adminer_select_val
jakubvrana authored
175
09e93de Move backward keys to Editor
jakubvrana authored
176 $backward_keys = $adminer->backwardKeys($TABLE, $table_name);
c42c46a Table relations
jakubvrana authored
177
bcff025 Click on row selects it (fixes #2844098)
jakubvrana authored
178 echo "<table cellspacing='0' class='nowrap' onclick='table_click(event);'>\n";
ba90d60 Introduce adminer_select_val
jakubvrana authored
179 echo "<thead><tr><td><input type='checkbox' id='all-page' onclick='form_check(this, /check/);'>";
5034123 Apply field name with functions
jakubvrana authored
180 $names = array();
181 reset($select);
23df820 Distinguish no column order in fieldName
jakubvrana authored
182 $order = 1;
ba90d60 Introduce adminer_select_val
jakubvrana authored
183 foreach ($rows[0] as $key => $val) {
5034123 Apply field name with functions
jakubvrana authored
184 $val = $_GET["columns"][key($select)];
ba9c9a5 Display SQL function with braces in select heading
jakubvrana authored
185 $field = $fields[$select ? $val["col"] : $key];
6c97b80 Display only first five columns in Editor example
jakubvrana authored
186 $name = ($field ? $adminer->fieldName($field, $order) : "*");
116c873 Ignore tables and fields with empty name
jakubvrana authored
187 if (strlen($name)) {
6c97b80 Display only first five columns in Editor example
jakubvrana authored
188 $order++;
5034123 Apply field name with functions
jakubvrana authored
189 $names[$key] = $name;
689699a Shortcut for htmlspecialchars
jakubvrana authored
190 echo '<th><a href="' . h(remove_from_uri('(order|desc)[^=]*') . '&order%5B0%5D=' . urlencode($key) . ($_GET["order"] == array($key) && !$_GET["desc"][0] ? '&desc%5B0%5D=1' : '')) . '">' . apply_sql_function($val["fun"], $name) . "</a>"; //! columns looking like functions
116c873 Ignore tables and fields with empty name
jakubvrana authored
191 }
5034123 Apply field name with functions
jakubvrana authored
192 next($select);
ba90d60 Introduce adminer_select_val
jakubvrana authored
193 }
09e93de Move backward keys to Editor
jakubvrana authored
194 echo ($backward_keys ? "<th>" . lang('Relations') : "") . "</thead>\n";
dea345c Substitute foreign keys in e-mail fields
jakubvrana authored
195 foreach ($adminer->rowDescriptions($rows, $foreign_keys) as $n => $row) {
6b30cfa Separate checkbox
jakubvrana authored
196 $unique_idf = implode('&', unique_idf($rows[$n], $indexes));
197 echo "<tr" . odd() . "><td>" . checkbox("check[]", $unique_idf, in_array($unique_idf, (array) $_POST["check"]), "", "this.form['all'].checked = false; form_uncheck('all-page');") . (count($select) != count($group) || information_schema(DB) ? '' : " <a href='" . h(ME . "edit=" . urlencode($TABLE) . "&$unique_idf") . "'>" . lang('edit') . "</a>");
21ea4ae Check errors
jakubvrana authored
198 foreach ($row as $key => $val) {
78e49f0 Pass $field to select_val
jakubvrana authored
199 if (isset($names[$key])) {
a1609c7 Align numbers to right in select
jakubvrana authored
200 $field = $fields[$key];
d6e3fc7 Link e-mails
jakubvrana authored
201 if (strlen($val) && (!isset($email_fields[$key]) || strlen($email_fields[$key]))) {
5034123 Apply field name with functions
jakubvrana authored
202 $email_fields[$key] = (is_email($val) ? $names[$key] : ""); //! filled e-mails may be contained on other pages
116c873 Ignore tables and fields with empty name
jakubvrana authored
203 }
5911cf1 Always call select_val
jakubvrana authored
204 $link = "";
a1609c7 Align numbers to right in select
jakubvrana authored
205 $val = $adminer->editVal($val, $field);
116c873 Ignore tables and fields with empty name
jakubvrana authored
206 if (!isset($val)) {
207 $val = "<i>NULL</i>";
21ea4ae Check errors
jakubvrana authored
208 } else {
a1609c7 Align numbers to right in select
jakubvrana authored
209 if (ereg('blob|binary', $field["type"]) && strlen($val)) {
6b30cfa Separate checkbox
jakubvrana authored
210 $link = h(ME . 'download=' . urlencode($TABLE) . '&field=' . urlencode($key) . "&$unique_idf");
97b8c7b Display images in Editor
jakubvrana authored
211 }
24801a0 Display whitespace in texts (bug #2858042)
jakubvrana authored
212 if (!strlen($val)) {
116c873 Ignore tables and fields with empty name
jakubvrana authored
213 $val = "&nbsp;";
a1609c7 Align numbers to right in select
jakubvrana authored
214 } elseif (strlen($text_length) && ereg('text|blob', $field["type"]) && is_utf8($val)) {
24801a0 Display whitespace in texts (bug #2858042)
jakubvrana authored
215 $val = whitespace(shorten_utf8($val, max(0, intval($text_length)))); // usage of LEFT() would reduce traffic but complicate query
116c873 Ignore tables and fields with empty name
jakubvrana authored
216 } else {
24801a0 Display whitespace in texts (bug #2858042)
jakubvrana authored
217 $val = whitespace(h($val));
21ea4ae Check errors
jakubvrana authored
218 }
116c873 Ignore tables and fields with empty name
jakubvrana authored
219
db46fc2 Maintain insert prefill value
jakubvrana authored
220 if (!$link) { // link related items
221 foreach ((array) $foreign_keys[$key] as $foreign_key) {
222 if (count($foreign_keys[$key]) == 1 || count($foreign_key["source"]) == 1) {
223 foreach ($foreign_key["source"] as $i => $source) {
224 $link .= where_link($i, $foreign_key["target"][$i], $rows[$n][$source]);
225 }
226 $link = h((strlen($foreign_key["db"]) ? preg_replace('~([?&]db=)[^&]+~', '\\1' . urlencode($foreign_key["db"]), ME) : ME) . 'select=' . urlencode($foreign_key["table"]) . $link); // InnoDB supports non-UNIQUE keys
227 break;
116c873 Ignore tables and fields with empty name
jakubvrana authored
228 }
21ea4ae Check errors
jakubvrana authored
229 }
ffcea8b Rights
jakubvrana authored
230 }
fa3dd55 Parent
jakubvrana authored
231 }
d6e3fc7 Link e-mails
jakubvrana authored
232 if (!$link && is_email($val)) {
233 $link = "mailto:$val";
234 }
bc78866 Link URLs in select
jakubvrana authored
235 if (!$link && is_url($val)) {
236 $link = "http://www.adminer.org/redirect/?url=" . urlencode($val); // intermediate page to hide Referer
237 }
a1609c7 Align numbers to right in select
jakubvrana authored
238 $val = $adminer->selectVal($val, $link, $field);
116c873 Ignore tables and fields with empty name
jakubvrana authored
239 echo "<td>$val";
667bfec Decomposition
jakubvrana authored
240 }
241 }
09e93de Move backward keys to Editor
jakubvrana authored
242 $adminer->backwardKeysPrint($backward_keys, $rows[$n]);
ba90d60 Introduce adminer_select_val
jakubvrana authored
243 echo "\n";
5ab708a Compact pages
jakubvrana authored
244 }
21ea4ae Check errors
jakubvrana authored
245 echo "</table>\n";
e4b188c Display found rows
jakubvrana authored
246
4cdc459 FOUND_ROWS works with last SELECT
jakubvrana authored
247 if (intval($limit) && count($group) >= count($select)) {
248 // slow with big tables
249 ob_flush();
250 flush();
64d616c Rename get_dbh to connection
jakubvrana authored
251 $found_rows = $connection->result($connection->query("SELECT COUNT(*) FROM " . idf_escape($TABLE) . ($where ? " WHERE " . implode(" AND ", $where) : "")));
4cdc459 FOUND_ROWS works with last SELECT
jakubvrana authored
252 }
e4b188c Display found rows
jakubvrana authored
253 echo "<p>";
254 if (intval($limit) && $found_rows > $limit) {
64ba924 Comments
jakubvrana authored
255 // display first, previous 3, next 3 and last page
21ea4ae Check errors
jakubvrana authored
256 $max_page = floor(($found_rows - 1) / $limit);
c565c54 Let pagination function return
jakubvrana authored
257 echo lang('Page') . ":" . pagination(0) . ($_GET["page"] > 3 ? " ..." : "");
21ea4ae Check errors
jakubvrana authored
258 for ($i = max(1, $_GET["page"] - 2); $i < min($max_page, $_GET["page"] + 3); $i++) {
c565c54 Let pagination function return
jakubvrana authored
259 echo pagination($i);
21ea4ae Check errors
jakubvrana authored
260 }
c565c54 Let pagination function return
jakubvrana authored
261 echo ($_GET["page"] + 3 < $max_page ? " ..." : "") . pagination($max_page);
5ab708a Compact pages
jakubvrana authored
262 }
6b30cfa Separate checkbox
jakubvrana authored
263 echo " (" . lang('%d row(s)', $found_rows) . ") " . checkbox("all", 1, 0, lang('whole result')) . "\n";
8b74511 Print SQL query (fixes #2082448)
jakubvrana authored
264
06ce682 Display number of manipulated rows in JS confirm
jakubvrana authored
265 echo (information_schema(DB) ? "" : "<fieldset><legend>" . lang('Edit') . "</legend><div><input type='submit' name='edit' value='" . lang('Edit') . "'> <input type='submit' name='clone' value='" . lang('Clone') . "'> <input type='submit' name='delete' value='" . lang('Delete') . "' onclick=\"return confirm('" . lang('Are you sure?') . " (' + (this.form['all'].checked ? $found_rows : form_checked(this, /check/)) + ')');\"></div></fieldset>\n");
dc667ea Hide select export and import
jakubvrana authored
266 print_fieldset("export", lang('Export'));
e40612a Use radio in export
jakubvrana authored
267 echo $adminer->dumpOutput(1) . " " . $adminer->dumpFormat(1); // 1 - select
268 echo " <input type='submit' name='export' value='" . lang('Export') . "'>\n";
dc667ea Hide select export and import
jakubvrana authored
269 echo "</div></fieldset>\n";
667bfec Decomposition
jakubvrana authored
270 }
dc667ea Hide select export and import
jakubvrana authored
271 print_fieldset("import", lang('CSV Import'), !$result->num_rows);
272 echo "<input type='hidden' name='token' value='$token'><input type='file' name='csv_file'> <input type='submit' name='import' value='" . lang('Import') . "'>\n";
273 echo "</div></fieldset>\n";
c16c57b E-mail sending
jakubvrana authored
274
1e55d47 User interface for e-mail {$name}
jakubvrana authored
275 $adminer->selectEmailPrint(array_filter($email_fields, 'strlen'), $columns);
c16c57b E-mail sending
jakubvrana authored
276
e7eb28d CSV import
jakubvrana authored
277 echo "</form>\n";
667bfec Decomposition
jakubvrana authored
278 }
279 }
Something went wrong with that request. Please try again.