1<?php 2 3 /** 4 * List triggers on a table 5 * 6 * $Id: triggers.php,v 1.37 2007/09/19 14:42:12 ioguix Exp $ 7 */ 8 9 // Include application functions 10 include_once('./libraries/lib.inc.php'); 11 include_once('./classes/class.select.php'); 12 13 $action = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; 14 15 /** 16 * Function to save after altering a trigger 17 */ 18 function doSaveAlter() { 19 global $data, $lang; 20 21 $status = $data->alterTrigger($_POST['table'], $_POST['trigger'], $_POST['name']); 22 if ($status == 0) 23 doDefault($lang['strtriggeraltered']); 24 else 25 doAlter($lang['strtriggeralteredbad']); 26 } 27 28 /** 29 * Function to allow altering of a trigger 30 */ 31 function doAlter($msg = '') { 32 global $data, $misc; 33 global $lang; 34 35 $misc->printTrail('trigger'); 36 $misc->printTitle($lang['stralter'],'pg.trigger.alter'); 37 $misc->printMsg($msg); 38 39 $triggerdata = $data->getTrigger($_REQUEST['table'], $_REQUEST['trigger']); 40 41 if ($triggerdata->recordCount() > 0) { 42 43 if (!isset($_POST['name'])) $_POST['name'] = $triggerdata->fields['tgname']; 44 45 echo "<form action=\"triggers.php\" method=\"post\">\n"; 46 echo "<table>\n"; 47 echo "<tr><th class=\"data\">{$lang['strname']}</th>\n"; 48 echo "<td class=\"data1\">"; 49 echo "<input name=\"name\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"", 50 htmlspecialchars($_POST['name']), "\" />\n"; 51 echo "</table>\n"; 52 echo "<p><input type=\"hidden\" name=\"action\" value=\"alter\" />\n"; 53 echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; 54 echo "<input type=\"hidden\" name=\"trigger\" value=\"", htmlspecialchars($_REQUEST['trigger']), "\" />\n"; 55 echo $misc->form; 56 echo "<input type=\"submit\" name=\"alter\" value=\"{$lang['strok']}\" />\n"; 57 echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; 58 echo "</form>\n"; 59 } 60 else echo "<p>{$lang['strnodata']}</p>\n"; 61 } 62 63 /** 64 * Show confirmation of drop and perform actual drop 65 */ 66 function doDrop($confirm) { 67 global $data, $misc; 68 global $lang; 69 70 if ($confirm) { 71 $misc->printTrail('trigger'); 72 $misc->printTitle($lang['strdrop'],'pg.trigger.drop'); 73 74 echo "<p>", sprintf($lang['strconfdroptrigger'], $misc->printVal($_REQUEST['trigger']), 75 $misc->printVal($_REQUEST['table'])), "</p>\n"; 76 77 echo "<form action=\"triggers.php\" method=\"post\">\n"; 78 echo "<input type=\"hidden\" name=\"action\" value=\"drop\" />\n"; 79 echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; 80 echo "<input type=\"hidden\" name=\"trigger\" value=\"", htmlspecialchars($_REQUEST['trigger']), "\" />\n"; 81 echo $misc->form; 82 echo "<p><input type=\"checkbox\" id=\"cascade\" name=\"cascade\" /> <label for=\"cascade\">{$lang['strcascade']}</label></p>\n"; 83 echo "<input type=\"submit\" name=\"yes\" value=\"{$lang['stryes']}\" />\n"; 84 echo "<input type=\"submit\" name=\"no\" value=\"{$lang['strno']}\" />\n"; 85 echo "</form>\n"; 86 } 87 else { 88 $status = $data->dropTrigger($_POST['trigger'], $_POST['table'], isset($_POST['cascade'])); 89 if ($status == 0) 90 doDefault($lang['strtriggerdropped']); 91 else 92 doDefault($lang['strtriggerdroppedbad']); 93 } 94 95 } 96 97 /** 98 * Show confirmation of enable trigger and perform enabling the trigger 99 */ 100 function doEnable($confirm) { 101 global $data, $misc; 102 global $lang; 103 104 if ($confirm) { 105 $misc->printTrail('trigger'); 106 $misc->printTitle($lang['strenable'],'pg.table.alter'); 107 108 echo "<p>", sprintf($lang['strconfenabletrigger'], $misc->printVal($_REQUEST['trigger']), 109 $misc->printVal($_REQUEST['table'])), "</p>\n"; 110 111 echo "<form action=\"triggers.php\" method=\"post\">\n"; 112 echo "<input type=\"hidden\" name=\"action\" value=\"enable\" />\n"; 113 echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; 114 echo "<input type=\"hidden\" name=\"trigger\" value=\"", htmlspecialchars($_REQUEST['trigger']), "\" />\n"; 115 echo $misc->form; 116 echo "<input type=\"submit\" name=\"yes\" value=\"{$lang['stryes']}\" />\n"; 117 echo "<input type=\"submit\" name=\"no\" value=\"{$lang['strno']}\" />\n"; 118 echo "</form>\n"; 119 } 120 else { 121 $status = $data->enableTrigger($_POST['trigger'], $_POST['table']); 122 if ($status == 0) 123 doDefault($lang['strtriggerenabled']); 124 else 125 doDefault($lang['strtriggerenabledbad']); 126 } 127 128 } 129 130 /** 131 * Show confirmation of disable trigger and perform disabling the trigger 132 */ 133 function doDisable($confirm) { 134 global $data, $misc; 135 global $lang; 136 137 if ($confirm) { 138 $misc->printTrail('trigger'); 139 $misc->printTitle($lang['strdisable'],'pg.table.alter'); 140 141 echo "<p>", sprintf($lang['strconfdisabletrigger'], $misc->printVal($_REQUEST['trigger']), 142 $misc->printVal($_REQUEST['table'])), "</p>\n"; 143 144 echo "<form action=\"triggers.php\" method=\"post\">\n"; 145 echo "<input type=\"hidden\" name=\"action\" value=\"disable\" />\n"; 146 echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; 147 echo "<input type=\"hidden\" name=\"trigger\" value=\"", htmlspecialchars($_REQUEST['trigger']), "\" />\n"; 148 echo $misc->form; 149 echo "<input type=\"submit\" name=\"yes\" value=\"{$lang['stryes']}\" />\n"; 150 echo "<input type=\"submit\" name=\"no\" value=\"{$lang['strno']}\" />\n"; 151 echo "</form>\n"; 152 } 153 else { 154 $status = $data->disableTrigger($_POST['trigger'], $_POST['table']); 155 if ($status == 0) 156 doDefault($lang['strtriggerdisabled']); 157 else 158 doDefault($lang['strtriggerdisabledbad']); 159 } 160 161 } 162 163 /** 164 * Let them create s.th. 165 */ 166 function doCreate($msg = '') { 167 global $data, $misc; 168 global $lang; 169 170 $misc->printTrail('table'); 171 $misc->printTitle($lang['strcreatetrigger'],'pg.trigger.create'); 172 $misc->printMsg($msg); 173 174 // Get all the functions that can be used in triggers 175 $funcs = $data->getTriggerFunctions(); 176 if ($funcs->recordCount() == 0) { 177 doDefault($lang['strnofunctions']); 178 return; 179 } 180 181 /* Populate functions */ 182 $sel0 = new XHTML_Select('formFunction'); 183 while (!$funcs->EOF) { 184 $sel0->add(new XHTML_Option($funcs->fields['proname'])); 185 $funcs->moveNext(); 186 } 187 188 /* Populate times */ 189 $sel1 = new XHTML_Select('formExecTime'); 190 $sel1->set_data($data->triggerExecTimes); 191 192 /* Populate events */ 193 $sel2 = new XHTML_Select('formEvent'); 194 $sel2->set_data($data->triggerEvents); 195 196 /* Populate occurrences */ 197 $sel3 = new XHTML_Select('formFrequency'); 198 $sel3->set_data($data->triggerFrequency); 199 200 echo "<form action=\"triggers.php\" method=\"post\">\n"; 201 echo "<table>\n"; 202 echo "<tr>\n"; 203 echo " <th class=\"data\">{$lang['strname']}</th>\n"; 204 echo " <th class=\"data\">{$lang['strwhen']}</th>\n"; 205 echo "</tr>\n"; 206 echo "<tr>\n"; 207 echo " <td class=\"data1\"> <input type=\"text\" name=\"formTriggerName\" size=\"32\" /></td>\n"; 208 echo " <td class=\"data1\"> ", $sel1->fetch(), "</td>\n"; 209 echo "</tr>\n"; 210 echo "<tr>\n"; 211 echo " <th class=\"data\">{$lang['strevent']}</th>\n"; 212 echo " <th class=\"data\">{$lang['strforeach']}</th>\n"; 213 echo "</tr>\n"; 214 echo "<tr>\n"; 215 echo " <td class=\"data1\"> ", $sel2->fetch(), "</td>\n"; 216 echo " <td class=\"data1\"> ", $sel3->fetch(), "</td>\n"; 217 echo "</tr>\n"; 218 echo "<tr><th class=\"data\"> {$lang['strfunction']}</th>\n"; 219 echo "<th class=\"data\"> {$lang['strarguments']}</th></tr>\n"; 220 echo "<tr><td class=\"data1\">", $sel0->fetch(), "</td>\n"; 221 echo "<td class=\"data1\">(<input type=\"text\" name=\"formTriggerArgs\" size=\"32\" />)</td>\n"; 222 echo "</tr></table>\n"; 223 echo "<p><input type=\"submit\" value=\"{$lang['strcreate']}\" />\n"; 224 echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" /></p>\n"; 225 echo "<input type=\"hidden\" name=\"action\" value=\"save_create\" />\n"; 226 echo "<input type=\"hidden\" name=\"table\" value=\"", htmlspecialchars($_REQUEST['table']), "\" />\n"; 227 echo $misc->form; 228 echo "</form>\n"; 229 } 230 231 /** 232 * Actually creates the new trigger in the database 233 */ 234 function doSaveCreate() { 235 global $data; 236 global $lang; 237 238 // Check that they've given a name and a definition 239 240 if ($_POST['formFunction'] == '') 241 doCreate($lang['strtriggerneedsfunc']); 242 elseif ($_POST['formTriggerName'] == '') 243 doCreate($lang['strtriggerneedsname']); 244 elseif ($_POST['formEvent'] == '') 245 doCreate(); 246 else { 247 $status = $data->createTrigger($_POST['formTriggerName'], $_POST['table'], 248 $_POST['formFunction'], $_POST['formExecTime'], $_POST['formEvent'], 249 $_POST['formFrequency'], $_POST['formTriggerArgs']); 250 if ($status == 0) 251 doDefault($lang['strtriggercreated']); 252 else 253 doCreate($lang['strtriggercreatedbad']); 254 } 255 } 256 257 /** 258 * List all the triggers on the table 259 */ 260 function doDefault($msg = '') { 261 global $data, $misc, $database; 262 global $lang; 263 264 function tgPre(&$rowdata,$actions) { 265 global $data; 266 // toggle enable/disable trigger per trigger 267 if( ! $data->phpBool( $rowdata->fields["tgenabled"] ) ) { 268 unset( $actions['disable'] ); 269 } 270 else{ 271 unset( $actions['enable'] ); 272 } 273 274 return $actions; 275 } 276 277 $misc->printTrail('table'); 278 $misc->printTabs('table','triggers'); 279 $misc->printMsg($msg); 280 281 $triggers = $data->getTriggers($_REQUEST['table']); 282 283 $columns = array( 284 'trigger' => array( 285 'title' => $lang['strname'], 286 'field' => field('tgname'), 287 ), 288 'definition' => array( 289 'title' => $lang['strdefinition'], 290 'field' => field('tgdef'), 291 ), 292 'function' => array( 293 'title' => $lang['strfunction'], 294 'field' => field('proproto'), 295 'url' => "functions.php?action=properties&server={$_REQUEST['server']}&database={$_REQUEST['database']}&", 296 'vars' => array( 297 'schema' => 'pronamespace', 298 'function' => 'proproto', 299 'function_oid' => 'prooid', 300 ), 301 ), 302 'actions' => array( 303 'title' => $lang['stractions'], 304 ), 305 ); 306 307 $actions = array( 308 'alter' => array( 309 'content' => $lang['stralter'], 310 'attr'=> array ( 311 'href' => array ( 312 'url' => 'triggers.php', 313 'urlvars' => array ( 314 'action' => 'confirm_alter', 315 'table' => $_REQUEST['table'], 316 'trigger' => field('tgname') 317 ) 318 ) 319 ) 320 ), 321 'drop' => array( 322 'content' => $lang['strdrop'], 323 'attr'=> array ( 324 'href' => array ( 325 'url' => 'triggers.php', 326 'urlvars' => array ( 327 'action' => 'confirm_drop', 328 'table' => $_REQUEST['table'], 329 'trigger' => field('tgname') 330 ) 331 ) 332 ) 333 ), 334 ); 335 if($data->hasDisableTriggers()) { 336 $actions['enable'] = array( 337 'content' => $lang['strenable'], 338 'attr'=> array ( 339 'href' => array ( 340 'url' => 'triggers.php', 341 'urlvars' => array ( 342 'action' => 'confirm_enable', 343 'table' => $_REQUEST['table'], 344 'trigger' => field('tgname') 345 ) 346 ) 347 ) 348 ); 349 $actions['disable'] = array( 350 'content' => $lang['strdisable'], 351 'attr'=> array ( 352 'href' => array ( 353 'url' => 'triggers.php', 354 'urlvars' => array ( 355 'action' => 'confirm_disable', 356 'table' => $_REQUEST['table'], 357 'trigger' => field('tgname') 358 ) 359 ) 360 ) 361 ); 362 } 363 364 $misc->printTable($triggers, $columns, $actions, 'triggers-triggers', $lang['strnotriggers'], 'tgPre'); 365 366 $misc->printNavLinks(array ('create' => array ( 367 'attr'=> array ( 368 'href' => array ( 369 'url' => 'triggers.php', 370 'urlvars' => array ( 371 'action' => 'create', 372 'server' => $_REQUEST['server'], 373 'database' => $_REQUEST['database'], 374 'schema' => $_REQUEST['schema'], 375 'table' => $_REQUEST['table'] 376 ) 377 ) 378 ), 379 'content' => $lang['strcreatetrigger'] 380 )), 'triggers-triggers', get_defined_vars()); 381 } 382 383 function doTree() { 384 385 global $misc, $data; 386 387 $triggers = $data->getTriggers($_REQUEST['table']); 388 389 $reqvars = $misc->getRequestVars('table'); 390 391 $attrs = array( 392 'text' => field('tgname'), 393 'icon' => 'Trigger', 394 ); 395 396 $misc->printTree($triggers, $attrs, 'triggers'); 397 exit; 398 } 399 400 if ($action == 'tree') doTree(); 401 402 $misc->printHeader($lang['strtables'] . ' - ' . $_REQUEST['table'] . ' - ' . $lang['strtriggers']); 403 $misc->printBody(); 404 405 switch ($action) { 406 case 'alter': 407 if (isset($_POST['alter'])) doSaveAlter(); 408 else doDefault(); 409 break; 410 case 'confirm_alter': 411 doAlter(); 412 break; 413 case 'confirm_enable': 414 doEnable(true); 415 break; 416 case 'confirm_disable': 417 doDisable(true); 418 break; 419 case 'save_create': 420 if (isset($_POST['cancel'])) doDefault(); 421 else doSaveCreate(); 422 break; 423 case 'create': 424 doCreate(); 425 break; 426 case 'drop': 427 if (isset($_POST['yes'])) doDrop(false); 428 else doDefault(); 429 break; 430 case 'confirm_drop': 431 doDrop(true); 432 break; 433 case 'enable': 434 if (isset($_POST['yes'])) doEnable(false); 435 else doDefault(); 436 break; 437 case 'disable': 438 if (isset($_POST['yes'])) doDisable(false); 439 else doDefault(); 440 break; 441 default: 442 doDefault(); 443 break; 444 } 445 446 $misc->printFooter(); 447 448?> 449