mirror of
https://github.com/moodle/moodle.git
synced 2025-08-06 01:16:44 +02:00
MDL-62708 question: Add idnumbers to question and question category
This commit is contained in:
parent
6902f39141
commit
6189fda47f
24 changed files with 502 additions and 13 deletions
|
@ -1333,6 +1333,7 @@
|
|||
<FIELD NAME="stamp" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false"/>
|
||||
<FIELD NAME="parent" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
|
||||
<FIELD NAME="sortorder" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="999" SEQUENCE="false"/>
|
||||
<FIELD NAME="idnumber" TYPE="char" LENGTH="100" NOTNULL="false" SEQUENCE="false"/>
|
||||
</FIELDS>
|
||||
<KEYS>
|
||||
<KEY NAME="primary" TYPE="primary" FIELDS="id"/>
|
||||
|
@ -1341,6 +1342,7 @@
|
|||
<INDEXES>
|
||||
<INDEX NAME="contextid" UNIQUE="false" FIELDS="contextid" COMMENT="links to context table"/>
|
||||
<INDEX NAME="contextidstamp" UNIQUE="true" FIELDS="contextid, stamp"/>
|
||||
<INDEX NAME="contextididnumber" UNIQUE="true" FIELDS="contextid, idnumber"/>
|
||||
</INDEXES>
|
||||
</TABLE>
|
||||
<TABLE NAME="question" COMMENT="The questions themselves">
|
||||
|
@ -1364,6 +1366,7 @@
|
|||
<FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="true" DEFAULT="0" SEQUENCE="false" COMMENT="time that question was last modified"/>
|
||||
<FIELD NAME="createdby" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false" COMMENT="userid of person who created this question"/>
|
||||
<FIELD NAME="modifiedby" TYPE="int" LENGTH="10" NOTNULL="false" SEQUENCE="false" COMMENT="userid of person who last edited this question"/>
|
||||
<FIELD NAME="idnumber" TYPE="char" LENGTH="100" NOTNULL="false" SEQUENCE="false"/>
|
||||
</FIELDS>
|
||||
<KEYS>
|
||||
<KEY NAME="primary" TYPE="primary" FIELDS="id"/>
|
||||
|
@ -1374,6 +1377,7 @@
|
|||
</KEYS>
|
||||
<INDEXES>
|
||||
<INDEX NAME="qtype" UNIQUE="false" FIELDS="qtype"/>
|
||||
<INDEX NAME="categoryidnumber" UNIQUE="true" FIELDS="category, idnumber"/>
|
||||
</INDEXES>
|
||||
</TABLE>
|
||||
<TABLE NAME="question_answers" COMMENT="Answers, with a fractional grade (0-1) and feedback">
|
||||
|
@ -3861,4 +3865,4 @@
|
|||
</INDEXES>
|
||||
</TABLE>
|
||||
</TABLES>
|
||||
</XMLDB>
|
||||
</XMLDB>
|
||||
|
|
|
@ -2360,5 +2360,44 @@ function xmldb_main_upgrade($oldversion) {
|
|||
upgrade_main_savepoint(true, 2018091700.01);
|
||||
}
|
||||
|
||||
// Add idnumber fields to question and question_category tables.
|
||||
// This is done in four parts to aid error recovery during upgrade, should that occur.
|
||||
if ($oldversion < 2018092100.01) {
|
||||
$table = new xmldb_table('question');
|
||||
$field = new xmldb_field('idnumber', XMLDB_TYPE_CHAR, '100', null, null, null, null, 'modifiedby');
|
||||
if (!$dbman->field_exists($table, $field)) {
|
||||
$dbman->add_field($table, $field);
|
||||
}
|
||||
upgrade_main_savepoint(true, 2018092100.01);
|
||||
}
|
||||
|
||||
if ($oldversion < 2018092100.02) {
|
||||
$table = new xmldb_table('question');
|
||||
$index = new xmldb_index('categoryidnumber', XMLDB_INDEX_UNIQUE, array('category, idnumber'));
|
||||
if (!$dbman->index_exists($table, $index)) {
|
||||
$dbman->add_index($table, $index);
|
||||
}
|
||||
upgrade_main_savepoint(true, 2018092100.02);
|
||||
}
|
||||
|
||||
if ($oldversion < 2018092100.03) {
|
||||
$table = new xmldb_table('question_categories');
|
||||
$field = new xmldb_field('idnumber', XMLDB_TYPE_CHAR, '100', null, null, null, null, 'sortorder');
|
||||
if (!$dbman->field_exists($table, $field)) {
|
||||
$dbman->add_field($table, $field);
|
||||
}
|
||||
upgrade_main_savepoint(true, 2018092100.03);
|
||||
}
|
||||
|
||||
if ($oldversion < 2018092100.04) {
|
||||
$table = new xmldb_table('question_categories');
|
||||
$index = new xmldb_index('contextididnumber', XMLDB_INDEX_UNIQUE, array('contextid, idnumber'));
|
||||
if (!$dbman->index_exists($table, $index)) {
|
||||
$dbman->add_index($table, $index);
|
||||
}
|
||||
// Main savepoint reached.
|
||||
upgrade_main_savepoint(true, 2018092100.04);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -673,7 +673,7 @@ function question_move_questions_to_category($questionids, $newcategoryid) {
|
|||
array('id' => $newcategoryid));
|
||||
list($questionidcondition, $params) = $DB->get_in_or_equal($questionids);
|
||||
$questions = $DB->get_records_sql("
|
||||
SELECT q.id, q.qtype, qc.contextid
|
||||
SELECT q.id, q.qtype, qc.contextid, q.idnumber
|
||||
FROM {question} q
|
||||
JOIN {question_categories} qc ON q.category = qc.id
|
||||
WHERE q.id $questionidcondition", $params);
|
||||
|
@ -682,6 +682,27 @@ function question_move_questions_to_category($questionids, $newcategoryid) {
|
|||
question_bank::get_qtype($question->qtype)->move_files(
|
||||
$question->id, $question->contextid, $newcontextid);
|
||||
}
|
||||
// Check whether there could be a clash of idnumbers in the new category.
|
||||
if (((string) $question->idnumber !== '') &&
|
||||
$DB->record_exists('question', ['idnumber' => $question->idnumber, 'category' => $newcategoryid])) {
|
||||
$rec = $DB->get_records_select('question', "category = ? AND idnumber LIKE ?",
|
||||
[$newcategoryid, $question->idnumber . '_%'], 'idnumber DESC', 'id, idnumber', 0, 1);
|
||||
$unique = 1;
|
||||
if (count($rec)) {
|
||||
$rec = reset($rec);
|
||||
$idnumber = $rec->idnumber;
|
||||
if (strpos($idnumber, '_') !== false) {
|
||||
$unique = substr($idnumber, strpos($idnumber, '_') + 1) + 1;
|
||||
}
|
||||
}
|
||||
// For the move process, add a numerical increment to the idnumber. This means that if a question is
|
||||
// mistakenly moved then the idnumber will not be completely lost.
|
||||
$q = new stdClass();
|
||||
$q->id = $question->id;
|
||||
$q->category = $newcategoryid;
|
||||
$q->idnumber = $question->idnumber . '_' . $unique;
|
||||
$DB->update_record('question', $q);
|
||||
}
|
||||
}
|
||||
|
||||
// Move the questions themselves.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue