From: nicolasconnault Date: Mon, 22 Sep 2008 07:06:08 +0000 (+0000) Subject: MDL-16486 Only using one test $DB connection. Completed most of the implementation... X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=274e2947a2ca4543d5dc04b0a2fda762cad30e36;p=moodle.git MDL-16486 Only using one test $DB connection. Completed most of the implementation. Tests working well now. --- diff --git a/lang/en_utf8/simpletest.php b/lang/en_utf8/simpletest.php index 5eab9a4cde..e0d2ccfbcc 100644 --- a/lang/en_utf8/simpletest.php +++ b/lang/en_utf8/simpletest.php @@ -31,6 +31,7 @@ $string['showsearch'] = 'Show the search for test files.'; $string['stacktrace'] = 'Stack trace:'; $string['summary'] = '{$a->run}/{$a->total} test cases complete: {$a->passes} passes, {$a->fails} fails and {$a->exceptions} exceptions.'; $string['tablesnotsetup'] = 'Unit test tables are not yet built. Do you want to build them now?.'; +$string['testtablesok'] = 'The test DB tables were successfully installed.'; $string['testtablescsvfileunwritable'] = 'The test tables CSV file is not writable ($a->filename)'; $string['thorough'] = 'Run a thorough test (may be slow).'; $string['updatingnoninsertedrecord'] = 'Trying to update a record that was not inserted by these unit tests (id $a->id in table $a->table).'; diff --git a/lib/simpletest/fixtures/gradetest.php b/lib/simpletest/fixtures/gradetest.php index eee7c51533..e329dcab31 100644 --- a/lib/simpletest/fixtures/gradetest.php +++ b/lib/simpletest/fixtures/gradetest.php @@ -52,10 +52,10 @@ Mock::generate('grade_outcome', 'mock_grade_outcome'); class grade_test extends MoodleUnitTestCase { public $grade_tables = array('grade_categories', - 'scale', - 'grade_items', - 'grade_grades', - 'grade_outcomes'); + 'scale', + 'grade_items', + 'grade_grades', + 'grade_outcomes'); public $grade_items = array(); @@ -67,7 +67,6 @@ class grade_test extends MoodleUnitTestCase { public $activities = array(); public $courseid = 1; public $userid = 1; - public $dbmanager; /** * Create temporary test tables and entries in the database for these tests. @@ -75,7 +74,6 @@ class grade_test extends MoodleUnitTestCase { */ function setUp() { global $CFG, $DB; - $this->dbmanager = $DB->get_manager(); parent::setup(); $CFG->grade_droplow = -1; @@ -85,532 +83,12 @@ class grade_test extends MoodleUnitTestCase { $CFG->grade_aggregateoutcomes = -1; $CFG->grade_aggregatesubcats = -1; - if (!$this->prepare_test_tables()) { - die("Could not create all the test tables!"); - } - - if (!$this->prepare_test_history_tables()) { - die("Could not create all the test tables!"); - } - foreach ($this->grade_tables as $table) { $function = "load_$table"; $this->$function(); } } - function prepare_test_tables() { - global $CFG, $DB; - $result = true; - - /// Define table course_modules to be created - $table = new xmldb_table('course_modules'); - - if (!$this->dbmanager->table_exists($table)) { - /// Adding fields to table course_modules - $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); - $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('module', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('instance', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('section', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('idnumber', XMLDB_TYPE_CHAR, '100', null, null, null, null, null, null); - $table->add_field('added', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('score', XMLDB_TYPE_INTEGER, '4', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('indent', XMLDB_TYPE_INTEGER, '5', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('visible', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, null, null, '1'); - $table->add_field('visibleold', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, null, null, '1'); - $table->add_field('groupmode', XMLDB_TYPE_INTEGER, '4', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('groupingid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('groupmembersonly', XMLDB_TYPE_INTEGER, '4', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - - /// Adding keys to table course_modules - $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); - $table->add_key('groupingid', XMLDB_KEY_FOREIGN, array('groupingid'), 'groupings', array('id')); - - /// Adding indexes to table course_modules - $table->add_index('visible', XMLDB_INDEX_NOTUNIQUE, array('visible')); - $table->add_index('course', XMLDB_INDEX_NOTUNIQUE, array('course')); - $table->add_index('module', XMLDB_INDEX_NOTUNIQUE, array('module')); - $table->add_index('instance', XMLDB_INDEX_NOTUNIQUE, array('instance')); - $table->add_index('idnumber-course', XMLDB_INDEX_NOTUNIQUE, array('idnumber', 'course')); - - /// Launch create table for course_modules - $this->dbmanager->create_table($table); - } else { - $DB->delete_records($table->name, null); - } - - /// Define table modules to be created - $table = new xmldb_table('modules'); - - if (!$this->dbmanager->table_exists($table)) { - - /// Adding fields to table modules - $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); - $table->add_field('name', XMLDB_TYPE_CHAR, '20', null, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('version', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('cron', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('lastcron', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('search', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('visible', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, null, null, '1'); - - /// Adding keys to table modules - $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); - - /// Adding indexes to table modules - $table->add_index('name', XMLDB_INDEX_NOTUNIQUE, array('name')); - - /// Launch create table for modules - $this->dbmanager->create_table($table); - } else { - $DB->delete_records($table->name, null); - } - - /// Define table grade_items to be created - $table = new xmldb_table('grade_items'); - - if (!$this->dbmanager->table_exists($table)) { - $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); - $table->add_field('courseid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('categoryid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('itemname', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, null); - $table->add_field('itemtype', XMLDB_TYPE_CHAR, '30', null, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('itemmodule', XMLDB_TYPE_CHAR, '30', null, null, null, null, null, null); - $table->add_field('iteminstance', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('itemnumber', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('iteminfo', XMLDB_TYPE_TEXT, 'medium', null, null, null, null, null, null); - $table->add_field('idnumber', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, null); - $table->add_field('calculation', XMLDB_TYPE_TEXT, 'medium', null, null, null, null, null, null); - $table->add_field('gradetype', XMLDB_TYPE_INTEGER, '4', null, XMLDB_NOTNULL, null, null, null, '1'); - $table->add_field('grademax', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '100'); - $table->add_field('grademin', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('scaleid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('outcomeid', XMLDB_TYPE_INTEGER, '10', null, null, null, null, null, null); - $table->add_field('gradepass', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('multfactor', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '1.0'); - $table->add_field('plusfactor', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('sortorder', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('display', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('decimals', XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('hidden', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('locked', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('locktime', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('deleted', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('needsupdate', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('timecreated', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('timemodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - - $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); - $table->add_key('courseid', XMLDB_KEY_FOREIGN, array('courseid'), 'course', array('id')); - $table->add_key('categoryid', XMLDB_KEY_FOREIGN, array('categoryid'), 'grade_categories', array('id')); - $table->add_key('scaleid', XMLDB_KEY_FOREIGN, array('scaleid'), 'scale', array('id')); - $table->add_key('outcomeid', XMLDB_KEY_FOREIGN, array('outcomeid'), 'grade_outcomes', array('id')); - - /// Launch create table for grade_items - $this->dbmanager->create_table($table); - - } else { - $DB->delete_records($table->name, null); - } - - - /// Define table grade_categories to be created - $table = new xmldb_table('grade_categories'); - - if ($result && !$this->dbmanager->table_exists($table)) { - - $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); - $table->add_field('courseid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('parent', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('depth', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('path', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, null); - $table->add_field('fullname', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('aggregation', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('keephigh', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('droplow', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('aggregateonlygraded', XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('aggregateoutcomes', XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('aggregatesubcats', XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('timecreated', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('timemodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null); - - $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); - $table->add_key('courseid', XMLDB_KEY_FOREIGN, array('courseid'), 'course', array('id')); - $table->add_key('parent', XMLDB_KEY_FOREIGN, array('parent'), 'grade_categories', array('id')); - - /// Launch create table for grade_categories - $this->dbmanager->create_table($table); - - } else { - $DB->delete_records($table->name, null); - } - - - /// Define table grade_grades to be created - $table = new xmldb_table('grade_grades'); - - if ($result && !$this->dbmanager->table_exists($table)) { - - $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); - $table->add_field('itemid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('userid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('rawgrade', XMLDB_TYPE_NUMBER, '10, 5', null, null, null, null, null, null); - $table->add_field('rawgrademax', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '100'); - $table->add_field('rawgrademin', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('rawscaleid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('usermodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('finalgrade', XMLDB_TYPE_NUMBER, '10, 5', null, null, null, null, null, null); - $table->add_field('hidden', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('locked', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('locktime', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('exported', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('overridden', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('excluded', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('feedback', XMLDB_TYPE_TEXT, 'medium', null, null, null, null, null, null); - $table->add_field('feedbackformat', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('information', XMLDB_TYPE_TEXT, 'medium', null, null, null, null, null, null); - $table->add_field('informationformat', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('timecreated', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('timemodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - - $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); - $table->add_key('itemid', XMLDB_KEY_FOREIGN, array('itemid'), 'grade_items', array('id')); - $table->add_key('userid', XMLDB_KEY_FOREIGN, array('userid'), 'user', array('id')); - $table->add_key('rawscaleid', XMLDB_KEY_FOREIGN, array('rawscaleid'), 'scale', array('id')); - $table->add_key('usermodified', XMLDB_KEY_FOREIGN, array('usermodified'), 'user', array('id')); - - /// Launch create table for grade_grades - $this->dbmanager->create_table($table); - - } else { - $DB->delete_records($table->name, null); - } - - - /// Define table grade_outcomes to be created - $table = new xmldb_table('grade_outcomes'); - - if ($result && !$this->dbmanager->table_exists($table)) { - - /// Adding fields to table grade_outcomes - $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); - $table->add_field('courseid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('shortname', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('fullname', XMLDB_TYPE_TEXT, 'small', null, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('scaleid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('timecreated', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('timemodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('usermodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - - /// Adding keys to table grade_outcomes - $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); - $table->add_key('courseid', XMLDB_KEY_FOREIGN, array('courseid'), 'course', array('id')); - $table->add_key('scaleid', XMLDB_KEY_FOREIGN, array('scaleid'), 'scale', array('id')); - $table->add_key('usermodified', XMLDB_KEY_FOREIGN, array('usermodified'), 'user', array('id')); - - /// Launch create table for grade_outcomes - $this->dbmanager->create_table($table); - - } else { - $DB->delete_records($table->name, null); - } - - - /// Define table scale to be created - $table = new xmldb_table('scale'); - - if ($result && !$this->dbmanager->table_exists($table)) { - - $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); - $table->add_field('courseid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('userid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('name', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('scale', XMLDB_TYPE_TEXT, 'small', null, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('description', XMLDB_TYPE_TEXT, 'small', null, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('timemodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); - $table->add_index('courseid', XMLDB_INDEX_NOTUNIQUE, array('courseid')); - - /// Launch create table for scale - $this->dbmanager->create_table($table); - - } else { - $DB->delete_records($table->name, null); - } - - /// Define table quiz to be created - $table = new xmldb_table('quiz'); - - if ($result && !$this->dbmanager->table_exists($table)) { - /// Adding fields to table quiz - $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); - $table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('name', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('intro', XMLDB_TYPE_TEXT, 'small', null, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('timeopen', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('timeclose', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('optionflags', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('penaltyscheme', XMLDB_TYPE_INTEGER, '4', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('attempts', XMLDB_TYPE_INTEGER, '6', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('attemptonlast', XMLDB_TYPE_INTEGER, '4', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('grademethod', XMLDB_TYPE_INTEGER, '4', null, XMLDB_NOTNULL, null, null, null, '1'); - $table->add_field('decimalpoints', XMLDB_TYPE_INTEGER, '4', null, XMLDB_NOTNULL, null, null, null, '2'); - $table->add_field('review', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('questionsperpage', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('shufflequestions', XMLDB_TYPE_INTEGER, '4', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('shuffleanswers', XMLDB_TYPE_INTEGER, '4', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('questions', XMLDB_TYPE_TEXT, 'small', null, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('sumgrades', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('grade', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('timecreated', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('timemodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('timelimit', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('password', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('subnet', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('popup', XMLDB_TYPE_INTEGER, '4', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('delay1', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('delay2', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0'); - - /// Adding keys to table quiz - $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); - - /// Adding indexes to table quiz - $table->add_index('course', XMLDB_INDEX_NOTUNIQUE, array('course')); - - /// Launch create table for quiz - $this->dbmanager->create_table($table); - } else { - $DB->delete_records($table->name, null); - } - - return $result; - } - - - function prepare_test_history_tables() { - global $DB; - $result = true; - - /// Define table grade_items to be created - $table = new xmldb_table('grade_items_history'); - - if (!$this->dbmanager->table_exists($table)) { - - /// Adding fields to table grade_items_history - $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); - $table->add_field('action', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('oldid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('source', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, null); - $table->add_field('timemodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('loggeduser', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('courseid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('categoryid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('itemname', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, null); - $table->add_field('itemtype', XMLDB_TYPE_CHAR, '30', null, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('itemmodule', XMLDB_TYPE_CHAR, '30', null, null, null, null, null, null); - $table->add_field('iteminstance', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('itemnumber', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('iteminfo', XMLDB_TYPE_TEXT, 'medium', null, null, null, null, null, null); - $table->add_field('idnumber', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, null); - $table->add_field('calculation', XMLDB_TYPE_TEXT, 'medium', null, null, null, null, null, null); - $table->add_field('gradetype', XMLDB_TYPE_INTEGER, '4', null, XMLDB_NOTNULL, null, null, null, '1'); - $table->add_field('grademax', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '100'); - $table->add_field('grademin', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('scaleid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('outcomeid', XMLDB_TYPE_INTEGER, '10', null, null, null, null, null, null); - $table->add_field('gradepass', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('multfactor', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '1.0'); - $table->add_field('plusfactor', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('sortorder', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('display', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('decimals', XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('hidden', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('locked', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('locktime', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('needsupdate', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0'); - - /// Adding keys to table grade_items_history - $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); - $table->add_key('oldid', XMLDB_KEY_FOREIGN, array('oldid'), 'grade_items', array('id')); - $table->add_key('courseid', XMLDB_KEY_FOREIGN, array('courseid'), 'course', array('id')); - $table->add_key('categoryid', XMLDB_KEY_FOREIGN, array('categoryid'), 'grade_categories', array('id')); - $table->add_key('scaleid', XMLDB_KEY_FOREIGN, array('scaleid'), 'scale', array('id')); - $table->add_key('outcomeid', XMLDB_KEY_FOREIGN, array('outcomeid'), 'grade_outcomes', array('id')); - - /// Adding indexes to table grade_items_history - $table->add_index('action', XMLDB_INDEX_NOTUNIQUE, array('action')); - - /// Launch create table for grade_items_history - $this->dbmanager->create_table($table); - - } else { - $DB->delete_records($table->name, null); - } - - /// Define table grade_categories to be created - $table = new xmldb_table('grade_categories_history'); - - - if ($result && !$this->dbmanager->table_exists($table)) { - - /// Adding fields to table grade_categories_history - $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); - $table->add_field('action', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('oldid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('source', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, null); - $table->add_field('timemodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('loggeduser', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('courseid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('parent', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('depth', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('path', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, null); - $table->add_field('fullname', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('aggregation', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('keephigh', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('droplow', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('aggregateonlygraded', XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('aggregateoutcomes', XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('aggregatesubcats', XMLDB_TYPE_INTEGER, '1', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - - /// Adding keys to table grade_categories_history - $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); - $table->add_key('oldid', XMLDB_KEY_FOREIGN, array('oldid'), 'grade_categories', array('id')); - $table->add_key('courseid', XMLDB_KEY_FOREIGN, array('courseid'), 'course', array('id')); - $table->add_key('parent', XMLDB_KEY_FOREIGN, array('parent'), 'grade_categories', array('id')); - - /// Adding indexes to table grade_categories_history - $table->add_index('action', XMLDB_INDEX_NOTUNIQUE, array('action')); - - /// Launch create table for grade_categories_history - $this->dbmanager->create_table($table); - - } else { - $DB->delete_records($table->name, null); - } - - - /// Define table grade_grades to be created - $table = new xmldb_table('grade_grades_history'); - - if ($result && !$this->dbmanager->table_exists($table)) { - - /// Adding fields to table grade_grades_history - $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); - $table->add_field('action', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('oldid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('source', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, null); - $table->add_field('timemodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('loggeduser', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('itemid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('userid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('rawgrade', XMLDB_TYPE_NUMBER, '10, 5', null, null, null, null, null, null); - $table->add_field('rawgrademax', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '100'); - $table->add_field('rawgrademin', XMLDB_TYPE_NUMBER, '10, 5', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('rawscaleid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('usermodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('finalgrade', XMLDB_TYPE_NUMBER, '10, 5', null, null, null, null, null, null); - $table->add_field('hidden', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('locked', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('locktime', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('exported', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('overridden', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('excluded', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('feedback', XMLDB_TYPE_TEXT, 'medium', null, null, null, null, null, null); - $table->add_field('feedbackformat', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('information', XMLDB_TYPE_TEXT, 'medium', null, null, null, null, null, null); - $table->add_field('informationformat', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - - /// Adding keys to table grade_grades_history - $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); - $table->add_key('oldid', XMLDB_KEY_FOREIGN, array('oldid'), 'grade_grades', array('id')); - $table->add_key('itemid', XMLDB_KEY_FOREIGN, array('itemid'), 'grade_items', array('id')); - $table->add_key('userid', XMLDB_KEY_FOREIGN, array('userid'), 'user', array('id')); - $table->add_key('rawscaleid', XMLDB_KEY_FOREIGN, array('rawscaleid'), 'scale', array('id')); - $table->add_key('usermodified', XMLDB_KEY_FOREIGN, array('usermodified'), 'user', array('id')); - $table->add_key('loggeduser', XMLDB_KEY_FOREIGN, array('loggeduser'), 'user', array('id')); - - /// Adding indexes to table grade_grades_history - $table->add_index('action', XMLDB_INDEX_NOTUNIQUE, array('action')); - - /// Launch create table for grade_grades_history - $this->dbmanager->create_table($table); - - } else { - $DB->delete_records($table->name, null); - } - - - /// Define table grade_outcomes to be created - $table = new xmldb_table('grade_outcomes_history'); - - if ($result && !$this->dbmanager->table_exists($table)) { - - /// Adding fields to table grade_outcomes_history - $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); - $table->add_field('action', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('oldid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('source', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, null); - $table->add_field('timemodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('loggeduser', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('courseid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('shortname', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('fullname', XMLDB_TYPE_TEXT, 'small', null, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('scaleid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - - /// Adding keys to table grade_outcomes_history - $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); - $table->add_key('oldid', XMLDB_KEY_FOREIGN, array('oldid'), 'grade_outcomes', array('id')); - $table->add_key('courseid', XMLDB_KEY_FOREIGN, array('courseid'), 'course', array('id')); - $table->add_key('scaleid', XMLDB_KEY_FOREIGN, array('scaleid'), 'scale', array('id')); - $table->add_key('loggeduser', XMLDB_KEY_FOREIGN, array('loggeduser'), 'user', array('id')); - - /// Adding indexes to table grade_outcomes_history - $table->add_index('action', XMLDB_INDEX_NOTUNIQUE, array('action')); - - /// Launch create table for grade_outcomes_history - $this->dbmanager->create_table($table); - - } else { - $DB->delete_records($table->name, null); - } - - /// Define table scale to be created - $table = new xmldb_table('scale_history'); - - - if ($result && !$this->dbmanager->table_exists($table)) { - - /// Adding fields to table scale_history - $table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null, null); - $table->add_field('action', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('oldid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('source', XMLDB_TYPE_CHAR, '255', null, null, null, null, null, null); - $table->add_field('timemodified', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('loggeduser', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, null, null, null, null, null); - $table->add_field('courseid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('userid', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, null, null, '0'); - $table->add_field('name', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('scale', XMLDB_TYPE_TEXT, 'small', null, XMLDB_NOTNULL, null, null, null, null); - $table->add_field('description', XMLDB_TYPE_TEXT, 'small', null, XMLDB_NOTNULL, null, null, null, null); - - /// Adding keys to table scale_history - $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); - $table->add_key('oldid', XMLDB_KEY_FOREIGN, array('oldid'), 'scales', array('id')); - $table->add_key('courseid', XMLDB_KEY_FOREIGN, array('courseid'), 'course', array('id')); - - /// Adding indexes to table scale_history - $table->add_index('action', XMLDB_INDEX_NOTUNIQUE, array('action')); - - /// Launch create table for scale_history - $this->dbmanager->create_table($table); - - } else { - $DB->delete_records($table->name, null); - } - - return $result; - } - /** * Drop test tables from DB. */ diff --git a/lib/simpletestlib.php b/lib/simpletestlib.php index 1db52cff49..efb3734511 100644 --- a/lib/simpletestlib.php +++ b/lib/simpletestlib.php @@ -153,6 +153,7 @@ class MoodleUnitTestCase extends UnitTestCase { public $tables = array(); public $pkfile; public $cfg; + public $DB; /** * In the constructor, record the max(id) of each test table into a csv file. @@ -163,12 +164,12 @@ class MoodleUnitTestCase extends UnitTestCase { */ public function __construct($label = false) { parent::UnitTestCase($label); - // MDL-16483 Get PKs and save data to text file global $DB, $CFG; $this->pkfile = $CFG->dataroot.'/testtablespks.csv'; $this->cfg = $CFG; - $this->setup(); + + UnitTestDB::instantiate(); $tables = $DB->get_tables(); @@ -244,6 +245,8 @@ class MoodleUnitTestCase extends UnitTestCase { public function setUp() { parent::setUp(); UnitTestDB::instantiate(); + global $DB; + $this->DB =& $DB; } /** @@ -251,6 +254,9 @@ class MoodleUnitTestCase extends UnitTestCase { */ public function tearDown() { global $DB; + if (empty($DB)) { + $DB = $this->DB; + } $DB->cleanup(); parent::tearDown(); } @@ -282,10 +288,6 @@ class UnitTestDB { public $table_data = array(); - public function __construct() { - - } - /** * Call this statically to connect to the DB using the unittest prefix, instantiate * the unit test db, store it as a member variable, instantiate $this and use it as the new global $DB. @@ -298,8 +300,11 @@ class UnitTestDB { print_error("prefixnotset", 'simpletest'); } - UnitTestDB::$DB = moodle_database::get_driver_instance($CFG->dbtype, $CFG->dblibrary); - UnitTestDB::$DB->connect($CFG->dbhost, $CFG->dbuser, $CFG->dbpass, $CFG->dbname, $CFG->dbpersist, $CFG->unittestprefix); + if (empty(UnitTestDB::$DB)) { + UnitTestDB::$DB = moodle_database::get_driver_instance($CFG->dbtype, $CFG->dblibrary); + UnitTestDB::$DB->connect($CFG->dbhost, $CFG->dbuser, $CFG->dbpass, $CFG->dbname, $CFG->dbpersist, $CFG->unittestprefix); + } + $manager = UnitTestDB::$DB->get_manager(); if (!$manager->table_exists('user')) { @@ -352,12 +357,12 @@ class UnitTestDB { public function update_record($table, $dataobject, $bulk=false) { global $DB; if (empty($this->table_data[$table]) || !in_array($dataobject->id, $this->table_data[$table])) { - return UnitTestDB::$DB->update_record($table, $dataobject, $bulk); - // $a = new stdClass(); - // $a->id = $dataobject->id; - // $a->table = $table; - // debug_print_backtrace(); - // throw new moodle_exception('updatingnoninsertedrecord', 'simpletest', '', $a); + // return UnitTestDB::$DB->update_record($table, $dataobject, $bulk); + $a = new stdClass(); + $a->id = $dataobject->id; + $a->table = $table; + debug_print_backtrace(); + throw new moodle_exception('updatingnoninsertedrecord', 'simpletest', '', $a); } else { return UnitTestDB::$DB->update_record($table, $dataobject, $bulk); } @@ -368,7 +373,7 @@ class UnitTestDB { * throw an exception and cancel delete. * @throws moodle_exception If trying to delete a record not inserted by unit tests. */ - public function delete_records($table, array $conditions=null) { + public function delete_records($table, array $conditions=array()) { global $DB; $a = new stdClass(); $a->table = $table; @@ -385,7 +390,7 @@ class UnitTestDB { } foreach ($ids_to_delete as $id) { - if (!in_array($id, $this->table_data[$table])) { + if (empty($this->table_data[$table]) || !in_array($id, $this->table_data[$table])) { $proceed_with_delete = false; $a->id = $id; break; diff --git a/mod/forum/lib.php b/mod/forum/lib.php index 623354ba2b..7dca498513 100644 --- a/mod/forum/lib.php +++ b/mod/forum/lib.php @@ -4066,7 +4066,7 @@ function forum_add_attachment($post, $forum, $cm, $mform=null, &$message=null, $ if (!isset($forum->maxattachments)) { // TODO - delete this once we add a field to the forum table $forum->maxattachments = 3; } - + for ($i=0; $i<$forum->maxattachments; $i++) { $elementname = 'attachment'.$i; if (empty($values->$elementname)) { // Nothing defined @@ -4089,7 +4089,7 @@ function forum_add_attachment($post, $forum, $cm, $mform=null, &$message=null, $ */ function forum_relink_inline_attachments($post, $forum, $cm){ global $DB; - + $context = get_context_instance(CONTEXT_MODULE, $cm->id); $authorcontext = get_context_instance(CONTEXT_USER, $post->userid); @@ -4120,7 +4120,7 @@ function forum_add_new_post($post, $mform, &$message) { return false; } - forum_relink_inline_attachments($post, $forum, $cm); + forum_relink_inline_attachments($post, $forum, $cm); forum_add_attachment($post, $forum, $cm, $mform, $message, false); // Update discussion modified date @@ -4226,8 +4226,10 @@ function forum_add_discussion($discussion, $mform=null, &$message=null) { return 0; } - forum_relink_inline_attachments($post, $forum, $cm); - forum_add_attachment($post, $forum, $cm, $mform, $message, false); + if (!empty($cm->id)) { + forum_relink_inline_attachments($post, $forum, $cm); + forum_add_attachment($post, $forum, $cm, $mform, $message, false); + } if (forum_tp_can_track_forums($forum) && forum_tp_is_tracked($forum)) { forum_tp_mark_post_read($post->userid, $post, $post->forum); @@ -4570,7 +4572,7 @@ function forum_get_tracking_link($forum, $messages=array(), $fakelink=true) { } else { $linktitle = $strtrackforum; $linktext = $strtrackforum; - } + } $link = ''; if ($fakelink) {