Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

issues #81: Resolve database schema issue #82

Open
wants to merge 1 commit into
base: MOODLE_401_STABLE
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
9 changes: 5 additions & 4 deletions db/install.xml
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
<?xml version="1.0" encoding="UTF-8" ?>
<XMLDB PATH="blocks/grade_me/db" VERSION="20120805" COMMENT="XMLDB file for Moodle blocks/grade_me"
<XMLDB PATH="blocks/grade_me/db" VERSION="20240131" COMMENT="XMLDB file for Moodle blocks/grade_me"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../../lib/xmldb/xmldb.xsd"
>
<TABLES>
<TABLE NAME="block_grade_me" COMMENT="Caches information about gradeable items.">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true" NEXT="itemname"/>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true" NEXT="itemid"/>
<FIELD NAME="itemid" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="false" PREVIOUS="id" NEXT="itemname"/>
<FIELD NAME="itemname" TYPE="char" LENGTH="255" NOTNULL="false" SEQUENCE="false" PREVIOUS="id" NEXT="itemtype"/>
<FIELD NAME="itemtype" TYPE="char" LENGTH="30" NOTNULL="true" SEQUENCE="false" PREVIOUS="itemname" NEXT="itemmodule"/>
<FIELD NAME="itemmodule" TYPE="char" LENGTH="30" NOTNULL="false" SEQUENCE="false" PREVIOUS="itemtype" NEXT="iteminstance"/>
Expand All @@ -17,8 +18,8 @@
<FIELD NAME="coursemoduleid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" PREVIOUS="coursename"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id" NEXT="id" />
<KEY NAME="id" TYPE="foreign" FIELDS="id" REFTABLE="grade_items" REFFIELDS="id" PREVIOUS="primary" NEXT="courseid"/>
<KEY NAME="primary" TYPE="primary" FIELDS="id" NEXT="gradeitemid" />
<KEY NAME="gradeitemid" TYPE="foreign" FIELDS="itemid" REFTABLE="grade_items" REFFIELDS="id" PREVIOUS="primary" NEXT="courseid"/>
<KEY NAME="courseid" TYPE="foreign" FIELDS="courseid" REFTABLE="course" REFFIELDS="id" PREVIOUS="id" NEXT="coursemoduleid"/>
<KEY NAME="coursemoduleid" TYPE="foreign" FIELDS="coursemoduleid" REFTABLE="course_modules" REFFIELDS="id" PREVIOUS="courseid"/>
</KEYS>
Expand Down
37 changes: 37 additions & 0 deletions db/upgrade.php
Original file line number Diff line number Diff line change
Expand Up @@ -108,5 +108,42 @@ function xmldb_block_grade_me_upgrade($oldversion, $block) {
// Grade me savepoint reached.
upgrade_block_savepoint(true, 2016120503, 'grade_me');
}

