diff --git a/admin/dbtransfer/database_export_form.php b/admin/dbtransfer/database_export_form.php deleted file mode 100644 index 4982e9ed6fc..00000000000 --- a/admin/dbtransfer/database_export_form.php +++ /dev/null @@ -1,19 +0,0 @@ -libdir.'/formslib.php'; - -class database_export_form extends moodleform { - - function definition() { - $mform = $this->_form; - - $mform->addElement('header', 'database', get_string('dbexport', 'dbtransfer')); - $mform->addElement('textarea', 'description', get_string('description'), array('rows'=>5, 'cols'=>60)); - - $this->add_action_buttons(false, get_string('exportdata', 'dbtransfer')); - } -} diff --git a/admin/dbtransfer/dbexport.php b/admin/dbtransfer/dbexport.php deleted file mode 100644 index d21a806e5bb..00000000000 --- a/admin/dbtransfer/dbexport.php +++ /dev/null @@ -1,21 +0,0 @@ -get_data()) { - dbtransfer_export_xml_database($data->description, $DB); - die; -} - -echo $OUTPUT->header(); -// TODO: add some more info here -$form->display(); -echo $OUTPUT->footer(); diff --git a/admin/dbtransfer/index.php b/admin/dbtransfer/index.php deleted file mode 100644 index 0d24d15778b..00000000000 --- a/admin/dbtransfer/index.php +++ /dev/null @@ -1,47 +0,0 @@ -get_data()) { - // Connect to the other database. - list($dbtype, $dblibrary) = explode('/', $data->driver); - $targetdb = moodle_database::get_driver_instance($dbtype, $dblibrary); - if (!$targetdb->connect($data->dbhost, $data->dbuser, $data->dbpass, $data->dbname, $data->prefix, null)) { - throw new dbtransfer_exception('notargetconectexception', null, "$CFG->wwwroot/$CFG->admin/dbtransfer/"); - } - if ($targetdb->get_tables()) { - throw new dbtransfer_exception('targetdatabasenotempty', null, "$CFG->wwwroot/$CFG->admin/dbtransfer/"); - } - - // Start output. - echo $OUTPUT->header(); - $data->dbtype = $dbtype; - echo $OUTPUT->heading(get_string('transferringdbto', 'dbtransfer', $data)); - - // Do the transfer. - $feedback = new html_list_progress_trace(); - dbtransfer_transfer_database($DB, $targetdb, $feedback); - $feedback->finished(); - - // Finish up. - echo $OUTPUT->notification(get_string('success'), 'notifysuccess'); - echo $OUTPUT->continue_button("$CFG->wwwroot/$CFG->admin/"); - echo $OUTPUT->footer(); - die; -} - -// Otherwise display the settings form. -echo $OUTPUT->header(); -echo $OUTPUT->heading(get_string('transferdbtoserver', 'dbtransfer')); -echo '

', get_string('transferdbintro', 'dbtransfer'), "

\n\n"; -$form->display(); -echo $OUTPUT->footer(); diff --git a/admin/settings/development.php b/admin/settings/development.php index 7de0346ead7..b1273b76dbb 100644 --- a/admin/settings/development.php +++ b/admin/settings/development.php @@ -19,10 +19,6 @@ if ($hassiteconfig) { // speedup for non-admins, add all caps used on this page $ADMIN->add('experimental', $temp); - // DB transfer related pages - $ADMIN->add('experimental', new admin_externalpage('dbtransfer', get_string('dbtransfer', 'dbtransfer'), $CFG->wwwroot.'/'.$CFG->admin.'/dbtransfer/index.php', 'moodle/site:config', true)); - $ADMIN->add('experimental', new admin_externalpage('dbexport', get_string('dbexport', 'dbtransfer'), $CFG->wwwroot.'/'.$CFG->admin.'/dbtransfer/dbexport.php', 'moodle/site:config', true)); - // "debugging" settingpage $temp = new admin_settingpage('debugging', get_string('debugging', 'admin')); $temp->add(new admin_setting_special_debug()); diff --git a/admin/tool/dbtransfer/database_export_form.php b/admin/tool/dbtransfer/database_export_form.php new file mode 100644 index 00000000000..72b7c524699 --- /dev/null +++ b/admin/tool/dbtransfer/database_export_form.php @@ -0,0 +1,40 @@ +. + +/** + * Transfer form + * + * @package tool + * @subpackage dbtransfer + * @copyright 2008 Petr Skoda + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die; + +require_once $CFG->libdir.'/formslib.php'; + +class database_export_form extends moodleform { + + function definition() { + $mform = $this->_form; + + $mform->addElement('header', 'database', get_string('dbexport', 'tool_dbtransfer')); + $mform->addElement('textarea', 'description', get_string('description'), array('rows'=>5, 'cols'=>60)); + + $this->add_action_buttons(false, get_string('exportdata', 'tool_dbtransfer')); + } +} diff --git a/admin/dbtransfer/database_transfer_form.php b/admin/tool/dbtransfer/database_transfer_form.php similarity index 64% rename from admin/dbtransfer/database_transfer_form.php rename to admin/tool/dbtransfer/database_transfer_form.php index ec4c540c21d..241d57248d2 100644 --- a/admin/dbtransfer/database_transfer_form.php +++ b/admin/tool/dbtransfer/database_transfer_form.php @@ -1,8 +1,29 @@ . -if (!defined('MOODLE_INTERNAL')) { - die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page -} +/** + * Transfer form + * + * @package tool + * @subpackage dbtransfer + * @copyright 2008 Petr Skoda + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die; require_once $CFG->libdir.'/formslib.php'; @@ -11,7 +32,7 @@ class database_transfer_form extends moodleform { function definition() { $mform = $this->_form; - $mform->addElement('header', 'database', get_string('dbtransfer', 'dbtransfer')); + $mform->addElement('header', 'database', get_string('dbtransfer', 'tool_dbtransfer')); $supported = array ( 'mysqli/native', @@ -43,6 +64,6 @@ class database_transfer_form extends moodleform { $mform->addRule('dbpass', get_string('required'), 'required', null); $mform->addRule('prefix', get_string('required'), 'required', null); - $this->add_action_buttons(false, get_string('transferdata', 'dbtransfer')); + $this->add_action_buttons(false, get_string('transferdata', 'tool_dbtransfer')); } } diff --git a/admin/tool/dbtransfer/dbexport.php b/admin/tool/dbtransfer/dbexport.php new file mode 100644 index 00000000000..40f35ff0f25 --- /dev/null +++ b/admin/tool/dbtransfer/dbexport.php @@ -0,0 +1,46 @@ +. + +/** + * Export + * + * @package tool + * @subpackage dbtransfer + * @copyright 2008 Petr Skoda + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +define('NO_OUTPUT_BUFFERING', true); + +require('../../../config.php'); +require_once('locallib.php'); +require_once('database_export_form.php'); + +require_login(); +admin_externalpage_setup('tooldbexport'); + +//create form +$form = new database_export_form(); + +if ($data = $form->get_data()) { + dbtransfer_export_xml_database($data->description, $DB); + die; +} + +echo $OUTPUT->header(); +// TODO: add some more info here +$form->display(); +echo $OUTPUT->footer(); diff --git a/admin/tool/dbtransfer/index.php b/admin/tool/dbtransfer/index.php new file mode 100644 index 00000000000..57791da649d --- /dev/null +++ b/admin/tool/dbtransfer/index.php @@ -0,0 +1,72 @@ +. + +/** + * Transfer tool + * + * @package tool + * @subpackage dbtransfer + * @copyright 2008 Petr Skoda + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +define('NO_OUTPUT_BUFFERING', true); + +require('../../../config.php'); +require_once('locallib.php'); +require_once('database_transfer_form.php'); + +require_login(); +admin_externalpage_setup('tooldbtransfer'); + +// Create the form +$form = new database_transfer_form(); + +// If we have valid input. +if ($data = $form->get_data()) { + // Connect to the other database. + list($dbtype, $dblibrary) = explode('/', $data->driver); + $targetdb = moodle_database::get_driver_instance($dbtype, $dblibrary); + if (!$targetdb->connect($data->dbhost, $data->dbuser, $data->dbpass, $data->dbname, $data->prefix, null)) { + throw new dbtransfer_exception('notargetconectexception', null, "$CFG->wwwroot/$CFG->admin/tool/dbtransfer/"); + } + if ($targetdb->get_tables()) { + throw new dbtransfer_exception('targetdatabasenotempty', null, "$CFG->wwwroot/$CFG->admin/tool/dbtransfer/"); + } + + // Start output. + echo $OUTPUT->header(); + $data->dbtype = $dbtype; + echo $OUTPUT->heading(get_string('transferringdbto', 'tool_dbtransfer', $data)); + + // Do the transfer. + $feedback = new html_list_progress_trace(); + dbtransfer_transfer_database($DB, $targetdb, $feedback); + $feedback->finished(); + + // Finish up. + echo $OUTPUT->notification(get_string('success'), 'notifysuccess'); + echo $OUTPUT->continue_button("$CFG->wwwroot/$CFG->admin/"); + echo $OUTPUT->footer(); + die; +} + +// Otherwise display the settings form. +echo $OUTPUT->header(); +echo $OUTPUT->heading(get_string('transferdbtoserver', 'tool_dbtransfer')); +echo '

