Upgraded phpmyadmin to 4.0.4 (All Languages) - No modifications yet
[openemr.git] / phpmyadmin / libraries / navigation / Nodes / Node_Database.class.php
blob5c0815f4087d5ee1b429595a51eafd7dbcea1708
1 <?php
2 /* vim: set expandtab sw=4 ts=4 sts=4: */
3 /**
4 * Functionality for the navigation tree
6 * @package PhpMyAdmin-Navigation
7 */
8 if (! defined('PHPMYADMIN')) {
9 exit;
12 /**
13 * Represents a database node in the navigation tree
15 class Node_Database extends Node
17 /**
18 * Initialises the class
20 * @param string $name An identifier for the new node
21 * @param int $type Type of node, may be one of CONTAINER or OBJECT
22 * @param bool $is_group Whether this object has been created
23 * while grouping nodes
25 * @return Node_Database
27 public function __construct($name, $type = Node::OBJECT, $is_group = false)
29 parent::__construct($name, $type, $is_group);
30 $this->icon = PMA_Util::getImage('s_db.png');
31 $this->links = array(
32 'text' => $GLOBALS['cfg']['DefaultTabDatabase']
33 . '?server=' . $GLOBALS['server']
34 . '&amp;db=%1$s&amp;token=' . $GLOBALS['token'],
35 'icon' => 'db_operations.php?server=' . $GLOBALS['server']
36 . '&amp;db=%1$s&amp;token=' . $GLOBALS['token']
40 /**
41 * Returns the number of children of type $type present inside this container
42 * This method is overridden by the Node_Database and Node_Table classes
44 * @param string $type The type of item we are looking for
45 * ('tables', 'views', etc)
46 * @param string $searchClause A string used to filter the results of the query
48 * @return int
50 public function getPresence($type = '', $searchClause = '')
52 $retval = 0;
53 $db = $this->real_name;
54 switch ($type) {
55 case 'tables':
56 if (! $GLOBALS['cfg']['Servers'][$GLOBALS['server']]['DisableIS']) {
57 $db = PMA_Util::sqlAddSlashes($db);
58 $query = "SELECT COUNT(*) ";
59 $query .= "FROM `INFORMATION_SCHEMA`.`TABLES` ";
60 $query .= "WHERE `TABLE_SCHEMA`='$db' ";
61 $query .= "AND `TABLE_TYPE`='BASE TABLE' ";
62 if (! empty($searchClause)) {
63 $query .= "AND `TABLE_NAME` LIKE '%";
64 $query .= PMA_Util::sqlAddSlashes(
65 $searchClause, true
67 $query .= "%'";
69 $retval = (int)PMA_DBI_fetch_value($query);
70 } else {
71 $query = "SHOW FULL TABLES FROM ";
72 $query .= PMA_Util::backquote($db);
73 $query .= " WHERE `Table_type`='BASE TABLE' ";
74 if (! empty($searchClause)) {
75 $query .= "AND " . PMA_Util::backquote(
76 "Tables_in_" . $db
78 $query .= " LIKE '%" . PMA_Util::sqlAddSlashes(
79 $searchClause, true
81 $query .= "%'";
83 $retval = PMA_DBI_num_rows(PMA_DBI_try_query($query));
85 break;
86 case 'views':
87 if (! $GLOBALS['cfg']['Servers'][$GLOBALS['server']]['DisableIS']) {
88 $db = PMA_Util::sqlAddSlashes($db);
89 $query = "SELECT COUNT(*) ";
90 $query .= "FROM `INFORMATION_SCHEMA`.`TABLES` ";
91 $query .= "WHERE `TABLE_SCHEMA`='$db' ";
92 $query .= "AND `TABLE_TYPE`!='BASE TABLE' ";
93 if (! empty($searchClause)) {
94 $query .= "AND `TABLE_NAME` LIKE '%";
95 $query .= PMA_Util::sqlAddSlashes(
96 $searchClause, true
98 $query .= "%'";
100 $retval = (int)PMA_DBI_fetch_value($query);
101 } else {
102 $query = "SHOW FULL TABLES FROM ";
103 $query .= PMA_Util::backquote($db);
104 $query .= " WHERE `Table_type`!='BASE TABLE' ";
105 if (! empty($searchClause)) {
106 $query .= "AND " . PMA_Util::backquote(
107 "Tables_in_" . $db
109 $query .= " LIKE '%" . PMA_Util::sqlAddSlashes(
110 $searchClause, true
112 $query .= "%'";
114 $retval = PMA_DBI_num_rows(PMA_DBI_try_query($query));
116 break;
117 case 'procedures':
118 if (! $GLOBALS['cfg']['Servers'][$GLOBALS['server']]['DisableIS']) {
119 $db = PMA_Util::sqlAddSlashes($db);
120 $query = "SELECT COUNT(*) ";
121 $query .= "FROM `INFORMATION_SCHEMA`.`ROUTINES` ";
122 $query .= "WHERE `ROUTINE_SCHEMA`='$db'";
123 $query .= "AND `ROUTINE_TYPE`='PROCEDURE' ";
124 if (! empty($searchClause)) {
125 $query .= "AND `ROUTINE_NAME` LIKE '%";
126 $query .= PMA_Util::sqlAddSlashes(
127 $searchClause, true
129 $query .= "%'";
131 $retval = (int)PMA_DBI_fetch_value($query);
132 } else {
133 $db = PMA_Util::sqlAddSlashes($db);
134 $query = "SHOW PROCEDURE STATUS WHERE `Db`='$db' ";
135 if (! empty($searchClause)) {
136 $query .= "AND `Name` LIKE '%";
137 $query .= PMA_Util::sqlAddSlashes(
138 $searchClause, true
140 $query .= "%'";
142 $retval = PMA_DBI_num_rows(PMA_DBI_try_query($query));
144 break;
145 case 'functions':
146 if (! $GLOBALS['cfg']['Servers'][$GLOBALS['server']]['DisableIS']) {
147 $db = PMA_Util::sqlAddSlashes($db);
148 $query = "SELECT COUNT(*) ";
149 $query .= "FROM `INFORMATION_SCHEMA`.`ROUTINES` ";
150 $query .= "WHERE `ROUTINE_SCHEMA`='$db' ";
151 $query .= "AND `ROUTINE_TYPE`='FUNCTION' ";
152 if (! empty($searchClause)) {
153 $query .= "AND `ROUTINE_NAME` LIKE '%";
154 $query .= PMA_Util::sqlAddSlashes(
155 $searchClause, true
157 $query .= "%'";
159 $retval = (int)PMA_DBI_fetch_value($query);
160 } else {
161 $db = PMA_Util::sqlAddSlashes($db);
162 $query = "SHOW FUNCTION STATUS WHERE `Db`='$db' ";
163 if (! empty($searchClause)) {
164 $query .= "AND `Name` LIKE '%";
165 $query .= PMA_Util::sqlAddSlashes(
166 $searchClause, true
168 $query .= "%'";
170 $retval = PMA_DBI_num_rows(PMA_DBI_try_query($query));
172 break;
173 case 'events':
174 if (! $GLOBALS['cfg']['Servers'][$GLOBALS['server']]['DisableIS']) {
175 $db = PMA_Util::sqlAddSlashes($db);
176 $query = "SELECT COUNT(*) ";
177 $query .= "FROM `INFORMATION_SCHEMA`.`EVENTS` ";
178 $query .= "WHERE `EVENT_SCHEMA`='$db' ";
179 if (! empty($searchClause)) {
180 $query .= "AND `EVENT_NAME` LIKE '%";
181 $query .= PMA_Util::sqlAddSlashes(
182 $searchClause, true
184 $query .= "%'";
186 $retval = (int)PMA_DBI_fetch_value($query);
187 } else {
188 $db = PMA_Util::backquote($db);
189 $query = "SHOW EVENTS FROM $db ";
190 if (! empty($searchClause)) {
191 $query .= "WHERE `Name` LIKE '%";
192 $query .= PMA_Util::sqlAddSlashes(
193 $searchClause, true
195 $query .= "%'";
197 $retval = PMA_DBI_num_rows(PMA_DBI_try_query($query));
199 break;
200 default:
201 break;
203 return $retval;
207 * Returns the names of children of type $type present inside this container
208 * This method is overridden by the Node_Database and Node_Table classes
210 * @param string $type The type of item we are looking for
211 * ('tables', 'views', etc)
212 * @param int $pos The offset of the list within the results
213 * @param string $searchClause A string used to filter the results of the query
215 * @return array
217 public function getData($type, $pos, $searchClause = '')
219 $maxItems = $GLOBALS['cfg']['MaxNavigationItems'];
220 $retval = array();
221 $db = $this->real_name;
222 switch ($type) {
223 case 'tables':
224 if (! $GLOBALS['cfg']['Servers'][$GLOBALS['server']]['DisableIS']) {
225 $db = PMA_Util::sqlAddSlashes($db);
226 $query = "SELECT `TABLE_NAME` AS `name` ";
227 $query .= "FROM `INFORMATION_SCHEMA`.`TABLES` ";
228 $query .= "WHERE `TABLE_SCHEMA`='$db' ";
229 $query .= "AND `TABLE_TYPE`='BASE TABLE' ";
230 if (! empty($searchClause)) {
231 $query .= "AND `TABLE_NAME` LIKE '%";
232 $query .= PMA_Util::sqlAddSlashes(
233 $searchClause, true
235 $query .= "%'";
237 $query .= "ORDER BY `TABLE_NAME` ASC ";
238 $query .= "LIMIT " . intval($pos) . ", $maxItems";
239 $retval = PMA_DBI_fetch_result($query);
240 } else {
241 $query = " SHOW FULL TABLES FROM ";
242 $query .= PMA_Util::backquote($db);
243 $query .= " WHERE `Table_type`='BASE TABLE' ";
244 if (! empty($searchClause)) {
245 $query .= "AND " . PMA_Util::backquote(
246 "Tables_in_" . $db
248 $query .= " LIKE '%" . PMA_Util::sqlAddSlashes(
249 $searchClause, true
251 $query .= "%'";
253 $handle = PMA_DBI_try_query($query);
254 if ($handle !== false) {
255 $count = 0;
256 while ($arr = PMA_DBI_fetch_array($handle)) {
257 if ($pos <= 0 && $count < $maxItems) {
258 $retval[] = $arr[0];
259 $count++;
261 $pos--;
265 break;
266 case 'views':
267 if (! $GLOBALS['cfg']['Servers'][$GLOBALS['server']]['DisableIS']) {
268 $db = PMA_Util::sqlAddSlashes($db);
269 $query = "SELECT `TABLE_NAME` AS `name` ";
270 $query .= "FROM `INFORMATION_SCHEMA`.`TABLES` ";
271 $query .= "WHERE `TABLE_SCHEMA`='$db' ";
272 $query .= "AND `TABLE_TYPE`!='BASE TABLE' ";
273 if (! empty($searchClause)) {
274 $query .= "AND `TABLE_NAME` LIKE '%";
275 $query .= PMA_Util::sqlAddSlashes(
276 $searchClause, true
278 $query .= "%'";
280 $query .= "ORDER BY `TABLE_NAME` ASC ";
281 $query .= "LIMIT " . intval($pos) . ", $maxItems";
282 $retval = PMA_DBI_fetch_result($query);
283 } else {
284 $query = "SHOW FULL TABLES FROM ";
285 $query .= PMA_Util::backquote($db);
286 $query .= " WHERE `Table_type`!='BASE TABLE' ";
287 if (! empty($searchClause)) {
288 $query .= "AND " . PMA_Util::backquote(
289 "Tables_in_" . $db
291 $query .= " LIKE '%" . PMA_Util::sqlAddSlashes(
292 $searchClause, true
294 $query .= "%'";
296 $handle = PMA_DBI_try_query($query);
297 if ($handle !== false) {
298 $count = 0;
299 while ($arr = PMA_DBI_fetch_array($handle)) {
300 if ($pos <= 0 && $count < $maxItems) {
301 $retval[] = $arr[0];
302 $count++;
304 $pos--;
308 break;
309 case 'procedures':
310 if (! $GLOBALS['cfg']['Servers'][$GLOBALS['server']]['DisableIS']) {
311 $db = PMA_Util::sqlAddSlashes($db);
312 $query = "SELECT `ROUTINE_NAME` AS `name` ";
313 $query .= "FROM `INFORMATION_SCHEMA`.`ROUTINES` ";
314 $query .= "WHERE `ROUTINE_SCHEMA`='$db'";
315 $query .= "AND `ROUTINE_TYPE`='PROCEDURE' ";
316 if (! empty($searchClause)) {
317 $query .= "AND `ROUTINE_NAME` LIKE '%";
318 $query .= PMA_Util::sqlAddSlashes(
319 $searchClause, true
321 $query .= "%'";
323 $query .= "ORDER BY `ROUTINE_NAME` ASC ";
324 $query .= "LIMIT " . intval($pos) . ", $maxItems";
325 $retval = PMA_DBI_fetch_result($query);
326 } else {
327 $db = PMA_Util::sqlAddSlashes($db);
328 $query = "SHOW PROCEDURE STATUS WHERE `Db`='$db' ";
329 if (! empty($searchClause)) {
330 $query .= "AND `Name` LIKE '%";
331 $query .= PMA_Util::sqlAddSlashes(
332 $searchClause, true
334 $query .= "%'";
336 $handle = PMA_DBI_try_query($query);
337 if ($handle !== false) {
338 $count = 0;
339 while ($arr = PMA_DBI_fetch_array($handle)) {
340 if ($pos <= 0 && $count < $maxItems) {
341 $retval[] = $arr['Name'];
342 $count++;
344 $pos--;
348 break;
349 case 'functions':
350 if (! $GLOBALS['cfg']['Servers'][$GLOBALS['server']]['DisableIS']) {
351 $db = PMA_Util::sqlAddSlashes($db);
352 $query = "SELECT `ROUTINE_NAME` AS `name` ";
353 $query .= "FROM `INFORMATION_SCHEMA`.`ROUTINES` ";
354 $query .= "WHERE `ROUTINE_SCHEMA`='$db' ";
355 $query .= "AND `ROUTINE_TYPE`='FUNCTION' ";
356 if (! empty($searchClause)) {
357 $query .= "AND `ROUTINE_NAME` LIKE '%";
358 $query .= PMA_Util::sqlAddSlashes(
359 $searchClause, true
361 $query .= "%'";
363 $query .= "ORDER BY `ROUTINE_NAME` ASC ";
364 $query .= "LIMIT " . intval($pos) . ", $maxItems";
365 $retval = PMA_DBI_fetch_result($query);
366 } else {
367 $db = PMA_Util::sqlAddSlashes($db);
368 $query = "SHOW FUNCTION STATUS WHERE `Db`='$db' ";
369 if (! empty($searchClause)) {
370 $query .= "AND `Name` LIKE '%";
371 $query .= PMA_Util::sqlAddSlashes(
372 $searchClause, true
374 $query .= "%'";
376 $handle = PMA_DBI_try_query($query);
377 if ($handle !== false) {
378 $count = 0;
379 while ($arr = PMA_DBI_fetch_array($handle)) {
380 if ($pos <= 0 && $count < $maxItems) {
381 $retval[] = $arr['Name'];
382 $count++;
384 $pos--;
388 break;
389 case 'events':
390 if (! $GLOBALS['cfg']['Servers'][$GLOBALS['server']]['DisableIS']) {
391 $db = PMA_Util::sqlAddSlashes($db);
392 $query = "SELECT `EVENT_NAME` AS `name` ";
393 $query .= "FROM `INFORMATION_SCHEMA`.`EVENTS` ";
394 $query .= "WHERE `EVENT_SCHEMA`='$db' ";
395 if (! empty($searchClause)) {
396 $query .= "AND `EVENT_NAME` LIKE '%";
397 $query .= PMA_Util::sqlAddSlashes(
398 $searchClause, true
400 $query .= "%'";
402 $query .= "ORDER BY `EVENT_NAME` ASC ";
403 $query .= "LIMIT " . intval($pos) . ", $maxItems";
404 $retval = PMA_DBI_fetch_result($query);
405 } else {
406 $db = PMA_Util::backquote($db);
407 $query = "SHOW EVENTS FROM $db ";
408 if (! empty($searchClause)) {
409 $query .= "WHERE `Name` LIKE '%";
410 $query .= PMA_Util::sqlAddSlashes(
411 $searchClause, true
413 $query .= "%'";
415 $handle = PMA_DBI_try_query($query);
416 if ($handle !== false) {
417 $count = 0;
418 while ($arr = PMA_DBI_fetch_array($handle)) {
419 if ($pos <= 0 && $count < $maxItems) {
420 $retval[] = $arr['Name'];
421 $count++;
423 $pos--;
427 break;
428 default:
429 break;
431 return $retval;
436 * Returns the comment associated with node
437 * This method should be overridden by specific type of nodes
439 * @return string
441 public function getComment()
443 return PMA_getDbComment($this->real_name);