source: moodle/trunk/fuentes/admin/tool/xmldb/actions/view_table_php/view_table_php.class.php @ 136

Last change on this file since 136 was 136, checked in by mabarracus, 4 years ago

Ported code to xenial

File size: 36.7 KB
Line 
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 */
31class 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&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '&amp;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 = '&nbsp;&nbsp;&nbsp;';
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" class="boxaligncenter" cellpadding="5">';
166        $o.= '      <tr><td><label for="menucommand" accesskey="c">' . $this->str['selectaction'] .' </label>' . html_writer::select($popcommands, 'command', $commandparam, false) . '&nbsp;<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">';
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
Note: See TracBrowser for help on using the repository browser.