mirror of
https://github.com/moodle/moodle.git
synced 2025-08-04 08:26:37 +02:00
MDL-69818 mod_feedback: Fix item dependency during activity restoration
This commit is contained in:
parent
87afa4d759
commit
33f4559da1
2 changed files with 43 additions and 3 deletions
|
@ -71,9 +71,6 @@ class restore_feedback_activity_structure_step extends restore_activity_structur
|
|||
$oldid = $data->id;
|
||||
$data->feedback = $this->get_new_parentid('feedback');
|
||||
|
||||
//dependitem
|
||||
$data->dependitem = $this->get_mappingid('feedback_item', $data->dependitem);
|
||||
|
||||
$newitemid = $DB->insert_record('feedback_item', $data);
|
||||
$this->set_mapping('feedback_item', $oldid, $newitemid, true); // Can have files
|
||||
}
|
||||
|
@ -117,9 +114,19 @@ class restore_feedback_activity_structure_step extends restore_activity_structur
|
|||
}
|
||||
|
||||
protected function after_execute() {
|
||||
global $DB;
|
||||
// Add feedback related files, no need to match by itemname (just internally handled context)
|
||||
$this->add_related_files('mod_feedback', 'intro', null);
|
||||
$this->add_related_files('mod_feedback', 'page_after_submit', null);
|
||||
$this->add_related_files('mod_feedback', 'item', 'feedback_item');
|
||||
|
||||
// Once all items are restored we can set their dependency.
|
||||
if ($records = $DB->get_records('feedback_item', array('feedback' => $this->task->get_activityid()))) {
|
||||
foreach ($records as $record) {
|
||||
// Get new id for dependitem if present. This will also reset dependitem if not found.
|
||||
$record->dependitem = $this->get_mappingid('feedback_item', $record->dependitem);
|
||||
$DB->update_record('feedback_item', $record);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -61,4 +61,37 @@ class mod_feedback_restore_date_testcase extends restore_date_testcase {
|
|||
$this->assertFieldsRolledForward($feedback, $newfeedback, $props);
|
||||
$this->assertEquals($response->timemodified, $newresponse->timemodified);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that dependency for items is restored correctly.
|
||||
*/
|
||||
public function test_restore_item_dependency() {
|
||||
global $DB;
|
||||
// Create a course and a feedback activity.
|
||||
$course = $this->getDataGenerator()->create_course();
|
||||
$feedback = $this->getDataGenerator()->create_module('feedback', array('course' => $course));
|
||||
$feedbackgenerator = $this->getDataGenerator()->get_plugin_generator('mod_feedback');
|
||||
|
||||
// Create a couple of items which depend on each other.
|
||||
$item1 = $feedbackgenerator->create_item_numeric($feedback);
|
||||
$item2 = $feedbackgenerator->create_item_numeric($feedback, array('dependitem' => $item1->id));
|
||||
$DB->set_field('feedback_item', 'dependitem', $item2->id, ['id' => $item1->id]);
|
||||
|
||||
// Create one more item with fake/broken dependitem.
|
||||
$item3 = $feedbackgenerator->create_item_numeric($feedback, array('dependitem' => 123456));
|
||||
|
||||
// Backup and restore the course.
|
||||
$restoredcourseid = $this->backup_and_restore($course);
|
||||
$restoredfeedback = $DB->get_record('feedback', ['course' => $restoredcourseid]);
|
||||
|
||||
// Restored item1 and item2 are expected to be dependent the same way as the original ones.
|
||||
$restoreditem1 = $DB->get_record('feedback_item', ['feedback' => $restoredfeedback->id, 'name' => $item1->name]);
|
||||
$restoreditem2 = $DB->get_record('feedback_item', ['feedback' => $restoredfeedback->id, 'name' => $item2->name]);
|
||||
$this->assertEquals($restoreditem2->id, $restoreditem1->dependitem);
|
||||
$this->assertEquals($restoreditem1->id, $restoreditem2->dependitem);
|
||||
|
||||
// Restored item3 is expected to have an empty dependitem.
|
||||
$restoreditem3 = $DB->get_record('feedback_item', ['feedback' => $restoredfeedback->id, 'name' => $item3->name]);
|
||||
$this->assertEquals(0, $restoreditem3->dependitem);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue