function hotpot_upgrade($oldversion) {\r
global $CFG;\r
$ok = true;\r
+\r
if ($oldversion < 2004021400) {\r
execute_sql(" ALTER TABLE `{$CFG->prefix}hotpot_events` ADD `starttime` INT(10) unsigned NOT NULL DEFAULT '0' AFTER `time`");\r
execute_sql(" ALTER TABLE `{$CFG->prefix}hotpot_events` ADD `endtime` INT(10) unsigned NOT NULL DEFAULT '0' AFTER `time`");\r
}\r
+\r
+ // set path to update functions\r
+ $update_to_v2 = "$CFG->dirroot/mod/hotpot/db/update_to_v2.php";\r
+\r
// update from HotPot v1 to HotPot v2\r
if ($oldversion < 2005031400) {\r
- $ok = $ok && hotpot_get_update_to_v2();\r
+ require_once $update_to_v2;\r
$ok = $ok && hotpot_update_to_v2_from_v1();\r
}\r
- // update to HotPot v2.1\r
if ($oldversion < 2005090700) {\r
- $ok = $ok && hotpot_get_update_to_v2();\r
+ require_once $update_to_v2;\r
$ok = $ok && hotpot_update_to_v2_1();\r
}\r
- // update to from HotPot v2.1.0 or v2.1.1 to HotPot v2.1.2\r
if ($oldversion > 2005031419 && $oldversion < 2005090702) {\r
- $ok = $ok && hotpot_get_update_to_v2();\r
+ // update to from HotPot v2.1.0 or v2.1.1\r
+ require_once $update_to_v2;\r
$ok = $ok && hotpot_update_to_v2_1_2();\r
}\r
- // update to HotPot v2.1.16\r
if ($oldversion < 2006042103) {\r
- $ok = $ok && hotpot_get_update_to_v2();\r
+ require_once $update_to_v2;\r
$ok = $ok && hotpot_update_to_v2_1_16();\r
}\r
-\r
- // update to HotPot v2.1.17\r
if ($oldversion < 2006042601) {\r
- $ok = $ok && hotpot_get_update_to_v2();\r
+ require_once $update_to_v2;\r
$ok = $ok && hotpot_update_to_v2_1_17();\r
}\r
- \r
- return $ok;\r
-}\r
-function hotpot_get_update_to_v2() {\r
- global $CFG;\r
- $filepath = "$CFG->dirroot/mod/hotpot/db/update_to_v2.php";\r
- if (file_exists($filepath) && is_readable($filepath)) {\r
- include_once $filepath;\r
- $ok = true;\r
- } else {\r
- $ok = false;\r
+ if ($oldversion < 2006042800) {\r
+ require_once $update_to_v2;\r
+ $ok = $ok && hotpot_update_to_v2_1_18();\r
}\r
+\r
return $ok;\r
}\r
-\r
?>\r
id int(10) unsigned NOT NULL auto_increment,
attempt int(10) unsigned NOT NULL default '0',
question int(10) unsigned NOT NULL default '0',
- score smallint(8) unsigned NOT NULL default '0',
- weighting smallint(8) unsigned NOT NULL default '0',
+ score smallint(6) unsigned NOT NULL default '0',
+ weighting smallint(6) unsigned NOT NULL default '0',
correct varchar(255) NOT NULL default '',
wrong varchar(255) NOT NULL default '',
ignored varchar(255) NOT NULL default '',
function hotpot_upgrade($oldversion) {\r
global $CFG;\r
$ok = true;\r
+\r
+ // set path to update functions\r
+ $update_to_v2 = "$CFG->dirroot/mod/hotpot/db/update_to_v2.php";\r
+\r
// update from HotPot v1 to HotPot v2\r
if ($oldversion < 2005031400) {\r
- $ok = $ok && hotpot_get_update_to_v2();\r
+ require_once $update_to_v2;\r
$ok = $ok && hotpot_update_to_v2_from_v1();\r
}\r
// update to HotPot v2.1\r
if ($oldversion < 2005090700) {\r
- $ok = $ok && hotpot_get_update_to_v2();\r
+ require_once $update_to_v2;\r
$ok = $ok && hotpot_update_to_v2_1();\r
}\r
- // update to from HotPot v2.1.0 or v2.1.1 to HotPot v2.1.2\r
if ($oldversion > 2005031419 && $oldversion < 2005090702) {\r
- $ok = $ok && hotpot_get_update_to_v2();\r
+ // update to from HotPot v2.1.0 or v2.1.1\r
+ require_once $update_to_v2;\r
$ok = $ok && hotpot_update_to_v2_1_2();\r
}\r
- // update to HotPot v2.1.6\r
if ($oldversion < 2005090706) {\r
- $ok = $ok && hotpot_get_update_to_v2();\r
+ require_once $update_to_v2;\r
$ok = $ok && hotpot_update_to_v2_1_6();\r
}\r
- // update to HotPot v2.1.8\r
if ($oldversion < 2005090708) {\r
- $ok = $ok && hotpot_get_update_to_v2();\r
+ require_once $update_to_v2;\r
$ok = $ok && hotpot_update_to_v2_1_8();\r
}\r
- // update to HotPot v2.1.16\r
if ($oldversion < 2006042103) {\r
- $ok = $ok && hotpot_get_update_to_v2();\r
+ require_once $update_to_v2;\r
$ok = $ok && hotpot_update_to_v2_1_16();\r
}\r
- // update to HotPot v2.1.17\r
if ($oldversion < 2006042602) {\r
- $ok = $ok && hotpot_get_update_to_v2();\r
+ require_once $update_to_v2;\r
$ok = $ok && hotpot_update_to_v2_1_17();\r
}\r
- return $ok;\r
-}\r
-function hotpot_get_update_to_v2() {\r
- global $CFG;\r
- $filepath = "$CFG->dirroot/mod/hotpot/db/update_to_v2.php";\r
- if (file_exists($filepath) && is_readable($filepath)) {\r
- include_once $filepath;\r
- $ok = true;\r
- } else {\r
- $ok = false;\r
+ if ($oldversion < 2006042800) {\r
+ require_once $update_to_v2;\r
+ $ok = $ok && hotpot_update_to_v2_1_18();\r
}\r
return $ok;\r
}\r
<?PHP\r
+function hotpot_update_to_v2_1_18() {\r
+ $ok = true;\r
+\r
+ // remove all orphan records (there shouldn't be any, but if there are they can mess up the utfdbmigrate)\r
+\r
+ $ok = $ok && hotpot_remove_orphans('hotpot_attempts', 'hotpot', 'hotpot');\r
+ $ok = $ok && hotpot_remove_orphans('hotpot_questions', 'hotpot', 'hotpot');\r
+ $ok = $ok && hotpot_remove_orphans('hotpot_responses', 'attempt', 'hotpot_attempts');\r
+ $ok = $ok && hotpot_remove_orphans('hotpot_responses', 'question', 'hotpot_questions');\r
+ $ok = $ok && hotpot_remove_orphans('hotpot_details', 'attempt', 'hotpot_attempts');\r
+\r
+ return $ok;\r
+}\r
+function hotpot_remove_orphans($secondarytable, $secondarykeyfield, $primarytable, $primarykeyfield='id') {\r
+ global $CFG;\r
+ $ok = true;\r
+\r
+ // save and switch off SQL message echo\r
+ $debug = $db->debug;\r
+ $db->debug = false;\r
+\r
+ $records = get_records_sql("\r
+ SELECT \r
+ t2.$secondarykeyfield, t2.$secondarykeyfield\r
+ FROM \r
+ {$CFG->prefix}$secondarytable AS t2 LEFT JOIN {$CFG->prefix}$primarytable AS t1 \r
+ ON (t2.$secondarykeyfield = t1.$primarykeyfield)\r
+ WHERE \r
+ t1.$primarykeyfield IS NULL\r
+ ORDER BY \r
+ t2.$secondarykeyfield\r
+ ");\r
+\r
+ // restore SQL message echo setting\r
+ $db->debug = $debug;\r
+\r
+ if ($records) {\r
+ $ids = implode(',', array_keys($records));\r
+ print 'removing '.count($ids).' orphan record(s) from {$CFG->prefix}$secondarytable (key=$secondarykeyfield) ...<br>';\r
+ $ok = $ok && execute_sql("DELETE FROM {$CFG->prefix}$secondarytable WHERE $secondarykeyfield IN ($ids)");\r
+ }\r
+\r
+ return $ok;\r
+}\r
function hotpot_update_to_v2_1_17() {\r
global $CFG;\r
$ok = true;\r
\r
+ // convert and disable null values on certain numeric fields\r
+\r
$ok = $ok && hotpot_denull_int_field('hotpot_attempts', 'starttime', '10');\r
$ok = $ok && hotpot_denull_int_field('hotpot_attempts', 'endtime', '10');\r
$ok = $ok && hotpot_denull_int_field('hotpot_attempts', 'score', '6');\r
$ok = $ok && hotpot_denull_int_field('hotpot_questions', 'type', '4');\r
$ok = $ok && hotpot_denull_int_field('hotpot_questions', 'text', '10');\r
\r
- $ok = $ok && hotpot_denull_int_field('hotpot_responses', 'weighting', '8');\r
- $ok = $ok && hotpot_denull_int_field('hotpot_responses', 'score', '8');\r
+ $ok = $ok && hotpot_denull_int_field('hotpot_responses', 'weighting', '6');\r
+ $ok = $ok && hotpot_denull_int_field('hotpot_responses', 'score', '6');\r
$ok = $ok && hotpot_denull_int_field('hotpot_responses', 'hints', '6');\r
$ok = $ok && hotpot_denull_int_field('hotpot_responses', 'clues', '6');\r
$ok = $ok && hotpot_denull_int_field('hotpot_responses', 'checks', '6');\r
-\r
return $ok;\r
}\r
function hotpot_denull_int_field($table, $field, $size) {\r
/// Code fragment to define the version of hotpot
/// This fragment is called by moodle_needs_upgrading() and /admin/index.php
/////////////////////////////////////////////////////////////////////////////////
-$module->version = 2006042602; // release date of this version (see note below)
-$module->release = 'v2.1.17'; // human-friendly version name (used in mod/hotpot/lib.php)
+$module->version = 2006042800; // release date of this version (see note below)
+$module->release = 'v2.1.18'; // human-friendly version name (used in mod/hotpot/lib.php)
$module->cron = 0; // period for cron to check this module (secs)
// interpretation of YYYYMMDDXY version numbers
// YYYY : year