2 /* vim: set expandtab sw=4 ts=4 sts=4: */
4 * Common functions for generating lists of Routines, Triggers and Events.
8 if (! defined('PHPMYADMIN')) {
13 * Creates a list of items containing the relevant
14 * information and some action links.
16 * @param string $type One of ['routine'|'trigger'|'event']
17 * @param array $items An array of items
19 * @return string HTML code of the list of items
21 function PMA_RTE_getList($type, $items)
26 * Conditional classes switch the list on or off
37 $retval = "<!-- LIST OF " . PMA_RTE_getWord('docu') . " START -->\n";
38 $retval .= "<fieldset>\n";
39 $retval .= " <legend>\n";
40 $retval .= " " . PMA_RTE_getWord('title') . "\n";
41 $retval .= " " . PMA_Util
::showMySQLDocu('SQL-Syntax', PMA_RTE_getWord('docu')) . "\n";
42 $retval .= " </legend>\n";
43 $retval .= " <div class='$class1' id='nothing2display'>\n";
44 $retval .= " " . PMA_RTE_getWord('nothing') . "\n";
45 $retval .= " </div>\n";
46 $retval .= " <table class='data$class2'>\n";
47 $retval .= " <!-- TABLE HEADERS -->\n";
49 // th cells with a colspan need corresponding td cells, according to W3C
52 $retval .= " <th>" . __('Name') . "</th>\n";
53 $retval .= " <th colspan='4'>" . __('Action') . "</th>\n";
54 $retval .= " <th>" . __('Type') . "</th>\n";
55 $retval .= " <th>" . __('Returns') . "</th>\n";
56 $retval .= " </tr>\n";
57 $retval .= " <tr style='display: none'>\n"; // see comment above
58 for ($i = 0; $i < 7; $i++
) {
59 $retval .= " <td></td>\n";
63 $retval .= " <th>" . __('Name') . "</th>\n";
65 $retval .= " <th>" . __('Table') . "</th>\n";
67 $retval .= " <th colspan='3'>" . __('Action') . "</th>\n";
68 $retval .= " <th>" . __('Time') . "</th>\n";
69 $retval .= " <th>" . __('Event') . "</th>\n";
70 $retval .= " </tr>\n";
71 $retval .= " <tr style='display: none'>\n"; // see comment above
72 for ($i = 0; $i < (empty($table) ?
7 : 6); $i++
) {
73 $retval .= " <td></td>\n";
77 $retval .= " <th>" . __('Name') . "</th>\n";
78 $retval .= " <th>" . __('Status') . "</th>\n";
79 $retval .= " <th colspan='3'>" . __('Action') . "</th>\n";
80 $retval .= " <th>" . __('Type') . "</th>\n";
81 $retval .= " </tr>\n";
82 $retval .= " <tr style='display: none'>\n"; // see comment above
83 for ($i = 0; $i < 6; $i++
) {
84 $retval .= " <td></td>\n";
90 $retval .= " </tr>\n";
91 $retval .= " <!-- TABLE DATA -->\n";
93 foreach ($items as $item) {
94 $rowclass = ($ct %
2 == 0) ?
'odd' : 'even';
95 if ($GLOBALS['is_ajax_request'] && empty($_REQUEST['ajax_page_request'])) {
96 $rowclass .= ' ajaxInsert hide';
98 // Get each row from the correct function
101 $retval .= PMA_RTN_getRowForList($item, $rowclass);
104 $retval .= PMA_TRI_getRowForList($item, $rowclass);
107 $retval .= PMA_EVN_getRowForList($item, $rowclass);
114 $retval .= " </table>\n";
115 $retval .= "</fieldset>\n";
116 $retval .= "<!-- LIST OF " . PMA_RTE_getWord('docu') . " END -->\n";
119 } // end PMA_RTE_getList()
122 * Creates the contents for a row in the list of routines
124 * @param array $routine An array of routine data
125 * @param string $rowclass Empty or one of ['even'|'odd']
127 * @return string HTML code of a row for the list of routines
129 function PMA_RTN_getRowForList($routine, $rowclass = '')
131 global $ajax_class, $url_query, $db, $titles;
134 'DROP %s IF EXISTS %s',
135 $routine['ROUTINE_TYPE'],
136 PMA_Util
::backquote($routine['SPECIFIC_NAME'])
138 $type_link = "item_type={$routine['ROUTINE_TYPE']}";
140 $retval = " <tr class='noclick $rowclass'>\n";
141 $retval .= " <td>\n";
142 $retval .= " <span class='drop_sql hide'>" . htmlspecialchars($sql_drop) . "</span>\n";
143 $retval .= " <strong>\n";
144 $retval .= " " . htmlspecialchars($routine['SPECIFIC_NAME']) . "\n";
145 $retval .= " </strong>\n";
146 $retval .= " </td>\n";
147 $retval .= " <td>\n";
148 if ($routine['ROUTINE_DEFINITION'] !== null
149 && PMA_Util
::currentUserHasPrivilege('ALTER ROUTINE', $db)
150 && PMA_Util
::currentUserHasPrivilege('CREATE ROUTINE', $db)
152 $retval .= ' <a ' . $ajax_class['edit']
153 . ' href="db_routines.php?'
156 . '&item_name=' . urlencode($routine['SPECIFIC_NAME'])
157 . '&' . $type_link
158 . '">' . $titles['Edit'] . "</a>\n";
160 $retval .= " {$titles['NoEdit']}\n";
162 $retval .= " </td>\n";
163 $retval .= " <td>\n";
164 if ($routine['ROUTINE_DEFINITION'] !== null
165 && PMA_Util
::currentUserHasPrivilege('EXECUTE', $db)
167 // Check if he routine has any input parameters. If it does,
168 // we will show a dialog to get values for these parameters,
169 // otherwise we can execute it directly.
170 $routine_details = PMA_RTN_getDataFromName(
171 $routine['SPECIFIC_NAME'],
172 $routine['ROUTINE_TYPE'],
175 if ($routine !== false) {
176 $execute_action = 'execute_routine';
177 for ($i=0; $i<$routine_details['item_num_params']; $i++
) {
178 if ($routine_details['item_type'] == 'PROCEDURE'
179 && $routine_details['item_param_dir'][$i] == 'OUT'
183 $execute_action = 'execute_dialog';
186 $retval .= ' <a ' . $ajax_class['exec']
187 . ' href="db_routines.php?'
189 . '&' . $execute_action . '=1'
190 . '&item_name=' . urlencode($routine['SPECIFIC_NAME'])
191 . '&' . $type_link
192 . '">' . $titles['Execute'] . "</a>\n";
195 $retval .= " {$titles['NoExecute']}\n";
197 $retval .= " </td>\n";
198 $retval .= " <td>\n";
199 $retval .= ' <a ' . $ajax_class['export']
200 . ' href="db_routines.php?'
202 . '&export_item=1'
203 . '&item_name=' . urlencode($routine['SPECIFIC_NAME'])
204 . '&' . $type_link
205 . '">' . $titles['Export'] . "</a>\n";
206 $retval .= " </td>\n";
207 $retval .= " <td>\n";
208 if (PMA_Util
::currentUserHasPrivilege('ALTER ROUTINE', $db)) {
209 $retval .= ' <a ' . $ajax_class['drop']
212 . '&sql_query=' . urlencode($sql_drop)
213 . '&goto=db_routines.php' . urlencode("?db={$db}")
214 . '" >' . $titles['Drop'] . "</a>\n";
216 $retval .= " {$titles['NoDrop']}\n";
218 $retval .= " </td>\n";
219 $retval .= " <td>\n";
220 $retval .= " {$routine['ROUTINE_TYPE']}\n";
221 $retval .= " </td>\n";
222 $retval .= " <td>\n";
223 $retval .= " " . htmlspecialchars($routine['DTD_IDENTIFIER']) . "\n";
224 $retval .= " </td>\n";
225 $retval .= " </tr>\n";
228 } // end PMA_RTN_getRowForList()
231 * Creates the contents for a row in the list of triggers
233 * @param array $trigger An array of routine data
234 * @param string $rowclass Empty or one of ['even'|'odd']
236 * @return string HTML code of a cell for the list of triggers
238 function PMA_TRI_getRowForList($trigger, $rowclass = '')
240 global $ajax_class, $url_query, $db, $table, $titles;
242 $retval = " <tr class='noclick $rowclass'>\n";
243 $retval .= " <td>\n";
244 $retval .= " <span class='drop_sql hide'>" . htmlspecialchars($trigger['drop']) . "</span>\n";
245 $retval .= " <strong>\n";
246 $retval .= " " . htmlspecialchars($trigger['name']) . "\n";
247 $retval .= " </strong>\n";
248 $retval .= " </td>\n";
250 $retval .= " <td>\n";
251 $retval .= " <a href='db_triggers.php?{$url_query}"
252 . "&table={$trigger['table']}'>"
253 . $trigger['table'] . "</a>\n";
254 $retval .= " </td>\n";
256 $retval .= " <td>\n";
257 if (PMA_Util
::currentUserHasPrivilege('TRIGGER', $db, $table)) {
258 $retval .= ' <a ' . $ajax_class['edit']
259 . ' href="db_triggers.php?'
262 . '&item_name=' . urlencode($trigger['name'])
263 . '">' . $titles['Edit'] . "</a>\n";
265 $retval .= " {$titles['NoEdit']}\n";
267 $retval .= " </td>\n";
268 $retval .= " <td>\n";
269 $retval .= ' <a ' . $ajax_class['export']
270 . ' href="db_triggers.php?'
272 . '&export_item=1'
273 . '&item_name=' . urlencode($trigger['name'])
274 . '">' . $titles['Export'] . "</a>\n";
275 $retval .= " </td>\n";
276 $retval .= " <td>\n";
277 if (PMA_Util
::currentUserHasPrivilege('TRIGGER', $db)) {
278 $retval .= ' <a ' . $ajax_class['drop']
281 . '&sql_query=' . urlencode($trigger['drop'])
282 . '&goto=db_triggers.php' . urlencode("?db={$db}")
283 . '" >' . $titles['Drop'] . "</a>\n";
285 $retval .= " {$titles['NoDrop']}\n";
287 $retval .= " </td>\n";
288 $retval .= " <td>\n";
289 $retval .= " {$trigger['action_timing']}\n";
290 $retval .= " </td>\n";
291 $retval .= " <td>\n";
292 $retval .= " {$trigger['event_manipulation']}\n";
293 $retval .= " </td>\n";
294 $retval .= " </tr>\n";
297 } // end PMA_TRI_getRowForList()
300 * Creates the contents for a row in the list of events
302 * @param array $event An array of routine data
303 * @param string $rowclass Empty or one of ['even'|'odd']
305 * @return string HTML code of a cell for the list of events
307 function PMA_EVN_getRowForList($event, $rowclass = '')
309 global $ajax_class, $url_query, $db, $titles;
312 'DROP EVENT IF EXISTS %s',
313 PMA_Util
::backquote($event['EVENT_NAME'])
316 $retval = " <tr class='noclick $rowclass'>\n";
317 $retval .= " <td>\n";
318 $retval .= " <span class='drop_sql hide'>" . htmlspecialchars($sql_drop) . "</span>\n";
319 $retval .= " <strong>\n";
320 $retval .= " " . htmlspecialchars($event['EVENT_NAME']) . "\n";
321 $retval .= " </strong>\n";
322 $retval .= " </td>\n";
323 $retval .= " <td>\n";
324 $retval .= " {$event['STATUS']}\n";
325 $retval .= " </td>\n";
326 $retval .= " <td>\n";
327 if (PMA_Util
::currentUserHasPrivilege('EVENT', $db)) {
328 $retval .= ' <a ' . $ajax_class['edit']
329 . ' href="db_events.php?'
332 . '&item_name=' . urlencode($event['EVENT_NAME'])
333 . '">' . $titles['Edit'] . "</a>\n";
335 $retval .= " {$titles['NoEdit']}\n";
337 $retval .= " </td>\n";
338 $retval .= " <td>\n";
339 $retval .= ' <a ' . $ajax_class['export']
340 . ' href="db_events.php?'
342 . '&export_item=1'
343 . '&item_name=' . urlencode($event['EVENT_NAME'])
344 . '">' . $titles['Export'] . "</a>\n";
345 $retval .= " </td>\n";
346 $retval .= " <td>\n";
347 if (PMA_Util
::currentUserHasPrivilege('EVENT', $db)) {
348 $retval .= ' <a ' . $ajax_class['drop']
351 . '&sql_query=' . urlencode($sql_drop)
352 . '&goto=db_events.php' . urlencode("?db={$db}")
353 . '" >' . $titles['Drop'] . "</a>\n";
355 $retval .= " {$titles['NoDrop']}\n";
357 $retval .= " </td>\n";
358 $retval .= " <td>\n";
359 $retval .= " {$event['EVENT_TYPE']}\n";
360 $retval .= " </td>\n";
361 $retval .= " </tr>\n";
364 } // end PMA_EVN_getRowForList()