if ($oldversion < 2024013100) {
$table = new xmldb_table('block_grade_me');

// Define key id (foreign) to be dropped form block_grade_me.
$key = new xmldb_key('id', XMLDB_KEY_FOREIGN, ['id'], 'grade_items', ['id']);

// Launch drop key id. There is no key_exists method.
$dbman->drop_key($table, $key);

// Define field itemid to be added to block_grade_me.
$field = new xmldb_field('itemid', XMLDB_TYPE_INTEGER, '10', null, null, null, null, 'id');

// Conditionally launch add field itemid.
if (!$dbman->field_exists($table, $field)) {
$dbman->add_field($table, $field);
}

// Populate the itemid field.
$DB->execute('UPDATE {block_grade_me} SET itemid = id');

// Set itemid to notnull
$field = new xmldb_field('itemid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, 'id');
if ($dbman->field_exists($table, $field)) {
$dbman->change_field_notnull($table, $field);
}

// Define key gradeitemid (foreign) to be added to block_grade_me.
$key = new xmldb_key('gradeitemid', XMLDB_KEY_FOREIGN, ['itemid'], 'grade_items', ['id']);

// Launch add key gradeitemid. There is no key_exists method.
$dbman->add_key($table, $key);

// Grade_me savepoint reached.
upgrade_block_savepoint(true, 2024013100, 'grade_me');
}

return true;
}
1 change: 1 addition & 0 deletions lib.php
Original file line number Diff line number Diff line change
Expand Up @@ -345,6 +345,7 @@ function block_grade_me_cache_grade_data() {
$fragment = 'itemtype = :itemtype AND itemmodule = :itemmodule AND ' .
'iteminstance = :iteminstance AND courseid = :courseid';
$params = array(
'itemid' => $rec->itemid,
'itemname' => $rec->itemname,
'itemtype' => $rec->itemtype,
'itemmodule' => $rec->itemmodule,
Expand Down
2 changes: 1 addition & 1 deletion tests/fixtures/block_grade_me.xml
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@
</row>
</table>
<table name="block_grade_me">
<column>id</column>
<column>itemid</column>
<column>itemname</column>
<column>itemtype</column>
<column>itemmodule</column>
Expand Down
2 changes: 1 addition & 1 deletion tests/fixtures/forum.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<dataset>
<table name="block_grade_me">
<column>id</column>
<column>itemid</column>
<column>itemname</column>
<column>itemtype</column>
<column>itemmodule</column>
Expand Down
2 changes: 1 addition & 1 deletion tests/fixtures/glossary.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<dataset>
<table name="block_grade_me">
<column>id</column>
<column>itemid</column>
<column>itemname</column>
<column>itemtype</column>
<column>itemmodule</column>
Expand Down
2 changes: 1 addition & 1 deletion tests/fixtures/quiz1.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<dataset>
<table name="block_grade_me">
<column>id</column>
<column>itemid</column>
<column>itemname</column>
<column>itemtype</column>
<column>itemmodule</column>
Expand Down
2 changes: 1 addition & 1 deletion tests/fixtures/quiz2.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<dataset>
<table name="block_grade_me">
<column>id</column>
<column>itemid</column>
<column>itemname</column>
<column>itemtype</column>
<column>itemmodule</column>
Expand Down
2 changes: 1 addition & 1 deletion tests/fixtures/turnitintooltwo.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<dataset>
<table name="block_grade_me">
<column>id</column>
<column>itemid</column>
<column>itemname</column>
<column>itemtype</column>
<column>itemmodule</column>
Expand Down
30 changes: 15 additions & 15 deletions tests/grade_me_test.php
Original file line number Diff line number Diff line change
Expand Up @@ -219,10 +219,10 @@ public function test_query_assign() {
// Partial query return from block_grade_me_query_assign.
list($sql, $insqlparams) = block_grade_me_query_assign(array($users[0]->id));
// Build full query.
$sql = "SELECT a.id, bgm.courseid $sql AND bgm.courseid = {$courses[0]->id} AND bgm.itemmodule = 'assign'";
$sql = "SELECT a.id as itemid, bgm.courseid $sql AND bgm.courseid = {$courses[0]->id} AND bgm.itemmodule = 'assign'";

$rec = new stdClass();
$rec->id = $plugins[2]->id;
$rec->itemid = $plugins[2]->id;
$rec->courseid = $courses[0]->id;
$rec->submissionid = '2';
$rec->userid = $users[0]->id;
Expand All @@ -231,7 +231,7 @@ public function test_query_assign() {
$rec->maxattempts = '-1';

$rec2 = new stdClass();
$rec2->id = $plugins[3]->id;
$rec2->itemid = $plugins[3]->id;
$rec2->courseid = $courses[0]->id;
$rec2->submissionid = '3';
$rec2->userid = $users[0]->id;
Expand All @@ -241,7 +241,7 @@ public function test_query_assign() {

// Tests resubmission.
$rec3 = new stdClass();
$rec3->id = $plugins[4]->id;
$rec3->itemid = $plugins[4]->id;
$rec3->courseid = $courses[0]->id;
$rec3->submissionid = '7';
$rec3->userid = $users[0]->id;
Expand All @@ -250,15 +250,15 @@ public function test_query_assign() {
$rec3->maxattempts = '-1';

$rec4 = new stdClass();
$rec4->id = $plugins[1]->id;
$rec4->itemid = $plugins[1]->id;
$rec4->courseid = $courses[0]->id;
$rec4->submissionid = '1';
$rec4->userid = $users[0]->id;
$rec4->timesubmitted = '1';
$rec4->attemptnumber = '1';
$rec4->maxattempts = '-1';

$expected = array($rec->id => $rec, $rec2->id => $rec2, $rec3->id => $rec3, $rec4->id => $rec4);
$expected = array($rec->itemid => $rec, $rec2->itemid => $rec2, $rec3->itemid => $rec3, $rec4->itemid => $rec4);
$actual = $DB->get_records_sql($sql, $insqlparams);
$this->assertEquals($expected, $actual);
$this->assertFalse(block_grade_me_query_assign(array()));
Expand All @@ -279,7 +279,7 @@ public function test_query_assign_maxage() {
list($users, $courses, $plugins) = $this->create_grade_me_data('block_grade_me.xml');

$rec = new stdClass();
$rec->id = $plugins[2]->id;
$rec->itemid = $plugins[2]->id;
$rec->courseid = $courses[0]->id;
$rec->submissionid = '2';
$rec->userid = $users[0]->id;
Expand All @@ -288,7 +288,7 @@ public function test_query_assign_maxage() {
$rec->maxattempts = '-1';

$rec2 = new stdClass();
$rec2->id = $plugins[3]->id;
$rec2->itemid = $plugins[3]->id;
$rec2->courseid = $courses[0]->id;
$rec2->submissionid = '3';
$rec2->userid = $users[0]->id;
Expand All @@ -298,7 +298,7 @@ public function test_query_assign_maxage() {

// Tests resubmission.
$rec3 = new stdClass();
$rec3->id = $plugins[4]->id;
$rec3->itemid = $plugins[4]->id;
$rec3->courseid = $courses[0]->id;
$rec3->submissionid = '7';
$rec3->userid = $users[0]->id;
Expand All @@ -307,23 +307,23 @@ public function test_query_assign_maxage() {
$rec3->maxattempts = '-1';

$rec4 = new stdClass();
$rec4->id = $plugins[1]->id;
$rec4->itemid = $plugins[1]->id;
$rec4->courseid = $courses[0]->id;
$rec4->submissionid = '1';
$rec4->userid = $users[0]->id;
$rec4->timesubmitted = '1';
$rec4->attemptnumber = '1';
$rec4->maxattempts = '-1';

$expected = array($rec->id => $rec, $rec2->id => $rec2, $rec3->id => $rec3, $rec4->id => $rec4);
$expected = array($rec->itemid => $rec, $rec2->itemid => $rec2, $rec3->itemid => $rec3, $rec4->itemid => $rec4);
list($sql, $inparams) = block_grade_me_query_assign(array($users[0]->id));
$query = block_grade_me_query_prefix() . ', a.id as assignid ' . $sql . block_grade_me_query_suffix('assign');
$values = array_merge($inparams, ['courseid' => $courses[0]->id]);
$actual = [];
$rs = $DB->get_recordset_sql($query, $values);
foreach ($rs as $record) {
$actual[$record->assignid] = (object)[
'id' => $record->assignid,
'itemid' => $record->assignid,
'courseid' => $record->courseid,
'submissionid' => $record->submissionid,
'userid' => $record->userid,
Expand All @@ -344,9 +344,9 @@ public function test_query_assign_maxage() {
// Set submission 2 to be older than configured max age.
$DB->execute('UPDATE {assign_submission} SET timemodified = ' . ($oldesttimestamp - 1000) . ' WHERE id = 2');
// Expected array should now not include $rec.
$expected = array($rec2->id => $rec2, $rec3->id => $rec3, $rec4->id => $rec4);
$expected = array($rec2->itemid => $rec2, $rec3->itemid => $rec3, $rec4->itemid => $rec4);
foreach ($expected as $id => $record) {
$expected[$id]->timesubmitted = $now;
$expected[$id]->timesubmitted = (string) $now;
}
list($sql, $inparams) = block_grade_me_query_assign(array($users[0]->id));
$query = block_grade_me_query_prefix() . ', a.id as assignid ' . $sql.block_grade_me_query_suffix('assign');
Expand All @@ -355,7 +355,7 @@ public function test_query_assign_maxage() {
$rs = $DB->get_recordset_sql($query, $values);
foreach ($rs as $record) {
$actual[$record->assignid] = (object)[
'id' => $record->assignid,
'itemid' => $record->assignid,
'courseid' => $record->courseid,
'submissionid' => $record->submissionid,
'userid' => $record->userid,
Expand Down
2 changes: 1 addition & 1 deletion version.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@

defined('MOODLE_INTERNAL') || die();

$plugin->version = 2022112800;
$plugin->version = 2024013100;
$plugin->requires = 2022112800;
$plugin->cron = 3600;
$plugin->component = 'block_grade_me';
Expand Down