| 1 | efrain | 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 |   |