b0c7d558 |
1 | <?php // $Id$ |
2 | |
3 | /////////////////////////////////////////////////////////////////////////// |
4 | // // |
5 | // NOTICE OF COPYRIGHT // |
6 | // // |
7 | // Moodle - Modular Object-Oriented Dynamic Learning Environment // |
8 | // http://moodle.com // |
9 | // // |
b7064779 |
10 | // Copyright (C) 1999 onwards Martin Dougiamas http://dougiamas.com // |
b0c7d558 |
11 | // (C) 2001-3001 Eloy Lafuente (stronk7) http://contiento.com // |
12 | // // |
13 | // This program is free software; you can redistribute it and/or modify // |
14 | // it under the terms of the GNU General Public License as published by // |
15 | // the Free Software Foundation; either version 2 of the License, or // |
16 | // (at your option) any later version. // |
17 | // // |
18 | // This program is distributed in the hope that it will be useful, // |
19 | // but WITHOUT ANY WARRANTY; without even the implied warranty of // |
20 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // |
21 | // GNU General Public License for more details: // |
22 | // // |
23 | // http://www.gnu.org/copyleft/gpl.html // |
24 | // // |
25 | /////////////////////////////////////////////////////////////////////////// |
26 | |
27 | /// This class will show the PHP needed to perform the desired action |
28 | /// with the specified table. |
29 | |
30 | class view_structure_php extends XMLDBAction { |
31 | |
eef868d1 |
32 | /** |
b0c7d558 |
33 | * Init method, every subclass will have its own |
34 | */ |
35 | function init() { |
36 | parent::init(); |
37 | |
38 | /// Set own custom attributes |
39 | |
40 | /// Get needed strings |
41 | $this->loadStrings(array( |
42 | 'selectaction' => 'xmldb', |
43 | 'selecttable' => 'xmldb', |
44 | 'view' => 'xmldb', |
45 | 'back' => 'xmldb' |
46 | )); |
47 | } |
48 | |
49 | /** |
50 | * Invoke method, every class will have its own |
51 | * returns true/false on completion, setting both |
52 | * errormsg and output as necessary |
53 | */ |
54 | function invoke() { |
55 | parent::invoke(); |
56 | |
57 | $result = true; |
58 | |
59 | /// Set own core attributes |
60 | $this->does_generate = ACTION_GENERATE_HTML; |
61 | |
62 | /// These are always here |
63 | global $CFG, $XMLDB; |
64 | |
65 | /// Do the job, setting result as needed |
66 | /// Get the dir containing the file |
67 | $dirpath = required_param('dir', PARAM_PATH); |
68 | $dirpath = $CFG->dirroot . stripslashes_safe($dirpath); |
69 | |
70 | /// Get the correct dirs |
71 | if (!empty($XMLDB->dbdirs)) { |
72 | $dbdir =& $XMLDB->dbdirs[$dirpath]; |
73 | } else { |
74 | return false; |
75 | } |
76 | if (!empty($XMLDB->editeddirs)) { |
77 | $editeddir =& $XMLDB->editeddirs[$dirpath]; |
78 | $structure =& $editeddir->xml_file->getStructure(); |
79 | } |
80 | /// ADD YOUR CODE HERE |
eef868d1 |
81 | |
b0c7d558 |
82 | $tables =& $structure->getTables(); |
83 | $table = reset($tables); |
84 | $defaulttable = null; |
85 | if ($table) { |
86 | $defaulttable = $table->getName(); |
87 | } |
88 | |
89 | /// Get parameters |
90 | $commandparam = optional_param('command', 'create_table', PARAM_PATH); |
91 | $tableparam = optional_param('table', $defaulttable, PARAM_PATH); |
92 | |
93 | /// The back to edit xml button |
007456de |
94 | $b = ' <p class="centerpara buttons">'; |
b0c7d558 |
95 | $b .= '<a href="index.php?action=edit_xml_file&dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['back'] . ']</a>'; |
96 | $b .= '</p>'; |
97 | $o = $b; |
98 | |
99 | /// Calculate the popup of commands |
eef868d1 |
100 | $commands = array('create_table', |
b0c7d558 |
101 | 'drop_table', |
ef856b2d |
102 | 'rename_table'); |
b0c7d558 |
103 | foreach ($commands as $command) { |
104 | $popcommands[$command] = str_replace('_', ' ', $command); |
105 | } |
106 | /// Calculate the popup of tables |
107 | foreach ($tables as $table) { |
108 | $poptables[$table->getName()] = $table->getName(); |
109 | } |
110 | /// Now build the form |
111 | $o.= '<form id="form" action="index.php" method="post">'; |
007456de |
112 | $o.='<div>'; |
b0c7d558 |
113 | $o.= ' <input type="hidden" name ="dir" value="' . str_replace($CFG->dirroot, '', $dirpath) . '" />'; |
114 | $o.= ' <input type="hidden" name ="action" value="view_structure_php" />'; |
007456de |
115 | $o.= ' <table id="formelements" class="boxaligncenter" cellpadding="5">'; |
b0c7d558 |
116 | $o.= ' <tr><td><label for="action" accesskey="c">' . $this->str['selectaction'] .' </label>' . choose_from_menu($popcommands, 'command', $commandparam, '', '', 0, true) . ' <label for="table" accesskey="t">' . $this->str['selecttable'] . ' </label>' .choose_from_menu($poptables, 'table', $tableparam, '', '', 0, true) . '</td></tr>'; |
117 | $o.= ' <tr><td colspan="2" align="center"><input type="submit" value="' .$this->str['view'] . '" /></td></tr>'; |
118 | $o.= ' </table>'; |
007456de |
119 | $o.= '</div></form>'; |
120 | $o.= ' <table id="phpcode" class="boxaligncenter" cellpadding="5">'; |
b0c7d558 |
121 | $o.= ' <tr><td><textarea cols="80" rows="32">'; |
122 | /// Based on current params, call the needed function |
123 | switch ($commandparam) { |
124 | case 'create_table': |
125 | $o.= s($this->create_table_php($structure, $tableparam)); |
126 | break; |
127 | case 'drop_table': |
128 | $o.= s($this->drop_table_php($structure, $tableparam)); |
129 | break; |
130 | case 'rename_table': |
131 | $o.= s($this->rename_table_php($structure, $tableparam)); |
132 | break; |
133 | } |
134 | $o.= '</textarea></td></tr>'; |
135 | $o.= ' </table>'; |
136 | |
137 | $this->output = $o; |
138 | |
139 | /// Launch postaction if exists (leave this here!) |
eef868d1 |
140 | if ($this->getPostAction() && $result) { |
b0c7d558 |
141 | return $this->launch($this->getPostAction()); |
142 | } |
143 | |
144 | /// Return ok if arrived here |
145 | return $result; |
146 | } |
147 | |
148 | /** |
eef868d1 |
149 | * This function will generate all the PHP code needed to |
b0c7d558 |
150 | * create one table using XMLDB objects and functions |
eef868d1 |
151 | * |
b0c7d558 |
152 | * @param XMLDBStructure structure object containing all the info |
153 | * @param string table table code to be created |
154 | * @return string PHP code to be used to create the table |
155 | */ |
156 | function create_table_php($structure, $table) { |
157 | |
158 | $result = ''; |
159 | /// Validate if we can do it |
3ab430fb |
160 | if (!$table = $structure->getTable($table)) { |
161 | return false; |
162 | } |
163 | if ($table->getAllErrors()) { |
164 | return false; |
165 | } |
b0c7d558 |
166 | |
167 | /// Add the standard PHP header |
168 | $result .= XMLDB_PHP_HEADER; |
169 | |
170 | /// Add contents |
3ab430fb |
171 | $result .= XMLDB_LINEFEED; |
cb78437d |
172 | $result .= ' /// Define table ' . $table->getName() . ' to be created' . XMLDB_LINEFEED; |
3ab430fb |
173 | $result .= ' $table = new XMLDBTable(' . "'" . $table->getName() . "'" . ');' . XMLDB_LINEFEED; |
174 | $result .= XMLDB_LINEFEED; |
175 | $result .= ' /// Adding fields to table ' . $table->getName() . XMLDB_LINEFEED; |
176 | /// Iterate over each field |
177 | foreach ($table->getFields() as $field) { |
178 | /// The field header, with name |
179 | $result .= ' $table->addFieldInfo(' . "'" . $field->getName() . "', "; |
180 | /// The field PHP specs |
181 | $result .= $field->getPHP(false); |
182 | /// The end of the line |
183 | $result .= ');' . XMLDB_LINEFEED; |
184 | } |
185 | /// Iterate over each key |
186 | if ($keys = $table->getKeys()) { |
187 | $result .= XMLDB_LINEFEED; |
188 | $result .= ' /// Adding keys to table ' . $table->getName() . XMLDB_LINEFEED; |
189 | foreach ($keys as $key) { |
190 | /// The key header, with name |
191 | $result .= ' $table->addKeyInfo(' . "'" . $key->getName() . "', "; |
192 | /// The key PHP specs |
193 | $result .= $key->getPHP(); |
194 | /// The end of the line |
195 | $result .= ');' . XMLDB_LINEFEED; |
196 | } |
197 | } |
198 | /// Iterate over each index |
199 | if ($indexes = $table->getIndexes()) { |
200 | $result .= XMLDB_LINEFEED; |
201 | $result .= ' /// Adding indexes to table ' . $table->getName() . XMLDB_LINEFEED; |
202 | foreach ($indexes as $index) { |
203 | /// The index header, with name |
204 | $result .= ' $table->addIndexInfo(' . "'" . $index->getName() . "', "; |
205 | /// The index PHP specs |
206 | $result .= $index->getPHP(); |
207 | /// The end of the line |
208 | $result .= ');' . XMLDB_LINEFEED; |
209 | } |
210 | } |
211 | |
212 | /// Launch the proper DDL |
213 | $result .= XMLDB_LINEFEED; |
214 | $result .= ' /// Launch create table for ' . $table->getName() . XMLDB_LINEFEED; |
db9940b6 |
215 | $result .= ' $result = $result && create_table($table);' . XMLDB_LINEFEED; |
b0c7d558 |
216 | |
217 | /// Add standard PHP footer |
218 | $result .= XMLDB_PHP_FOOTER; |
219 | |
220 | return $result; |
221 | } |
222 | |
223 | /** |
eef868d1 |
224 | * This function will generate all the PHP code needed to |
b0c7d558 |
225 | * drop one table using XMLDB objects and functions |
eef868d1 |
226 | * |
b0c7d558 |
227 | * @param XMLDBStructure structure object containing all the info |
228 | * @param string table table code to be dropped |
229 | * @return string PHP code to be used to drop the table |
230 | */ |
231 | function drop_table_php($structure, $table) { |
232 | |
233 | $result = ''; |
234 | /// Validate if we can do it |
3ab430fb |
235 | if (!$table = $structure->getTable($table)) { |
236 | return false; |
237 | } |
238 | if ($table->getAllErrors()) { |
239 | return false; |
240 | } |
b0c7d558 |
241 | |
242 | /// Add the standard PHP header |
243 | $result .= XMLDB_PHP_HEADER; |
244 | |
245 | /// Add contents |
386c23c9 |
246 | $result .= XMLDB_LINEFEED; |
cb78437d |
247 | $result .= ' /// Define table ' . $table->getName() . ' to be dropped' . XMLDB_LINEFEED; |
386c23c9 |
248 | $result .= ' $table = new XMLDBTable(' . "'" . $table->getName() . "'" . ');' . XMLDB_LINEFEED; |
249 | |
250 | /// Launch the proper DDL |
251 | $result .= XMLDB_LINEFEED; |
252 | $result .= ' /// Launch drop table for ' . $table->getName() . XMLDB_LINEFEED; |
db9940b6 |
253 | $result .= ' $result = $result && drop_table($table);' . XMLDB_LINEFEED; |
b0c7d558 |
254 | |
255 | /// Add standard PHP footer |
256 | $result .= XMLDB_PHP_FOOTER; |
257 | |
258 | return $result; |
259 | } |
260 | |
261 | /** |
eef868d1 |
262 | * This function will generate all the PHP code needed to |
b0c7d558 |
263 | * rename one table using XMLDB objects and functions |
eef868d1 |
264 | * |
b0c7d558 |
265 | * @param XMLDBStructure structure object containing all the info |
266 | * @param string table table code to be renamed |
267 | * @return string PHP code to be used to rename the table |
268 | */ |
269 | function rename_table_php($structure, $table) { |
270 | |
271 | $result = ''; |
272 | /// Validate if we can do it |
3ab430fb |
273 | if (!$table = $structure->getTable($table)) { |
274 | return false; |
275 | } |
276 | if ($table->getAllErrors()) { |
277 | return false; |
278 | } |
b0c7d558 |
279 | |
280 | /// Add the standard PHP header |
281 | $result .= XMLDB_PHP_HEADER; |
282 | |
283 | /// Add contents |
386c23c9 |
284 | $result .= XMLDB_LINEFEED; |
cb78437d |
285 | $result .= ' /// Define table ' . $table->getName() . ' to be renamed to NEWNAMEGOESHERE' . XMLDB_LINEFEED; |
386c23c9 |
286 | $result .= ' $table = new XMLDBTable(' . "'" . $table->getName() . "'" . ');' . XMLDB_LINEFEED; |
287 | |
288 | /// Launch the proper DDL |
289 | $result .= XMLDB_LINEFEED; |
290 | $result .= ' /// Launch rename table for ' . $table->getName() . XMLDB_LINEFEED; |
db9940b6 |
291 | $result .= ' $result = $result && rename_table($table, ' . "'NEWNAMEGOESHERE'" . ');' . XMLDB_LINEFEED; |
b0c7d558 |
292 | |
293 | /// Add standard PHP footer |
294 | $result .= XMLDB_PHP_FOOTER; |
295 | |
296 | return $result; |
297 | } |
298 | } |
299 | ?> |