[ Index ]

PHP Cross Reference of Moodle 1.9.3 [Build 15-Oct-2008]

title

Body

[close]

/admin/xmldb/actions/view_structure_php/ -> view_structure_php.class.php (source)

   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&amp;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) . '&nbsp;<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  ?>


Generated: Wed Jan 14 11:33:29 2009 Cross-referenced by PHPXref 0.7