Пример #1
0
function xmldb_feedback_upgrade($oldversion)
{
    global $CFG, $DB;
    require_once $CFG->dirroot . '/mod/feedback/db/upgradelib.php';
    $dbman = $DB->get_manager();
    // Loads ddl manager and xmldb classes.
    // Moodle v2.8.0 release upgrade line.
    // Put any upgrade step following this.
    // Moodle v2.9.0 release upgrade line.
    // Put any upgrade step following this.
    // Moodle v3.0.0 release upgrade line.
    // Put any upgrade step following this.
    if ($oldversion < 2016031600) {
        // Remove labels from all 'captcha' and 'label' items.
        $DB->execute('UPDATE {feedback_item} SET label = ? WHERE typ = ? OR typ = ?', array('', 'captcha', 'label'));
        // Data savepoint reached.
        upgrade_mod_savepoint(true, 2016031600, 'feedback');
    }
    if ($oldversion < 2016040100) {
        // In order to keep the previous "Analysis" results unchanged,
        // set all multiple-answer multiplechoice questions as "Do not analyse empty submits"="Yes"
        // because prior to this date this setting did not work.
        $sql = "UPDATE {feedback_item} SET options = " . $DB->sql_concat('?', 'options') . " WHERE typ = ? AND presentation LIKE ? AND options NOT LIKE ?";
        $params = array('i', 'multichoice', 'c%', '%i%');
        $DB->execute($sql, $params);
        // Feedback savepoint reached.
        upgrade_mod_savepoint(true, 2016040100, 'feedback');
    }
    if ($oldversion < 2016051103) {
        // Define index completed_item (unique) to be added to feedback_value.
        $table = new xmldb_table('feedback_value');
        $index = new xmldb_index('completed_item', XMLDB_INDEX_UNIQUE, array('completed', 'item', 'course_id'));
        // Conditionally launch add index completed_item.
        if (!$dbman->index_exists($table, $index)) {
            mod_feedback_upgrade_delete_duplicate_values();
            $dbman->add_index($table, $index);
        }
        // Feedback savepoint reached.
        upgrade_mod_savepoint(true, 2016051103, 'feedback');
    }
    if ($oldversion < 2016051104) {
        // Define index completed_item (unique) to be added to feedback_valuetmp.
        $table = new xmldb_table('feedback_valuetmp');
        $index = new xmldb_index('completed_item', XMLDB_INDEX_UNIQUE, array('completed', 'item', 'course_id'));
        // Conditionally launch add index completed_item.
        if (!$dbman->index_exists($table, $index)) {
            mod_feedback_upgrade_delete_duplicate_values(true);
            $dbman->add_index($table, $index);
        }
        // Feedback savepoint reached.
        upgrade_mod_savepoint(true, 2016051104, 'feedback');
    }
    if ($oldversion < 2016051105) {
        // Define field courseid to be added to feedback_completed.
        $table = new xmldb_table('feedback_completed');
        $field = new xmldb_field('courseid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'anonymous_response');
        // Conditionally launch add field courseid.
        if (!$dbman->field_exists($table, $field)) {
            $dbman->add_field($table, $field);
            // Run upgrade script to fill the new field courseid with the data from feedback_value table.
            mod_feedback_upgrade_courseid(false);
        }
        // Define field courseid to be added to feedback_completedtmp.
        $table = new xmldb_table('feedback_completedtmp');
        $field = new xmldb_field('courseid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0', 'anonymous_response');
        // Conditionally launch add field courseid.
        if (!$dbman->field_exists($table, $field)) {
            $dbman->add_field($table, $field);
            // Run upgrade script to fill the new field courseid with the data from feedback_valuetmp table.
            mod_feedback_upgrade_courseid(true);
        }
        // Define table feedback_tracking to be dropped.
        $table = new xmldb_table('feedback_tracking');
        // Conditionally launch drop table for feedback_tracking.
        if ($dbman->table_exists($table)) {
            $dbman->drop_table($table);
        }
        // Feedback savepoint reached.
        upgrade_mod_savepoint(true, 2016051105, 'feedback');
    }
    // Moodle v3.1.0 release upgrade line.
    // Put any upgrade step following this.
    return true;
}
Пример #2
0
 public function test_upgrade_remove_duplicates_tmp()
 {
     global $DB;
     // Remove the index that was added in the upgrade.php AFTER running mod_feedback_upgrade_delete_duplicate_values().
     $dbman = $DB->get_manager();
     $table = new xmldb_table('feedback_valuetmp');
     $index = new xmldb_index('completed_item', XMLDB_INDEX_UNIQUE, array('completed', 'item', 'course_id'));
     $dbman->drop_index($table, $index);
     // Insert duplicated values.
     $completed1 = $DB->insert_record('feedback_completedtmp', ['feedback' => $this->feedback->id, 'userid' => $this->user->id]);
     $DB->insert_record('feedback_valuetmp', ['completed' => $completed1, 'course_id' => $this->course1->id, 'item' => 1, 'value' => 1]);
     $DB->insert_record('feedback_valuetmp', ['completed' => $completed1, 'course_id' => $this->course1->id, 'item' => 1, 'value' => 2]);
     // This is a duplicate with another value.
     $DB->insert_record('feedback_valuetmp', ['completed' => $completed1, 'course_id' => $this->course1->id, 'item' => 3, 'value' => 1]);
     $DB->insert_record('feedback_valuetmp', ['completed' => $completed1, 'course_id' => $this->course2->id, 'item' => 3, 'value' => 2]);
     // This is not a duplicate because course id is different.
     $this->assertCount(1, $DB->get_records('feedback_completedtmp'));
     $this->assertEquals(4, $DB->count_records('feedback_valuetmp'));
     mod_feedback_upgrade_delete_duplicate_values();
     // Running script for non-temp tables.
     $this->assertCount(1, $DB->get_records('feedback_completedtmp'));
     $this->assertEquals(4, $DB->count_records('feedback_valuetmp'));
     // Nothing changed.
     mod_feedback_upgrade_delete_duplicate_values(true);
     $this->assertCount(1, $DB->get_records('feedback_completedtmp'));
     // Number of records is the same.
     $this->assertEquals(3, $DB->count_records('feedback_valuetmp'));
     // Duplicate was deleted.
     $this->assertEquals(1, $DB->get_field('feedback_valuetmp', 'value', ['item' => 1]));
     $dbman->add_index($table, $index);
 }