', get_string('transferdbintro', 'tool_dbtransfer'), "

\n\n"; +$form->display(); +echo $OUTPUT->footer(); diff --git a/admin/tool/dbtransfer/lang/en/tool_dbtransfer.php b/admin/tool/dbtransfer/lang/en/tool_dbtransfer.php new file mode 100644 index 00000000000..6df01ad3086 --- /dev/null +++ b/admin/tool/dbtransfer/lang/en/tool_dbtransfer.php @@ -0,0 +1,35 @@ +. + +/** + * Strings for component 'tool_generator', language 'en', branch 'MOODLE_22_STABLE' + * + * @package tool + * @subpackage dbtransfer + * @copyright 2011 petr Skoda + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +$string['dbexport'] = 'Database transfer'; +$string['dbtransfer'] = 'Database export'; +$string['exportdata'] = 'Export data'; +$string['notargetconectexception'] = 'Can not connect target database, sorry.'; +$string['pluginname'] = 'Database transfer'; +$string['transferdata'] = 'Transfer data'; +$string['transferdbintro'] = 'This script will transfer the entire contents of this database to another database server.'; +$string['transferdbtoserver'] = 'Transfer this Moodle database to another server'; +$string['transferringdbto'] = 'Transferring this database to {$a->dbtype} database {$a->dbname} on {$a->dbhost}'; + diff --git a/admin/dbtransfer/lib.php b/admin/tool/dbtransfer/locallib.php similarity index 66% rename from admin/dbtransfer/lib.php rename to admin/tool/dbtransfer/locallib.php index de868b352e2..62a34ae3223 100644 --- a/admin/dbtransfer/lib.php +++ b/admin/tool/dbtransfer/locallib.php @@ -1,10 +1,34 @@ . +/** + * Export db content to file. + * + * @package tool + * @subpackage dbtransfer + * @copyright 2008 Petr Skoda {@link http://skodak.org} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die; /* TODO: - exporting to server file >2GB fails in 32bit operating systems - needs warning - - we may run out of disk space exporting to srever file - we must verify the file is not truncated; read from the end of file? + - we may run out of disk space exporting to server file - we must verify the file is not truncated; read from the end of file? - when sending file >4GB - FAT32 limit, Apache limit, browser limit - needs warning - there must be some form of progress bar during export, transfer - new tracking class could be passed around - command line operation - could work around some 2G/4G limits in PHP; useful for cron full backups diff --git a/admin/tool/dbtransfer/settings.php b/admin/tool/dbtransfer/settings.php new file mode 100644 index 00000000000..13c45b880cc --- /dev/null +++ b/admin/tool/dbtransfer/settings.php @@ -0,0 +1,32 @@ +. + +/** + * Link to InnoDB conversion tool + * + * @package tool + * @subpackage dbtransfer + * @copyright 2011 Petr Skoda {@link http://skodak.org} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die; + +if ($hassiteconfig) { + // DB transfer related pages + $ADMIN->add('experimental', new admin_externalpage('tooldbtransfer', get_string('dbtransfer', 'tool_dbtransfer'), $CFG->wwwroot.'/'.$CFG->admin.'/tool/dbtransfer/index.php', 'moodle/site:config', true)); + $ADMIN->add('experimental', new admin_externalpage('tooldbexport', get_string('dbexport', 'tool_dbtransfer'), $CFG->wwwroot.'/'.$CFG->admin.'/tool/dbtransfer/dbexport.php', 'moodle/site:config', true)); +} \ No newline at end of file diff --git a/admin/tool/dbtransfer/version.php b/admin/tool/dbtransfer/version.php new file mode 100644 index 00000000000..1504ab78a7c --- /dev/null +++ b/admin/tool/dbtransfer/version.php @@ -0,0 +1,30 @@ +. + +/** + * Version details. + * + * @package tool + * @subpackage dbtransfer + * @copyright 2008 Petr Skoda + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die; + +$plugin->version = 2011091700; // The current plugin version (Date: YYYYMMDDXX) +$plugin->requires = 2011091600; // Requires this Moodle version +$plugin->component = 'tool_dbtransfer'; // Full name of the plugin (used for diagnostics) diff --git a/lang/en/dbtransfer.php b/lang/en/dbtransfer.php index be7f303b250..ca9a20f1ee6 100644 --- a/lang/en/dbtransfer.php +++ b/lang/en/dbtransfer.php @@ -30,15 +30,9 @@ $string['dbexport'] = 'Database export'; $string['dbtransfer'] = 'Database transfer'; $string['differenttableexception'] = 'Table {$a} structure does not match.'; $string['done'] = 'Done'; -$string['exportdata'] = 'Export data'; $string['exportschemaexception'] = 'Current database structure does not match all install.xml files.
{$a}'; $string['checkingsourcetables'] = 'Checking source table structure'; $string['importschemaexception'] = 'Current database structure does not match all install.xml files.
{$a}'; $string['importversionmismatchexception'] = 'Current version {$a->currentver} does not match exported version {$a->schemaver}.'; $string['malformedxmlexception'] = 'Malformed XML found, can not continue.'; -$string['notargetconectexception'] = 'Can not connect target database, sorry.'; -$string['transferdata'] = 'Transfer data'; -$string['transferdbintro'] = 'This script will transfer the entire contents of this database to another database server.'; -$string['transferdbtoserver'] = 'Transfer this Moodle database to another server'; -$string['transferringdbto'] = 'Transferring this database to {$a->dbtype} database {$a->dbname} on {$a->dbhost}'; $string['unknowntableexception'] = 'Unknown table {$a} found in export file.'; diff --git a/lib/dtl/database_mover.php b/lib/dtl/database_mover.php index e3f0ed0c89c..d61d416a992 100644 --- a/lib/dtl/database_mover.php +++ b/lib/dtl/database_mover.php @@ -51,10 +51,10 @@ class database_mover extends database_exporter { $this->feeback = $feeback; } if ($check_schema) { - $this->feeback->output(get_string('checkingsourcetables', 'dbtransfer')); + $this->feeback->output(get_string('checkingsourcetables', 'core_dbtransfer')); } parent::__construct($mdb_source, $check_schema); - $this->feeback->output(get_string('creatingtargettables', 'dbtransfer')); + $this->feeback->output(get_string('creatingtargettables', 'core_dbtransfer')); $this->importer = new database_importer($mdb_target, $check_schema); } @@ -75,7 +75,7 @@ class database_mover extends database_exporter { * @return void */ public function begin_database_export($version, $release, $timestamp, $description) { - $this->feeback->output(get_string('copyingtables', 'dbtransfer')); + $this->feeback->output(get_string('copyingtables', 'core_dbtransfer')); $this->importer->begin_database_import($version, $timestamp, $description); } @@ -86,7 +86,7 @@ class database_mover extends database_exporter { * @return void */ public function begin_table_export(xmldb_table $table) { - $this->feeback->output(get_string('copyingtable', 'dbtransfer', $table->getName()), 1); + $this->feeback->output(get_string('copyingtable', 'core_dbtransfer', $table->getName()), 1); $this->importer->begin_table_import($table->getName(), $table->getHash()); } @@ -108,7 +108,7 @@ class database_mover extends database_exporter { * @return void */ public function finish_table_export(xmldb_table $table) { - $this->feeback->output(get_string('done', 'dbtransfer', $table->getName()), 2); + $this->feeback->output(get_string('done', 'core_dbtransfer', $table->getName()), 2); $this->importer->finish_table_import($table->getName()); } diff --git a/lib/dtllib.php b/lib/dtllib.php index b3b4402f6c6..82b89cd7890 100644 --- a/lib/dtllib.php +++ b/lib/dtllib.php @@ -17,7 +17,7 @@ /** - * DTL == Dtatabase Transfer Library + * DTL == Database Transfer Library * * This library includes all the required functions used to handle * transfer of data from one database to another. @@ -68,7 +68,7 @@ class dbtransfer_exception extends moodle_exception { if (empty($link)) { $link = "$CFG->wwwroot/$CFG->admin/"; } - parent::__construct($errorcode, 'dbtransfer', $link, $a, $debuginfo); + parent::__construct($errorcode, 'core_dbtransfer', $link, $a, $debuginfo); } } diff --git a/lib/pluginlib.php b/lib/pluginlib.php index 96f1e13ac80..af63bf08497 100644 --- a/lib/pluginlib.php +++ b/lib/pluginlib.php @@ -367,7 +367,7 @@ class plugin_manager { ), 'tool' => array( - 'bloglevelupgrade', 'capability', 'generator', 'health', + 'bloglevelupgrade', 'capability', 'dbtransfer', 'generator', 'health', 'innodb', 'langimport', 'profiling', 'unittest', 'unsuproles' ),