1 <?php 2 // This file is part of Moodle - http://moodle.org/ 3 // 4 // Moodle is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // Moodle is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 16 17 /** 18 * @package tool_xmldb 19 * @copyright 2003 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com} 20 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 21 */ 22 23 /** 24 * This class will show the PHP needed (upgrade block) to perform 25 * the desired DDL action with the specified field/key/index 26 * 27 * @package tool_xmldb 28 * @copyright 2003 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com} 29 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 30 */ 31 class view_table_php extends XMLDBAction { 32 33 /** 34 * Init method, every subclass will have its own 35 */ 36 function init() { 37 parent::init(); 38 39 // Set own custom attributes 40 $this->sesskey_protected = false; // This action doesn't need sesskey protection 41 42 // Get needed strings 43 $this->loadStrings(array( 44 'selectaction' => 'tool_xmldb', 45 'selectfieldkeyindex' => 'tool_xmldb', 46 'view' => 'tool_xmldb', 47 'table' => 'tool_xmldb', 48 'selectonecommand' => 'tool_xmldb', 49 'selectonefieldkeyindex' => 'tool_xmldb', 50 'mustselectonefield' => 'tool_xmldb', 51 'mustselectonekey' => 'tool_xmldb', 52 'mustselectoneindex' => 'tool_xmldb', 53 'back' => 'tool_xmldb' 54 )); 55 } 56 57 /** 58 * Invoke method, every class will have its own 59 * returns true/false on completion, setting both 60 * errormsg and output as necessary 61 */ 62 function invoke() { 63 parent::invoke(); 64 65 $result = true; 66 67 // Set own core attributes 68 $this->does_generate = ACTION_GENERATE_HTML; 69 70 // These are always here 71 global $CFG, $XMLDB, $OUTPUT; 72 73 // Do the job, setting result as needed 74 // Get the dir containing the file 75 $dirpath = required_param('dir', PARAM_PATH); 76 $dirpath = $CFG->dirroot . $dirpath; 77 78 // Get the correct dirs 79 if (!empty($XMLDB->dbdirs)) { 80 $dbdir = $XMLDB->dbdirs[$dirpath]; 81 } else { 82 return false; 83 } 84 if (!empty($XMLDB->editeddirs)) { 85 $editeddir = $XMLDB->editeddirs[$dirpath]; 86 $structure = $editeddir->xml_file->getStructure(); 87 } 88 89 $tableparam = required_param('table', PARAM_PATH); 90 91 $table = $structure->getTable($tableparam); 92 $fields = $table->getFields(); 93 $field = reset($fields); 94 $defaultfieldkeyindex = null; 95 if ($field) { 96 $defaultfieldkeyindex = 'f#' . $field->getName(); 97 } 98 $keys = $table->getKeys(); 99 $indexes = $table->getIndexes(); 100 101 // Get parameters 102 $commandparam = optional_param('command', 'add_field', PARAM_PATH); 103 $origfieldkeyindexparam = optional_param('fieldkeyindex', $defaultfieldkeyindex, PARAM_PATH); 104 $fieldkeyindexparam = preg_replace('/[fki]#/i', '', $origfieldkeyindexparam); // Strip the initials 105 $fieldkeyindexinitial = substr($origfieldkeyindexparam, 0, 1); //To know what we have selected 106 107 // The back to edit xml button 108 $b = ' <p class="centerpara buttons">'; 109 $b .= '<a href="index.php?action=edit_table&dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '&table=' . $tableparam . '">[' . $this->str['back'] . ']</a>'; 110 $b .= '</p>'; 111 $o = $b; 112 113 // The table currently being edited 114 $o .= '<h3 class="main">' . $this->str['table'] . ': ' . s($tableparam) . '</h3>'; 115 116 // To indent the menu selections 117 $optionspacer = ' '; 118 119 // Calculate the popup of commands 120 $commands = array('Fields', 121 $optionspacer . 'add_field', 122 $optionspacer . 'drop_field', 123 $optionspacer . 'rename_field', 124 $optionspacer . 'change_field_type', 125 $optionspacer . 'change_field_precision', 126 $optionspacer . 'change_field_notnull', 127 $optionspacer . 'change_field_default', 128 'Keys', 129 $optionspacer . 'add_key', 130 $optionspacer . 'drop_key', 131 $optionspacer . 'rename_key', 132 'Indexes', 133 $optionspacer . 'add_index', 134 $optionspacer . 'drop_index', 135 $optionspacer . 'rename_index'); 136 foreach ($commands as $command) { 137 $popcommands[str_replace($optionspacer, '', $command)] = str_replace('_', ' ', $command); 138 } 139 // Calculate the popup of fields/keys/indexes 140 if ($fields) { 141 $popfields['fieldshead'] = 'Fields'; 142 foreach ($fields as $field) { 143 $popfields['f#' . $field->getName()] = $optionspacer . $field->getName(); 144 } 145 } 146 if ($keys) { 147 $popfields['keyshead'] = 'Keys'; 148 foreach ($keys as $key) { 149 $popfields['k#' . $key->getName()] = $optionspacer . $key->getName(); 150 } 151 } 152 if ($indexes) { 153 $popfields['indexeshead'] = 'Indexes'; 154 foreach ($indexes as $index) { 155 $popfields['i#' . $index->getName()] = $optionspacer . $index->getName(); 156 } 157 } 158 159 // Now build the form 160 $o.= '<form id="form" action="index.php" method="post">'; 161 $o.= '<div>'; 162 $o.= ' <input type="hidden" name ="dir" value="' . str_replace($CFG->dirroot, '', $dirpath) . '" />'; 163 $o.= ' <input type="hidden" name ="table" value="' . s($tableparam) . '" />'; 164 $o.= ' <input type="hidden" name ="action" value="view_table_php" />'; 165 $o .= ' <table id="formelements" cellpadding="5">'; 166 $o.= ' <tr><td><label for="menucommand" accesskey="c">' . $this->str['selectaction'] .' </label>' . html_writer::select($popcommands, 'command', $commandparam, false) . ' <label for="menufieldkeyindex" accesskey="f">' . $this->str['selectfieldkeyindex'] . ' </label>' .html_writer::select($popfields, 'fieldkeyindex', $origfieldkeyindexparam, false) . '</td></tr>'; 167 $o.= ' <tr><td colspan="2" align="center"><input type="submit" value="' .$this->str['view'] . '" /></td></tr>'; 168 $o.= ' </table>'; 169 $o.= '</div></form>'; 170 171 $o.= ' <table id="phpcode" class="boxaligncenter" cellpadding="5">'; 172 $o .= ' <tr><td><textarea cols="80" rows="32" class="form-control">'; 173 // Check we have selected some field/key/index from the popup 174 if ($fieldkeyindexparam == 'fieldshead' || $fieldkeyindexparam == 'keyshead' || $fieldkeyindexparam == 'indexeshead') { 175 $o.= s($this->str['selectonefieldkeyindex']); 176 // Check we have selected some command from the popup 177 } else if ($commandparam == 'Fields' || $commandparam == 'Keys' || $commandparam == 'Indexes') { 178 $o.= s($this->str['selectonecommand']); 179 } else { 180 // Based on current params, call the needed function 181 switch ($commandparam) { 182 case 'add_field': 183 if ($fieldkeyindexinitial == 'f') { //Only if we have got one field 184 $o.= s($this->add_field_php($structure, $tableparam, $fieldkeyindexparam)); 185 } else { 186 $o.= $this->str['mustselectonefield']; 187 } 188 break; 189 case 'drop_field': 190 if ($fieldkeyindexinitial == 'f') { //Only if we have got one field 191 $o.= s($this->drop_field_php($structure, $tableparam, $fieldkeyindexparam)); 192 } else { 193 $o.= $this->str['mustselectonefield']; 194 } 195 break; 196 case 'rename_field': 197 if ($fieldkeyindexinitial == 'f') { //Only if we have got one field 198 $o.= s($this->rename_field_php($structure, $tableparam, $fieldkeyindexparam)); 199 } else { 200 $o.= $this->str['mustselectonefield']; 201 } 202 break; 203 case 'change_field_type': 204 if ($fieldkeyindexinitial == 'f') { //Only if we have got one field 205 $o.= s($this->change_field_type_php($structure, $tableparam, $fieldkeyindexparam)); 206 } else { 207 $o.= $this->str['mustselectonefield']; 208 } 209 break; 210 case 'change_field_precision': 211 if ($fieldkeyindexinitial == 'f') { //Only if we have got one field 212 $o.= s($this->change_field_precision_php($structure, $tableparam, $fieldkeyindexparam)); 213 } else { 214 $o.= $this->str['mustselectonefield']; 215 } 216 break; 217 case 'change_field_notnull': 218 if ($fieldkeyindexinitial == 'f') { // Only if we have got one field 219 $o.= s($this->change_field_notnull_php($structure, $tableparam, $fieldkeyindexparam)); 220 } else { 221 $o.= $this->str['mustselectonefield']; 222 } 223 break; 224 case 'change_field_default': 225 if ($fieldkeyindexinitial == 'f') { // Only if we have got one field 226 $o.= s($this->change_field_default_php($structure, $tableparam, $fieldkeyindexparam)); 227 } else { 228 $o.= $this->str['mustselectonefield']; 229 } 230 break; 231 case 'add_key': 232 if ($fieldkeyindexinitial == 'k') { // Only if we have got one key 233 $o.= s($this->add_key_php($structure, $tableparam, $fieldkeyindexparam)); 234 } else { 235 $o.= $this->str['mustselectonekey']; 236 } 237 break; 238 case 'drop_key': 239 if ($fieldkeyindexinitial == 'k') { // Only if we have got one key 240 $o.= s($this->drop_key_php($structure, $tableparam, $fieldkeyindexparam)); 241 } else { 242 $o.= $this->str['mustselectonekey']; 243 } 244 break; 245 case 'rename_key': 246 if ($fieldkeyindexinitial == 'k') { // Only if we have got one key 247 $o.= s($this->rename_key_php($structure, $tableparam, $fieldkeyindexparam)); 248 } else { 249 $o.= $this->str['mustselectonekey']; 250 } 251 break; 252 case 'add_index': 253 if ($fieldkeyindexinitial == 'i') { // Only if we have got one index 254 $o.= s($this->add_index_php($structure, $tableparam, $fieldkeyindexparam)); 255 } else { 256 $o.= $this->str['mustselectoneindex']; 257 } 258 break; 259 case 'drop_index': 260 if ($fieldkeyindexinitial == 'i') { // Only if we have got one index 261 $o.= s($this->drop_index_php($structure, $tableparam, $fieldkeyindexparam)); 262 } else { 263 $o.= $this->str['mustselectoneindex']; 264 } 265 break; 266 case 'rename_index': 267 if ($fieldkeyindexinitial == 'i') { // Only if we have got one index 268 $o.= s($this->rename_index_php($structure, $tableparam, $fieldkeyindexparam)); 269 } else { 270 $o.= $this->str['mustselectoneindex']; 271 } 272 break; 273 } 274 } 275 $o.= '</textarea></td></tr>'; 276 $o.= ' </table>'; 277 278 $this->output = $o; 279 280 // Launch postaction if exists (leave this here!) 281 if ($this->getPostAction() && $result) { 282 return $this->launch($this->getPostAction()); 283 } 284 285 // Return ok if arrived here 286 return $result; 287 } 288 289 /** 290 * This function will generate all the PHP code needed to 291 * create one field using XMLDB objects and functions 292 * 293 * @param xmldb_structure structure object containing all the info 294 * @param string table table name 295 * @param string field field name to be created 296 * @return string PHP code to be used to create the field 297 */ 298 function add_field_php($structure, $table, $field) { 299 300 $result = ''; 301 // Validate if we can do it 302 if (!$table = $structure->getTable($table)) { 303 return false; 304 } 305 if (!$field = $table->getField($field)) { 306 return false; 307 } 308 if ($table->getAllErrors()) { 309 return false; 310 } 311 312 // Add the standard PHP header 313 $result .= XMLDB_PHP_HEADER; 314 315 // Add contents 316 $result .= XMLDB_LINEFEED; 317 $result .= ' // Define field ' . $field->getName() . ' to be added to ' . $table->getName() . '.' . XMLDB_LINEFEED; 318 $result .= ' $table = new xmldb_table(' . "'" . $table->getName() . "'" . ');' . XMLDB_LINEFEED; 319 $result .= ' $field = new xmldb_field(' . "'" . $field->getName() . "', " . $field->getPHP(true) . ');' . XMLDB_LINEFEED; 320 321 // Launch the proper DDL 322 $result .= XMLDB_LINEFEED; 323 $result .= ' // Conditionally launch add field ' . $field->getName() . '.' . XMLDB_LINEFEED; 324 $result .= ' if (!$dbman->field_exists($table, $field)) {'. XMLDB_LINEFEED; 325 $result .= ' $dbman->add_field($table, $field);' . XMLDB_LINEFEED; 326 $result .= ' }'. XMLDB_LINEFEED; 327 328 // Add the proper upgrade_xxxx_savepoint call 329 $result .= $this->upgrade_savepoint_php ($structure); 330 331 // Add standard PHP footer 332 $result .= XMLDB_PHP_FOOTER; 333 334 return $result; 335 } 336 337 /** 338 * This function will generate all the PHP code needed to 339 * drop one field using XMLDB objects and functions 340 * 341 * @param xmldb_structure structure object containing all the info 342 * @param string table table name 343 * @param string field field name to be dropped 344 * @return string PHP code to be used to drop the field 345 */ 346 function drop_field_php($structure, $table, $field) { 347 348 $result = ''; 349 // Validate if we can do it 350 if (!$table = $structure->getTable($table)) { 351 return false; 352 } 353 if (!$field = $table->getField($field)) { 354 return false; 355 } 356 if ($table->getAllErrors()) { 357 return false; 358 } 359 360 // Add the standard PHP header 361 $result .= XMLDB_PHP_HEADER; 362 363 // Add contents 364 $result .= XMLDB_LINEFEED; 365 $result .= ' // Define field ' . $field->getName() . ' to be dropped from ' . $table->getName() . '.' . XMLDB_LINEFEED; 366 $result .= ' $table = new xmldb_table(' . "'" . $table->getName() . "'" . ');' . XMLDB_LINEFEED; 367 $result .= ' $field = new xmldb_field(' . "'" . $field->getName() . "'" . ');' . XMLDB_LINEFEED; 368 369 // Launch the proper DDL 370 $result .= XMLDB_LINEFEED; 371 $result .= ' // Conditionally launch drop field ' . $field->getName() . '.' . XMLDB_LINEFEED; 372 $result .= ' if ($dbman->field_exists($table, $field)) {' . XMLDB_LINEFEED; 373 $result .= ' $dbman->drop_field($table, $field);' . XMLDB_LINEFEED; 374 $result .= ' }' . XMLDB_LINEFEED; 375 376 // Add the proper upgrade_xxxx_savepoint call 377 $result .= $this->upgrade_savepoint_php ($structure); 378 379 // Add standard PHP footer 380 $result .= XMLDB_PHP_FOOTER; 381 382 return $result; 383 } 384 385 /** 386 * This function will generate all the PHP code needed to 387 * rename one field using XMLDB objects and functions 388 * 389 * @param xmldb_structure structure object containing all the info 390 * @param string table table name 391 * @param string field field name to be renamed 392 * @return string PHP code to be used to rename the field 393 */ 394 function rename_field_php($structure, $table, $field) { 395 396 $result = ''; 397 // Validate if we can do it 398 if (!$table = $structure->getTable($table)) { 399 return false; 400 } 401 if (!$field = $table->getField($field)) { 402 return false; 403 } 404 if ($table->getAllErrors()) { 405 return false; 406 } 407 408 // Add the standard PHP header 409 $result .= XMLDB_PHP_HEADER; 410 411 // Add contents 412 $result .= XMLDB_LINEFEED; 413 $result .= ' // Rename field ' . $field->getName() . ' on table ' . $table->getName() . ' to NEWNAMEGOESHERE.'. XMLDB_LINEFEED; 414 $result .= ' $table = new xmldb_table(' . "'" . $table->getName() . "'" . ');' . XMLDB_LINEFEED; 415 $result .= ' $field = new xmldb_field(' . "'" . $field->getName() . "', " . $field->getPHP(true) . ');' . XMLDB_LINEFEED; 416 417 // Launch the proper DDL 418 $result .= XMLDB_LINEFEED; 419 $result .= ' // Launch rename field ' . $field->getName() . '.' . XMLDB_LINEFEED; 420 $result .= ' $dbman->rename_field($table, $field, ' . "'" . 'NEWNAMEGOESHERE' . "'" . ');' . XMLDB_LINEFEED; 421 422 // Add the proper upgrade_xxxx_savepoint call 423 $result .= $this->upgrade_savepoint_php ($structure); 424 425 // Add standard PHP footer 426 $result .= XMLDB_PHP_FOOTER; 427 428 return $result; 429 } 430 431 /** 432 * This function will generate all the PHP code needed to 433 * change the type of one field using XMLDB objects and functions. 434 * Currently these conversions are supported: 435 * integer to char 436 * char to integer 437 * number to char 438 * char to number 439 * float to char 440 * char to float 441 * 442 * @param xmldb_structure structure object containing all the info 443 * @param string table table name 444 * @param string field field name to change precision 445 */ 446 function change_field_type_php($structure, $table, $field) { 447 448 $result = ''; 449 // Validate if we can do it 450 if (!$table = $structure->getTable($table)) { 451 return false; 452 } 453 if (!$field = $table->getField($field)) { 454 return false; 455 } 456 if ($table->getAllErrors()) { 457 return false; 458 } 459 460 // Calculate the type tip text 461 $type = $field->getXMLDBTypeName($field->getType()); 462 463 // Add the standard PHP header 464 $result .= XMLDB_PHP_HEADER; 465 466 // Add contents 467 $result .= XMLDB_LINEFEED; 468 $result .= ' // Changing type of field ' . $field->getName() . ' on table ' . $table->getName() . ' to ' . $type . '.' . XMLDB_LINEFEED; 469 $result .= ' $table = new xmldb_table(' . "'" . $table->getName() . "'" . ');' . XMLDB_LINEFEED; 470 $result .= ' $field = new xmldb_field(' . "'" . $field->getName() . "', " . $field->getPHP(true) . ');' . XMLDB_LINEFEED; 471 472 // Launch the proper DDL 473 $result .= XMLDB_LINEFEED; 474 $result .= ' // Launch change of type for field ' . $field->getName() . '.' . XMLDB_LINEFEED; 475 $result .= ' $dbman->change_field_type($table, $field);' . XMLDB_LINEFEED; 476 477 // Add the proper upgrade_xxxx_savepoint call 478 $result .= $this->upgrade_savepoint_php ($structure); 479 480 // Add standard PHP footer 481 $result .= XMLDB_PHP_FOOTER; 482 483 return $result; 484 } 485 486 /** 487 * This function will generate all the PHP code needed to 488 * change the precision of one field using XMLDB objects and functions 489 * 490 * @param xmldb_structure structure object containing all the info 491 * @param string table table name 492 * @param string field field name to change precision 493 */ 494 function change_field_precision_php($structure, $table, $field) { 495 496 $result = ''; 497 // Validate if we can do it 498 if (!$table = $structure->getTable($table)) { 499 return false; 500 } 501 if (!$field = $table->getField($field)) { 502 return false; 503 } 504 if ($table->getAllErrors()) { 505 return false; 506 } 507 508 // Calculate the precision tip text 509 $precision = '(' . $field->getLength(); 510 if ($field->getDecimals()) { 511 $precision .= ', ' . $field->getDecimals(); 512 } 513 $precision .= ')'; 514 515 // Add the standard PHP header 516 $result .= XMLDB_PHP_HEADER; 517 518 // Add contents 519 $result .= XMLDB_LINEFEED; 520 $result .= ' // Changing precision of field ' . $field->getName() . ' on table ' . $table->getName() . ' to ' . $precision . '.' . XMLDB_LINEFEED; 521 $result .= ' $table = new xmldb_table(' . "'" . $table->getName() . "'" . ');' . XMLDB_LINEFEED; 522 $result .= ' $field = new xmldb_field(' . "'" . $field->getName() . "', " . $field->getPHP(true) . ');' . XMLDB_LINEFEED; 523 524 // Launch the proper DDL 525 $result .= XMLDB_LINEFEED; 526 $result .= ' // Launch change of precision for field ' . $field->getName() . '.' . XMLDB_LINEFEED; 527 $result .= ' $dbman->change_field_precision($table, $field);' . XMLDB_LINEFEED; 528 529 // Add the proper upgrade_xxxx_savepoint call 530 $result .= $this->upgrade_savepoint_php ($structure); 531 532 // Add standard PHP footer 533 $result .= XMLDB_PHP_FOOTER; 534 535 return $result; 536 } 537 538 /** 539 * This function will generate all the PHP code needed to 540 * change the nullability of one field using XMLDB objects and functions 541 * 542 * @param xmldb_structure structure object containing all the info 543 * @param string table table name 544 * @param string field field name to change null/not null 545 */ 546 function change_field_notnull_php($structure, $table, $field) { 547 548 $result = ''; 549 // Validate if we can do it 550 if (!$table = $structure->getTable($table)) { 551 return false; 552 } 553 if (!$field = $table->getField($field)) { 554 return false; 555 } 556 if ($table->getAllErrors()) { 557 return false; 558 } 559 560 // Calculate the notnull tip text 561 $notnull = $field->getNotnull() ? 'not null' : 'null'; 562 563 // Add the standard PHP header 564 $result .= XMLDB_PHP_HEADER; 565 566 // Add contents 567 $result .= XMLDB_LINEFEED; 568 $result .= ' // Changing nullability of field ' . $field->getName() . ' on table ' . $table->getName() . ' to ' . $notnull . '.' . XMLDB_LINEFEED; 569 $result .= ' $table = new xmldb_table(' . "'" . $table->getName() . "'" . ');' . XMLDB_LINEFEED; 570 $result .= ' $field = new xmldb_field(' . "'" . $field->getName() . "', " . $field->getPHP(true) . ');' . XMLDB_LINEFEED; 571 572 // Launch the proper DDL 573 $result .= XMLDB_LINEFEED; 574 $result .= ' // Launch change of nullability for field ' . $field->getName() . '.' . XMLDB_LINEFEED; 575 $result .= ' $dbman->change_field_notnull($table, $field);' . XMLDB_LINEFEED; 576 577 // Add the proper upgrade_xxxx_savepoint call 578 $result .= $this->upgrade_savepoint_php ($structure); 579 580 // Add standard PHP footer 581 $result .= XMLDB_PHP_FOOTER; 582 583 return $result; 584 } 585 586 /** 587 * This function will generate all the PHP code needed to 588 * change the default of one field using XMLDB objects and functions 589 * 590 * @param xmldb_structure structure object containing all the info 591 * @param string table table name 592 * @param string field field name to change null/not null 593 */ 594 function change_field_default_php($structure, $table, $field) { 595 596 $result = ''; 597 // Validate if we can do it 598 if (!$table = $structure->getTable($table)) { 599 return false; 600 } 601 if (!$field = $table->getField($field)) { 602 return false; 603 } 604 if ($table->getAllErrors()) { 605 return false; 606 } 607 608 // Calculate the default tip text 609 $default = $field->getDefault() === null ? 'drop it' : $field->getDefault(); 610 611 // Add the standard PHP header 612 $result .= XMLDB_PHP_HEADER; 613 614 // Add contents 615 $result .= XMLDB_LINEFEED; 616 $result .= ' // Changing the default of field ' . $field->getName() . ' on table ' . $table->getName() . ' to ' . $default . '.' . XMLDB_LINEFEED; 617 $result .= ' $table = new xmldb_table(' . "'" . $table->getName() . "'" . ');' . XMLDB_LINEFEED; 618 $result .= ' $field = new xmldb_field(' . "'" . $field->getName() . "', " . $field->getPHP(true) . ');' . XMLDB_LINEFEED; 619 620 // Launch the proper DDL 621 $result .= XMLDB_LINEFEED; 622 $result .= ' // Launch change of default for field ' . $field->getName() . '.' . XMLDB_LINEFEED; 623 $result .= ' $dbman->change_field_default($table, $field);' . XMLDB_LINEFEED; 624 625 // Add the proper upgrade_xxxx_savepoint call 626 $result .= $this->upgrade_savepoint_php ($structure); 627 628 // Add standard PHP footer 629 $result .= XMLDB_PHP_FOOTER; 630 631 return $result; 632 } 633 634 /** 635 * This function will generate all the PHP code needed to 636 * create one key using XMLDB objects and functions 637 * 638 * @param xmldb_structure structure object containing all the info 639 * @param string table table name 640 * @param string key key name to be created 641 * @return string PHP code to be used to create the key 642 */ 643 function add_key_php($structure, $table, $key) { 644 645 $result = ''; 646 // Validate if we can do it 647 if (!$table = $structure->getTable($table)) { 648 return false; 649 } 650 if (!$key = $table->getKey($key)) { 651 return false; 652 } 653 if ($table->getAllErrors()) { 654 return false; 655 } 656 657 // Add the standard PHP header 658 $result .= XMLDB_PHP_HEADER; 659 660 // Add contents 661 $result .= XMLDB_LINEFEED; 662 $result .= ' // Define key ' . $key->getName() . ' ('. $key->getXMLDBKeyName($key->getType()) . ') to be added to ' . $table->getName() . '.' . XMLDB_LINEFEED; 663 $result .= ' $table = new xmldb_table(' . "'" . $table->getName() . "'" . ');' . XMLDB_LINEFEED; 664 $result .= ' $key = new xmldb_key(' . "'" . $key->getName() . "', " . $key->getPHP(true) . ');' . XMLDB_LINEFEED; 665 666 // Launch the proper DDL 667 $result .= XMLDB_LINEFEED; 668 $result .= ' // Launch add key ' . $key->getName() . '.' . XMLDB_LINEFEED; 669 $result .= ' $dbman->add_key($table, $key);' . XMLDB_LINEFEED; 670 671 // Add the proper upgrade_xxxx_savepoint call 672 $result .= $this->upgrade_savepoint_php ($structure); 673 674 // Add standard PHP footer 675 $result .= XMLDB_PHP_FOOTER; 676 677 return $result; 678 } 679 680 /** 681 * This function will generate all the PHP code needed to 682 * drop one key using XMLDB objects and functions 683 * 684 * @param xmldb_structure structure object containing all the info 685 * @param string table table name 686 * @param string key key name to be dropped 687 * @return string PHP code to be used to drop the key 688 */ 689 function drop_key_php($structure, $table, $key) { 690 691 $result = ''; 692 // Validate if we can do it 693 if (!$table = $structure->getTable($table)) { 694 return false; 695 } 696 if (!$key = $table->getKey($key)) { 697 return false; 698 } 699 if ($table->getAllErrors()) { 700 return false; 701 } 702 703 // Add the standard PHP header 704 $result .= XMLDB_PHP_HEADER; 705 706 // Add contents 707 $result .= XMLDB_LINEFEED; 708 $result .= ' // Define key ' . $key->getName() . ' ('. $key->getXMLDBKeyName($key->getType()) . ') to be dropped form ' . $table->getName() . '.' . XMLDB_LINEFEED; 709 $result .= ' $table = new xmldb_table(' . "'" . $table->getName() . "'" . ');' . XMLDB_LINEFEED; 710 $result .= ' $key = new xmldb_key(' . "'" . $key->getName() . "', " . $key->getPHP(true) . ');' . XMLDB_LINEFEED; 711 712 // Launch the proper DDL 713 $result .= XMLDB_LINEFEED; 714 $result .= ' // Launch drop key ' . $key->getName() . '.' . XMLDB_LINEFEED; 715 $result .= ' $dbman->drop_key($table, $key);' . XMLDB_LINEFEED; 716 717 // Add the proper upgrade_xxxx_savepoint call 718 $result .= $this->upgrade_savepoint_php ($structure); 719 720 // Add standard PHP footer 721 $result .= XMLDB_PHP_FOOTER; 722 723 return $result; 724 } 725 726 /** 727 * This function will generate all the PHP code needed to 728 * rename one key using XMLDB objects and functions 729 * 730 * @param xmldb_structure structure object containing all the info 731 * @param string table table name 732 * @param string key key name to be renamed 733 * @return string PHP code to be used to rename the key 734 */ 735 function rename_key_php($structure, $table, $key) { 736 737 $result = ''; 738 // Validate if we can do it 739 if (!$table = $structure->getTable($table)) { 740 return false; 741 } 742 if (!$key = $table->getKey($key)) { 743 return false; 744 } 745 if ($table->getAllErrors()) { 746 return false; 747 } 748 749 // Prepend warning. This function isn't usable! 750 $result .= 'DON\'T USE THIS FUNCTION (IT\'S ONLY EXPERIMENTAL). SOME DBs DON\'T SUPPORT IT!' . XMLDB_LINEFEED . XMLDB_LINEFEED; 751 752 // Add the standard PHP header 753 $result .= XMLDB_PHP_HEADER; 754 755 // Add contents 756 $result .= XMLDB_LINEFEED; 757 $result .= ' // Define key ' . $key->getName() . ' ('. $key->getXMLDBKeyName($key->getType()) . ') to be renamed to NEWNAMEGOESHERE.' . XMLDB_LINEFEED; 758 $result .= ' $table = new xmldb_table(' . "'" . $table->getName() . "'" . ');' . XMLDB_LINEFEED; 759 $result .= ' $key = new xmldb_key(' . "'" . $key->getName() . "', " . $key->getPHP(true) . ');' . XMLDB_LINEFEED; 760 761 // Launch the proper DDL 762 $result .= XMLDB_LINEFEED; 763 $result .= ' // Launch rename key ' . $key->getName() . '.' . XMLDB_LINEFEED; 764 $result .= ' $dbman->rename_key($table, $key, ' . "'" . 'NEWNAMEGOESHERE' . "'" . ');' . XMLDB_LINEFEED; 765 766 // Add the proper upgrade_xxxx_savepoint call 767 $result .= $this->upgrade_savepoint_php ($structure); 768 769 // Add standard PHP footer 770 $result .= XMLDB_PHP_FOOTER; 771 772 return $result; 773 } 774 775 /** 776 * This function will generate all the PHP code needed to 777 * create one index using XMLDB objects and functions 778 * 779 * @param xmldb_structure structure object containing all the info 780 * @param string table table name 781 * @param string index index name to be created 782 * @return string PHP code to be used to create the index 783 */ 784 function add_index_php($structure, $table, $index) { 785 786 $result = ''; 787 // Validate if we can do it 788 if (!$table = $structure->getTable($table)) { 789 return false; 790 } 791 if (!$index = $table->getIndex($index)) { 792 return false; 793 } 794 if ($table->getAllErrors()) { 795 return false; 796 } 797 798 // Add the standard PHP header 799 $result .= XMLDB_PHP_HEADER; 800 801 // Add contents 802 $result .= XMLDB_LINEFEED; 803 $result .= ' // Define index ' . $index->getName() . ' ('. ($index->getUnique() ? 'unique' : 'not unique') . ') to be added to ' . $table->getName() . '.' . XMLDB_LINEFEED; 804 $result .= ' $table = new xmldb_table(' . "'" . $table->getName() . "'" . ');' . XMLDB_LINEFEED; 805 $result .= ' $index = new xmldb_index(' . "'" . $index->getName() . "', " . $index->getPHP(true) . ');' . XMLDB_LINEFEED; 806 807 // Launch the proper DDL 808 $result .= XMLDB_LINEFEED; 809 $result .= ' // Conditionally launch add index ' . $index->getName() . '.' . XMLDB_LINEFEED; 810 $result .= ' if (!$dbman->index_exists($table, $index)) {' . XMLDB_LINEFEED; 811 $result .= ' $dbman->add_index($table, $index);' . XMLDB_LINEFEED; 812 $result .= ' }' . XMLDB_LINEFEED; 813 814 // Add the proper upgrade_xxxx_savepoint call 815 $result .= $this->upgrade_savepoint_php ($structure); 816 817 // Add standard PHP footer 818 $result .= XMLDB_PHP_FOOTER; 819 820 return $result; 821 } 822 823 /** 824 * This function will generate all the PHP code needed to 825 * drop one index using XMLDB objects and functions 826 * 827 * @param xmldb_structure structure object containing all the info 828 * @param string table table name 829 * @param string index index name to be dropped 830 * @return string PHP code to be used to drop the index 831 */ 832 function drop_index_php($structure, $table, $index) { 833 834 $result = ''; 835 // Validate if we can do it 836 if (!$table = $structure->getTable($table)) { 837 return false; 838 } 839 if (!$index = $table->getIndex($index)) { 840 return false; 841 } 842 if ($table->getAllErrors()) { 843 return false; 844 } 845 846 // Add the standard PHP header 847 $result .= XMLDB_PHP_HEADER; 848 849 // Add contents 850 $result .= XMLDB_LINEFEED; 851 $result .= ' // Define index ' . $index->getName() . ' ('. ($index->getUnique() ? 'unique' : 'not unique') . ') to be dropped form ' . $table->getName() . '.' . XMLDB_LINEFEED; 852 $result .= ' $table = new xmldb_table(' . "'" . $table->getName() . "'" . ');' . XMLDB_LINEFEED; 853 $result .= ' $index = new xmldb_index(' . "'" . $index->getName() . "', " . $index->getPHP(true) . ');' . XMLDB_LINEFEED; 854 855 // Launch the proper DDL 856 $result .= XMLDB_LINEFEED; 857 $result .= ' // Conditionally launch drop index ' . $index->getName() . '.' . XMLDB_LINEFEED; 858 $result .= ' if ($dbman->index_exists($table, $index)) {' . XMLDB_LINEFEED; 859 $result .= ' $dbman->drop_index($table, $index);' . XMLDB_LINEFEED; 860 $result .= ' }' . XMLDB_LINEFEED; 861 862 // Add the proper upgrade_xxxx_savepoint call 863 $result .= $this->upgrade_savepoint_php ($structure); 864 865 // Add standard PHP footer 866 $result .= XMLDB_PHP_FOOTER; 867 868 return $result; 869 } 870 871 /** 872 * This function will generate all the PHP code needed to 873 * rename one index using XMLDB objects and functions 874 * 875 * @param xmldb_structure structure object containing all the info 876 * @param string table table name 877 * @param string index index name to be renamed 878 * @return string PHP code to be used to rename the index 879 */ 880 function rename_index_php($structure, $table, $index) { 881 882 $result = ''; 883 // Validate if we can do it 884 if (!$table = $structure->getTable($table)) { 885 return false; 886 } 887 if (!$index = $table->getIndex($index)) { 888 return false; 889 } 890 if ($table->getAllErrors()) { 891 return false; 892 } 893 894 // Prepend warning. This function isn't usable! 895 $result .= 'DON\'T USE THIS FUNCTION (IT\'S ONLY EXPERIMENTAL). SOME DBs DON\'T SUPPORT IT!' . XMLDB_LINEFEED . XMLDB_LINEFEED; 896 897 // Add the standard PHP header 898 $result .= XMLDB_PHP_HEADER; 899 900 // Add contents 901 $result .= XMLDB_LINEFEED; 902 $result .= ' // Define index ' . $index->getName() . ' ('. ($index->getUnique() ? 'unique' : 'not unique') . ') to be renamed to NEWNAMEGOESHERE.' . XMLDB_LINEFEED; 903 $result .= ' $table = new xmldb_table(' . "'" . $table->getName() . "'" . ');' . XMLDB_LINEFEED; 904 $result .= ' $index = new xmldb_index(' . "'" . $index->getName() . "', " . $index->getPHP(true) . ');' . XMLDB_LINEFEED; 905 906 // Launch the proper DDL 907 $result .= XMLDB_LINEFEED; 908 $result .= ' // Launch rename index ' . $index->getName() . '.' . XMLDB_LINEFEED; 909 $result .= ' $dbman->rename_index($table, $index, ' . "'" . 'NEWNAMEGOESHERE' . "'" . ');' . XMLDB_LINEFEED; 910 911 // Add the proper upgrade_xxxx_savepoint call 912 $result .= $this->upgrade_savepoint_php ($structure); 913 914 // Add standard PHP footer 915 $result .= XMLDB_PHP_FOOTER; 916 917 return $result; 918 } 919 920 } 921
title
Description
Body
title
Description
Body
title
Description
Body
title
Body