| [ Index ] |
PHP Cross Reference of Moodle 1.9.3 [Build 15-Oct-2008] |
[Summary view] [Print] [Text view]
1 <?php // $Id: view_structure_php.class.php,v 1.10.2.1 2007/11/01 23:21:41 stronk7 Exp $ 2 3 /////////////////////////////////////////////////////////////////////////// 4 // // 5 // NOTICE OF COPYRIGHT // 6 // // 7 // Moodle - Modular Object-Oriented Dynamic Learning Environment // 8 // http://moodle.com // 9 // // 10 // Copyright (C) 1999 onwards Martin Dougiamas http://dougiamas.com // 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 32 /** 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 81 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 94 $b = ' <p class="centerpara buttons">'; 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 100 $commands = array('create_table', 101 'drop_table', 102 'rename_table'); 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">'; 112 $o.='<div>'; 113 $o.= ' <input type="hidden" name ="dir" value="' . str_replace($CFG->dirroot, '', $dirpath) . '" />'; 114 $o.= ' <input type="hidden" name ="action" value="view_structure_php" />'; 115 $o.= ' <table id="formelements" class="boxaligncenter" cellpadding="5">'; 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>'; 119 $o.= '</div></form>'; 120 $o.= ' <table id="phpcode" class="boxaligncenter" cellpadding="5">'; 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!) 140 if ($this->getPostAction() && $result) { 141 return $this->launch($this->getPostAction()); 142 } 143 144 /// Return ok if arrived here 145 return $result; 146 } 147 148 /** 149 * This function will generate all the PHP code needed to 150 * create one table using XMLDB objects and functions 151 * 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 160 if (!$table = $structure->getTable($table)) { 161 return false; 162 } 163 if ($table->getAllErrors()) { 164 return false; 165 } 166 167 /// Add the standard PHP header 168 $result .= XMLDB_PHP_HEADER; 169 170 /// Add contents 171 $result .= XMLDB_LINEFEED; 172 $result .= ' /// Define table ' . $table->getName() . ' to be created' . XMLDB_LINEFEED; 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; 215 $result .= ' $result = $result && create_table($table);' . XMLDB_LINEFEED; 216 217 /// Add the proper upgrade_xxxx_savepoint call 218 $result .= $this->upgrade_savepoint_php ($structure); 219 220 /// Add standard PHP footer 221 $result .= XMLDB_PHP_FOOTER; 222 223 return $result; 224 } 225 226 /** 227 * This function will generate all the PHP code needed to 228 * drop one table using XMLDB objects and functions 229 * 230 * @param XMLDBStructure structure object containing all the info 231 * @param string table table code to be dropped 232 * @return string PHP code to be used to drop the table 233 */ 234 function drop_table_php($structure, $table) { 235 236 $result = ''; 237 /// Validate if we can do it 238 if (!$table = $structure->getTable($table)) { 239 return false; 240 } 241 if ($table->getAllErrors()) { 242 return false; 243 } 244 245 /// Add the standard PHP header 246 $result .= XMLDB_PHP_HEADER; 247 248 /// Add contents 249 $result .= XMLDB_LINEFEED; 250 $result .= ' /// Define table ' . $table->getName() . ' to be dropped' . XMLDB_LINEFEED; 251 $result .= ' $table = new XMLDBTable(' . "'" . $table->getName() . "'" . ');' . XMLDB_LINEFEED; 252 253 /// Launch the proper DDL 254 $result .= XMLDB_LINEFEED; 255 $result .= ' /// Launch drop table for ' . $table->getName() . XMLDB_LINEFEED; 256 $result .= ' $result = $result && drop_table($table);' . XMLDB_LINEFEED; 257 258 /// Add the proper upgrade_xxxx_savepoint call 259 $result .= $this->upgrade_savepoint_php ($structure); 260 261 /// Add standard PHP footer 262 $result .= XMLDB_PHP_FOOTER; 263 264 return $result; 265 } 266 267 /** 268 * This function will generate all the PHP code needed to 269 * rename one table using XMLDB objects and functions 270 * 271 * @param XMLDBStructure structure object containing all the info 272 * @param string table table code to be renamed 273 * @return string PHP code to be used to rename the table 274 */ 275 function rename_table_php($structure, $table) { 276 277 $result = ''; 278 /// Validate if we can do it 279 if (!$table = $structure->getTable($table)) { 280 return false; 281 } 282 if ($table->getAllErrors()) { 283 return false; 284 } 285 286 /// Add the standard PHP header 287 $result .= XMLDB_PHP_HEADER; 288 289 /// Add contents 290 $result .= XMLDB_LINEFEED; 291 $result .= ' /// Define table ' . $table->getName() . ' to be renamed to NEWNAMEGOESHERE' . XMLDB_LINEFEED; 292 $result .= ' $table = new XMLDBTable(' . "'" . $table->getName() . "'" . ');' . XMLDB_LINEFEED; 293 294 /// Launch the proper DDL 295 $result .= XMLDB_LINEFEED; 296 $result .= ' /// Launch rename table for ' . $table->getName() . XMLDB_LINEFEED; 297 $result .= ' $result = $result && rename_table($table, ' . "'NEWNAMEGOESHERE'" . ');' . XMLDB_LINEFEED; 298 299 /// Add the proper upgrade_xxxx_savepoint call 300 $result .= $this->upgrade_savepoint_php ($structure); 301 302 /// Add standard PHP footer 303 $result .= XMLDB_PHP_FOOTER; 304 305 return $result; 306 } 307 308 /** 309 * This function will generate the PHP code needed to 310 * implement the upgrade_xxxx_savepoint() php calls in 311 * upgrade code generated from the editor 312 * 313 * @param XMLDBStructure structure object containing all the info 314 * @return string PHP code to be used to stabilish a savepoint 315 */ 316 function upgrade_savepoint_php ($structure) { 317 318 $path = $structure->getPath(); 319 320 $result = ''; 321 322 switch ($path) { 323 case 'lib/db': 324 $result = XMLDB_LINEFEED . 325 ' /// Main savepoint reached' . XMLDB_LINEFEED . 326 ' upgrade_main_savepoint($result, XXXXXXXXXX);' . XMLDB_LINEFEED; 327 break; 328 } 329 return $result; 330 } 331 } 332 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Wed Jan 14 11:33:29 2009 | Cross-referenced by PHPXref 0.7 |